
"""simple docstring"""

import csv
import os

import pytest

from datasets import Dataset, DatasetDict, Features, NamedSplit, Value
from datasets.io.csv import CsvDatasetReader, CsvDatasetWriter

from ..utils import assert_arrow_memory_doesnt_increase, assert_arrow_memory_increases
def 						UpperCAmelCase   (						a_,		a_     ):





		'''simple docstring'''


		assert isinstance(a_,		a_     )
		assert dataset.num_rows == 4
		assert dataset.num_columns == 3
		assert dataset.column_names == ["col_1", "col_2", "col_3"]
		for feature, expected_dtype in expected_features.items():
				assert dataset.features[feature].dtype == expected_dtype
@pytest.mark.parametrize('keep_in_memory',		[False, True]     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     List[Any]            =       tmp_path / 'cache'
		lowerCamelCase	:     Optional[int]            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
				lowerCamelCase	:     Tuple            =       CsvDatasetReader(a_,		cache_dir=a_,		keep_in_memory=a_     ).read()
		_check_csv_dataset(a_,		a_     )
@pytest.mark.parametrize(
    'features',		[
        None,
        {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'},
        {'col_1': 'string', 'col_2': 'string', 'col_3': 'string'},
        {'col_1': 'int32', 'col_2': 'int32', 'col_3': 'int32'},
        {'col_1': 'float32', 'col_2': 'float32', 'col_3': 'float32'},
    ],		)
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     int            =       tmp_path / 'cache'
		# CSV file loses col_1 string dtype information: default now is "int64" instead of "string"
		lowerCamelCase	:     List[str]            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     str            =       features.copy() if features else default_expected_features
		lowerCamelCase	:     List[Any]            =       (
		    Features({feature: Value(a_     ) for feature, dtype in features.items()}     ) if features is not None else None
		)
		lowerCamelCase	:     Union[str, Any]            =       CsvDatasetReader(a_,		features=a_,		cache_dir=a_     ).read()
		_check_csv_dataset(a_,		a_     )
@pytest.mark.parametrize('split',		[None, NamedSplit('train'     ), 'train', 'test']     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Any            =       tmp_path / 'cache'
		lowerCamelCase	:     Dict            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     Dict            =       CsvDatasetReader(a_,		cache_dir=a_,		split=a_     ).read()
		_check_csv_dataset(a_,		a_     )
		assert dataset.split == split if split else "train"
@pytest.mark.parametrize('path_type',		[str, list]     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		if issubclass(a_,		a_     ):
				lowerCamelCase	:     Dict            =       csv_path
		elif issubclass(a_,		a_     ):
				lowerCamelCase	:     Tuple            =       [csv_path]
		lowerCamelCase	:     Optional[Any]            =       tmp_path / 'cache'
		lowerCamelCase	:     Tuple            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     List[Any]            =       CsvDatasetReader(a_,		cache_dir=a_     ).read()
		_check_csv_dataset(a_,		a_     )
def 						UpperCAmelCase   (						a_,		a_,		a_=("train",)     ):





		'''simple docstring'''


		assert isinstance(a_,		a_     )
		for split in splits:
				lowerCamelCase	:     Any            =       dataset_dict[split]
				assert dataset.num_rows == 4
				assert dataset.num_columns == 3
				assert dataset.column_names == ["col_1", "col_2", "col_3"]
				for feature, expected_dtype in expected_features.items():
						assert dataset.features[feature].dtype == expected_dtype
@pytest.mark.parametrize('keep_in_memory',		[False, True]     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Any            =       tmp_path / 'cache'
		lowerCamelCase	:     int            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
				lowerCamelCase	:     int            =       CsvDatasetReader({'train': csv_path},		cache_dir=a_,		keep_in_memory=a_     ).read()
		_check_csv_datasetdict(a_,		a_     )
@pytest.mark.parametrize(
    'features',		[
        None,
        {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'},
        {'col_1': 'string', 'col_2': 'string', 'col_3': 'string'},
        {'col_1': 'int32', 'col_2': 'int32', 'col_3': 'int32'},
        {'col_1': 'float32', 'col_2': 'float32', 'col_3': 'float32'},
    ],		)
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     str            =       tmp_path / 'cache'
		# CSV file loses col_1 string dtype information: default now is "int64" instead of "string"
		lowerCamelCase	:     Dict            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     str            =       features.copy() if features else default_expected_features
		lowerCamelCase	:     Any            =       (
		    Features({feature: Value(a_     ) for feature, dtype in features.items()}     ) if features is not None else None
		)
		lowerCamelCase	:     Optional[Any]            =       CsvDatasetReader({'train': csv_path},		features=a_,		cache_dir=a_     ).read()
		_check_csv_datasetdict(a_,		a_     )
@pytest.mark.parametrize('split',		[None, NamedSplit('train'     ), 'train', 'test']     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		if split:
				lowerCamelCase	:     List[Any]            =       {split: csv_path}
		else:
				lowerCamelCase	:     Any            =       {'train': csv_path, 'test': csv_path}
		lowerCamelCase	:     List[Any]            =       tmp_path / 'cache'
		lowerCamelCase	:     Union[str, Any]            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     Union[str, Any]            =       CsvDatasetReader(a_,		cache_dir=a_     ).read()
		_check_csv_datasetdict(a_,		a_,		splits=list(path.keys()     )     )
		assert all(dataset[split].split == split for split in path.keys()     )
def 						UpperCAmelCase   (						a_     ):





		'''simple docstring'''


		with open(a_,		encoding='utf-8'     ) as csvfile:
				yield from csv.reader(a_     )
def 						UpperCAmelCase   (						a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Optional[int]            =       tmp_path / 'cache'
		lowerCamelCase	:     int            =       os.path.join(a_,		'tmp.csv'     )
		lowerCamelCase	:     List[str]            =       CsvDatasetReader({'train': csv_path},		cache_dir=a_     ).read()
		CsvDatasetWriter(dataset['train'],		a_,		num_proc=1     ).write()

		lowerCamelCase	:     Tuple            =       iter_csv_file(a_     )
		lowerCamelCase	:     Tuple            =       iter_csv_file(a_     )

		for rowa, rowa in zip(a_,		a_     ):
				assert rowa == rowa
def 						UpperCAmelCase   (						a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Optional[Any]            =       tmp_path / 'cache'
		lowerCamelCase	:     Optional[Any]            =       os.path.join(a_,		'tmp.csv'     )
		lowerCamelCase	:     Dict            =       CsvDatasetReader({'train': csv_path},		cache_dir=a_     ).read()
		CsvDatasetWriter(dataset['train'],		a_,		num_proc=2     ).write()

		lowerCamelCase	:     int            =       iter_csv_file(a_     )
		lowerCamelCase	:     Optional[int]            =       iter_csv_file(a_     )

		for rowa, rowa in zip(a_,		a_     ):
				assert rowa == rowa





def 						UpperCAmelCase   (						a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Tuple            =       tmp_path / 'cache'
		lowerCamelCase	:     Optional[Any]            =       os.path.join(a_,		'tmp.csv'     )
		lowerCamelCase	:     Optional[int]            =       CsvDatasetReader({'train': csv_path},		cache_dir=a_     ).read()
		with pytest.raises(a_     ):
				CsvDatasetWriter(dataset['train'],		a_,		num_proc=0     )








"""simple docstring"""

import csv
import os

import pytest

from datasets import Dataset, DatasetDict, Features, NamedSplit, Value
from datasets.io.csv import CsvDatasetReader, CsvDatasetWriter

from ..utils import assert_arrow_memory_doesnt_increase, assert_arrow_memory_increases
def 						UpperCAmelCase   (						a_,		a_     ):





		'''simple docstring'''


		assert isinstance(a_,		a_     )
		assert dataset.num_rows == 4
		assert dataset.num_columns == 3
		assert dataset.column_names == ["col_1", "col_2", "col_3"]
		for feature, expected_dtype in expected_features.items():
				assert dataset.features[feature].dtype == expected_dtype
@pytest.mark.parametrize('keep_in_memory',		[False, True]     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     List[Any]            =       tmp_path / 'cache'
		lowerCamelCase	:     Optional[int]            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
				lowerCamelCase	:     Tuple            =       CsvDatasetReader(a_,		cache_dir=a_,		keep_in_memory=a_     ).read()
		_check_csv_dataset(a_,		a_     )
@pytest.mark.parametrize(
    'features',		[
        None,
        {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'},
        {'col_1': 'string', 'col_2': 'string', 'col_3': 'string'},
        {'col_1': 'int32', 'col_2': 'int32', 'col_3': 'int32'},
        {'col_1': 'float32', 'col_2': 'float32', 'col_3': 'float32'},
    ],		)
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     int            =       tmp_path / 'cache'
		# CSV file loses col_1 string dtype information: default now is "int64" instead of "string"
		lowerCamelCase	:     List[str]            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     str            =       features.copy() if features else default_expected_features
		lowerCamelCase	:     List[Any]            =       (
		    Features({feature: Value(a_     ) for feature, dtype in features.items()}     ) if features is not None else None
		)
		lowerCamelCase	:     Union[str, Any]            =       CsvDatasetReader(a_,		features=a_,		cache_dir=a_     ).read()
		_check_csv_dataset(a_,		a_     )
@pytest.mark.parametrize('split',		[None, NamedSplit('train'     ), 'train', 'test']     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Any            =       tmp_path / 'cache'
		lowerCamelCase	:     Dict            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     Dict            =       CsvDatasetReader(a_,		cache_dir=a_,		split=a_     ).read()
		_check_csv_dataset(a_,		a_     )
		assert dataset.split == split if split else "train"
@pytest.mark.parametrize('path_type',		[str, list]     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		if issubclass(a_,		a_     ):
				lowerCamelCase	:     Dict            =       csv_path
		elif issubclass(a_,		a_     ):
				lowerCamelCase	:     Tuple            =       [csv_path]
		lowerCamelCase	:     Optional[Any]            =       tmp_path / 'cache'
		lowerCamelCase	:     Tuple            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     List[Any]            =       CsvDatasetReader(a_,		cache_dir=a_     ).read()
		_check_csv_dataset(a_,		a_     )
def 						UpperCAmelCase   (						a_,		a_,		a_=("train",)     ):





		'''simple docstring'''


		assert isinstance(a_,		a_     )
		for split in splits:
				lowerCamelCase	:     Any            =       dataset_dict[split]
				assert dataset.num_rows == 4
				assert dataset.num_columns == 3
				assert dataset.column_names == ["col_1", "col_2", "col_3"]
				for feature, expected_dtype in expected_features.items():
						assert dataset.features[feature].dtype == expected_dtype
@pytest.mark.parametrize('keep_in_memory',		[False, True]     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Any            =       tmp_path / 'cache'
		lowerCamelCase	:     int            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
				lowerCamelCase	:     int            =       CsvDatasetReader({'train': csv_path},		cache_dir=a_,		keep_in_memory=a_     ).read()
		_check_csv_datasetdict(a_,		a_     )
@pytest.mark.parametrize(
    'features',		[
        None,
        {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'},
        {'col_1': 'string', 'col_2': 'string', 'col_3': 'string'},
        {'col_1': 'int32', 'col_2': 'int32', 'col_3': 'int32'},
        {'col_1': 'float32', 'col_2': 'float32', 'col_3': 'float32'},
    ],		)
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     str            =       tmp_path / 'cache'
		# CSV file loses col_1 string dtype information: default now is "int64" instead of "string"
		lowerCamelCase	:     Dict            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     str            =       features.copy() if features else default_expected_features
		lowerCamelCase	:     Any            =       (
		    Features({feature: Value(a_     ) for feature, dtype in features.items()}     ) if features is not None else None
		)
		lowerCamelCase	:     Optional[Any]            =       CsvDatasetReader({'train': csv_path},		features=a_,		cache_dir=a_     ).read()
		_check_csv_datasetdict(a_,		a_     )
@pytest.mark.parametrize('split',		[None, NamedSplit('train'     ), 'train', 'test']     )
def 						UpperCAmelCase   (						a_,		a_,		a_     ):





		'''simple docstring'''


		if split:
				lowerCamelCase	:     List[Any]            =       {split: csv_path}
		else:
				lowerCamelCase	:     Any            =       {'train': csv_path, 'test': csv_path}
		lowerCamelCase	:     List[Any]            =       tmp_path / 'cache'
		lowerCamelCase	:     Union[str, Any]            =       {'col_1': 'int64', 'col_2': 'int64', 'col_3': 'float64'}
		lowerCamelCase	:     Union[str, Any]            =       CsvDatasetReader(a_,		cache_dir=a_     ).read()
		_check_csv_datasetdict(a_,		a_,		splits=list(path.keys()     )     )
		assert all(dataset[split].split == split for split in path.keys()     )
def 						UpperCAmelCase   (						a_     ):





		'''simple docstring'''


		with open(a_,		encoding='utf-8'     ) as csvfile:
				yield from csv.reader(a_     )
def 						UpperCAmelCase   (						a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Optional[int]            =       tmp_path / 'cache'
		lowerCamelCase	:     int            =       os.path.join(a_,		'tmp.csv'     )
		lowerCamelCase	:     List[str]            =       CsvDatasetReader({'train': csv_path},		cache_dir=a_     ).read()
		CsvDatasetWriter(dataset['train'],		a_,		num_proc=1     ).write()

		lowerCamelCase	:     Tuple            =       iter_csv_file(a_     )
		lowerCamelCase	:     Tuple            =       iter_csv_file(a_     )

		for rowa, rowa in zip(a_,		a_     ):
				assert rowa == rowa
def 						UpperCAmelCase   (						a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Optional[Any]            =       tmp_path / 'cache'
		lowerCamelCase	:     Optional[Any]            =       os.path.join(a_,		'tmp.csv'     )
		lowerCamelCase	:     Dict            =       CsvDatasetReader({'train': csv_path},		cache_dir=a_     ).read()
		CsvDatasetWriter(dataset['train'],		a_,		num_proc=2     ).write()

		lowerCamelCase	:     int            =       iter_csv_file(a_     )
		lowerCamelCase	:     Optional[int]            =       iter_csv_file(a_     )

		for rowa, rowa in zip(a_,		a_     ):
				assert rowa == rowa





def 						UpperCAmelCase   (						a_,		a_     ):





		'''simple docstring'''


		lowerCamelCase	:     Tuple            =       tmp_path / 'cache'
		lowerCamelCase	:     Optional[Any]            =       os.path.join(a_,		'tmp.csv'     )
		lowerCamelCase	:     Optional[int]            =       CsvDatasetReader({'train': csv_path},		cache_dir=a_     ).read()
		with pytest.raises(a_     ):
				CsvDatasetWriter(dataset['train'],		a_,		num_proc=0     )






