code: 
  
  
  from __future__ import annotations
  
  from math import pi, pow
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Any      ):
  
  
  
  
  
  
  							"""simple docstring"""
  
  
  
  							if side_length < 0:
  														raise ValueError("""vol_cube() only accepts non-negative values"""      )
  							return pow(__lowerCAmelCase	,	3      )
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Optional[int]	,	SCREAMING_SNAKE_CASE_				: str      ):
  
  
  
  
  
  
  							"""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(__lowerCAmelCase	,	2      ) * (3 * radius - height)
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: int	,	SCREAMING_SNAKE_CASE_				: Dict	,	SCREAMING_SNAKE_CASE_				: List[str]      ):
  
  
  
  
  
  
  							"""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(__lowerCAmelCase	,	__lowerCAmelCase      )      )
  
  							a_       :   Optional[int]			=	(
  							    (radius_a - radius_a + centers_distance)
  							    * (radius_a + radius_a - centers_distance)
  							    / (2 * centers_distance)
  							)
  							a_       :   Any			=	(
  							    (radius_a - radius_a + centers_distance)
  							    * (radius_a + radius_a - centers_distance)
  							    / (2 * centers_distance)
  							)
  
  							return vol_spherical_cap(__lowerCAmelCase	,	__lowerCAmelCase      ) + vol_spherical_cap(__lowerCAmelCase	,	__lowerCAmelCase      )
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: List[str]	,	SCREAMING_SNAKE_CASE_				: Optional[int]	,	SCREAMING_SNAKE_CASE_				: Union[str, Any]      ):
  
  
  
  
  
  
  							"""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(__lowerCAmelCase	,	__lowerCAmelCase      )      )
  
  							return (
  							    vol_sphere(__lowerCAmelCase      )
  							    + vol_sphere(__lowerCAmelCase      )
  							    - vol_spheres_intersect(__lowerCAmelCase	,	__lowerCAmelCase	,	__lowerCAmelCase      )
  							)
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Dict	,	SCREAMING_SNAKE_CASE_				: int	,	SCREAMING_SNAKE_CASE_				: Any      ):
  
  
  
  
  
  
  							"""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 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Any	,	SCREAMING_SNAKE_CASE_				: Optional[Any]      ):
  
  
  
  
  
  
  							"""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 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Optional[Any]	,	SCREAMING_SNAKE_CASE_				: str      ):
  
  
  
  
  
  
  							"""simple docstring"""
  
  
  
  							if height < 0 or radius < 0:
  														raise ValueError("""vol_right_circ_cone() only accepts non-negative values"""      )
  							return pi * pow(__lowerCAmelCase	,	2      ) * height / 3.0
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Union[str, Any]	,	SCREAMING_SNAKE_CASE_				: Any      ):
  
  
  
  
  
  
  							"""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 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Optional[Any]	,	SCREAMING_SNAKE_CASE_				: Optional[int]      ):
  
  
  
  
  
  
  							"""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 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: str      ):
  
  
  
  
  
  
  							"""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(__lowerCAmelCase	,	3      )
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Any      ):
  
  
  
  
  
  
  							"""simple docstring"""
  
  
  
  							if radius < 0:
  														raise ValueError("""vol_hemisphere() only accepts non-negative values"""      )
  							# Volume is radius cubed * pi * 2/3
  							return pow(__lowerCAmelCase	,	3      ) * pi * 2 / 3
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Any	,	SCREAMING_SNAKE_CASE_				: List[Any]      ):
  
  
  
  
  
  
  							"""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(__lowerCAmelCase	,	2      ) * height * pi
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: List[str]	,	SCREAMING_SNAKE_CASE_				: List[str]	,	SCREAMING_SNAKE_CASE_				: Union[str, Any]      ):
  
  
  
  
  
  
  							"""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(__lowerCAmelCase	,	2      ) - pow(__lowerCAmelCase	,	2      )) * height
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: int	,	SCREAMING_SNAKE_CASE_				: Union[str, Any]	,	SCREAMING_SNAKE_CASE_				: List[str]      ):
  
  
  
  
  
  
  							"""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(__lowerCAmelCase	,	2      ) + pow(__lowerCAmelCase	,	2      ) + radius_a * radius_a)
  							)
  
  
  
  
  
  def 						_lowerCamelCase		(							SCREAMING_SNAKE_CASE_				: Dict	,	SCREAMING_SNAKE_CASE_				: Union[str, Any]      ):
  
  
  
  
  
  
  							"""simple docstring"""
  
  
  
  							if torus_radius < 0 or tube_radius < 0:
  														raise ValueError("""vol_torus() only accepts non-negative values"""      )
  							return 2 * pow(__lowerCAmelCase	,	2      ) * torus_radius * pow(__lowerCAmelCase	,	2      )
  
  
  
  
  
  def 						_lowerCamelCase		(							):
  
  
  
  
  
  
  							"""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()
