


'''simple docstring'''







import argparse

import torch
from clip import load

from transformers import CLIPConfig, CLIPModel







def _UpperCamelCase	(					__A				,      __A   )							->		Optional[Any]:


      '''simple docstring'''



      UpperCamelCase__ ,     UpperCamelCase__ ,     UpperCamelCase__  =    pt_attn_layer.in_proj_weight.chunk(3				,      dim=0   )
      UpperCamelCase__ ,     UpperCamelCase__ ,     UpperCamelCase__  =    pt_attn_layer.in_proj_bias.chunk(3				,      dim=0   )

      UpperCamelCase__  =    pt_attn_layer.out_proj.weight
      UpperCamelCase__  =    pt_attn_layer.out_proj.bias

      UpperCamelCase__  =    q_proj
      UpperCamelCase__  =    q_proj_bias

      UpperCamelCase__  =    k_proj
      UpperCamelCase__  =    k_proj_bias

      UpperCamelCase__  =    v_proj
      UpperCamelCase__  =    v_proj_bias

      UpperCamelCase__  =    out_proj_weights
      UpperCamelCase__  =    out_proj_bias







def _UpperCamelCase	(					__A				,      __A   )							->		List[Any]:


      '''simple docstring'''



      copy_linear(hf_mlp.fca				,      pt_mlp.c_fc   )
      copy_linear(hf_mlp.fca				,      pt_mlp.c_proj   )







def _UpperCamelCase	(					__A				,      __A   )							->		Optional[int]:


      '''simple docstring'''



      UpperCamelCase__  =    pt_linear.weight
      UpperCamelCase__  =    pt_linear.bias







def _UpperCamelCase	(					__A				,      __A   )							->		Union[str, Any]:


      '''simple docstring'''



      copy_linear(hf_layer.layer_norma				,      pt_layer.ln_a   )
      copy_linear(hf_layer.layer_norma				,      pt_layer.ln_a   )

      # copy MLP
      copy_mlp(hf_layer.mlp				,      pt_layer.mlp   )

      # copy attn
      copy_attn_layer(hf_layer.self_attn				,      pt_layer.attn   )







def _UpperCamelCase	(					__A				,      __A   )							->		int:


      '''simple docstring'''



      for hf_layer, pt_layer in zip(__A				,      __A   ):
            copy_layer(__A				,      __A   )







def _UpperCamelCase	(					__A				,      __A   )							->		Optional[int]:


      '''simple docstring'''



      UpperCamelCase__  =    pt_model.token_embedding.weight
      UpperCamelCase__  =    pt_model.positional_embedding

      # copy layer norm
      copy_linear(hf_encoder.final_layer_norm				,      pt_model.ln_final   )

      # copy hidden layers
      copy_layers(hf_encoder.encoder.layers				,      pt_model.transformer.resblocks   )







def _UpperCamelCase	(					__A				,      __A   )							->		Tuple:


      '''simple docstring'''



      UpperCamelCase__  =    pt_model.text_projection.data.T

      # copy text encoder
      copy_encoder(hf_model.text_model				,      __A   )







def _UpperCamelCase	(					__A				,      __A   )							->		Optional[Any]:


      '''simple docstring'''



      UpperCamelCase__  =    pt_model.visual.proj.data.T

      # copy layer norms
      copy_linear(hf_model.vision_model.pre_layrnorm				,      pt_model.visual.ln_pre   )
      copy_linear(hf_model.vision_model.post_layernorm				,      pt_model.visual.ln_post   )

      # copy embeds
      UpperCamelCase__  =    pt_model.visual.conva.weight.data
      UpperCamelCase__  =    pt_model.visual.class_embedding
      UpperCamelCase__  =    pt_model.visual.positional_embedding.data

      # copy encoder
      copy_layers(hf_model.vision_model.encoder.layers				,      pt_model.visual.transformer.resblocks   )







