




"""simple docstring"""






import argparse
from collections import defaultdict

import yaml


lowercase__  		=		"""docs/source/en/_toctree.yml"""







def   _snake_case    (       lowercase__	):
				_lowerCamelCase  :    List[str]					=					defaultdict(lowercase__	)
				for doc in model_doc:
								counts[doc["local"]] += 1
				_lowerCamelCase  :    List[str]					=					[key for key, value in counts.items() if value > 1]

				_lowerCamelCase  :    List[Any]					=					[]
				for duplicate_key in duplicates:
								_lowerCamelCase  :    Any					=					list({doc['title'] for doc in model_doc if doc['local'] == duplicate_key}	)
								if len(lowercase__	) > 1:
												raise ValueError(
												    f'''{duplicate_key} is present several times in the documentation table of content at '''
												    '`docs/source/en/_toctree.yml` with different *Title* values. Choose one of those and remove the '
												    'others.'	)
								# Only add this once
								new_doc.append({'local': duplicate_key, 'title': titles[0]}	)

				# Add none duplicate-keys
				new_doc.extend([doc for doc in model_doc if counts[doc['local']] == 1]	)

				# Sort
				return sorted(lowercase__							,					key=lambda lowercase__	: s["title"].lower()	)







def   _snake_case    (       lowercase__=False	):
				with open(lowercase__							,					encoding='utf-8'	) as f:
								_lowerCamelCase  :    Union[str, Any]					=					yaml.safe_load(f.read()	)

				# Get to the API doc
				_lowerCamelCase  :    Dict					=					0
				while content[api_idx]["title"] != "API":
								api_idx += 1
				_lowerCamelCase  :    int					=					content[api_idx]['sections']

				# Then to the model doc
				_lowerCamelCase  :    Optional[int]					=					0
				while api_doc[model_idx]["title"] != "Models":
								model_idx += 1

				_lowerCamelCase  :    Tuple					=					api_doc[model_idx]['sections']

				_lowerCamelCase  :    List[Any]					=					[(idx, section) for idx, section in enumerate(lowercase__	) if 'sections' in section]
				_lowerCamelCase  :    List[Any]					=					False
				for idx, modality_doc in modalities_docs:
								_lowerCamelCase  :    Tuple					=					modality_doc['sections']
								_lowerCamelCase  :    List[str]					=					clean_model_doc_toc(lowercase__	)

								if old_modality_doc != new_modality_doc:
												_lowerCamelCase  :    Union[str, Any]					=					True
												if overwrite:
																_lowerCamelCase  :    List[str]					=					new_modality_doc

				if diff:
								if overwrite:
												_lowerCamelCase  :    List[Any]					=					model_doc
												_lowerCamelCase  :    int					=					api_doc
												with open(lowercase__							,					'w'							,					encoding='utf-8'	) as f:
																f.write(yaml.dump(lowercase__							,					allow_unicode=lowercase__	)	)
								else:
												raise ValueError(
												    'The model doc part of the table of content is not properly sorted, run `make style` to fix this.'	)


if __name__ == "__main__":
			lowercase__  		=		argparse.ArgumentParser()
			parser.add_argument("""--fix_and_overwrite""", action="""store_true""", help="""Whether to fix inconsistencies.""")
			lowercase__  		=		parser.parse_args()

			check_model_doc(args.fix_and_overwrite)





"""simple docstring"""






import unittest

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

from .test_pipelines_common import ANY


if is_vision_available():
			from PIL import Image
else:






			class lowerCAmelCase__			:






						'''simple docstring'''



						@staticmethod
						def       A_					(						*lowercase						,   **lowercase						):
										pass






