




'''simple docstring'''





import itertools
from dataclasses import dataclass
from typing import Optional

import pyarrow as pa

import datasets
from datasets.table import table_cast


lowercase__			=	datasets.utils.logging.get_logger(__name__)






@dataclass
class 						lowercase     (   datasets.BuilderConfig):
      __lowercase 		=  None






class 						lowercase     (   datasets.ArrowBasedBuilder):
      __lowercase 		=  ArrowConfig






      def    A__(self					)       ->   Optional[int]:
         return datasets.DatasetInfo(features=self.config.features					)






      def    A__(self ,  a__					)       ->   List[str]:
         if not self.config.data_files:
            raise ValueError(f"""At least one data file must be specified, but got data_files={self.config.data_files}"""					)
         SCREAMING_SNAKE_CASE__			:				Optional[Any]       						= dl_manager.download_and_extract(self.config.data_files					)
         if isinstance(a__ ,  (str, list, tuple)					):
            SCREAMING_SNAKE_CASE__			:				int       						= data_files
            if isinstance(a__ ,  a__					):
               SCREAMING_SNAKE_CASE__			:				Optional[int]       						= [files]
            # Use `dl_manager.iter_files` to skip hidden files in an extracted archive
            SCREAMING_SNAKE_CASE__			:				str       						= [dl_manager.iter_files(a__					) for file in files]
            return [datasets.SplitGenerator(name=datasets.Split.TRAIN ,  gen_kwargs={'''files''': files}					)]
         SCREAMING_SNAKE_CASE__			:				Optional[int]       						= []
         for split_name, files in data_files.items():
            if isinstance(a__ ,  a__					):
               SCREAMING_SNAKE_CASE__			:				Optional[Any]       						= [files]
            # Use `dl_manager.iter_files` to skip hidden files in an extracted archive
            SCREAMING_SNAKE_CASE__			:				Optional[Any]       						= [dl_manager.iter_files(a__					) for file in files]
            # Infer features is they are stoed in the arrow schema
            if self.info.features is None:
               for file in itertools.chain.from_iterable(a__					):
                  with open(a__ ,  '''rb'''					) as f:
                     SCREAMING_SNAKE_CASE__			:				str       						= datasets.Features.from_arrow_schema(pa.ipc.open_stream(a__					).schema					)
                  break
            splits.append(datasets.SplitGenerator(name=a__ ,  gen_kwargs={'''files''': files}					)					)
         return splits






      def    A__(self ,  a__					)       ->   pa.Table:
         if self.info.features is not None:
            # more expensive cast to support nested features with keys in a different order
            # allows str <-> int/float or str to Audio for example
            SCREAMING_SNAKE_CASE__			:				List[Any]       						= table_cast(a__ ,  self.info.features.arrow_schema					)
         return pa_table






      def    A__(self ,  a__					)       ->   Tuple:
         for file_idx, file in enumerate(itertools.chain.from_iterable(a__					)					):
            with open(a__ ,  '''rb'''					) as f:
               try:
                  for batch_idx, record_batch in enumerate(pa.ipc.open_stream(a__					)					):
                     SCREAMING_SNAKE_CASE__			:				List[str]       						= pa.Table.from_batches([record_batch]					)
                     # Uncomment for debugging (will print the Arrow table size and elements)
                     # logger.warning(f"pa_table: {pa_table} num rows: {pa_table.num_rows}")
                     # logger.warning('\n'.join(str(pa_table.slice(i, 1).to_pydict()) for i in range(pa_table.num_rows)))
                     yield f"""{file_idx}_{batch_idx}""", self._cast_table(a__					)
               except ValueError as e:
                  logger.error(f"""Failed to read file '{file}' with error {type(a__					)}: {e}"""					)
                  raise







'''simple docstring'''





import unittest

import requests

from transformers import MODEL_FOR_VISION_2_SEQ_MAPPING, TF_MODEL_FOR_VISION_2_SEQ_MAPPING, is_vision_available
from transformers.pipelines import pipeline
from transformers.testing_utils import (
    is_pipeline_test,
    is_torch_available,
    require_tf,
    require_torch,
    require_vision,
    slow,
)

from .test_pipelines_common import ANY


if is_torch_available():
       from transformers.pytorch_utils import is_torch_greater_or_equal_than_1_11
else:
       lowercase__			=	False


if is_vision_available():
       from PIL import Image
else:






       class 						lowercase     :






             @staticmethod
             def    A__(*a__ ,  **a__					)       ->   Optional[Any]:
                pass






