






from binascii import hexlify
from hashlib import shaaaa
from os import urandom

# RFC 3526 - More Modular Exponential (MODP) Diffie-Hellman groups for
# Internet Key Exchange (IKE) https://tools.ietf.org/html/rfc3526

UpperCamelCase 				=	{
    # 1536-bit
    5: {
        "prime": int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        "generator": 2,
    },
    # 2048-bit
    14: {
        "prime": int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AACAA68FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        "generator": 2,
    },
    # 3072-bit
    15: {
        "prime": int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF''',
            base=16,
        ),
        "generator": 2,
    },
    # 4096-bit
    16: {
        "prime": int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7'''
            + '''88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA'''
            + '''2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6'''
            + '''287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED'''
            + '''1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9'''
            + '''93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199'''
            + '''FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        "generator": 2,
    },
    # 6144-bit
    17: {
        "prime": int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08'''
            + '''8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B'''
            + '''302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9'''
            + '''A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6'''
            + '''49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8'''
            + '''FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C'''
            + '''180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718'''
            + '''3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D'''
            + '''04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D'''
            + '''B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226'''
            + '''1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC'''
            + '''E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26'''
            + '''99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB'''
            + '''04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2'''
            + '''233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127'''
            + '''D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492'''
            + '''36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406'''
            + '''AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918'''
            + '''DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151'''
            + '''2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03'''
            + '''F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F'''
            + '''BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA'''
            + '''CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B'''
            + '''B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632'''
            + '''387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E'''
            + '''6DCC4024FFFFFFFFFFFFFFFF''',
            base=16,
        ),
        "generator": 2,
    },
    # 8192-bit
    18: {
        "prime": int(
            '''FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1'''
            + '''29024E088A67CC74020BBEA63B139B22514A08798E3404DD'''
            + '''EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245'''
            + '''E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED'''
            + '''EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D'''
            + '''C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F'''
            + '''83655D23DCA3AD961C62F356208552BB9ED529077096966D'''
            + '''670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B'''
            + '''E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9'''
            + '''DE2BCBF6955817183995497CEA956AE515D2261898FA0510'''
            + '''15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64'''
            + '''ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7'''
            + '''ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B'''
            + '''F12FFA06D98A0864D87602733EC86A64521F2B18177B200C'''
            + '''BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31'''
            + '''43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7'''
            + '''88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA'''
            + '''2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6'''
            + '''287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED'''
            + '''1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9'''
            + '''93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492'''
            + '''36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD'''
            + '''F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831'''
            + '''179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B'''
            + '''DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF'''
            + '''5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6'''
            + '''D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3'''
            + '''23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA'''
            + '''CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328'''
            + '''06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C'''
            + '''DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE'''
            + '''12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4'''
            + '''38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300'''
            + '''741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568'''
            + '''3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9'''
            + '''22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B'''
            + '''4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A'''
            + '''062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36'''
            + '''4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1'''
            + '''B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92'''
            + '''4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47'''
            + '''9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71'''
            + '''60C980DD98EDD3DFFFFFFFFFFFFFFFFF''',
            base=16,
        ),
        "generator": 2,
    },
}