@is_pipeline_test
@require_vision
class lowerCAmelCase__			(  unittest.TestCase		):






			'''simple docstring'''



			@require_torch
			def       A_					(						self						):
							_lowerCamelCase  :    int					=					pipeline(
							    model='hf-internal-testing/tiny-random-clip-zero-shot-image-classification'						,   )
							_lowerCamelCase  :    List[Any]					=					Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'						)
							_lowerCamelCase  :    List[str]					=					image_classifier(lowercase						,   candidate_labels=['a', 'b', 'c']						)

							# The floating scores are so close, we enter floating error approximation and the order is not guaranteed across
							# python and torch versions.
							self.assertIn(
							    nested_simplify(lowercase						)						,   [
							        [{'score': 0.3_33, 'label': 'a'}, {'score': 0.3_33, 'label': 'b'}, {'score': 0.3_33, 'label': 'c'}],
							        [{'score': 0.3_33, 'label': 'a'}, {'score': 0.3_33, 'label': 'c'}, {'score': 0.3_33, 'label': 'b'}],
							    ]						,   )

							_lowerCamelCase  :    Optional[Any]					=					image_classifier([image] * 5						,   candidate_labels=['A', 'B', 'C']						,   batch_size=2						)
							self.assertEqual(
							    nested_simplify(lowercase						)						,   [
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							    ]						,   )
			@require_tf
			def       A_					(						self						):
							_lowerCamelCase  :    Optional[Any]					=					pipeline(
							    model='hf-internal-testing/tiny-random-clip-zero-shot-image-classification'						,   framework='tf'						)
							_lowerCamelCase  :    Tuple					=					Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'						)
							_lowerCamelCase  :    Optional[int]					=					image_classifier(lowercase						,   candidate_labels=['a', 'b', 'c']						)

							self.assertEqual(
							    nested_simplify(lowercase						)						,   [{'score': 0.3_33, 'label': 'a'}, {'score': 0.3_33, 'label': 'b'}, {'score': 0.3_33, 'label': 'c'}]						,   )

							_lowerCamelCase  :    Optional[Any]					=					image_classifier([image] * 5						,   candidate_labels=['A', 'B', 'C']						,   batch_size=2						)
							self.assertEqual(
							    nested_simplify(lowercase						)						,   [
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							        [
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							            {'score': 0.3_33, 'label': ANY(lowercase						)},
							        ],
							    ]						,   )
			@slow
			@require_torch
			def       A_					(						self						):
							_lowerCamelCase  :    Tuple					=					pipeline(
							    task='zero-shot-image-classification'						,   model='openai/clip-vit-base-patch32'						,   )
							# This is an image of 2 cats with remotes and no planes
							_lowerCamelCase  :    Optional[Any]					=					Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'						)
							_lowerCamelCase  :    Optional[Any]					=					image_classifier(lowercase						,   candidate_labels=['cat', 'plane', 'remote']						)

							self.assertEqual(
							    nested_simplify(lowercase						)						,   [
							        {'score': 0.5_11, 'label': 'remote'},
							        {'score': 0.4_85, 'label': 'cat'},
							        {'score': 0.0_04, 'label': 'plane'},
							    ]						,   )

							_lowerCamelCase  :    Dict					=					image_classifier([image] * 5						,   candidate_labels=['cat', 'plane', 'remote']						,   batch_size=2						)
							self.assertEqual(
							    nested_simplify(lowercase						)						,   [
							        [
							            {'score': 0.5_11, 'label': 'remote'},
							            {'score': 0.4_85, 'label': 'cat'},
							            {'score': 0.0_04, 'label': 'plane'},
							        ],
							    ]
							    * 5						,   )






			@slow
			@require_tf
			def       A_					(						self						):
							_lowerCamelCase  :    List[str]					=					pipeline(
							    task='zero-shot-image-classification'						,   model='openai/clip-vit-base-patch32'						,   framework='tf'						)
							# This is an image of 2 cats with remotes and no planes
							_lowerCamelCase  :    List[str]					=					Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'						)
							_lowerCamelCase  :    Tuple					=					image_classifier(lowercase						,   candidate_labels=['cat', 'plane', 'remote']						)
							self.assertEqual(
							    nested_simplify(lowercase						)						,   [
							        {'score': 0.5_11, 'label': 'remote'},
							        {'score': 0.4_85, 'label': 'cat'},
							        {'score': 0.0_04, 'label': 'plane'},
							    ]						,   )

							_lowerCamelCase  :    Dict					=					image_classifier([image] * 5						,   candidate_labels=['cat', 'plane', 'remote']						,   batch_size=2						)
							self.assertEqual(
							    nested_simplify(lowercase						)						,   [
							        [
							            {'score': 0.5_11, 'label': 'remote'},
							            {'score': 0.4_85, 'label': 'cat'},
							            {'score': 0.0_04, 'label': 'plane'},
							        ],
							    ]
							    * 5						,   )