


from collections import OrderedDict
from typing import TYPE_CHECKING, Any, Mapping, Optional, Union

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig, OnnxSeqaSeqConfigWithPast
from ...utils import logging


if TYPE_CHECKING:
    from ...feature_extraction_utils import FeatureExtractionMixin
    from ...tokenization_utils_base import PreTrainedTokenizerBase
    from ...utils import TensorType

__snake_case   							=						logging.get_logger(__name__)

__snake_case   							=						{
    '''openai/whisper-base''': '''https://huggingface.co/openai/whisper-base/resolve/main/config.json''',
}

# fmt: off
__snake_case   							=						[
    1, 2, 7, 8, 9, 1_0, 1_4, 2_5,
    2_6, 2_7, 2_8, 2_9, 3_1, 5_8, 5_9, 6_0, 6_1, 6_2,
    6_3, 9_0, 9_1, 9_2, 9_3, 3_5_7, 3_6_6, 4_3_8, 5_3_2, 6_8_5,
    7_0_5, 7_9_6, 9_3_0, 1_0_5_8, 1_2_2_0, 1_2_6_7, 1_2_7_9, 1_3_0_3, 1_3_4_3, 1_3_7_7,
    1_3_9_1, 1_6_3_5, 1_7_8_2, 1_8_7_5, 2_1_6_2, 2_3_6_1, 2_4_8_8, 3_4_6_7, 4_0_0_8, 4_2_1_1,
    4_6_0_0, 4_8_0_8, 5_2_9_9, 5_8_5_5, 6_3_2_9, 7_2_0_3, 9_6_0_9, 9_9_5_9, 1_0_5_6_3, 1_0_7_8_6,
    1_1_4_2_0, 1_1_7_0_9, 1_1_9_0_7, 1_3_1_6_3, 1_3_6_9_7, 1_3_7_0_0, 1_4_8_0_8, 1_5_3_0_6, 1_6_4_1_0, 1_6_7_9_1,
    1_7_9_9_2, 1_9_2_0_3, 1_9_5_1_0, 2_0_7_2_4, 2_2_3_0_5, 2_2_9_3_5, 2_7_0_0_7, 3_0_1_0_9, 3_0_4_2_0, 3_3_4_0_9,
    3_4_9_4_9, 4_0_2_8_3, 4_0_4_9_3, 4_0_5_4_9, 4_7_2_8_2, 4_9_1_4_6, 5_0_2_5_7, 5_0_3_5_9, 5_0_3_6_0, 5_0_3_6_1
]
__snake_case   							=						[
    1, 2, 7, 8, 9, 1_0, 1_4, 2_5,
    2_6, 2_7, 2_8, 2_9, 3_1, 5_8, 5_9, 6_0, 6_1, 6_2,
    6_3, 9_0, 9_1, 9_2, 9_3, 3_5_9, 5_0_3, 5_2_2, 5_4_2, 8_7_3,
    8_9_3, 9_0_2, 9_1_8, 9_2_2, 9_3_1, 1_3_5_0, 1_8_5_3, 1_9_8_2, 2_4_6_0, 2_6_2_7,
    3_2_4_6, 3_2_5_3, 3_2_6_8, 3_5_3_6, 3_8_4_6, 3_9_6_1, 4_1_8_3, 4_6_6_7, 6_5_8_5, 6_6_4_7,
    7_2_7_3, 9_0_6_1, 9_3_8_3, 1_0_4_2_8, 1_0_9_2_9, 1_1_9_3_8, 1_2_0_3_3, 1_2_3_3_1, 1_2_5_6_2, 1_3_7_9_3,
    1_4_1_5_7, 1_4_6_3_5, 1_5_2_6_5, 1_5_6_1_8, 1_6_5_5_3, 1_6_6_0_4, 1_8_3_6_2, 1_8_9_5_6, 2_0_0_7_5, 2_1_6_7_5,
    2_2_5_2_0, 2_6_1_3_0, 2_6_1_6_1, 2_6_4_3_5, 2_8_2_7_9, 2_9_4_6_4, 3_1_6_5_0, 3_2_3_0_2, 3_2_4_7_0, 3_6_8_6_5,
    4_2_8_6_3, 4_7_4_2_5, 4_9_8_7_0, 5_0_2_5_4, 5_0_2_5_8, 5_0_3_6_0, 5_0_3_6_1, 5_0_3_6_2
]



