"""simple docstring"""







from __future__ import annotations

from math import pi, pow
def     __UpperCAmelCase							(       UpperCAmelCase_       :							int | float    )				->     float:

	'''simple docstring'''





	if side_length < 0:
		raise ValueError('vol_cube() only accepts non-negative values'    )
	return pow(UpperCAmelCase_     ,				3    )
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	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(UpperCAmelCase_     ,				2    ) * (3 * radius - height)
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	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(UpperCAmelCase_     ,				UpperCAmelCase_    )    )

	__snake_case     :				Any 						=					(
	    (radius_a - radius_a + centers_distance)
	    * (radius_a + radius_a - centers_distance)
	    / (2 * centers_distance)
	)
	__snake_case     :				Optional[int] 						=					(
	    (radius_a - radius_a + centers_distance)
	    * (radius_a + radius_a - centers_distance)
	    / (2 * centers_distance)
	)

	return vol_spherical_cap(UpperCAmelCase_     ,				UpperCAmelCase_    ) + vol_spherical_cap(UpperCAmelCase_     ,				UpperCAmelCase_    )
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	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(UpperCAmelCase_     ,				UpperCAmelCase_    )    )

	return (
	    vol_sphere(UpperCAmelCase_    )
	    + vol_sphere(UpperCAmelCase_    )
	    - vol_spheres_intersect(UpperCAmelCase_     ,				UpperCAmelCase_     ,				UpperCAmelCase_    )
	)
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	if width < 0 or height < 0 or length < 0:
		raise ValueError('vol_cuboid() only accepts non-negative values'    )
	return float(width * height * length    )
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	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     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	if height < 0 or radius < 0:
		raise ValueError('vol_right_circ_cone() only accepts non-negative values'    )
	return pi * pow(UpperCAmelCase_     ,				2    ) * height / 3.0
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	if height < 0 or area_of_base < 0:
		raise ValueError('vol_prism() only accepts non-negative values'    )
	return float(area_of_base * height    )
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	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     __UpperCAmelCase							(       UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	if radius < 0:
		raise ValueError('vol_sphere() only accepts non-negative values'    )
	# Volume is 4/3 * pi * radius cubed
	return 4 / 3 * pi * pow(UpperCAmelCase_     ,				3    )
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	if radius < 0:
		raise ValueError('vol_hemisphere() only accepts non-negative values'    )
	# Volume is radius cubed * pi * 2/3
	return pow(UpperCAmelCase_     ,				3    ) * pi * 2 / 3
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	if height < 0 or radius < 0:
		raise ValueError('vol_circular_cylinder() only accepts non-negative values'    )
	# Volume is radius squared * height * pi
	return pow(UpperCAmelCase_     ,				2    ) * height * pi
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	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(UpperCAmelCase_     ,				2    ) - pow(UpperCAmelCase_     ,				2    )) * height
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	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(UpperCAmelCase_     ,				2    ) + pow(UpperCAmelCase_     ,				2    ) + radius_a * radius_a)
	)
def     __UpperCAmelCase							(       UpperCAmelCase_       :							float     ,				UpperCAmelCase_       :							float    )				->     float:

	'''simple docstring'''





	if torus_radius < 0 or tube_radius < 0:
		raise ValueError('vol_torus() only accepts non-negative values'    )
	return 2 * pow(UpperCAmelCase_     ,				2    ) * torus_radius * pow(UpperCAmelCase_     ,				2    )
def     __UpperCAmelCase							(       )				->     List[Any]:

	'''simple docstring'''





	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()






"""simple docstring"""







from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_torch_available,
)


_a	:	Optional[Any]=					{"configuration_gptj": ["GPTJ_PRETRAINED_CONFIG_ARCHIVE_MAP", "GPTJConfig", "GPTJOnnxConfig"]}

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	_a	:	Dict=					[
	    "GPTJ_PRETRAINED_MODEL_ARCHIVE_LIST",
	    "GPTJForCausalLM",
	    "GPTJForQuestionAnswering",
	    "GPTJForSequenceClassification",
	    "GPTJModel",
	    "GPTJPreTrainedModel",
	]

try:
	if not is_tf_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	_a	:	Optional[Any]=					[
	    "TFGPTJForCausalLM",
	    "TFGPTJForQuestionAnswering",
	    "TFGPTJForSequenceClassification",
	    "TFGPTJModel",
	    "TFGPTJPreTrainedModel",
	]

try:
	if not is_flax_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	_a	:	List[str]=					[
	    "FlaxGPTJForCausalLM",
	    "FlaxGPTJModel",
	    "FlaxGPTJPreTrainedModel",
	]


if TYPE_CHECKING:
	from .configuration_gptj import GPTJ_PRETRAINED_CONFIG_ARCHIVE_MAP, GPTJConfig, GPTJOnnxConfig

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_gptj import (
		    GPTJ_PRETRAINED_MODEL_ARCHIVE_LIST,
		    GPTJForCausalLM,
		    GPTJForQuestionAnswering,
		    GPTJForSequenceClassification,
		    GPTJModel,
		    GPTJPreTrainedModel,
		)

	try:
		if not is_tf_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_tf_gptj import (
		    TFGPTJForCausalLM,
		    TFGPTJForQuestionAnswering,
		    TFGPTJForSequenceClassification,
		    TFGPTJModel,
		    TFGPTJPreTrainedModel,
		)

	try:
		if not is_flax_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_flax_gptj import FlaxGPTJForCausalLM, FlaxGPTJModel, FlaxGPTJPreTrainedModel

else:
	import sys

	_a	:	Any=					_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)





