



'''simple docstring'''



from math import pi, sqrt, tan



def   _A       (   _lowerCAmelCase					):



       """simple docstring"""



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



def   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """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   _A       (   _lowerCAmelCase					):



       """simple docstring"""



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



def   _A       (   _lowerCAmelCase					):



       """simple docstring"""



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



def   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """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   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """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   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """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   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """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(snake_case_  ,   2					) * torus_radius * tube_radius



def   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """simple docstring"""



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



def   _A       (   _lowerCAmelCase					):



       """simple docstring"""



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



def   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """simple docstring"""



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



def   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """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   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """simple docstring"""



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



def   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """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   _A       (   _lowerCAmelCase					):



       """simple docstring"""



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



def   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """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   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """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   _A       (   _lowerCAmelCase  ,   _lowerCAmelCase					):



       """simple docstring"""



       if not isinstance(snake_case_  ,   snake_case_					) or sides < 3:
              raise ValueError(
                  'area_reg_polygon() only accepts integers greater than or \\nequal to three as number of sides'					)
       elif length < 0:
              raise ValueError(
                  'area_reg_polygon() only accepts non-negative values as \\nlength 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 warnings
from typing import List, Optional, Union

from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding, PaddingStrategy, PreTokenizedInput, TextInput, TruncationStrategy
from ...utils import TensorType





class _UpperCamelCase		(     A		):





				'''simple docstring'''





				lowerCAmelCase__					    =    ["""image_processor""", """tokenizer"""]
				lowerCAmelCase__					    =    """ViltImageProcessor"""
				lowerCAmelCase__					    =    ("""BertTokenizer""", """BertTokenizerFast""")

				def __init__(							self  :  str  ,       _lowerCAmelCase  :  Optional[Any]=None  ,       _lowerCAmelCase  :  int=None  ,       **_lowerCAmelCase  :  Optional[Any]):







											'''simple docstring'''

											__lowercase       	=None
											if "feature_extractor" in kwargs:
																		warnings.warn(
																		    'The `feature_extractor` argument is deprecated and will be removed in v5, use `image_processor`'
																		    ' instead.'  ,       _lowerCAmelCase  ,       )
																		__lowercase       	=kwargs.pop('feature_extractor')

											__lowercase       	=image_processor if image_processor is not None else feature_extractor
											if image_processor is None:
																		raise ValueError('You need to specify an `image_processor`.')
											if tokenizer is None:
																		raise ValueError('You need to specify a `tokenizer`.')

											super().__init__(_lowerCAmelCase  ,       _lowerCAmelCase)
											__lowercase       	=self.image_processor

				def __call__(							self  :  List[Any]  ,       _lowerCAmelCase  :  Tuple  ,       _lowerCAmelCase  :  Union[TextInput, PreTokenizedInput, List[TextInput], List[PreTokenizedInput]] = None  ,       _lowerCAmelCase  :  bool = True  ,       _lowerCAmelCase  :  Union[bool, str, PaddingStrategy] = False  ,       _lowerCAmelCase  :  Union[bool, str, TruncationStrategy] = None  ,       _lowerCAmelCase  :  Optional[int] = None  ,       _lowerCAmelCase  :  int = 0  ,       _lowerCAmelCase  :  Optional[int] = None  ,       _lowerCAmelCase  :  Optional[bool] = None  ,       _lowerCAmelCase  :  Optional[bool] = None  ,       _lowerCAmelCase  :  bool = False  ,       _lowerCAmelCase  :  bool = False  ,       _lowerCAmelCase  :  bool = False  ,       _lowerCAmelCase  :  bool = False  ,       _lowerCAmelCase  :  bool = True  ,       _lowerCAmelCase  :  Optional[Union[str, TensorType]] = None  ,       **_lowerCAmelCase  :  Any  ,       ):







											'''simple docstring'''

											__lowercase       	=self.tokenizer(
											    text=_lowerCAmelCase  ,       add_special_tokens=_lowerCAmelCase  ,       padding=_lowerCAmelCase  ,       truncation=_lowerCAmelCase  ,       max_length=_lowerCAmelCase  ,       stride=_lowerCAmelCase  ,       pad_to_multiple_of=_lowerCAmelCase  ,       return_token_type_ids=_lowerCAmelCase  ,       return_attention_mask=_lowerCAmelCase  ,       return_overflowing_tokens=_lowerCAmelCase  ,       return_special_tokens_mask=_lowerCAmelCase  ,       return_offsets_mapping=_lowerCAmelCase  ,       return_length=_lowerCAmelCase  ,       verbose=_lowerCAmelCase  ,       return_tensors=_lowerCAmelCase  ,       **_lowerCAmelCase  ,       )
											# add pixel_values + pixel_mask
											__lowercase       	=self.image_processor(_lowerCAmelCase  ,       return_tensors=_lowerCAmelCase)
											encoding.update(_lowerCAmelCase)

											return encoding

				def 				__lowerCamelCase     (							self  :  List[Any]  ,       *_lowerCAmelCase  :  str  ,       **_lowerCAmelCase  :  Union[str, Any]):







											'''simple docstring'''

											return self.tokenizer.batch_decode(*_lowerCAmelCase  ,       **_lowerCAmelCase)

				def 				__lowerCamelCase     (							self  :  Union[str, Any]  ,       *_lowerCAmelCase  :  str  ,       **_lowerCAmelCase  :  Optional[Any]):







											'''simple docstring'''

											return self.tokenizer.decode(*_lowerCAmelCase  ,       **_lowerCAmelCase)

				@property
				def 				__lowerCamelCase     (							self  :  Optional[int]):







											'''simple docstring'''

											__lowercase       	=self.tokenizer.model_input_names
											__lowercase       	=self.image_processor.model_input_names
											return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names))

				@property
				def 				__lowerCamelCase     (							self  :  Union[str, Any]):







											'''simple docstring'''

											warnings.warn(
											    '`feature_extractor_class` is deprecated and will be removed in v5. Use `image_processor_class` instead.'  ,       _lowerCAmelCase  ,       )
											return self.image_processor_class

				@property
				def 				__lowerCamelCase     (							self  :  Tuple):







											'''simple docstring'''

											warnings.warn(
											    '`feature_extractor` is deprecated and will be removed in v5. Use `image_processor` instead.'  ,       _lowerCAmelCase  ,       )
											return self.image_processor