style_context: 
  
  
  import itertools
  from dataclasses import dataclass
  from typing import Optional
  
  import pyarrow as pa
  
  import datasets
  from datasets.table import table_cast
  
  
  SCREAMING_SNAKE_CASE : int          =    datasets.utils.logging.get_logger(__name__)
  
  
  
  
  
  @dataclass
  class 					snake_case__  ( datasets.BuilderConfig       ):
  	UpperCAmelCase   :							Optional[datasets.Features]         = None
  
  
  
  
  
  class 					snake_case__  ( datasets.ArrowBasedBuilder       ):
  	UpperCAmelCase   :							Optional[int]         = ArrowConfig
  
  
  
  
  
  	def     A				(  self							)		->			str:
  								"""simple docstring"""
  
  
  
  
  
  
  								return datasets.DatasetInfo(features=self.config.features							)
  
  
  
  
  
  	def     A				(  self				,    UpperCamelCase_							)		->			str:
  								"""simple docstring"""
  
  
  
  
  
  
  								if not self.config.data_files:
  															raise ValueError(f"""At least one data file must be specified, but got data_files={self.config.data_files}"""							)
  								a_       :   List[str]			=	dl_manager.download_and_extract(self.config.data_files							)
  								if isinstance(UpperCamelCase_				,    (str, list, tuple)							):
  															a_       :   Dict			=	data_files
  															if isinstance(UpperCamelCase_				,    UpperCamelCase_							):
  																						a_       :   Optional[Any]			=	[files]
  															# Use `dl_manager.iter_files` to skip hidden files in an extracted archive
  															a_       :   List[Any]			=	[dl_manager.iter_files(UpperCamelCase_							) for file in files]
  															return [datasets.SplitGenerator(name=datasets.Split.TRAIN				,    gen_kwargs={"""files""": files}							)]
  								a_       :   Any			=	[]
  								for split_name, files in data_files.items():
  															if isinstance(UpperCamelCase_				,    UpperCamelCase_							):
  																						a_       :   Dict			=	[files]
  															# Use `dl_manager.iter_files` to skip hidden files in an extracted archive
  															a_       :   List[Any]			=	[dl_manager.iter_files(UpperCamelCase_							) for file in files]
  															# Infer features is they are stoed in the arrow schema
  															if self.info.features is None:
  																						for file in itertools.chain.from_iterable(UpperCamelCase_							):
  																													with open(UpperCamelCase_				,    """rb"""							) as f:
  																																				a_       :   List[str]			=	datasets.Features.from_arrow_schema(pa.ipc.open_stream(UpperCamelCase_							).schema							)
  																													break
  															splits.append(datasets.SplitGenerator(name=UpperCamelCase_				,    gen_kwargs={"""files""": files}							)							)
  								return splits
  
  
  
  
  
  	def     A				(  self				,    UpperCamelCase_							)		->			pa.Table:
  								"""simple docstring"""
  
  
  
  
  
  
  								if self.info.features is not None:
  															# more expensive cast to support nested features with keys in a different order
  															# allows str <-> int/float or str to Audio for example
  															a_       :   int			=	table_cast(UpperCamelCase_				,    self.info.features.arrow_schema							)
  								return pa_table
  
  
  
  
  
  	def     A				(  self				,    UpperCamelCase_							)		->			Optional[Any]:
  								"""simple docstring"""
  
  
  
  
  
  
  								for file_idx, file in enumerate(itertools.chain.from_iterable(UpperCamelCase_							)							):
  															with open(UpperCamelCase_				,    """rb"""							) as f:
  																						try:
  																													for batch_idx, record_batch in enumerate(pa.ipc.open_stream(UpperCamelCase_							)							):
  																																				a_       :   Tuple			=	pa.Table.from_batches([record_batch]							)
  																																				# Uncomment for debugging (will print the Arrow table size and elements)
  																																				# logger.warning(f"pa_table: {pa_table} num rows: {pa_table.num_rows}")
  																																				# logger.warning('\n'.join(str(pa_table.slice(i, 1).to_pydict()) for i in range(pa_table.num_rows)))
  																																				yield f"""{file_idx}_{batch_idx}""", self._cast_table(UpperCamelCase_							)
  																						except ValueError as e:
  																													logger.error(f"""Failed to read file '{file}' with error {type(UpperCamelCase_							)}: {e}"""							)
  																													raise
  
  
  