@torch.no_grad()
def _UpperCamelCase	(					__A				,      __A				,      __A=None   )							->		Union[str, Any]:


      '''simple docstring'''



      if config_path is not None:
            UpperCamelCase__  =    CLIPConfig.from_pretrained(__A   )
      else:
            UpperCamelCase__  =    CLIPConfig(projection_dim=512				,      text_config={}				,      vision_config={}   )

      UpperCamelCase__  =    CLIPModel(__A   ).eval()

      UpperCamelCase__ ,     UpperCamelCase__  =    load(__A				,      device="cpu"				,      jit=__A   )
      UpperCamelCase__  =    pt_model.eval()

      copy_text_model_and_projection(__A				,      __A   )
      copy_vison_model_and_projection(__A				,      __A   )
      UpperCamelCase__  =    pt_model.logit_scale

      UpperCamelCase__  =    torch.arange(0				,      77   ).unsqueeze(0   )
      UpperCamelCase__  =    torch.randn(1				,      3				,      224				,      224   )

      UpperCamelCase__  =    hf_model(input_ids=__A				,      pixel_values=__A				,      return_dict=__A   )
      UpperCamelCase__  =    hf_outputs.logits_per_image
      UpperCamelCase__  =    hf_outputs.logits_per_text
      UpperCamelCase__ ,     UpperCamelCase__  =    pt_model(__A				,      __A   )

      assert torch.allclose(__A				,      __A				,      atol=1E-3   )
      assert torch.allclose(__A				,      __A				,      atol=1E-3   )

      hf_model.save_pretrained(__A   )


if __name__ == "__main__":
  a__  : Optional[int]				=	argparse.ArgumentParser()
  parser.add_argument('--pytorch_dump_folder_path', default=None, type=str, help='Path to the output PyTorch model.')
  parser.add_argument('--checkpoint_path', default=None, type=str, help='Path to fairseq checkpoint')
  parser.add_argument('--config_path', default=None, type=str, help='Path to hf config.json of model to convert')
  a__  : str				=	parser.parse_args()

  convert_clip_checkpoint(args.checkpoint_path, args.pytorch_dump_folder_path, args.config_path)









'''simple docstring'''







import json
import os
import shutil
import tempfile
import unittest

from transformers import is_speech_available, is_torch_available
from transformers.models.speechta import SpeechTaTokenizer
from transformers.testing_utils import get_tests_dir, require_torch
from transformers.utils import FEATURE_EXTRACTOR_NAME


if is_speech_available() and is_torch_available():
  from transformers import SpeechTaFeatureExtractor, SpeechTaProcessor

  from .test_feature_extraction_speechta import floats_list