class 	__lowerCamelCase			(_a						):
       _lowercase											=     """whisper"""
       _lowercase											=     ["""past_key_values"""]
       _lowercase											=     {"""num_attention_heads""": """encoder_attention_heads""", """hidden_size""": """d_model"""}







       def __init__(			self: Union[str, Any],A_: List[str]=5_1865,A_: Tuple=80,A_: List[Any]=6,A_: Dict=4,A_: Dict=6,A_: List[str]=4,A_: List[str]=1536,A_: int=1536,A_: List[str]=0.0,A_: Any=0.0,A_: List[str]=5_0257,A_: Tuple=True,A_: Dict=True,A_: Optional[Any]="gelu",A_: Tuple=256,A_: Dict=0.0,A_: List[Any]=0.0,A_: Dict=0.0,A_: int=0.0_2,A_: List[Any]=False,A_: List[str]=1500,A_: int=448,A_: Dict=5_0256,A_: Dict=5_0256,A_: List[str]=5_0256,A_: Dict=None,A_: List[Any]=[220, 5_0256],A_: Dict=False,A_: str=256,A_: Tuple=False,A_: List[Any]=0.0_5,A_: Dict=10,A_: Optional[int]=2,A_: List[str]=0.0,A_: Optional[Any]=10,A_: Union[str, Any]=0,A_: Dict=7,**A_: List[Any],):






            '''simple docstring'''




            __UpperCamelCase =			vocab_size
            __UpperCamelCase =			num_mel_bins
            __UpperCamelCase =			d_model
            __UpperCamelCase =			encoder_layers
            __UpperCamelCase =			encoder_attention_heads
            __UpperCamelCase =			decoder_layers
            __UpperCamelCase =			decoder_attention_heads
            __UpperCamelCase =			decoder_ffn_dim
            __UpperCamelCase =			encoder_ffn_dim
            __UpperCamelCase =			dropout
            __UpperCamelCase =			attention_dropout
            __UpperCamelCase =			activation_dropout
            __UpperCamelCase =			activation_function
            __UpperCamelCase =			init_std
            __UpperCamelCase =			encoder_layerdrop
            __UpperCamelCase =			decoder_layerdrop
            __UpperCamelCase =			use_cache
            __UpperCamelCase =			encoder_layers
            __UpperCamelCase =			scale_embedding  # scale factor will be sqrt(d_model) if True
            __UpperCamelCase =			max_source_positions
            __UpperCamelCase =			max_target_positions

            # Audio Classification-specific parameters. Feel free to ignore for other classes.
            __UpperCamelCase =			classifier_proj_size
            __UpperCamelCase =			use_weighted_layer_sum

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

            __UpperCamelCase =			median_filter_width

            super().__init__(
                pad_token_id=A_,bos_token_id=A_,eos_token_id=A_,is_encoder_decoder=A_,decoder_start_token_id=A_,suppress_tokens=A_,begin_suppress_tokens=A_,**A_,)



class 	__lowerCamelCase			(_a						):







       @property
       def 		snake_case_	(			self: Optional[int]					):






            '''simple docstring'''




            __UpperCamelCase =			OrderedDict(
                [
                    ('input_features', {0: 'batch', 1: 'feature_size', 2: 'encoder_sequence'}),
                ]					)
            if self.use_past:
                 __UpperCamelCase =			{0: 'batch'}
            else:
                 __UpperCamelCase =			{0: 'batch', 1: 'decoder_sequence'}

            if self.use_past:
                 self.fill_with_past_key_values_(A_,direction='inputs'					)

            return common_inputs







       def 		snake_case_	(			self: Tuple,A_: Union["PreTrainedTokenizerBase", "FeatureExtractionMixin"],A_: int = -1,A_: int = -1,A_: bool = False,A_: Optional["TensorType"] = None,A_: int = 2_2050,A_: float = 5.0,A_: int = 220,):






            '''simple docstring'''




            __UpperCamelCase =			OrderedDict()
            __UpperCamelCase =			OnnxConfig.generate_dummy_inputs(
                self,preprocessor=preprocessor.feature_extractor,batch_size=A_,framework=A_,sampling_rate=A_,time_duration=A_,frequency=A_,)
            __UpperCamelCase =			encoder_inputs['input_features'].shape[2]
            __UpperCamelCase =			encoder_sequence_length // 2 if self.use_past else seq_length

            __UpperCamelCase =			super().generate_dummy_inputs(
                preprocessor.tokenizer,A_,A_,A_,A_					)

            __UpperCamelCase =			encoder_inputs.pop('input_features'					)
            __UpperCamelCase =			decoder_inputs.pop('decoder_input_ids'					)

            if "past_key_values" in decoder_inputs:
                 __UpperCamelCase =			decoder_inputs.pop('past_key_values'					)

            return dummy_inputs







       @property
       def 		snake_case_	(			self: Optional[Any]					):






            '''simple docstring'''




            return 1E-3






