



"""simple docstring"""
from math import pi, sqrt, tan


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase							) ->						str:







  '''simple docstring'''


  if side_length < 0:
    raise ValueError("""surface_area_cube() only accepts non-negative values"""							)
  return 6 * side_length**2


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase ,  __lowerCAmelCase							) ->						List[str]:







  '''simple docstring'''


  if length < 0 or breadth < 0 or height < 0:
    raise ValueError("""surface_area_cuboid() only accepts non-negative values"""							)
  return 2 * ((length * breadth) + (breadth * height) + (length * height))


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase							) ->						Optional[Any]:







  '''simple docstring'''


  if radius < 0:
    raise ValueError("""surface_area_sphere() only accepts non-negative values"""							)
  return 4 * pi * radius**2


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase							) ->						Union[str, Any]:







  '''simple docstring'''


  if radius < 0:
    raise ValueError("""surface_area_hemisphere() only accepts non-negative values"""							)
  return 3 * pi * radius**2


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase							) ->						Optional[Any]:







  '''simple docstring'''


  if radius < 0 or height < 0:
    raise ValueError("""surface_area_cone() only accepts non-negative values"""							)
  return pi * radius * (radius + (height**2 + radius**2) ** 0.5)


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase ,  __lowerCAmelCase							) ->						Any:







  '''simple docstring'''


  if radius_a < 0 or radius_a < 0 or height < 0:
    raise ValueError(
        """surface_area_conical_frustum() only accepts non-negative values"""							)
  lowercase_								= (height**2 + (radius_a - radius_a) ** 2) ** 0.5
  return pi * ((slant_height * (radius_a + radius_a)) + radius_a**2 + radius_a**2)


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase							) ->						Optional[Any]:







  '''simple docstring'''


  if radius < 0 or height < 0:
    raise ValueError("""surface_area_cylinder() only accepts non-negative values"""							)
  return 2 * pi * radius * (height + radius)


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase							) ->						Tuple:







  '''simple docstring'''


  if torus_radius < 0 or tube_radius < 0:
    raise ValueError("""surface_area_torus() only accepts non-negative values"""							)
  if torus_radius < tube_radius:
    raise ValueError(
        """surface_area_torus() does not support spindle or self intersecting tori"""							)
  return 4 * pow(A_ ,  2							) * torus_radius * tube_radius


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase							) ->						Dict:







  '''simple docstring'''


  if length < 0 or width < 0:
    raise ValueError("""area_rectangle() only accepts non-negative values"""							)
  return length * width


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase							) ->						Optional[Any]:







  '''simple docstring'''


  if side_length < 0:
    raise ValueError("""area_square() only accepts non-negative values"""							)
  return side_length**2


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase							) ->						Dict:







  '''simple docstring'''


  if base < 0 or height < 0:
    raise ValueError("""area_triangle() only accepts non-negative values"""							)
  return (base * height) / 2


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase ,  __lowerCAmelCase							) ->						List[str]:







  '''simple docstring'''


  if sidea < 0 or sidea < 0 or sidea < 0:
    raise ValueError("""area_triangle_three_sides() only accepts non-negative values"""							)
  elif sidea + sidea < sidea or sidea + sidea < sidea or sidea + sidea < sidea:
    raise ValueError("""Given three sides do not form a triangle"""							)
  lowercase_								= (sidea + sidea + sidea) / 2
  lowercase_								= sqrt(
      semi_perimeter
      * (semi_perimeter - sidea)
      * (semi_perimeter - sidea)
      * (semi_perimeter - sidea)							)
  return area


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase							) ->						Optional[Any]:







  '''simple docstring'''


  if base < 0 or height < 0:
    raise ValueError("""area_parallelogram() only accepts non-negative values"""							)
  return base * height


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase ,  __lowerCAmelCase							) ->						Tuple:







  '''simple docstring'''


  if basea < 0 or basea < 0 or height < 0:
    raise ValueError("""area_trapezium() only accepts non-negative values"""							)
  return 1 / 2 * (basea + basea) * height


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase							) ->						List[str]:







  '''simple docstring'''


  if radius < 0:
    raise ValueError("""area_circle() only accepts non-negative values"""							)
  return pi * radius**2


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase							) ->						Union[str, Any]:







  '''simple docstring'''


  if radius_x < 0 or radius_y < 0:
    raise ValueError("""area_ellipse() only accepts non-negative values"""							)
  return pi * radius_x * radius_y


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase							) ->						Any:







  '''simple docstring'''


  if diagonal_a < 0 or diagonal_a < 0:
    raise ValueError("""area_rhombus() only accepts non-negative values"""							)
  return 1 / 2 * diagonal_a * diagonal_a


