

'''simple docstring'''

from collections import UserDict
from typing import Union

import numpy as np
import requests

from ..utils import (
    add_end_docstrings,
    logging,
)
from .audio_classification import ffmpeg_read
from .base import PIPELINE_INIT_ARGS, Pipeline


lowercase__         =      logging.get_logger(__name__)




@add_end_docstrings(_snake_case							)
class 	A_			(    _snake_case							):






     '''simple docstring'''



     def __init__(		self			:					Optional[Any]					,      **lowercase_			:					Any	)						->     List[str]:
      super().__init__(**lowercase_	)

      if self.framework != "pt":
       raise ValueError(f"""The {self.__class__} is only available in PyTorch."""	)
      # No specific FOR_XXX available yet


     def __call__(		self			:					int					,      lowercase_			:					Union[np.ndarray, bytes, str]					,      **lowercase_			:					Dict	)						->     Any:
      return super().__call__(lowercase_					,      **lowercase_	)


     def        UpperCAmelCase_	(		self			:					Dict					,      **lowercase_			:					List[str]	)						->     Any:
      UpperCAmelCase	:     int						 =			{}
      if "candidate_labels" in kwargs:
       UpperCAmelCase	:     Tuple						 =			kwargs['candidate_labels']
      if "hypothesis_template" in kwargs:
       UpperCAmelCase	:     Union[str, Any]						 =			kwargs['hypothesis_template']

      return preprocess_params, {}, {}


     def        UpperCAmelCase_	(		self			:					Tuple					,      lowercase_			:					str					,      lowercase_			:					List[Any]=None					,      lowercase_			:					int="This is a sound of {}."	)						->     Any:
      if isinstance(lowercase_					,      lowercase_	):
       if audio.startswith('http://'	) or audio.startswith('https://'	):
        # We need to actually check for a real protocol, otherwise it's impossible to use a local file
        # like http_huggingface_co.png
        UpperCAmelCase	:     List[str]						 =			requests.get(lowercase_	).content
       else:
        with open(lowercase_					,      'rb'	) as f:
         UpperCAmelCase	:     Union[str, Any]						 =			f.read()

      if isinstance(lowercase_					,      lowercase_	):
       UpperCAmelCase	:     Optional[Any]						 =			ffmpeg_read(lowercase_					,      self.feature_extractor.sampling_rate	)

      if not isinstance(lowercase_					,      np.ndarray	):
       raise ValueError('We expect a numpy ndarray as input'	)
      if len(audio.shape	) != 1:
       raise ValueError('We expect a single channel audio input for ZeroShotAudioClassificationPipeline'	)

      UpperCAmelCase	:     List[str]						 =			self.feature_extractor(
          [audio]					,      sampling_rate=self.feature_extractor.sampling_rate					,      return_tensors='pt'	)
      UpperCAmelCase	:     Optional[int]						 =			candidate_labels
      UpperCAmelCase	:     str						 =			[hypothesis_template.format(lowercase_	) for x in candidate_labels]
      UpperCAmelCase	:     Dict						 =			self.tokenizer(lowercase_					,      return_tensors=self.framework					,      padding=lowercase_	)
      UpperCAmelCase	:     Union[str, Any]						 =			[text_inputs]
      return inputs


     def        UpperCAmelCase_	(		self			:					Union[str, Any]					,      lowercase_			:					Any	)						->     List[Any]:
      UpperCAmelCase	:     str						 =			model_inputs.pop('candidate_labels'	)
      UpperCAmelCase	:     Any						 =			model_inputs.pop('text_inputs'	)
      if isinstance(text_inputs[0]					,      lowercase_	):
       UpperCAmelCase	:     Any						 =			text_inputs[0]
      else:
       # Batching case.
       UpperCAmelCase	:     Dict						 =			text_inputs[0][0]

      UpperCAmelCase	:     List[str]						 =			self.model(**lowercase_					,      **lowercase_	)

      UpperCAmelCase	:     Any						 =			{
          'candidate_labels': candidate_labels,
          'logits': outputs.logits_per_audio,
      }
      return model_outputs




     def        UpperCAmelCase_	(		self			:					Tuple					,      lowercase_			:					Dict	)						->     Dict:
      UpperCAmelCase	:     Union[str, Any]						 =			model_outputs.pop('candidate_labels'	)
      UpperCAmelCase	:     Dict						 =			model_outputs['logits'][0]

      if self.framework == "pt":
       UpperCAmelCase	:     str						 =			logits.softmax(dim=0	)
       UpperCAmelCase	:     List[str]						 =			probs.tolist()
      else:
       raise ValueError('`tf` framework not supported.'	)

      UpperCAmelCase	:     List[Any]						 =			[
          {'score': score, 'label': candidate_label}
          for score, candidate_label in sorted(zip(lowercase_					,      lowercase_	)					,      key=lambda lowercase_	: -x[0]	)
      ]
      return result







'''simple docstring'''

import copy
from typing import Dict, Optional

from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ..auto import CONFIG_MAPPING
from ..detr import DetrConfig
from ..swin import SwinConfig


lowercase__         =      {
    "facebook/maskformer-swin-base-ade": (
        "https://huggingface.co/facebook/maskformer-swin-base-ade/blob/main/config.json"
    )
    # See all MaskFormer models at https://huggingface.co/models?filter=maskformer
}