a__  : int				=	get_tests_dir('fixtures/test_sentencepiece_bpe_char.model')
@require_torch
class  lowercase_					(   unittest.TestCase       ):


    def        __a							(					self   ):
          UpperCamelCase__  =    tempfile.mkdtemp()

          UpperCamelCase__  =    SpeechTaTokenizer(a   )
          tokenizer.save_pretrained(self.tmpdirname   )

          UpperCamelCase__  =    {
              "feature_size": 1,
              "padding_value": 0.0,
              "sampling_rate": 1_60_00,
              "do_normalize": False,
              "num_mel_bins": 80,
              "hop_length": 16,
              "win_length": 64,
              "win_function": "hann_window",
              "fmin": 80,
              "fmax": 76_00,
              "mel_floor": 1e-10,
              "reduction_factor": 2,
              "return_attention_mask": True,
          }

          UpperCamelCase__  =    os.path.join(self.tmpdirname  , a   )
          with open(self.feature_extraction_file  , "w"  , encoding="utf-8"   ) as fp:
                fp.write(json.dumps(a   ) + "\n"   )


    def        __a							(					self  , **a   ):
          return SpeechTaTokenizer.from_pretrained(self.tmpdirname  , **a   )


    def        __a							(					self  , **a   ):
          return SpeechTaFeatureExtractor.from_pretrained(self.tmpdirname  , **a   )


    def        __a							(					self   ):
          shutil.rmtree(self.tmpdirname   )


    def        __a							(					self   ):
          UpperCamelCase__  =    self.get_tokenizer()
          UpperCamelCase__  =    self.get_feature_extractor()

          UpperCamelCase__  =    SpeechTaProcessor(tokenizer=a  , feature_extractor=a   )

          processor.save_pretrained(self.tmpdirname   )
          UpperCamelCase__  =    SpeechTaProcessor.from_pretrained(self.tmpdirname   )

          self.assertEqual(processor.tokenizer.get_vocab()  , tokenizer.get_vocab()   )
          self.assertIsInstance(processor.tokenizer  , a   )

          self.assertEqual(processor.feature_extractor.to_json_string()  , feature_extractor.to_json_string()   )
          self.assertIsInstance(processor.feature_extractor  , a   )


    def        __a							(					self   ):
          UpperCamelCase__  =    SpeechTaProcessor(tokenizer=self.get_tokenizer()  , feature_extractor=self.get_feature_extractor()   )
          processor.save_pretrained(self.tmpdirname   )

          UpperCamelCase__  =    self.get_tokenizer(bos_token="(BOS)"  , eos_token="(EOS)"   )
          UpperCamelCase__  =    self.get_feature_extractor(do_normalize=a  , padding_value=1.0   )

          UpperCamelCase__  =    SpeechTaProcessor.from_pretrained(
              self.tmpdirname  , bos_token="(BOS)"  , eos_token="(EOS)"  , do_normalize=a  , padding_value=1.0   )

          self.assertEqual(processor.tokenizer.get_vocab()  , tokenizer_add_kwargs.get_vocab()   )
          self.assertIsInstance(processor.tokenizer  , a   )

          self.assertEqual(processor.feature_extractor.to_json_string()  , feature_extractor_add_kwargs.to_json_string()   )
          self.assertIsInstance(processor.feature_extractor  , a   )


    def        __a							(					self   ):
          UpperCamelCase__  =    self.get_feature_extractor()
          UpperCamelCase__  =    self.get_tokenizer()

          UpperCamelCase__  =    SpeechTaProcessor(tokenizer=a  , feature_extractor=a   )

          UpperCamelCase__  =    floats_list((3, 10_00)   )

          UpperCamelCase__  =    feature_extractor(audio=a  , return_tensors="np"   )
          UpperCamelCase__  =    processor(audio=a  , return_tensors="np"   )

          for key in input_feat_extract.keys():
                self.assertAlmostEqual(input_feat_extract[key].sum()  , input_processor[key].sum()  , delta=1e-2   )


    def        __a							(					self   ):
          UpperCamelCase__  =    self.get_feature_extractor()
          UpperCamelCase__  =    self.get_tokenizer()

          UpperCamelCase__  =    SpeechTaProcessor(tokenizer=a  , feature_extractor=a   )

          UpperCamelCase__  =    floats_list((3, 10_00)   )

          UpperCamelCase__  =    feature_extractor(audio_target=a  , return_tensors="np"   )
          UpperCamelCase__  =    processor(audio_target=a  , return_tensors="np"   )

          for key in input_feat_extract.keys():
                self.assertAlmostEqual(input_feat_extract[key].sum()  , input_processor[key].sum()  , delta=1e-2   )


    def        __a							(					self   ):
          UpperCamelCase__  =    self.get_feature_extractor()
          UpperCamelCase__  =    self.get_tokenizer()

          UpperCamelCase__  =    SpeechTaProcessor(tokenizer=a  , feature_extractor=a   )

          UpperCamelCase__  =    "This is a test string"

          UpperCamelCase__  =    processor(text=a   )
          UpperCamelCase__  =    tokenizer(a   )

          for key in encoded_tok.keys():
                self.assertListEqual(encoded_tok[key]  , encoded_processor[key]   )


    def        __a							(					self   ):
          UpperCamelCase__  =    self.get_feature_extractor()
          UpperCamelCase__  =    self.get_tokenizer()

          UpperCamelCase__  =    SpeechTaProcessor(tokenizer=a  , feature_extractor=a   )

          UpperCamelCase__  =    "This is a test string"

          UpperCamelCase__  =    processor(text_target=a   )
          UpperCamelCase__  =    tokenizer(a   )

          for key in encoded_tok.keys():
                self.assertListEqual(encoded_tok[key]  , encoded_processor[key]   )


    def        __a							(					self   ):
          UpperCamelCase__  =    self.get_feature_extractor()
          UpperCamelCase__  =    self.get_tokenizer()

          UpperCamelCase__  =    SpeechTaProcessor(tokenizer=a  , feature_extractor=a   )

          UpperCamelCase__  =    [[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

          UpperCamelCase__  =    processor.batch_decode(a   )
          UpperCamelCase__  =    tokenizer.batch_decode(a   )

          self.assertListEqual(a  , a   )


    def        __a							(					self   ):
          UpperCamelCase__  =    self.get_feature_extractor()
          UpperCamelCase__  =    self.get_tokenizer()

          UpperCamelCase__  =    SpeechTaProcessor(tokenizer=a  , feature_extractor=a   )

          self.assertListEqual(
              processor.model_input_names  , feature_extractor.model_input_names  , msg="`processor` and `feature_extractor` model input names do not match"  , )





