




'''simple docstring'''


import pyarrow.parquet as pq
import pytest

from datasets import Audio, Dataset, DatasetDict, Features, NamedSplit, Sequence, Value, config
from datasets.features.image import Image
from datasets.io.parquet import ParquetDatasetReader, ParquetDatasetWriter, get_writer_batch_size

from ..utils import assert_arrow_memory_doesnt_increase, assert_arrow_memory_increases
def 						lowerCamelCase__   (				a    ,	a							):
						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 						lowerCamelCase__   (				a    ,	a    ,	a							):
						__snake_case						 =   tmp_path / 'cache'
						__snake_case						 =   {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'}
						with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
												__snake_case						 =   ParquetDatasetReader(a    ,	cache_dir=a    ,	keep_in_memory=a							).read()
						_check_parquet_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 						lowerCamelCase__   (				a    ,	a    ,	a							):
						__snake_case						 =   tmp_path / 'cache'
						__snake_case						 =   {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'}
						__snake_case						 =   features.copy() if features else default_expected_features
						__snake_case						 =   (
						    Features({feature: Value(a							) for feature, dtype in features.items()}							) if features is not None else None
						)
						__snake_case						 =   ParquetDatasetReader(a    ,	features=a    ,	cache_dir=a							).read()
						_check_parquet_dataset(a    ,	a							)
@pytest.mark.parametrize('split'    ,	[None, NamedSplit('train'							), 'train', 'test']							)
def 						lowerCamelCase__   (				a    ,	a    ,	a							):
						__snake_case						 =   tmp_path / 'cache'
						__snake_case						 =   {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'}
						__snake_case						 =   ParquetDatasetReader(a    ,	cache_dir=a    ,	split=a							).read()
						_check_parquet_dataset(a    ,	a							)
						assert dataset.split == split if split else "train"
@pytest.mark.parametrize('path_type'    ,	[str, list]							)
def 						lowerCamelCase__   (				a    ,	a    ,	a							):
						if issubclass(a    ,	a							):
												__snake_case						 =   parquet_path
						elif issubclass(a    ,	a							):
												__snake_case						 =   [parquet_path]
						__snake_case						 =   tmp_path / 'cache'
						__snake_case						 =   {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'}
						__snake_case						 =   ParquetDatasetReader(a    ,	cache_dir=a							).read()
						_check_parquet_dataset(a    ,	a							)
def 						lowerCamelCase__   (				a    ,	a    ,	a=("train",)							):
						assert isinstance(a    ,	a							)
						for split in splits:
												__snake_case						 =   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 						lowerCamelCase__   (				a    ,	a    ,	a							):
						__snake_case						 =   tmp_path / 'cache'
						__snake_case						 =   {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'}
						with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
												__snake_case						 =   ParquetDatasetReader(
												    {'train': parquet_path}    ,	cache_dir=a    ,	keep_in_memory=a							).read()
						_check_parquet_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 						lowerCamelCase__   (				a    ,	a    ,	a							):
						__snake_case						 =   tmp_path / 'cache'
						__snake_case						 =   {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'}
						__snake_case						 =   features.copy() if features else default_expected_features
						__snake_case						 =   (
						    Features({feature: Value(a							) for feature, dtype in features.items()}							) if features is not None else None
						)
						__snake_case						 =   ParquetDatasetReader({'train': parquet_path}    ,	features=a    ,	cache_dir=a							).read()
						_check_parquet_datasetdict(a    ,	a							)
@pytest.mark.parametrize('split'    ,	[None, NamedSplit('train'							), 'train', 'test']							)
def 						lowerCamelCase__   (				a    ,	a    ,	a							):
						if split:
												__snake_case						 =   {split: parquet_path}
						else:
												__snake_case						 =   'train'
												__snake_case						 =   {'train': parquet_path, 'test': parquet_path}
						__snake_case						 =   tmp_path / 'cache'
						__snake_case						 =   {'col_1': 'string', 'col_2': 'int64', 'col_3': 'float64'}
						__snake_case						 =   ParquetDatasetReader(a    ,	cache_dir=a							).read()
						_check_parquet_datasetdict(a    ,	a    ,	splits=list(path.keys()							)							)
						assert all(dataset[split].split == split for split in path.keys()							)
def 						lowerCamelCase__   (				a    ,	a							):
						__snake_case						 =   ParquetDatasetWriter(a    ,	tmp_path / 'foo.parquet'							)
						assert writer.write() > 0
						__snake_case						 =   pq.ParquetFile(tmp_path / 'foo.parquet'							)
						__snake_case						 =   pf.read()
						assert dataset.data.table == output_table
def 						lowerCamelCase__   (				a    ,	a							):
						__snake_case						 =   str(shared_datadir / 'test_image_rgb.jpg'							)
						__snake_case						 =   {'image': [image_path]}
						__snake_case						 =   Features({'image': Image()}							)
						__snake_case						 =   Dataset.from_dict(a    ,	features=a							)
						__snake_case						 =   ParquetDatasetWriter(a    ,	tmp_path / 'foo.parquet'							)
						assert writer.write() > 0

						__snake_case						 =   Dataset.from_parquet(str(tmp_path / 'foo.parquet'							)							)
						assert dataset.features == reloaded_dataset.features

						__snake_case						 =   ParquetDatasetReader(str(tmp_path / 'foo.parquet'							)    ,	streaming=a							).read()
						assert dataset.features == reloaded_iterable_dataset.features






@pytest.mark.parametrize(
    'feature, expected'    ,	[
        (Features({'foo': Value('int32'							)}							), None),
        (Features({'image': Image(), 'foo': Value('int32'							)}							), config.PARQUET_ROW_GROUP_SIZE_FOR_IMAGE_DATASETS),
        (Features({'nested': Sequence(Audio()							)}							), config.PARQUET_ROW_GROUP_SIZE_FOR_AUDIO_DATASETS),
    ]    ,	)
def 						lowerCamelCase__   (				a    ,	a							):
						assert get_writer_batch_size(a							) == expected







'''simple docstring'''


def 						lowerCamelCase__   (				a							):
						assert (
						    isinstance(a    ,	a							) and number_of_steps > 0
						), f'number_of_steps needs to be positive integer, your input {number_of_steps}'
						if number_of_steps == 1:
												return 1
						__snake_case ,       __snake_case						 =   1, 1
						for _ in range(number_of_steps - 1							):
												__snake_case ,       __snake_case						 =   current + previous, current
						return current


if __name__ == "__main__":
	import doctest

	doctest.testmod()