lowercase__         =      logging.get_logger(__name__)




class 	A_			(    _snake_case							):






     '''simple docstring'''



     UpperCAmelCase_						:     Any  		=  """maskformer"""
     UpperCAmelCase_						:     Union[str, Any]  		=  {"""hidden_size""": """mask_feature_size"""}
     UpperCAmelCase_						:     Union[str, Any]  		=  ["""resnet""", """swin"""]
     UpperCAmelCase_						:     Optional[int]  		=  ["""detr"""]


     def __init__(		self			:					Union[str, Any]					,      lowercase_			:					int = 256					,      lowercase_			:					int = 256					,      lowercase_			:					float = 0.1					,      lowercase_			:					bool = False					,      lowercase_			:					Optional[Dict] = None					,      lowercase_			:					Optional[Dict] = None					,      lowercase_			:					float = 0.02					,      lowercase_			:					float = 1.0					,      lowercase_			:					float = 1.0					,      lowercase_			:					float = 1.0					,      lowercase_			:					float = 20.0					,      lowercase_			:					Optional[bool] = None					,      **lowercase_			:					int					,      )						->     Optional[Any]:
      if backbone_config is None:
       # fall back to https://huggingface.co/microsoft/swin-base-patch4-window12-384-in22k
       UpperCAmelCase	:     List[Any]						 =			SwinConfig(
           image_size=384					,      in_channels=3					,      patch_size=4					,      embed_dim=128					,      depths=[2, 2, 18, 2]					,      num_heads=[4, 8, 16, 32]					,      window_size=12					,      drop_path_rate=0.3					,      out_features=['stage1', 'stage2', 'stage3', 'stage4']					,      )

      if isinstance(lowercase_					,      lowercase_	):
       UpperCAmelCase	:     List[Any]						 =			backbone_config.pop('model_type'	)
       UpperCAmelCase	:     Optional[Any]						 =			CONFIG_MAPPING[backbone_model_type]
       UpperCAmelCase	:     List[Any]						 =			config_class.from_dict(lowercase_	)

      # verify that the backbone is supported
      if backbone_config.model_type not in self.backbones_supported:
       logger.warning_once(
           f"""Backbone {backbone_config.model_type} is not a supported model and may not be compatible with MaskFormer. """
           f"""Supported model types: {",".join(self.backbones_supported	)}"""	)

      if decoder_config is None:
       # fall back to https://huggingface.co/facebook/detr-resnet-50
       UpperCAmelCase	:     Dict						 =			DetrConfig()
      else:
       # verify that the decoder is supported
       UpperCAmelCase	:     Tuple						 =			(
           decoder_config.pop('model_type'	) if isinstance(lowercase_					,      lowercase_	) else decoder_config.model_type
       )
       if decoder_type not in self.decoders_supported:
        raise ValueError(
            f"""Transformer Decoder {decoder_type} not supported, please use one of"""
            f""" {",".join(self.decoders_supported	)}"""	)
       if isinstance(lowercase_					,      lowercase_	):
        UpperCAmelCase	:     Union[str, Any]						 =			CONFIG_MAPPING[decoder_type]
        UpperCAmelCase	:     str						 =			config_class.from_dict(lowercase_	)

      UpperCAmelCase	:     int						 =			backbone_config
      UpperCAmelCase	:     Tuple						 =			decoder_config
      # main feature dimension for the model
      UpperCAmelCase	:     Union[str, Any]						 =			fpn_feature_size
      UpperCAmelCase	:     Optional[Any]						 =			mask_feature_size
      # initializer
      UpperCAmelCase	:     Union[str, Any]						 =			init_std
      UpperCAmelCase	:     List[str]						 =			init_xavier_std
      # Hungarian matcher && loss
      UpperCAmelCase	:     int						 =			cross_entropy_weight
      UpperCAmelCase	:     Tuple						 =			dice_weight
      UpperCAmelCase	:     int						 =			mask_weight
      UpperCAmelCase	:     Any						 =			use_auxiliary_loss
      UpperCAmelCase	:     Tuple						 =			no_object_weight
      UpperCAmelCase	:     str						 =			output_auxiliary_logits

      UpperCAmelCase	:     Dict						 =			self.decoder_config.encoder_attention_heads
      UpperCAmelCase	:     Union[str, Any]						 =			self.decoder_config.num_hidden_layers
      super().__init__(**lowercase_	)


     @classmethod
     def        UpperCAmelCase_	(		cls			:					Any					,      lowercase_			:					PretrainedConfig					,      lowercase_			:					PretrainedConfig					,      **lowercase_			:					Optional[Any]	)						->     str:
      return cls(
          backbone_config=lowercase_					,      decoder_config=lowercase_					,      **lowercase_					,      )




     def        UpperCAmelCase_	(		self			:					Optional[Any]	)						->     Dict[str, any]:
      UpperCAmelCase	:     Optional[int]						 =			copy.deepcopy(self.__dict__	)
      UpperCAmelCase	:     List[str]						 =			self.backbone_config.to_dict()
      UpperCAmelCase	:     Any						 =			self.decoder_config.to_dict()
      UpperCAmelCase	:     Union[str, Any]						 =			self.__class__.model_type
      return output




