from __future__ import annotations

from math import pi, pow

def 	lowercase_       (    _lowerCamelCase							: List[Any]):





    if side_length < 0:
        raise ValueError("vol_cube() only accepts non-negative values")
    return pow(__a	,			3)

def 	lowercase_       (    _lowerCamelCase							: Tuple	,			_lowerCamelCase							: int):





    if height < 0 or radius < 0:
        raise ValueError("vol_spherical_cap() only accepts non-negative values")
    # Volume is 1/3 pi * height squared * (3 * radius - height)
    return 1 / 3 * pi * pow(__a	,			2) * (3 * radius - height)

def 	lowercase_       (    _lowerCamelCase							: Optional[Any]	,			_lowerCamelCase							: Tuple	,			_lowerCamelCase							: Any):





    if radius_a < 0 or radius_a < 0 or centers_distance < 0:
        raise ValueError("vol_spheres_intersect() only accepts non-negative values")
    if centers_distance == 0:
        return vol_sphere(min(__a	,			__a))

    lowercase__				:     Dict					      =       (
        (radius_a - radius_a + centers_distance)
        * (radius_a + radius_a - centers_distance)
        / (2 * centers_distance)
    )
    lowercase__				:     Tuple					      =       (
        (radius_a - radius_a + centers_distance)
        * (radius_a + radius_a - centers_distance)
        / (2 * centers_distance)
    )

    return vol_spherical_cap(__a	,			__a) + vol_spherical_cap(__a	,			__a)

def 	lowercase_       (    _lowerCamelCase							: Optional[Any]	,			_lowerCamelCase							: int	,			_lowerCamelCase							: Tuple):





    if radius_a <= 0 or radius_a <= 0 or centers_distance < 0:
        raise ValueError(
            "vol_spheres_union() only accepts non-negative values, non-zero radius")

    if centers_distance == 0:
        return vol_sphere(max(__a	,			__a))

    return (
        vol_sphere(__a)
        + vol_sphere(__a)
        - vol_spheres_intersect(__a	,			__a	,			__a)
    )

def 	lowercase_       (    _lowerCamelCase							: List[str]	,			_lowerCamelCase							: Optional[int]	,			_lowerCamelCase							: int):





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

def 	lowercase_       (    _lowerCamelCase							: Tuple	,			_lowerCamelCase							: Tuple):





    if height < 0 or area_of_base < 0:
        raise ValueError("vol_cone() only accepts non-negative values")
    return area_of_base * height / 3.0

def 	lowercase_       (    _lowerCamelCase							: List[str]	,			_lowerCamelCase							: Tuple):





    if height < 0 or radius < 0:
        raise ValueError("vol_right_circ_cone() only accepts non-negative values")
    return pi * pow(__a	,			2) * height / 3.0

def 	lowercase_       (    _lowerCamelCase							: Any	,			_lowerCamelCase							: Dict):





    if height < 0 or area_of_base < 0:
        raise ValueError("vol_prism() only accepts non-negative values")
    return float(area_of_base * height)

def 	lowercase_       (    _lowerCamelCase							: Optional[Any]	,			_lowerCamelCase							: Any):





    if height < 0 or area_of_base < 0:
        raise ValueError("vol_pyramid() only accepts non-negative values")
    return area_of_base * height / 3.0

def 	lowercase_       (    _lowerCamelCase							: Optional[int]):





    if radius < 0:
        raise ValueError("vol_sphere() only accepts non-negative values")
    # Volume is 4/3 * pi * radius cubed
    return 4 / 3 * pi * pow(__a	,			3)

def 	lowercase_       (    _lowerCamelCase							: str):





    if radius < 0:
        raise ValueError("vol_hemisphere() only accepts non-negative values")
    # Volume is radius cubed * pi * 2/3
    return pow(__a	,			3) * pi * 2 / 3

def 	lowercase_       (    _lowerCamelCase							: List[str]	,			_lowerCamelCase							: Dict):





    if height < 0 or radius < 0:
        raise ValueError("vol_circular_cylinder() only accepts non-negative values")
    # Volume is radius squared * height * pi
    return pow(__a	,			2) * height * pi

def 	lowercase_       (    _lowerCamelCase							: Any	,			_lowerCamelCase							: Any	,			_lowerCamelCase							: int):





    if inner_radius < 0 or outer_radius < 0 or height < 0:
        raise ValueError(
            "vol_hollow_circular_cylinder() only accepts non-negative values")
    if outer_radius <= inner_radius:
        raise ValueError("outer_radius must be greater than inner_radius")
    return pi * (pow(__a	,			2) - pow(__a	,			2)) * height

