






"""simple docstring"""







import itertools
from dataclasses import dataclass
from typing import Optional

import pyarrow as pa

import datasets
from datasets.table import table_cast


a :				int      					=		datasets.utils.logging.get_logger(__name__)


@dataclass
class     __UpperCAmelCase(   datasets.BuilderConfig							):




						"""simple docstring"""




						__lowerCamelCase				       =					None


class     __UpperCAmelCase(   datasets.ArrowBasedBuilder							):




						"""simple docstring"""




						__lowerCamelCase				       =					ArrowConfig




						def 		UpperCAmelCase_       (   self			):
												'''simple docstring'''
												return datasets.DatasetInfo(features=self.config.features			)




						def 		UpperCAmelCase_       (   self       ,  snake_case__			):
												'''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}'''			)
												lowercase__				:      List[str]=       dl_manager.download_and_extract(self.config.data_files			)
												if isinstance(snake_case__       ,  (str, list, tuple)			):
																		lowercase__				:      Union[str, Any]=       data_files
																		if isinstance(snake_case__       ,  snake_case__			):
																								lowercase__				:      List[str]=       [files]
																		# Use `dl_manager.iter_files` to skip hidden files in an extracted archive
																		lowercase__				:      Optional[int]=       [dl_manager.iter_files(snake_case__			) for file in files]
																		return [datasets.SplitGenerator(name=datasets.Split.TRAIN       ,  gen_kwargs={"files": files}			)]
												lowercase__				:      Union[str, Any]=       []
												for split_name, files in data_files.items():
																		if isinstance(snake_case__       ,  snake_case__			):
																								lowercase__				:      Dict=       [files]
																		# Use `dl_manager.iter_files` to skip hidden files in an extracted archive
																		lowercase__				:      Optional[Any]=       [dl_manager.iter_files(snake_case__			) 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(snake_case__			):
																														with open(snake_case__       ,  "rb"			) as f:
																																				lowercase__				:      Optional[Any]=       datasets.Features.from_arrow_schema(pa.ipc.open_stream(snake_case__			).schema			)
																														break
																		splits.append(datasets.SplitGenerator(name=snake_case__       ,  gen_kwargs={"files": files}			)			)
												return splits




						def 		UpperCAmelCase_       (   self       ,  snake_case__			):
												'''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
																		lowercase__				:      Any=       table_cast(snake_case__       ,  self.info.features.arrow_schema			)
												return pa_table




						def 		UpperCAmelCase_       (   self       ,  snake_case__			):
												'''simple docstring'''
												for file_idx, file in enumerate(itertools.chain.from_iterable(snake_case__			)			):
																		with open(snake_case__       ,  "rb"			) as f:
																								try:
																														for batch_idx, record_batch in enumerate(pa.ipc.open_stream(snake_case__			)			):
																																				lowercase__				:      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(snake_case__			)
																								except ValueError as e:
																														logger.error(F'''Failed to read file \'{file}\' with error {type(snake_case__			)}: {e}'''			)
																														raise














"""simple docstring"""







def 						lowercase__(A						)				->int:




						"""simple docstring"""



						lowercase__				:      str=       0
						for plain_chr in plain_text:
												lowercase__				:      List[str]=       (
												    ord(A						) + (hash_value << 6) + (hash_value << 16) - hash_value
												)
						return hash_value






