
import argparse
import os
import re


# All paths are set with the intent you should run this script from the root of the repo with the command
# python utils/check_dummies.py
lowercase   =  '''src/diffusers'''

# Matches is_xxx_available()
lowercase   =  re.compile(r'''is\_([a-z_]*)_available\(\)''')
# Matches from xxx import bla
lowercase   =  re.compile(r'''\s+from\s+\S*\s+import\s+([^\(\s].*)\n''')


lowercase   =  '''
{0} = None
'''

lowercase   =  '''
class {0}(metaclass=DummyObject):
    _backends = {1}

    def __init__(self, *args, **kwargs):
        requires_backends(self, {1})

    @classmethod
    def from_config(cls, *args, **kwargs):
        requires_backends(cls, {1})

    @classmethod
    def from_pretrained(cls, *args, **kwargs):
        requires_backends(cls, {1})
'''


lowercase   =  '''
def {0}(*args, **kwargs):
    requires_backends({0}, {1})
'''



def      __lowerCAmelCase						(							UpperCAmelCase__				:      Dict       )  ->    Dict:
							lowerCamelCase_							  =					_re_backend.findall(UpperCAmelCase__       )
							if len(UpperCAmelCase__       ) == 0:
														return None

							return "_and_".join(UpperCAmelCase__       )



def      __lowerCAmelCase						(							)  ->    Optional[int]:
							with open(os.path.join(UpperCAmelCase__			,				"""__init__.py"""       )			,				"""r"""			,				encoding="""utf-8"""			,				newline="""\n"""       ) as f:
														lowerCamelCase_							  =					f.readlines()

							# Get to the point we do the actual imports for type checking
							lowerCamelCase_							  =					0
							lowerCamelCase_							  =					{}
							# Go through the end of the file
							while line_index < len(UpperCAmelCase__       ):
														# If the line contains is_backend_available, we grab all objects associated with the `else` block
														lowerCamelCase_							  =					find_backend(lines[line_index]       )
														if backend is not None:
																					while not lines[line_index].startswith("""else:"""       ):
																												line_index += 1
																					line_index += 1
																					lowerCamelCase_							  =					[]
																					# Until we unindent, add backend objects to the list
																					while line_index < len(UpperCAmelCase__       ) and len(lines[line_index]       ) > 1:
																												lowerCamelCase_							  =					lines[line_index]
																												lowerCamelCase_							  =					_re_single_line_import.search(UpperCAmelCase__       )
																												if single_line_import_search is not None:
																																			objects.extend(single_line_import_search.groups()[0].split(""", """       )       )
																												elif line.startswith(""" """ * 8       ):
																																			objects.append(line[8:-2]       )
																												line_index += 1

																					if len(UpperCAmelCase__       ) > 0:
																												lowerCamelCase_							  =					objects
														else:
																					line_index += 1

							return backend_specific_objects



def      __lowerCAmelCase						(							UpperCAmelCase__				:      List[str]			,				UpperCAmelCase__				:      List[str]       )  ->    List[Any]:
							if name.isupper():
														return DUMMY_CONSTANT.format(UpperCAmelCase__       )
							elif name.islower():
														return DUMMY_FUNCTION.format(UpperCAmelCase__			,				UpperCAmelCase__       )
							else:
														return DUMMY_CLASS.format(UpperCAmelCase__			,				UpperCAmelCase__       )



def      __lowerCAmelCase						(							UpperCAmelCase__				:      Tuple=None       )  ->    Any:
							if backend_specific_objects is None:
														lowerCamelCase_							  =					read_init()
							# For special correspondence backend to module name as used in the function requires_modulename
							lowerCamelCase_							  =					{}

							for backend, objects in backend_specific_objects.items():
														lowerCamelCase_							  =					"""[""" + """, """.join(F'''"{b}"''' for b in backend.split("""_and_"""       )       ) + """]"""
														lowerCamelCase_							  =					"""# This file is autogenerated by the command `make fix-copies`, do not edit.\n"""
														dummy_file += "from ..utils import DummyObject, requires_backends\n\n"
														dummy_file += "\n".join([create_dummy_object(UpperCAmelCase__			,				UpperCAmelCase__       ) for o in objects]       )
														lowerCamelCase_							  =					dummy_file

							return dummy_files