#
# This a `torch.distributed` diagnostics script that checks that all GPUs in the cluster (one or
# many nodes) can talk to each other via nccl and allocate gpu memory.
#
# To run first adjust the number of processes and nodes:
#
# python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py
#
# You may need to add --master_addr $MASTER_ADDR --master_port $MASTER_PORT if using a custom addr:port
#
# You can also use the rdzv API: --rdzv_endpoint $MASTER_ADDR:$MASTER_PORT --rdzv_backend c10d
#
# use torch.distributed.launch instead of torch.distributed.run for torch < 1.9
#
# If you get a hanging in `barrier` calls you have some network issues, you may try to debug this with:
#
# NCCL_DEBUG=INFO python -m torch.distributed.run --nproc_per_node 2 --nnodes 1 torch-distributed-gpu-test.py
#
# which should tell you what's going on behind the scenes.
#
#
# This script can be run via `srun` in the SLURM environment as well. Here is a SLURM script that
# runs on 2 nodes of 4 gpus per node:
#
# #SBATCH --job-name=test-nodes        # name
# #SBATCH --nodes=2                    # nodes
# #SBATCH --ntasks-per-node=1          # crucial - only 1 task per dist per node!
# #SBATCH --cpus-per-task=10           # number of cores per tasks
# #SBATCH --gres=gpu:4                 # number of gpus
# #SBATCH --time 0:05:00               # maximum execution time (HH:MM:SS)
# #SBATCH --output=%x-%j.out           # output file name
#
# GPUS_PER_NODE=4
# MASTER_ADDR=$(scontrol show hostnames $SLURM_JOB_NODELIST | head -n 1)
# MASTER_PORT=6000
#
# srun --jobid $SLURM_JOBID bash -c 'python -m torch.distributed.run \
# --nproc_per_node $GPUS_PER_NODE --nnodes $SLURM_NNODES --node_rank $SLURM_PROCID \
# --master_addr $MASTER_ADDR --master_port $MASTER_PORT \
# torch-distributed-gpu-test.py'
#

import fcntl
import os
import socket

import torch
import torch.distributed as dist






def 		_A		(		*_lowercase )					-> Tuple:


     """simple docstring"""


     with open(_lowercase					,  'r' ) as fh:
          fcntl.flock(_lowercase					,  fcntl.LOCK_EX )
          try:
               print(*_lowercase )
          finally:
               fcntl.flock(_lowercase					,  fcntl.LOCK_UN )


__snake_case   							=						int(os.environ['''LOCAL_RANK'''])
torch.cuda.set_device(local_rank)
__snake_case   							=						torch.device('''cuda''', local_rank)
__snake_case   							=						socket.gethostname()

__snake_case   							=						f"""[{hostname}-{local_rank}]"""

try:
    # test distributed
    dist.init_process_group('''nccl''')
    dist.all_reduce(torch.ones(1).to(device), op=dist.ReduceOp.SUM)
    dist.barrier()

    # test cuda is available and can allocate memory
    torch.cuda.is_available()
    torch.ones(1).cuda(local_rank)

    # global rank
    __snake_case   							=						dist.get_rank()
    __snake_case   							=						dist.get_world_size()

    printflock(f"""{gpu} is OK (global rank: {rank}/{world_size})""")

    dist.barrier()
    if rank == 0:
        printflock(f"""pt={torch.__version__}, cuda={torch.version.cuda}, nccl={torch.cuda.nccl.version()}""")

except Exception:
    printflock(f"""{gpu} is broken""")
    raise