@is_pipeline_test
@require_vision
class 						lowercase     (   unittest.TestCase):
      __lowercase 		=  MODEL_FOR_VISION_2_SEQ_MAPPING
      __lowercase 		=  TF_MODEL_FOR_VISION_2_SEQ_MAPPING






      def    A__(self ,  a__ ,  a__ ,  a__					)       ->   Optional[Any]:
         SCREAMING_SNAKE_CASE__			:				Tuple       						= pipeline('''image-to-text''' ,  model=a__ ,  tokenizer=a__ ,  image_processor=a__					)
         SCREAMING_SNAKE_CASE__			:				List[Any]       						= [
             Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''					),
             '''./tests/fixtures/tests_samples/COCO/000000039769.png''',
         ]
         return pipe, examples






      def    A__(self ,  a__ ,  a__					)       ->   Any:
         SCREAMING_SNAKE_CASE__			:				Tuple       						= pipe(a__					)
         self.assertEqual(
             a__ ,  [
                 [{'''generated_text''': ANY(a__					)}],
                 [{'''generated_text''': ANY(a__					)}],
             ] ,  )






      @require_tf
      def    A__(self					)       ->   List[str]:
         SCREAMING_SNAKE_CASE__			:				List[str]       						= pipeline('''image-to-text''' ,  model='''hf-internal-testing/tiny-random-vit-gpt2''' ,  framework='''tf'''					)
         SCREAMING_SNAKE_CASE__			:				Union[str, Any]       						= '''./tests/fixtures/tests_samples/COCO/000000039769.png'''

         SCREAMING_SNAKE_CASE__			:				str       						= pipe(a__					)
         self.assertEqual(
             a__ ,  [
                 {
                     '''generated_text''': '''growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'''
                 },
             ] ,  )

         SCREAMING_SNAKE_CASE__			:				Optional[Any]       						= pipe([image, image]					)
         self.assertEqual(
             a__ ,  [
                 [
                     {
                         '''generated_text''': '''growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'''
                     }
                 ],
                 [
                     {
                         '''generated_text''': '''growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'''
                     }
                 ],
             ] ,  )

         SCREAMING_SNAKE_CASE__			:				Union[str, Any]       						= pipe(a__ ,  max_new_tokens=1					)
         self.assertEqual(
             a__ ,  [{'''generated_text''': '''growth'''}] ,  )






      @require_torch
      def    A__(self					)       ->   Optional[Any]:
         SCREAMING_SNAKE_CASE__			:				Optional[int]       						= pipeline('''image-to-text''' ,  model='''hf-internal-testing/tiny-random-vit-gpt2'''					)
         SCREAMING_SNAKE_CASE__			:				Any       						= '''./tests/fixtures/tests_samples/COCO/000000039769.png'''

         SCREAMING_SNAKE_CASE__			:				Optional[Any]       						= pipe(a__					)
         self.assertEqual(
             a__ ,  [
                 {
                     '''generated_text''': '''growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'''
                 },
             ] ,  )

         SCREAMING_SNAKE_CASE__			:				Any       						= pipe([image, image]					)
         self.assertEqual(
             a__ ,  [
                 [
                     {
                         '''generated_text''': '''growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'''
                     }
                 ],
                 [
                     {
                         '''generated_text''': '''growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'''
                     }
                 ],
             ] ,  )






      @require_torch
      def    A__(self					)       ->   Any:
         SCREAMING_SNAKE_CASE__			:				Union[str, Any]       						= pipeline('''image-to-text''' ,  model='''hf-internal-testing/tiny-random-BlipForConditionalGeneration'''					)
         SCREAMING_SNAKE_CASE__			:				int       						= '''./tests/fixtures/tests_samples/COCO/000000039769.png'''
         SCREAMING_SNAKE_CASE__			:				Tuple       						= '''a photo of'''

         SCREAMING_SNAKE_CASE__			:				List[Any]       						= pipe(a__ ,  prompt=a__					)
         self.assertTrue(outputs[0]['''generated_text'''].startswith(a__					)					)






      @slow
      @require_torch
      def    A__(self					)       ->   List[Any]:
         SCREAMING_SNAKE_CASE__			:				Tuple       						= pipeline('''image-to-text''' ,  model='''ydshieh/vit-gpt2-coco-en'''					)
         SCREAMING_SNAKE_CASE__			:				List[str]       						= '''./tests/fixtures/tests_samples/COCO/000000039769.png'''

         SCREAMING_SNAKE_CASE__			:				List[Any]       						= pipe(a__					)
         self.assertEqual(a__ ,  [{'''generated_text''': '''a cat laying on a blanket next to a cat laying on a bed '''}]					)

         SCREAMING_SNAKE_CASE__			:				Tuple       						= pipe([image, image]					)
         self.assertEqual(
             a__ ,  [
                 [{'''generated_text''': '''a cat laying on a blanket next to a cat laying on a bed '''}],
                 [{'''generated_text''': '''a cat laying on a blanket next to a cat laying on a bed '''}],
             ] ,  )






      @slow
      @require_torch
      def    A__(self					)       ->   Tuple:
         SCREAMING_SNAKE_CASE__			:				Dict       						= pipeline('''image-to-text''' ,  model='''Salesforce/blip-image-captioning-base'''					)
         SCREAMING_SNAKE_CASE__			:				Optional[Any]       						= '''https://huggingface.co/datasets/sayakpaul/sample-datasets/resolve/main/pokemon.png'''
         SCREAMING_SNAKE_CASE__			:				Optional[int]       						= Image.open(requests.get(a__ ,  stream=a__					).raw					)

         SCREAMING_SNAKE_CASE__			:				Optional[int]       						= pipe(a__					)
         self.assertEqual(a__ ,  [{'''generated_text''': '''a pink pokemon pokemon with a blue shirt and a blue shirt'''}]					)






      @slow
      @require_torch
      def    A__(self					)       ->   int:
         SCREAMING_SNAKE_CASE__			:				Optional[Any]       						= pipeline('''image-to-text''' ,  model='''microsoft/git-base-coco'''					)
         SCREAMING_SNAKE_CASE__			:				str       						= '''https://huggingface.co/datasets/sayakpaul/sample-datasets/resolve/main/pokemon.png'''
         SCREAMING_SNAKE_CASE__			:				List[str]       						= Image.open(requests.get(a__ ,  stream=a__					).raw					)

         SCREAMING_SNAKE_CASE__			:				str       						= pipe(a__					)
         self.assertEqual(a__ ,  [{'''generated_text''': '''a cartoon of a purple character.'''}]					)






      @slow
      @require_torch
      def    A__(self					)       ->   Dict:
         SCREAMING_SNAKE_CASE__			:				str       						= pipeline('''image-to-text''' ,  model='''Salesforce/blip-image-captioning-base'''					)
         SCREAMING_SNAKE_CASE__			:				List[Any]       						= '''https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg'''
         SCREAMING_SNAKE_CASE__			:				Optional[int]       						= Image.open(requests.get(a__ ,  stream=a__					).raw					)

         SCREAMING_SNAKE_CASE__			:				Union[str, Any]       						= '''a photography of'''

         SCREAMING_SNAKE_CASE__			:				Union[str, Any]       						= pipe(a__ ,  prompt=a__					)
         self.assertEqual(a__ ,  [{'''generated_text''': '''a photography of a volcano'''}]					)

         with self.assertRaises(a__					):
            SCREAMING_SNAKE_CASE__			:				Any       						= pipe([image, image] ,  prompt=[prompt, prompt]					)






      @slow
      @require_torch
      def    A__(self					)       ->   Dict:
         SCREAMING_SNAKE_CASE__			:				Union[str, Any]       						= pipeline('''image-to-text''' ,  model='''microsoft/git-base-coco'''					)
         SCREAMING_SNAKE_CASE__			:				Optional[int]       						= '''https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg'''
         SCREAMING_SNAKE_CASE__			:				Dict       						= Image.open(requests.get(a__ ,  stream=a__					).raw					)

         SCREAMING_SNAKE_CASE__			:				Optional[int]       						= '''a photo of a'''

         SCREAMING_SNAKE_CASE__			:				str       						= pipe(a__ ,  prompt=a__					)
         self.assertEqual(a__ ,  [{'''generated_text''': '''a photo of a tent with a tent and a tent in the background.'''}]					)

         with self.assertRaises(a__					):
            SCREAMING_SNAKE_CASE__			:				Dict       						= pipe([image, image] ,  prompt=[prompt, prompt]					)






      @unittest.skipIf(
          not is_torch_greater_or_equal_than_1_11 ,  reason='''`Pix2StructImageProcessor` requires `torch>=1.11.0`.'''					)
      @slow
      @require_torch
      def    A__(self					)       ->   Union[str, Any]:
         SCREAMING_SNAKE_CASE__			:				List[str]       						= pipeline('''image-to-text''' ,  model='''google/pix2struct-ai2d-base'''					)
         SCREAMING_SNAKE_CASE__			:				int       						= '''https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg'''
         SCREAMING_SNAKE_CASE__			:				Any       						= Image.open(requests.get(a__ ,  stream=a__					).raw					)

         SCREAMING_SNAKE_CASE__			:				int       						= '''What does the label 15 represent? (1) lava (2) core (3) tunnel (4) ash cloud'''

         SCREAMING_SNAKE_CASE__			:				Union[str, Any]       						= pipe(a__ ,  prompt=a__					)
         self.assertEqual(a__ ,  [{'''generated_text''': '''ash cloud'''}]					)

         with self.assertRaises(a__					):
            SCREAMING_SNAKE_CASE__			:				Any       						= pipe([image, image] ,  prompt=[prompt, prompt]					)






      @slow
      @require_tf
      def    A__(self					)       ->   str:
         SCREAMING_SNAKE_CASE__			:				Optional[int]       						= pipeline('''image-to-text''' ,  model='''ydshieh/vit-gpt2-coco-en''' ,  framework='''tf'''					)
         SCREAMING_SNAKE_CASE__			:				Optional[Any]       						= '''./tests/fixtures/tests_samples/COCO/000000039769.png'''

         SCREAMING_SNAKE_CASE__			:				Dict       						= pipe(a__					)
         self.assertEqual(a__ ,  [{'''generated_text''': '''a cat laying on a blanket next to a cat laying on a bed '''}]					)

         SCREAMING_SNAKE_CASE__			:				Union[str, Any]       						= pipe([image, image]					)
         self.assertEqual(
             a__ ,  [
                 [{'''generated_text''': '''a cat laying on a blanket next to a cat laying on a bed '''}],
                 [{'''generated_text''': '''a cat laying on a blanket next to a cat laying on a bed '''}],
             ] ,  )

