# 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 torch

from ..models.auto import AutoModelForSequenceClassification, AutoTokenizer
from .base import PipelineTool






class 		_lowerCamelCase		( UpperCamelCase_     ):
    __a						=   "facebook/bart-large-mnli"
    __a						=   (
        "This is a tool that classifies an English text using provided labels. It takes two inputs: `text`, which "
        "should be the text to classify, and `labels`, which should be the list of labels to use for classification. "
        "It returns the most likely label in the list of provided `labels` for the input text."
    )
    __a						=   "text_classifier"
    __a						=   AutoTokenizer
    __a						=   AutoModelForSequenceClassification

    __a						=   ["text", ["text"]]
    __a						=   ["text"]
    def     UpperCamelCase_					(	self )							->       Optional[Any]:
     super().setup()
     SCREAMING_SNAKE_CASE__: str=   self.model.config
     SCREAMING_SNAKE_CASE__: Optional[Any]=   -1
     for idx, label in config.idalabel.items():
      if label.lower().startswith('''entail''' ):
       SCREAMING_SNAKE_CASE__: Optional[Any]=   int(lowerCAmelCase )
     if self.entailment_id == -1:
      raise ValueError('''Could not determine the entailment ID from the model config, please pass it at init.''' )
    def     UpperCamelCase_					(	self			,			lowerCAmelCase			,			lowerCAmelCase )							->       List[Any]:
     SCREAMING_SNAKE_CASE__: Dict=   labels
     return self.pre_processor(
         [text] * len(lowerCAmelCase )			,			[f'This example is {label}' for label in labels]			,			return_tensors='''pt'''			,			padding='''max_length'''			,			)



    def     UpperCamelCase_					(	self			,			lowerCAmelCase )							->       List[Any]:
     SCREAMING_SNAKE_CASE__: str=   outputs.logits
     SCREAMING_SNAKE_CASE__: Optional[int]=   torch.argmax(logits[:, 2] ).item()
     return self._labels[label_id]





import gc
import unittest

from diffusers import FlaxControlNetModel, FlaxStableDiffusionControlNetPipeline
from diffusers.utils import is_flax_available, load_image, slow
from diffusers.utils.testing_utils import require_flax


if is_flax_available():
						import jax
						import jax.numpy as jnp
						from flax.jax_utils import replicate
						from flax.training.common_utils import shard







@slow
@require_flax
class 							lowerCamelCase__						(				unittest.TestCase   ):






			"""simple docstring"""






			def 					snake_case__					(				self  ):

						'''simple docstring'''


						super().tearDown()
						gc.collect()




			def 					snake_case__					(				self  ):

						'''simple docstring'''


						UpperCamelCase__,   UpperCamelCase__       =							FlaxControlNetModel.from_pretrained(
						    "lllyasviel/sd-controlnet-canny"   ,    from_pt=snake_case   ,    dtype=jnp.bfloataa  )
						UpperCamelCase__,   UpperCamelCase__       =							FlaxStableDiffusionControlNetPipeline.from_pretrained(
						    "runwayml/stable-diffusion-v1-5"   ,    controlnet=snake_case   ,    from_pt=snake_case   ,    dtype=jnp.bfloataa  )
						UpperCamelCase__       =							controlnet_params

						UpperCamelCase__       =							"bird"
						UpperCamelCase__       =							jax.device_count()
						UpperCamelCase__       =							pipe.prepare_text_inputs([prompts] * num_samples  )

						UpperCamelCase__       =							load_image(
						    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/bird_canny.png"  )
						UpperCamelCase__       =							pipe.prepare_image_inputs([canny_image] * num_samples  )

						UpperCamelCase__       =							jax.random.PRNGKey(0  )
						UpperCamelCase__       =							jax.random.split(snake_case   ,    jax.device_count()  )

						UpperCamelCase__       =							replicate(snake_case  )
						UpperCamelCase__       =							shard(snake_case  )
						UpperCamelCase__       =							shard(snake_case  )

						UpperCamelCase__       =							pipe(
						    prompt_ids=snake_case   ,    image=snake_case   ,    params=snake_case   ,    prng_seed=snake_case   ,    num_inference_steps=50   ,    jit=snake_case   ,    ).images
						assert images.shape == (jax.device_count(), 1, 768, 512, 3)

						UpperCamelCase__       =							images.reshape((images.shape[0] * images.shape[1],) + images.shape[-3:]  )
						UpperCamelCase__       =							images[0, 253:256, 253:256, -1]

						UpperCamelCase__       =							jnp.asarray(jax.device_get(image_slice.flatten()  )  )
						UpperCamelCase__       =							jnp.array(
						    [0.167969, 0.116699, 0.081543, 0.154297, 0.132812, 0.108887, 0.169922, 0.169922, 0.205078]  )
						print(F'''output_slice: {output_slice}'''  )
						assert jnp.abs(output_slice - expected_slice  ).max() < 1E-2







			def 					snake_case__					(				self  ):

						'''simple docstring'''


						UpperCamelCase__,   UpperCamelCase__       =							FlaxControlNetModel.from_pretrained(
						    "lllyasviel/sd-controlnet-openpose"   ,    from_pt=snake_case   ,    dtype=jnp.bfloataa  )
						UpperCamelCase__,   UpperCamelCase__       =							FlaxStableDiffusionControlNetPipeline.from_pretrained(
						    "runwayml/stable-diffusion-v1-5"   ,    controlnet=snake_case   ,    from_pt=snake_case   ,    dtype=jnp.bfloataa  )
						UpperCamelCase__       =							controlnet_params

						UpperCamelCase__       =							"Chef in the kitchen"
						UpperCamelCase__       =							jax.device_count()
						UpperCamelCase__       =							pipe.prepare_text_inputs([prompts] * num_samples  )

						UpperCamelCase__       =							load_image(
						    "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/pose.png"  )
						UpperCamelCase__       =							pipe.prepare_image_inputs([pose_image] * num_samples  )

						UpperCamelCase__       =							jax.random.PRNGKey(0  )
						UpperCamelCase__       =							jax.random.split(snake_case   ,    jax.device_count()  )

						UpperCamelCase__       =							replicate(snake_case  )
						UpperCamelCase__       =							shard(snake_case  )
						UpperCamelCase__       =							shard(snake_case  )

						UpperCamelCase__       =							pipe(
						    prompt_ids=snake_case   ,    image=snake_case   ,    params=snake_case   ,    prng_seed=snake_case   ,    num_inference_steps=50   ,    jit=snake_case   ,    ).images
						assert images.shape == (jax.device_count(), 1, 768, 512, 3)

						UpperCamelCase__       =							images.reshape((images.shape[0] * images.shape[1],) + images.shape[-3:]  )
						UpperCamelCase__       =							images[0, 253:256, 253:256, -1]

						UpperCamelCase__       =							jnp.asarray(jax.device_get(image_slice.flatten()  )  )
						UpperCamelCase__       =							jnp.array(
						    [[0.271484, 0.261719, 0.275391, 0.277344, 0.279297, 0.291016, 0.294922, 0.302734, 0.302734]]  )
						print(F'''output_slice: {output_slice}'''  )
						assert jnp.abs(output_slice - expected_slice  ).max() < 1E-2


