



from dataclasses import dataclass
from typing import Optional

import torch
from torch import nn

from ..configuration_utils import ConfigMixin, register_to_config
from ..utils import BaseOutput
from .attention import BasicTransformerBlock
from .modeling_utils import ModelMixin

@dataclass
class  __snake_case      (   SCREAMING_SNAKE_CASE):







							'''simple docstring'''






							UpperCamelCase__				:      torch.FloatTensor




class  __snake_case      (   SCREAMING_SNAKE_CASE			,SCREAMING_SNAKE_CASE):







							'''simple docstring'''






							@register_to_config
							def __init__(							self  ,  a_ = 16  ,  a_ = 88  ,  a_ = None  ,  a_ = None  ,  a_ = 1  ,  a_ = 0.0  ,  a_ = 32  ,  a_ = None  ,  a_ = False  ,  a_ = None  ,  a_ = "geglu"  ,  a_ = True  ,  a_ = True  ,  ):
											super().__init__()
											a__				      =		num_attention_heads
											a__				      =		attention_head_dim
											a__				      =		num_attention_heads * attention_head_dim

											a__				      =		in_channels

											a__				      =		torch.nn.GroupNorm(num_groups=a_  ,  num_channels=a_  ,  eps=1E-6  ,  affine=a_		)
											a__				      =		nn.Linear(a_  ,  a_		)

											# 3. Define transformers blocks
											a__				      =		nn.ModuleList(
											    [
											        BasicTransformerBlock(
											            a_  ,  a_  ,  a_  ,  dropout=a_  ,  cross_attention_dim=a_  ,  activation_fn=a_  ,  attention_bias=a_  ,  double_self_attention=a_  ,  norm_elementwise_affine=a_  ,  )
											        for d in range(a_		)
											    ]		)

											a__				      =		nn.Linear(a_  ,  a_		)







							def _a      (							self  ,  a_  ,  a_=None  ,  a_=None  ,  a_=None  ,  a_=1  ,  a_=None  ,  a_ = True  ,  ):
											a__      ,			a__      ,			a__      ,			a__				      =		hidden_states.shape
											a__				      =		batch_frames // num_frames

											a__				      =		hidden_states

											a__				      =		hidden_states[None, :].reshape(a_  ,  a_  ,  a_  ,  a_  ,  a_		)
											a__				      =		hidden_states.permute(0  ,  2  ,  1  ,  3  ,  4		)

											a__				      =		self.norm(a_		)
											a__				      =		hidden_states.permute(0  ,  3  ,  4  ,  2  ,  1		).reshape(batch_size * height * width  ,  a_  ,  a_		)

											a__				      =		self.proj_in(a_		)

											# 2. Blocks
											for block in self.transformer_blocks:
															a__				      =		block(
															    a_  ,  encoder_hidden_states=a_  ,  timestep=a_  ,  cross_attention_kwargs=a_  ,  class_labels=a_  ,  )

											# 3. Output
											a__				      =		self.proj_out(a_		)
											a__				      =		(
											    hidden_states[None, None, :]
											    .reshape(a_  ,  a_  ,  a_  ,  a_  ,  a_		)
											    .permute(0  ,  3  ,  4  ,  1  ,  2		)
											    .contiguous()
											)
											a__				      =		hidden_states.reshape(a_  ,  a_  ,  a_  ,  a_		)

											a__				      =		hidden_states + residual

											if not return_dict:
															return (output,)

											return TransformerTemporalModelOutput(sample=a_		)






import unittest

from transformers import (
    MODEL_FOR_OBJECT_DETECTION_MAPPING,
    AutoFeatureExtractor,
    AutoModelForObjectDetection,
    ObjectDetectionPipeline,
    is_vision_available,
    pipeline,
)
from transformers.testing_utils import (
    is_pipeline_test,
    nested_simplify,
    require_pytesseract,
    require_tf,
    require_timm,
    require_torch,
    require_vision,
    slow,
)

from .test_pipelines_common import ANY


if is_vision_available():
	from PIL import Image
else:

	class  __snake_case      :







								'''simple docstring'''






								@staticmethod
								def _a      (							*a_  ,  **a_		):
												pass

