



import itertools
from dataclasses import dataclass
from typing import Optional

import pyarrow as pa

import datasets
from datasets.table import table_cast


A_		:  Optional[int]										=  datasets.utils.logging.get_logger(__name__)



@dataclass
class 		_lowercase		(							datasets.BuilderConfig						):
   _UpperCAmelCase  						=      None



class 		_lowercase		(							datasets.ArrowBasedBuilder						):
   _UpperCAmelCase  						=      ArrowConfig

   def 		A				(   self      :							Union[str, Any]				)							->					Union[str, Any]:


    """simple docstring"""






    return datasets.DatasetInfo(features=self.config.features				)

   def 		A				(   self      :							str				, __lowerCAmelCase      :							Dict				)							->					Union[str, Any]:


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

   def 		A				(   self      :							str				, __lowerCAmelCase      :							pa.Table				)							->					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							=		table_cast(__lowerCAmelCase				, self.info.features.arrow_schema				)
    return pa_table




   def 		A				(   self      :							int				, __lowerCAmelCase      :							int				)							->					Optional[Any]:


    """simple docstring"""






    for file_idx, file in enumerate(itertools.chain.from_iterable(__lowerCAmelCase				)				):
     with open(__lowerCAmelCase				, "rb"				) as f:
      try:
       for batch_idx, record_batch in enumerate(pa.ipc.open_stream(__lowerCAmelCase				)				):
        a							=		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(__lowerCAmelCase				)
      except ValueError as e:
       logger.error(f"""Failed to read file '{file}' with error {type(__lowerCAmelCase				)}: {e}"""				)
       raise






from collections import Counter


def 						UpperCAmelCase__   (   UpperCAmelCase__			:list[int]       ):






 '''simple docstring'''

 return sum(socks_by_color // 2 for socks_by_color in Counter(UpperCAmelCase__       ).values()       )


if __name__ == "__main__":
     import doctest

     doctest.testmod()

     A_		:  List[str]										=  [int(x) for x in input('''Enter socks by color :''').rstrip().split()]
     print(F"""sock_merchant({colors}) = {sock_merchant(colors)}""")