def      __lowerCAmelCase						(							UpperCAmelCase__				:      Union[str, Any]=False       )  ->    Optional[Any]:
							lowerCamelCase_							  =					create_dummy_files()
							# For special correspondence backend to shortcut as used in utils/dummy_xxx_objects.py
							lowerCamelCase_							  =					{"""torch""": """pt"""}

							# Locate actual dummy modules and read their content.
							lowerCamelCase_							  =					os.path.join(UpperCAmelCase__			,				"""utils"""       )
							lowerCamelCase_							  =					{
							    backend: os.path.join(UpperCAmelCase__			,				F'''dummy_{short_names.get(UpperCAmelCase__			,				UpperCAmelCase__       )}_objects.py'''       )
							    for backend in dummy_files.keys()
							}

							lowerCamelCase_							  =					{}
							for backend, file_path in dummy_file_paths.items():
														if os.path.isfile(UpperCAmelCase__       ):
																					with open(UpperCAmelCase__			,				"""r"""			,				encoding="""utf-8"""			,				newline="""\n"""       ) as f:
																												lowerCamelCase_							  =					f.read()
														else:
																					lowerCamelCase_							  =					""""""

							for backend in dummy_files.keys():
														if dummy_files[backend] != actual_dummies[backend]:
																					if overwrite:
																												print(
																												    F'''Updating diffusers.utils.dummy_{short_names.get(UpperCAmelCase__			,				UpperCAmelCase__       )}_objects.py as the main '''
																												    """__init__ has new objects."""       )
																												with open(dummy_file_paths[backend]			,				"""w"""			,				encoding="""utf-8"""			,				newline="""\n"""       ) as f:
																																			f.write(dummy_files[backend]       )
																					else:
																												raise ValueError(
																												    """The main __init__ has objects that are not present in """
																												    F'''diffusers.utils.dummy_{short_names.get(UpperCAmelCase__			,				UpperCAmelCase__       )}_objects.py. Run `make fix-copies` '''
																												    """to fix this."""       )


if __name__ == "__main__":
		lowercase   =  argparse.ArgumentParser()
		parser.add_argument('''--fix_and_overwrite''', action='''store_true''', help='''Whether to fix inconsistencies.''')
		lowercase   =  parser.parse_args()

		check_dummies(args.fix_and_overwrite)







import functools
import operator

from ...configuration_utils import PretrainedConfig
from ...utils import logging


lowercase        =  logging.get_logger(__name__)

lowercase        =  {
    '''facebook/wav2vec2-base-960h''': '''https://huggingface.co/facebook/wav2vec2-base-960h/resolve/main/config.json''',
    # See all Wav2Vec2 models at https://huggingface.co/models?filter=wav2vec2
}