def 			_SCREAMING_SNAKE_CASE						(__lowerCAmelCase ,  __lowerCAmelCase							) ->						Optional[int]:







  '''simple docstring'''


  if not isinstance(A_ ,  A_							) or sides < 3:
    raise ValueError(
        """area_reg_polygon() only accepts integers greater than or \
equal to three as number of sides"""							)
  elif length < 0:
    raise ValueError(
        """area_reg_polygon() only accepts non-negative values as \
length of a side"""							)
  return (sides * length**2) / (4 * tan(pi / sides							))
  return (sides * length**2) / (4 * tan(pi / sides							))


if __name__ == "__main__":
       import doctest

       doctest.testmod(verbose=True)  # verbose so we can see methods missing tests

       print("[DEMO] Areas of various geometric shapes: \n")
       print(F"Rectangle: {area_rectangle(10, 20) = }")
       print(F"Square: {area_square(10) = }")
       print(F"Triangle: {area_triangle(10, 10) = }")
       print(F"Triangle: {area_triangle_three_sides(5, 12, 13) = }")
       print(F"Parallelogram: {area_parallelogram(10, 20) = }")
       print(F"Rhombus: {area_rhombus(10, 20) = }")
       print(F"Trapezium: {area_trapezium(10, 20, 30) = }")
       print(F"Circle: {area_circle(20) = }")
       print(F"Ellipse: {area_ellipse(10, 20) = }")
       print("\nSurface Areas of various geometric shapes: \n")
       print(F"Cube: {surface_area_cube(20) = }")
       print(F"Cuboid: {surface_area_cuboid(10, 20, 30) = }")
       print(F"Sphere: {surface_area_sphere(20) = }")
       print(F"Hemisphere: {surface_area_hemisphere(20) = }")
       print(F"Cone: {surface_area_cone(10, 20) = }")
       print(F"Conical Frustum: {surface_area_conical_frustum(10, 20, 30) = }")
       print(F"Cylinder: {surface_area_cylinder(10, 20) = }")
       print(F"Torus: {surface_area_torus(20, 10) = }")
       print(F"Equilateral Triangle: {area_reg_polygon(3, 10) = }")
       print(F"Square: {area_reg_polygon(4, 10) = }")
       print(F"Reqular Pentagon: {area_reg_polygon(5, 10) = }")










"""simple docstring"""
import unittest

from transformers import MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING, is_vision_available, 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    SCREAMING_SNAKE_CASE__ :

           @staticmethod
           def 					_UpperCAmelCase	(				*lowerCAmelCase_			:				Tuple ,  **lowerCAmelCase_			:				Tuple):







             """simple docstring"""







             pass