class       __UpperCAmelCase		:







			def __init__(	self:  Optional[Any]      ,	UpperCAmelCase_:  Optional[int] = 14     ):







									'''simple docstring'''




									if group not in primes:
															raise ValueError("""Unsupported Group"""     )
									_SCREAMING_SNAKE_CASE	      =  primes[group]["""prime"""]
									_SCREAMING_SNAKE_CASE	      =  primes[group]["""generator"""]

									_SCREAMING_SNAKE_CASE	      =  int(hexlify(urandom(32     )     )      ,	base=16     )







			def 							UpperCamelCase      (	self:  Any     ):







									'''simple docstring'''




									return hex(self.__private_key     )[2:]







			def 							UpperCamelCase      (	self:  Optional[int]     ):







									'''simple docstring'''




									_SCREAMING_SNAKE_CASE	      =  pow(self.generator      ,	self.__private_key      ,	self.prime     )
									return hex(_SCREAMING_SNAKE_CASE     )[2:]







			def 							UpperCamelCase      (	self:  Dict      ,	UpperCAmelCase_:  Union[str, Any]     ):







									'''simple docstring'''




									return (
									    2 <= key <= self.prime - 2
									    and pow(_SCREAMING_SNAKE_CASE      ,	(self.prime - 1) // 2      ,	self.prime     ) == 1
									)







			def 							UpperCamelCase      (	self:  Tuple      ,	UpperCAmelCase_:  str     ):







									'''simple docstring'''




									_SCREAMING_SNAKE_CASE	      =  int(_SCREAMING_SNAKE_CASE      ,	base=16     )
									if not self.is_valid_public_key(_SCREAMING_SNAKE_CASE     ):
															raise ValueError("""Invalid public key"""     )
									_SCREAMING_SNAKE_CASE	      =  pow(_SCREAMING_SNAKE_CASE      ,	self.__private_key      ,	self.prime     )
									return shaaaa(str(_SCREAMING_SNAKE_CASE     ).encode()     ).hexdigest()







			@staticmethod
			def 							UpperCamelCase      (	UpperCAmelCase_:  List[Any]      ,	UpperCAmelCase_:  List[Any]     ):







									'''simple docstring'''




									return (
									    2 <= remote_public_key_str <= prime - 2
									    and pow(_SCREAMING_SNAKE_CASE      ,	(prime - 1) // 2      ,	_SCREAMING_SNAKE_CASE     ) == 1
									)







			@staticmethod
			def 							UpperCamelCase      (	UpperCAmelCase_:  Optional[int]      ,	UpperCAmelCase_:  Dict      ,	UpperCAmelCase_:  List[str] = 14     ):







									'''simple docstring'''




									_SCREAMING_SNAKE_CASE	      =  int(_SCREAMING_SNAKE_CASE      ,	base=16     )
									_SCREAMING_SNAKE_CASE	      =  int(_SCREAMING_SNAKE_CASE      ,	base=16     )
									_SCREAMING_SNAKE_CASE	      =  primes[group]["""prime"""]
									if not DiffieHellman.is_valid_public_key_static(_SCREAMING_SNAKE_CASE      ,	_SCREAMING_SNAKE_CASE     ):
															raise ValueError("""Invalid public key"""     )
									_SCREAMING_SNAKE_CASE	      =  pow(_SCREAMING_SNAKE_CASE      ,	_SCREAMING_SNAKE_CASE      ,	_SCREAMING_SNAKE_CASE     )
									return shaaaa(str(_SCREAMING_SNAKE_CASE     ).encode()     ).hexdigest()


if __name__ == "__main__":
		import doctest

		doctest.testmod()






"""simple docstring"""
import argparse

import torch

# Step 1. clone https://github.com/microsoft/unilm
# Step 2. git checkout to https://github.com/microsoft/unilm/commit/b94ec76c36f02fb2b0bf0dcb0b8554a2185173cd
# Step 3. cd unilm
# Step 4. ln -s $(realpath wavlm/modules.py) ./  # create simlink
# import classes
from unilm.wavlm.WavLM import WavLM as WavLMOrig
from unilm.wavlm.WavLM import WavLMConfig as WavLMConfigOrig

from transformers import WavLMConfig, WavLMModel, logging


logging.set_verbosity_info()
A:   Optional[int]								=		logging.get_logger(__name__)

A:   Tuple								=		{
    "post_extract_proj": "feature_projection.projection",
    "encoder.pos_conv.0": "encoder.pos_conv_embed.conv",
    "self_attn.k_proj": "encoder.layers.*.attention.k_proj",
    "self_attn.v_proj": "encoder.layers.*.attention.v_proj",
    "self_attn.q_proj": "encoder.layers.*.attention.q_proj",
    "self_attn.out_proj": "encoder.layers.*.attention.out_proj",
    "self_attn.grep_linear": "encoder.layers.*.attention.gru_rel_pos_linear",
    "self_attn.relative_attention_bias": "encoder.layers.*.attention.rel_attn_embed",
    "self_attn.grep_a": "encoder.layers.*.attention.gru_rel_pos_const",
    "self_attn_layer_norm": "encoder.layers.*.layer_norm",
    "fc1": "encoder.layers.*.feed_forward.intermediate_dense",
    "fc2": "encoder.layers.*.feed_forward.output_dense",
    "final_layer_norm": "encoder.layers.*.final_layer_norm",
    "encoder.layer_norm": "encoder.layer_norm",
    "w2v_model.layer_norm": "feature_projection.layer_norm",
    "quantizer.weight_proj": "quantizer.weight_proj",
    "quantizer.vars": "quantizer.codevectors",
    "project_q": "project_q",
    "final_proj": "project_hid",
    "w2v_encoder.proj": "ctc_proj",
    "mask_emb": "masked_spec_embed",
}
A:   List[str]								=		[
    "ctc_proj",
    "quantizer.weight_proj",
    "quantizer.codevectors",
    "project_q",
    "project_hid",
]

def       _snake_case						(						UpperCamelCase						:		str			,		UpperCamelCase						:		Tuple			,		UpperCamelCase						:		Optional[int]			,		UpperCamelCase						:		Tuple			,		UpperCamelCase						:		Any						):
 for attribute in key.split("""."""						):
  UpperCAmelCase	:					Optional[Any]	=	getattr(UpperCamelCase			,		UpperCamelCase						)

 if weight_type is not None:
  UpperCAmelCase	:					List[Any]	=	getattr(UpperCamelCase			,		UpperCamelCase						).shape
 else:
  UpperCAmelCase	:					str	=	hf_pointer.shape

 assert hf_shape == value.shape, (
     F"Shape of hf {key + '.' + weight_type if weight_type is not None else ''} is {hf_shape}, but should be"
     F" {value.shape} for {full_name}"
 )

 if weight_type == "weight":
  UpperCAmelCase	:					Optional[Any]	=	value
 elif weight_type == "weight_g":
  UpperCAmelCase	:					str	=	value
 elif weight_type == "weight_v":
  UpperCAmelCase	:					Union[str, Any]	=	value
 elif weight_type == "bias":
  UpperCAmelCase	:					str	=	value
 else:
  UpperCAmelCase	:					Union[str, Any]	=	value

 logger.info(F"{key + '.' + weight_type if weight_type is not None else ''} was initialized from {full_name}."						)

def       _snake_case						(						UpperCamelCase						:		List[Any]			,		UpperCamelCase						:		Optional[Any]						):
 UpperCAmelCase	:					Tuple	=	[]
 UpperCAmelCase	:					Any	=	fairseq_model.state_dict()

 UpperCAmelCase	:					Tuple	=	hf_model.feature_extractor

 for name, value in fairseq_dict.items():
  UpperCAmelCase	:					str	=	False
  if "conv_layers" in name:
   load_conv_layer(
       UpperCamelCase			,		UpperCamelCase			,		UpperCamelCase			,		UpperCamelCase			,		hf_model.config.feat_extract_norm == """group"""			,		)
   UpperCAmelCase	:					Union[str, Any]	=	True
  else:
   for key, mapped_key in MAPPING.items():
    if key in name or key.split("""w2v_model."""						)[-1] == name.split("""."""						)[0]:
     UpperCAmelCase	:					Dict	=	True
     if "*" in mapped_key:
      UpperCAmelCase	:					str	=	name.split(UpperCamelCase						)[0].split("""."""						)[-2]
      UpperCAmelCase	:					Tuple	=	mapped_key.replace("""*"""			,		UpperCamelCase						)
     if "weight_g" in name:
      UpperCAmelCase	:					Any	=	"""weight_g"""
     elif "weight_v" in name:
      UpperCAmelCase	:					Optional[Any]	=	"""weight_v"""
     elif "bias" in name and "relative_attention_bias" not in name:
      UpperCAmelCase	:					Union[str, Any]	=	"""bias"""
     elif "weight" in name:
      # TODO: don't match quantizer.weight_proj
      UpperCAmelCase	:					str	=	"""weight"""
     else:
      UpperCAmelCase	:					Optional[Any]	=	None

     set_recursively(UpperCamelCase			,		UpperCamelCase			,		UpperCamelCase			,		UpperCamelCase			,		UpperCamelCase						)
    continue
  if not is_used:
   unused_weights.append(UpperCamelCase						)

 logger.warning(F"Unused weights: {unused_weights}"						)

def       _snake_case						(						UpperCamelCase						:		Optional[Any]			,		UpperCamelCase						:		Dict			,		UpperCamelCase						:		Tuple			,		UpperCamelCase						:		Any			,		UpperCamelCase						:		Any						):
 UpperCAmelCase	:					str	=	full_name.split("""conv_layers."""						)[-1]
 UpperCAmelCase	:					Dict	=	name.split("""."""						)
 UpperCAmelCase	:					List[str]	=	int(items[0]						)
 UpperCAmelCase	:					Any	=	int(items[1]						)

 if type_id == 0:
  if "bias" in name:
   assert value.shape == feature_extractor.conv_layers[layer_id].conv.bias.data.shape, (
       F"{full_name} has size {value.shape}, but"
       F" {feature_extractor.conv_layers[layer_id].conv.bias.data.shape} was found."
   )
   UpperCAmelCase	:					Optional[Any]	=	value
   logger.info(F"Feat extract conv layer {layer_id} was initialized from {full_name}."						)
  elif "weight" in name:
   assert value.shape == feature_extractor.conv_layers[layer_id].conv.weight.data.shape, (
       F"{full_name} has size {value.shape}, but"
       F" {feature_extractor.conv_layers[layer_id].conv.weight.data.shape} was found."
   )
   UpperCAmelCase	:					Tuple	=	value
   logger.info(F"Feat extract conv layer {layer_id} was initialized from {full_name}."						)
 elif (type_id == 2 and not use_group_norm) or (type_id == 2 and layer_id == 0 and use_group_norm):
  if "bias" in name:
   assert value.shape == feature_extractor.conv_layers[layer_id].layer_norm.bias.data.shape, (
       F"{full_name} has size {value.shape}, but {feature_extractor[layer_id].layer_norm.bias.data.shape} was"
       " found."
   )
   UpperCAmelCase	:					str	=	value
   logger.info(F"Feat extract layer norm weight of layer {layer_id} was initialized from {full_name}."						)
  elif "weight" in name:
   assert value.shape == feature_extractor.conv_layers[layer_id].layer_norm.weight.data.shape, (
       F"{full_name} has size {value.shape}, but"
       F" {feature_extractor[layer_id].layer_norm.weight.data.shape} was found."
   )
   UpperCAmelCase	:					Optional[Any]	=	value
   logger.info(F"Feat extract layer norm weight of layer {layer_id} was initialized from {full_name}."						)
 else:
  unused_weights.append(UpperCamelCase						)

@torch.no_grad()
def       _snake_case						(						UpperCamelCase						:		int			,		UpperCamelCase						:		List[Any]			,		UpperCamelCase						:		List[Any]=None						):
 # load the pre-trained checkpoints
 UpperCAmelCase	:					List[Any]	=	torch.load(UpperCamelCase						)
 UpperCAmelCase	:					List[str]	=	WavLMConfigOrig(checkpoint["""cfg"""]						)
 UpperCAmelCase	:					Optional[int]	=	WavLMOrig(UpperCamelCase						)
 model.load_state_dict(checkpoint["""model"""]						)
 model.eval()

 if config_path is not None:
  UpperCAmelCase	:					List[str]	=	WavLMConfig.from_pretrained(UpperCamelCase						)
 else:
  UpperCAmelCase	:					List[Any]	=	WavLMConfig()

 UpperCAmelCase	:					Any	=	WavLMModel(UpperCamelCase						)

 recursively_load_weights(UpperCamelCase			,		UpperCamelCase						)

 hf_wavlm.save_pretrained(UpperCamelCase						)


if __name__ == "__main__":
      A:   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:   Tuple								=		parser.parse_args()
      convert_wavlm_checkpoint(args.checkpoint_path, args.pytorch_dump_folder_path, args.config_path)