class       __A(				UpperCAmelCase       ):
					SCREAMING_SNAKE_CASE			    =    '''wav2vec2'''

					def __init__(	self					:     Tuple   ,					__UpperCamelCase					:     Optional[int]=3_2   ,					__UpperCamelCase					:     List[str]=7_6_8   ,					__UpperCamelCase					:     Tuple=1_2   ,					__UpperCamelCase					:     str=1_2   ,					__UpperCamelCase					:     Any=3_0_7_2   ,					__UpperCamelCase					:     Tuple="gelu"   ,					__UpperCamelCase					:     Tuple=0.1   ,					__UpperCamelCase					:     Any=0.1   ,					__UpperCamelCase					:     List[str]=0.1   ,					__UpperCamelCase					:     List[Any]=0.0   ,					__UpperCamelCase					:     str=0.0   ,					__UpperCamelCase					:     str=0.1   ,					__UpperCamelCase					:     List[Any]=0.1   ,					__UpperCamelCase					:     Dict=0.02   ,					__UpperCamelCase					:     int=1E-5   ,					__UpperCamelCase					:     Dict="group"   ,					__UpperCamelCase					:     Tuple="gelu"   ,					__UpperCamelCase					:     Optional[int]=(5_1_2, 5_1_2, 5_1_2, 5_1_2, 5_1_2, 5_1_2, 5_1_2)   ,					__UpperCamelCase					:     Union[str, Any]=(5, 2, 2, 2, 2, 2, 2)   ,					__UpperCamelCase					:     int=(1_0, 3, 3, 3, 3, 2, 2)   ,					__UpperCamelCase					:     List[Any]=False   ,					__UpperCamelCase					:     Tuple=1_2_8   ,					__UpperCamelCase					:     Any=1_6   ,					__UpperCamelCase					:     List[str]=False   ,					__UpperCamelCase					:     List[str]=True   ,					__UpperCamelCase					:     Dict=0.05   ,					__UpperCamelCase					:     Union[str, Any]=1_0   ,					__UpperCamelCase					:     int=2   ,					__UpperCamelCase					:     List[Any]=0.0   ,					__UpperCamelCase					:     List[Any]=1_0   ,					__UpperCamelCase					:     List[str]=0   ,					__UpperCamelCase					:     Optional[Any]=3_2_0   ,					__UpperCamelCase					:     Optional[int]=2   ,					__UpperCamelCase					:     List[Any]=0.1   ,					__UpperCamelCase					:     int=1_0_0   ,					__UpperCamelCase					:     int=2_5_6   ,					__UpperCamelCase					:     str=2_5_6   ,					__UpperCamelCase					:     Dict=0.1   ,					__UpperCamelCase					:     Union[str, Any]="sum"   ,					__UpperCamelCase					:     Optional[int]=False   ,					__UpperCamelCase					:     Optional[int]=False   ,					__UpperCamelCase					:     Dict=2_5_6   ,					__UpperCamelCase					:     List[Any]=(5_1_2, 5_1_2, 5_1_2, 5_1_2, 1_5_0_0)   ,					__UpperCamelCase					:     int=(5, 3, 3, 1, 1)   ,					__UpperCamelCase					:     Optional[Any]=(1, 2, 3, 1, 1)   ,					__UpperCamelCase					:     Dict=5_1_2   ,					__UpperCamelCase					:     Any=0   ,					__UpperCamelCase					:     Union[str, Any]=1   ,					__UpperCamelCase					:     List[str]=2   ,					__UpperCamelCase					:     List[str]=False   ,					__UpperCamelCase					:     int=3   ,					__UpperCamelCase					:     Dict=2   ,					__UpperCamelCase					:     Optional[Any]=3   ,					__UpperCamelCase					:     Optional[int]=None   ,					__UpperCamelCase					:     Tuple=None   ,					**__UpperCamelCase					:     Tuple   ,					):
												super().__init__(**__UpperCamelCase   ,					pad_token_id=__UpperCamelCase   ,					bos_token_id=__UpperCamelCase   ,					eos_token_id=__UpperCamelCase   )
												lowerCamelCase_							  =					hidden_size
												lowerCamelCase_							  =					feat_extract_norm
												lowerCamelCase_							  =					feat_extract_activation
												lowerCamelCase_							  =					list(__UpperCamelCase   )
												lowerCamelCase_							  =					list(__UpperCamelCase   )
												lowerCamelCase_							  =					list(__UpperCamelCase   )
												lowerCamelCase_							  =					conv_bias
												lowerCamelCase_							  =					num_conv_pos_embeddings
												lowerCamelCase_							  =					num_conv_pos_embedding_groups
												lowerCamelCase_							  =					len(self.conv_dim   )
												lowerCamelCase_							  =					num_hidden_layers
												lowerCamelCase_							  =					intermediate_size
												lowerCamelCase_							  =					hidden_act
												lowerCamelCase_							  =					num_attention_heads
												lowerCamelCase_							  =					hidden_dropout
												lowerCamelCase_							  =					attention_dropout
												lowerCamelCase_							  =					activation_dropout
												lowerCamelCase_							  =					feat_proj_dropout
												lowerCamelCase_							  =					final_dropout
												lowerCamelCase_							  =					layerdrop
												lowerCamelCase_							  =					layer_norm_eps
												lowerCamelCase_							  =					initializer_range
												lowerCamelCase_							  =					vocab_size
												lowerCamelCase_							  =					do_stable_layer_norm
												lowerCamelCase_							  =					use_weighted_layer_sum

												if (
												    (len(self.conv_stride   ) != self.num_feat_extract_layers)
												    or (len(self.conv_kernel   ) != self.num_feat_extract_layers)
												    or (len(self.conv_dim   ) != self.num_feat_extract_layers)
												):
																			raise ValueError(
																			    """Configuration for convolutional layers is incorrect. It is required that `len(config.conv_dim)` =="""
																			    """ `len(config.conv_stride)` == `len(config.conv_kernel)`, but is `len(config.conv_dim) ="""
																			    F''' {len(self.conv_dim   )}`, `len(config.conv_stride) = {len(self.conv_stride   )}`,'''
																			    F''' `len(config.conv_kernel) = {len(self.conv_kernel   )}`.'''   )

												# fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
												lowerCamelCase_							  =					apply_spec_augment
												lowerCamelCase_							  =					mask_time_prob
												lowerCamelCase_							  =					mask_time_length
												lowerCamelCase_							  =					mask_time_min_masks
												lowerCamelCase_							  =					mask_feature_prob
												lowerCamelCase_							  =					mask_feature_length
												lowerCamelCase_							  =					mask_feature_min_masks

												# parameters for pretraining with codevector quantized representations
												lowerCamelCase_							  =					num_codevectors_per_group
												lowerCamelCase_							  =					num_codevector_groups
												lowerCamelCase_							  =					contrastive_logits_temperature
												lowerCamelCase_							  =					feat_quantizer_dropout
												lowerCamelCase_							  =					num_negatives
												lowerCamelCase_							  =					codevector_dim
												lowerCamelCase_							  =					proj_codevector_dim
												lowerCamelCase_							  =					diversity_loss_weight

												# ctc loss
												lowerCamelCase_							  =					ctc_loss_reduction
												lowerCamelCase_							  =					ctc_zero_infinity

												# adapter
												lowerCamelCase_							  =					add_adapter
												lowerCamelCase_							  =					adapter_kernel_size
												lowerCamelCase_							  =					adapter_stride
												lowerCamelCase_							  =					num_adapter_layers
												lowerCamelCase_							  =					output_hidden_size or hidden_size
												lowerCamelCase_							  =					adapter_attn_dim

												# SequenceClassification-specific parameter. Feel free to ignore for other classes.
												lowerCamelCase_							  =					classifier_proj_size

												# XVector-specific parameters. Feel free to ignore for other classes.
												lowerCamelCase_							  =					list(__UpperCamelCase   )
												lowerCamelCase_							  =					list(__UpperCamelCase   )
												lowerCamelCase_							  =					list(__UpperCamelCase   )
												lowerCamelCase_							  =					xvector_output_dim



					@property
					def    lowercase__      (	self					:     Dict   ):
												return functools.reduce(operator.mul   ,					self.conv_stride   ,					1   )