@is_pipeline_test
@require_vision
@require_torch
class    SCREAMING_SNAKE_CASE__ (							unittest.TestCase   ):
    lowercase__      =   MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING

    def 					_UpperCAmelCase	(				self			:				Optional[Any] ,  lowerCAmelCase_			:				int ,  lowerCAmelCase_			:				int ,  lowerCAmelCase_			:				List[Any]):







      """simple docstring"""







      lowercase_								= pipeline(
          """zero-shot-object-detection""" ,  model="""hf-internal-testing/tiny-random-owlvit-object-detection""")

      lowercase_								= [
          {
              """image""": """./tests/fixtures/tests_samples/COCO/000000039769.png""",
              """candidate_labels""": ["""cat""", """remote""", """couch"""],
          }
      ]
      return object_detector, examples

    def 					_UpperCAmelCase	(				self			:				Optional[Any] ,  lowerCAmelCase_			:				int ,  lowerCAmelCase_			:				Optional[Any]):







      """simple docstring"""







      lowercase_								= object_detector(examples[0] ,  threshold=0.0)

      lowercase_								= len(lowerCAmelCase_)
      self.assertGreater(lowerCAmelCase_ ,  0)
      self.assertEqual(
          lowerCAmelCase_ ,  [
              {
                  """score""": ANY(lowerCAmelCase_),
                  """label""": ANY(lowerCAmelCase_),
                  """box""": {"""xmin""": ANY(lowerCAmelCase_), """ymin""": ANY(lowerCAmelCase_), """xmax""": ANY(lowerCAmelCase_), """ymax""": ANY(lowerCAmelCase_)},
              }
              for i in range(lowerCAmelCase_)
          ] ,  )

    @require_tf
    @unittest.skip("""Zero Shot Object Detection not implemented in TF""")
    def 					_UpperCAmelCase	(				self			:				Any):







      """simple docstring"""







      pass

    @require_torch
    def 					_UpperCAmelCase	(				self			:				List[Any]):







      """simple docstring"""







      lowercase_								= pipeline(
          """zero-shot-object-detection""" ,  model="""hf-internal-testing/tiny-random-owlvit-object-detection""")

      lowercase_								= object_detector(
          """./tests/fixtures/tests_samples/COCO/000000039769.png""" ,  candidate_labels=["""cat""", """remote""", """couch"""] ,  threshold=0.64 ,  )

      self.assertEqual(
          nested_simplify(lowerCAmelCase_ ,  decimals=4) ,  [
              {"""score""": 0.7_235, """label""": """cat""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
              {"""score""": 0.7_218, """label""": """remote""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
              {"""score""": 0.7_184, """label""": """couch""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
              {"""score""": 0.6_748, """label""": """remote""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
              {"""score""": 0.6_656, """label""": """cat""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
              {"""score""": 0.6_614, """label""": """couch""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
              {"""score""": 0.6_456, """label""": """remote""", """box""": {"""xmin""": 4_9_4, """ymin""": 1_0_5, """xmax""": 5_2_1, """ymax""": 1_2_7}},
              {"""score""": 0.642, """label""": """remote""", """box""": {"""xmin""": 6_7, """ymin""": 2_7_4, """xmax""": 9_3, """ymax""": 2_9_7}},
              {"""score""": 0.6_419, """label""": """cat""", """box""": {"""xmin""": 4_9_4, """ymin""": 1_0_5, """xmax""": 5_2_1, """ymax""": 1_2_7}},
          ] ,  )

      lowercase_								= object_detector(
          [
              {
                  """image""": """./tests/fixtures/tests_samples/COCO/000000039769.png""",
                  """candidate_labels""": ["""cat""", """remote""", """couch"""],
              }
          ] ,  threshold=0.64 ,  )

      self.assertEqual(
          nested_simplify(lowerCAmelCase_ ,  decimals=4) ,  [
              [
                  {"""score""": 0.7_235, """label""": """cat""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
                  {"""score""": 0.7_218, """label""": """remote""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
                  {"""score""": 0.7_184, """label""": """couch""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
                  {"""score""": 0.6_748, """label""": """remote""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
                  {"""score""": 0.6_656, """label""": """cat""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
                  {"""score""": 0.6_614, """label""": """couch""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
                  {"""score""": 0.6_456, """label""": """remote""", """box""": {"""xmin""": 4_9_4, """ymin""": 1_0_5, """xmax""": 5_2_1, """ymax""": 1_2_7}},
                  {"""score""": 0.642, """label""": """remote""", """box""": {"""xmin""": 6_7, """ymin""": 2_7_4, """xmax""": 9_3, """ymax""": 2_9_7}},
                  {"""score""": 0.6_419, """label""": """cat""", """box""": {"""xmin""": 4_9_4, """ymin""": 1_0_5, """xmax""": 5_2_1, """ymax""": 1_2_7}},
              ]
          ] ,  )

    @require_torch
    @slow
    def 					_UpperCAmelCase	(				self			:				Dict):







      """simple docstring"""







      lowercase_								= pipeline("""zero-shot-object-detection""")

      lowercase_								= object_detector(
          """http://images.cocodataset.org/val2017/000000039769.jpg""" ,  candidate_labels=["""cat""", """remote""", """couch"""] ,  )
      self.assertEqual(
          nested_simplify(lowerCAmelCase_ ,  decimals=4) ,  [
              {"""score""": 0.2_868, """label""": """cat""", """box""": {"""xmin""": 3_2_4, """ymin""": 2_0, """xmax""": 6_4_0, """ymax""": 3_7_3}},
              {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 4_0, """ymin""": 7_2, """xmax""": 1_7_7, """ymax""": 1_1_5}},
              {"""score""": 0.2_537, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 5_5, """xmax""": 3_1_5, """ymax""": 4_7_2}},
              {"""score""": 0.1_474, """label""": """remote""", """box""": {"""xmin""": 3_3_5, """ymin""": 7_4, """xmax""": 3_7_1, """ymax""": 1_8_7}},
              {"""score""": 0.1_208, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 6_4_2, """ymax""": 4_7_6}},
          ] ,  )

      lowercase_								= object_detector(
          [
              {
                  """image""": """http://images.cocodataset.org/val2017/000000039769.jpg""",
                  """candidate_labels""": ["""cat""", """remote""", """couch"""],
              },
              {
                  """image""": """http://images.cocodataset.org/val2017/000000039769.jpg""",
                  """candidate_labels""": ["""cat""", """remote""", """couch"""],
              },
          ] ,  )
      self.assertEqual(
          nested_simplify(lowerCAmelCase_ ,  decimals=4) ,  [
              [
                  {"""score""": 0.2_868, """label""": """cat""", """box""": {"""xmin""": 3_2_4, """ymin""": 2_0, """xmax""": 6_4_0, """ymax""": 3_7_3}},
                  {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 4_0, """ymin""": 7_2, """xmax""": 1_7_7, """ymax""": 1_1_5}},
                  {"""score""": 0.2_537, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 5_5, """xmax""": 3_1_5, """ymax""": 4_7_2}},
                  {"""score""": 0.1_474, """label""": """remote""", """box""": {"""xmin""": 3_3_5, """ymin""": 7_4, """xmax""": 3_7_1, """ymax""": 1_8_7}},
                  {"""score""": 0.1_208, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 6_4_2, """ymax""": 4_7_6}},
              ],
              [
                  {"""score""": 0.2_868, """label""": """cat""", """box""": {"""xmin""": 3_2_4, """ymin""": 2_0, """xmax""": 6_4_0, """ymax""": 3_7_3}},
                  {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 4_0, """ymin""": 7_2, """xmax""": 1_7_7, """ymax""": 1_1_5}},
                  {"""score""": 0.2_537, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 5_5, """xmax""": 3_1_5, """ymax""": 4_7_2}},
                  {"""score""": 0.1_474, """label""": """remote""", """box""": {"""xmin""": 3_3_5, """ymin""": 7_4, """xmax""": 3_7_1, """ymax""": 1_8_7}},
                  {"""score""": 0.1_208, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 6_4_2, """ymax""": 4_7_6}},
              ],
          ] ,  )

    @require_tf
    @unittest.skip("""Zero Shot Object Detection not implemented in TF""")
    def 					_UpperCAmelCase	(				self			:				List[Any]):







      """simple docstring"""







      pass

    @require_torch
    @slow
    def 					_UpperCAmelCase	(				self			:				List[str]):







      """simple docstring"""







      lowercase_								= 0.2
      lowercase_								= pipeline("""zero-shot-object-detection""")

      lowercase_								= object_detector(
          """http://images.cocodataset.org/val2017/000000039769.jpg""" ,  candidate_labels=["""cat""", """remote""", """couch"""] ,  threshold=lowerCAmelCase_ ,  )
      self.assertEqual(
          nested_simplify(lowerCAmelCase_ ,  decimals=4) ,  [
              {"""score""": 0.2_868, """label""": """cat""", """box""": {"""xmin""": 3_2_4, """ymin""": 2_0, """xmax""": 6_4_0, """ymax""": 3_7_3}},
              {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 4_0, """ymin""": 7_2, """xmax""": 1_7_7, """ymax""": 1_1_5}},
              {"""score""": 0.2_537, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 5_5, """xmax""": 3_1_5, """ymax""": 4_7_2}},
          ] ,  )




    @require_torch
    @slow
    def 					_UpperCAmelCase	(				self			:				Any):







      """simple docstring"""







      lowercase_								= 2
      lowercase_								= pipeline("""zero-shot-object-detection""")

      lowercase_								= object_detector(
          """http://images.cocodataset.org/val2017/000000039769.jpg""" ,  candidate_labels=["""cat""", """remote""", """couch"""] ,  top_k=lowerCAmelCase_ ,  )
      self.assertEqual(
          nested_simplify(lowerCAmelCase_ ,  decimals=4) ,  [
              {"""score""": 0.2_868, """label""": """cat""", """box""": {"""xmin""": 3_2_4, """ymin""": 2_0, """xmax""": 6_4_0, """ymax""": 3_7_3}},
              {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 4_0, """ymin""": 7_2, """xmax""": 1_7_7, """ymax""": 1_1_5}},
          ] ,  )