@is_pipeline_test
@require_vision
@require_timm
@require_torch
class  __snake_case      (   unittest.TestCase):







							'''simple docstring'''






							UpperCamelCase__				:      Dict         =					MODEL_FOR_OBJECT_DETECTION_MAPPING


							def _a      (							self  ,  a_  ,  a_  ,  a_		):
											a__				      =		ObjectDetectionPipeline(model=a_  ,  image_processor=a_		)
											return object_detector, ["./tests/fixtures/tests_samples/COCO/000000039769.png"]


							def _a      (							self  ,  a_  ,  a_		):
											a__				      =		object_detector("""./tests/fixtures/tests_samples/COCO/000000039769.png"""  ,  threshold=0.0		)

											self.assertGreater(len(a_		)  ,  0		)
											for detected_object in outputs:
															self.assertEqual(
															    a_  ,  {
															        """score""": ANY(a_		),
															        """label""": ANY(a_		),
															        """box""": {"""xmin""": ANY(a_		), """ymin""": ANY(a_		), """xmax""": ANY(a_		), """ymax""": ANY(a_		)},
															    }  ,  )

											import datasets

											a__				      =		datasets.load_dataset("""hf-internal-testing/fixtures_image_utils"""  ,  """image"""  ,  split="""test"""		)

											a__				      =		[
											    Image.open("""./tests/fixtures/tests_samples/COCO/000000039769.png"""		),
											    """http://images.cocodataset.org/val2017/000000039769.jpg""",
											    # RGBA
											    dataset[0]["""file"""],
											    # LA
											    dataset[1]["""file"""],
											    # L
											    dataset[2]["""file"""],
											]
											a__				      =		object_detector(a_  ,  threshold=0.0		)

											self.assertEqual(len(a_		)  ,  len(a_		)		)
											for outputs in batch_outputs:
															self.assertGreater(len(a_		)  ,  0		)
															for detected_object in outputs:
																			self.assertEqual(
																			    a_  ,  {
																			        """score""": ANY(a_		),
																			        """label""": ANY(a_		),
																			        """box""": {"""xmin""": ANY(a_		), """ymin""": ANY(a_		), """xmax""": ANY(a_		), """ymax""": ANY(a_		)},
																			    }  ,  )


							@require_tf
							@unittest.skip("""Object detection not implemented in TF"""		)
							def _a      (							self		):
											pass


							@require_torch
							def _a      (							self		):
											a__				      =		"""hf-internal-testing/tiny-detr-mobilenetsv3"""

											a__				      =		AutoModelForObjectDetection.from_pretrained(a_		)
											a__				      =		AutoFeatureExtractor.from_pretrained(a_		)
											a__				      =		ObjectDetectionPipeline(model=a_  ,  feature_extractor=a_		)

											a__				      =		object_detector("""http://images.cocodataset.org/val2017/000000039769.jpg"""  ,  threshold=0.0		)

											self.assertEqual(
											    nested_simplify(a_  ,  decimals=4		)  ,  [
											        {"""score""": 0.3_376, """label""": """LABEL_0""", """box""": {"""xmin""": 159, """ymin""": 120, """xmax""": 480, """ymax""": 359}},
											        {"""score""": 0.3_376, """label""": """LABEL_0""", """box""": {"""xmin""": 159, """ymin""": 120, """xmax""": 480, """ymax""": 359}},
											    ]  ,  )

											a__				      =		object_detector(
											    [
											        """http://images.cocodataset.org/val2017/000000039769.jpg""",
											        """http://images.cocodataset.org/val2017/000000039769.jpg""",
											    ]  ,  threshold=0.0  ,  )

											self.assertEqual(
											    nested_simplify(a_  ,  decimals=4		)  ,  [
											        [
											            {"""score""": 0.3_376, """label""": """LABEL_0""", """box""": {"""xmin""": 159, """ymin""": 120, """xmax""": 480, """ymax""": 359}},
											            {"""score""": 0.3_376, """label""": """LABEL_0""", """box""": {"""xmin""": 159, """ymin""": 120, """xmax""": 480, """ymax""": 359}},
											        ],
											        [
											            {"""score""": 0.3_376, """label""": """LABEL_0""", """box""": {"""xmin""": 159, """ymin""": 120, """xmax""": 480, """ymax""": 359}},
											            {"""score""": 0.3_376, """label""": """LABEL_0""", """box""": {"""xmin""": 159, """ymin""": 120, """xmax""": 480, """ymax""": 359}},
											        ],
											    ]  ,  )


							@require_torch
							@slow
							def _a      (							self		):
											a__				      =		"""facebook/detr-resnet-50"""

											a__				      =		AutoModelForObjectDetection.from_pretrained(a_		)
											a__				      =		AutoFeatureExtractor.from_pretrained(a_		)
											a__				      =		ObjectDetectionPipeline(model=a_  ,  feature_extractor=a_		)

											a__				      =		object_detector("""http://images.cocodataset.org/val2017/000000039769.jpg"""		)
											self.assertEqual(
											    nested_simplify(a_  ,  decimals=4		)  ,  [
											        {"""score""": 0.9_982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 175, """ymax""": 117}},
											        {"""score""": 0.9_960, """label""": """remote""", """box""": {"""xmin""": 333, """ymin""": 72, """xmax""": 368, """ymax""": 187}},
											        {"""score""": 0.9_955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 639, """ymax""": 473}},
											        {"""score""": 0.9_988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 314, """ymax""": 470}},
											        {"""score""": 0.9_987, """label""": """cat""", """box""": {"""xmin""": 345, """ymin""": 23, """xmax""": 640, """ymax""": 368}},
											    ]  ,  )

											a__				      =		object_detector(
											    [
											        """http://images.cocodataset.org/val2017/000000039769.jpg""",
											        """http://images.cocodataset.org/val2017/000000039769.jpg""",
											    ]		)
											self.assertEqual(
											    nested_simplify(a_  ,  decimals=4		)  ,  [
											        [
											            {"""score""": 0.9_982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 175, """ymax""": 117}},
											            {"""score""": 0.9_960, """label""": """remote""", """box""": {"""xmin""": 333, """ymin""": 72, """xmax""": 368, """ymax""": 187}},
											            {"""score""": 0.9_955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 639, """ymax""": 473}},
											            {"""score""": 0.9_988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 314, """ymax""": 470}},
											            {"""score""": 0.9_987, """label""": """cat""", """box""": {"""xmin""": 345, """ymin""": 23, """xmax""": 640, """ymax""": 368}},
											        ],
											        [
											            {"""score""": 0.9_982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 175, """ymax""": 117}},
											            {"""score""": 0.9_960, """label""": """remote""", """box""": {"""xmin""": 333, """ymin""": 72, """xmax""": 368, """ymax""": 187}},
											            {"""score""": 0.9_955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 639, """ymax""": 473}},
											            {"""score""": 0.9_988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 314, """ymax""": 470}},
											            {"""score""": 0.9_987, """label""": """cat""", """box""": {"""xmin""": 345, """ymin""": 23, """xmax""": 640, """ymax""": 368}},
											        ],
											    ]  ,  )


							@require_torch
							@slow
							def _a      (							self		):
											a__				      =		"""facebook/detr-resnet-50"""

											a__				      =		pipeline("""object-detection"""  ,  model=a_		)

											a__				      =		object_detector("""http://images.cocodataset.org/val2017/000000039769.jpg"""		)
											self.assertEqual(
											    nested_simplify(a_  ,  decimals=4		)  ,  [
											        {"""score""": 0.9_982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 175, """ymax""": 117}},
											        {"""score""": 0.9_960, """label""": """remote""", """box""": {"""xmin""": 333, """ymin""": 72, """xmax""": 368, """ymax""": 187}},
											        {"""score""": 0.9_955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 639, """ymax""": 473}},
											        {"""score""": 0.9_988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 314, """ymax""": 470}},
											        {"""score""": 0.9_987, """label""": """cat""", """box""": {"""xmin""": 345, """ymin""": 23, """xmax""": 640, """ymax""": 368}},
											    ]  ,  )

											a__				      =		object_detector(
											    [
											        """http://images.cocodataset.org/val2017/000000039769.jpg""",
											        """http://images.cocodataset.org/val2017/000000039769.jpg""",
											    ]		)
											self.assertEqual(
											    nested_simplify(a_  ,  decimals=4		)  ,  [
											        [
											            {"""score""": 0.9_982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 175, """ymax""": 117}},
											            {"""score""": 0.9_960, """label""": """remote""", """box""": {"""xmin""": 333, """ymin""": 72, """xmax""": 368, """ymax""": 187}},
											            {"""score""": 0.9_955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 639, """ymax""": 473}},
											            {"""score""": 0.9_988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 314, """ymax""": 470}},
											            {"""score""": 0.9_987, """label""": """cat""", """box""": {"""xmin""": 345, """ymin""": 23, """xmax""": 640, """ymax""": 368}},
											        ],
											        [
											            {"""score""": 0.9_982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 175, """ymax""": 117}},
											            {"""score""": 0.9_960, """label""": """remote""", """box""": {"""xmin""": 333, """ymin""": 72, """xmax""": 368, """ymax""": 187}},
											            {"""score""": 0.9_955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 639, """ymax""": 473}},
											            {"""score""": 0.9_988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 314, """ymax""": 470}},
											            {"""score""": 0.9_987, """label""": """cat""", """box""": {"""xmin""": 345, """ymin""": 23, """xmax""": 640, """ymax""": 368}},
											        ],
											    ]  ,  )


							@require_torch
							@slow
							def _a      (							self		):
											a__				      =		0.9_985
											a__				      =		"""facebook/detr-resnet-50"""

											a__				      =		pipeline("""object-detection"""  ,  model=a_		)

											a__				      =		object_detector("""http://images.cocodataset.org/val2017/000000039769.jpg"""  ,  threshold=a_		)
											self.assertEqual(
											    nested_simplify(a_  ,  decimals=4		)  ,  [
											        {"""score""": 0.9_988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 314, """ymax""": 470}},
											        {"""score""": 0.9_987, """label""": """cat""", """box""": {"""xmin""": 345, """ymin""": 23, """xmax""": 640, """ymax""": 368}},
											    ]  ,  )







							@require_torch
							@require_pytesseract
							@slow
							def _a      (							self		):
											a__				      =		"""Narsil/layoutlmv3-finetuned-funsd"""
											a__				      =		0.9_993

											a__				      =		pipeline("""object-detection"""  ,  model=a_  ,  threshold=a_		)

											a__				      =		object_detector(
											    """https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png"""		)
											self.assertEqual(
											    nested_simplify(a_  ,  decimals=4		)  ,  [
											        {"""score""": 0.9_993, """label""": """I-ANSWER""", """box""": {"""xmin""": 294, """ymin""": 254, """xmax""": 343, """ymax""": 264}},
											        {"""score""": 0.9_993, """label""": """I-ANSWER""", """box""": {"""xmin""": 294, """ymin""": 254, """xmax""": 343, """ymax""": 264}},
											    ]  ,  )

