


'''simple docstring'''






# Copyright 2023 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import numpy as np
import torch

from ..models.clipseg import CLIPSegForImageSegmentation
from ..utils import is_vision_available, requires_backends
from .base import PipelineTool


if is_vision_available():
  from PIL import Image






class        __snake_case	(       _SCREAMING_SNAKE_CASE):







    """simple docstring"""



    lowercase       			= (
        'This is a tool that creates a segmentation mask of an image according to a label. It cannot create an image.'
        'It takes two arguments named `image` which should be the original image, and `label` which should be a text '
        'describing the elements what should be identified in the segmentation mask. The tool returns the mask.'
    )
    lowercase       			= 'CIDAS/clipseg-rd64-refined'
    lowercase       			= 'image_segmenter'
    lowercase       			= CLIPSegForImageSegmentation

    lowercase       			= ['image', 'text']
    lowercase       			= ['image']

    def __init__(       self   :  Dict   ,						*lowerCamelCase   :  Dict   ,						**lowerCamelCase   :  Union[str, Any]		)       ->  List[str]:
      requires_backends(self   ,						["""vision"""]		)
      super().__init__(*lowerCamelCase   ,						**lowerCamelCase		)

    def __lowercase       (       self   :  Union[str, Any]   ,						lowerCamelCase   :  "Image"   ,						lowerCamelCase   :  str		)       ->  List[Any]:
      return self.pre_processor(text=[label]   ,						images=[image]   ,						padding=lowerCamelCase   ,						return_tensors="""pt"""		)

    def __lowercase       (       self   :  Optional[int]   ,						lowerCamelCase   :  Dict		)       ->  Union[str, Any]:
      with torch.no_grad():
        lowerCAmelCase_      :				List[Any]      =       self.model(**lowerCamelCase		).logits
      return logits





    def __lowercase       (       self   :  str   ,						lowerCamelCase   :  List[Any]		)       ->  List[str]:
      lowerCAmelCase_      :				Dict      =       outputs.cpu().detach().numpy()
      lowerCAmelCase_      :				Union[str, Any]      =       0
      lowerCAmelCase_      :				Tuple      =       1
      return Image.fromarray((array * 2_55).astype(np.uinta		)		)







'''simple docstring'''






from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


__A :  List[str]    							=				{
    "configuration_bigbird_pegasus": [
        "BIGBIRD_PEGASUS_PRETRAINED_CONFIG_ARCHIVE_MAP",
        "BigBirdPegasusConfig",
        "BigBirdPegasusOnnxConfig",
    ],
}

try:
  if not is_torch_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  __A :  Union[str, Any]    							=				[
      "BIGBIRD_PEGASUS_PRETRAINED_MODEL_ARCHIVE_LIST",
      "BigBirdPegasusForCausalLM",
      "BigBirdPegasusForConditionalGeneration",
      "BigBirdPegasusForQuestionAnswering",
      "BigBirdPegasusForSequenceClassification",
      "BigBirdPegasusModel",
      "BigBirdPegasusPreTrainedModel",
  ]


if TYPE_CHECKING:
  from .configuration_bigbird_pegasus import (
      BIGBIRD_PEGASUS_PRETRAINED_CONFIG_ARCHIVE_MAP,
      BigBirdPegasusConfig,
      BigBirdPegasusOnnxConfig,
  )

  try:
    if not is_torch_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .modeling_bigbird_pegasus import (
        BIGBIRD_PEGASUS_PRETRAINED_MODEL_ARCHIVE_LIST,
        BigBirdPegasusForCausalLM,
        BigBirdPegasusForConditionalGeneration,
        BigBirdPegasusForQuestionAnswering,
        BigBirdPegasusForSequenceClassification,
        BigBirdPegasusModel,
        BigBirdPegasusPreTrainedModel,
    )


else:
  import sys

  __A :  List[Any]    							=				_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)