def 	lowercase_       (    _lowerCamelCase							: List[Any]	,			_lowerCamelCase							: Tuple	,			_lowerCamelCase							: List[str]):





    if radius_a < 0 or radius_a < 0 or height < 0:
        raise ValueError("vol_conical_frustum() only accepts non-negative values")
    return (
        1
        / 3
        * pi
        * height
        * (pow(__a	,			2) + pow(__a	,			2) + radius_a * radius_a)
    )

def 	lowercase_       (    _lowerCamelCase							: Dict	,			_lowerCamelCase							: Optional[Any]):





    if torus_radius < 0 or tube_radius < 0:
        raise ValueError("vol_torus() only accepts non-negative values")
    return 2 * pow(__a	,			2) * torus_radius * pow(__a	,			2)

def 	lowercase_       (    ):
    print("Volumes:")
    print(f'''Cube: {vol_cube(2) = }''')  # = 8
    print(f'''Cuboid: {vol_cuboid(2	,			2	,			2) = }''')  # = 8
    print(f'''Cone: {vol_cone(2	,			2) = }''')  # ~= 1.33
    print(f'''Right Circular Cone: {vol_right_circ_cone(2	,			2) = }''')  # ~= 8.38
    print(f'''Prism: {vol_prism(2	,			2) = }''')  # = 4
    print(f'''Pyramid: {vol_pyramid(2	,			2) = }''')  # ~= 1.33
    print(f'''Sphere: {vol_sphere(2) = }''')  # ~= 33.5
    print(f'''Hemisphere: {vol_hemisphere(2) = }''')  # ~= 16.75
    print(f'''Circular Cylinder: {vol_circular_cylinder(2	,			2) = }''')  # ~= 25.1
    print(f'''Torus: {vol_torus(2	,			2) = }''')  # ~= 157.9
    print(f'''Conical Frustum: {vol_conical_frustum(2	,			2	,			4) = }''')  # ~= 58.6
    print(f'''Spherical cap: {vol_spherical_cap(1	,			2) = }''')  # ~= 5.24
    print(f'''Spheres intersetion: {vol_spheres_intersect(2	,			2	,			1) = }''')  # ~= 21.21
    print(f'''Spheres union: {vol_spheres_union(2	,			2	,			1) = }''')  # ~= 45.81
    print(
        f'''Hollow Circular Cylinder: {vol_hollow_circular_cylinder(1	,			2	,			3) = }''')  # ~= 28.3


if __name__ == "__main__":
      main()




from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available


UpperCamelCase													=		{
    '''configuration_flava''': [
        '''FLAVA_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''FlavaConfig''',
        '''FlavaImageCodebookConfig''',
        '''FlavaImageConfig''',
        '''FlavaMultimodalConfig''',
        '''FlavaTextConfig''',
    ],
}

try:
      if not is_vision_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      UpperCamelCase													=		['''FlavaFeatureExtractor''']
      UpperCamelCase													=		['''FlavaImageProcessor''']
      UpperCamelCase													=		['''FlavaProcessor''']

try:
      if not is_torch_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      UpperCamelCase													=		[
          '''FLAVA_PRETRAINED_MODEL_ARCHIVE_LIST''',
          '''FlavaForPreTraining''',
          '''FlavaImageCodebook''',
          '''FlavaImageModel''',
          '''FlavaModel''',
          '''FlavaMultimodalModel''',
          '''FlavaPreTrainedModel''',
          '''FlavaTextModel''',
      ]

if TYPE_CHECKING:
      from .configuration_flava import (
          FLAVA_PRETRAINED_CONFIG_ARCHIVE_MAP,
          FlavaConfig,
          FlavaImageCodebookConfig,
          FlavaImageConfig,
          FlavaMultimodalConfig,
          FlavaTextConfig,
      )

      try:
            if not is_vision_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .feature_extraction_flava import FlavaFeatureExtractor
            from .image_processing_flava import FlavaImageProcessor
            from .processing_flava import FlavaProcessor

      try:
            if not is_torch_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_flava import (
                FLAVA_PRETRAINED_MODEL_ARCHIVE_LIST,
                FlavaForPreTraining,
                FlavaImageCodebook,
                FlavaImageModel,
                FlavaModel,
                FlavaMultimodalModel,
                FlavaPreTrainedModel,
                FlavaTextModel,
            )

else:
      import sys

      UpperCamelCase													=		_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)



