





'''simple docstring'''

import contextlib
import os
import sqlitea

import pytest

from datasets import Dataset, Features, Value
from datasets.io.sql import SqlDatasetReader, SqlDatasetWriter

from ..utils import assert_arrow_memory_doesnt_increase, assert_arrow_memory_increases, require_sqlalchemy





def 						UpperCamelCase    (							_lowerCamelCase : int						,	_lowerCamelCase : Tuple	):
    assert isinstance(_lowerCamelCase						,	_lowerCamelCase	)
    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





@require_sqlalchemy
@pytest.mark.parametrize("keep_in_memory"						,	[False, True]	)
def 						UpperCamelCase    (							_lowerCamelCase : str						,	_lowerCamelCase : int						,	_lowerCamelCase : Optional[int]						,	_lowerCamelCase : Optional[int]	):
    A__    =      tmp_path / "cache"
    A__    =      {"col_1": "string", "col_2": "int64", "col_3": "float64"}
    with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
        A__    =      SqlDatasetReader(
            "dataset"						,	"sqlite:///" + sqlite_path						,	cache_dir=_lowerCamelCase						,	keep_in_memory=_lowerCamelCase	).read()
    _check_sql_dataset(_lowerCamelCase						,	_lowerCamelCase	)





@require_sqlalchemy
@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    (							_lowerCamelCase : Optional[Any]						,	_lowerCamelCase : Optional[int]						,	_lowerCamelCase : Any						,	_lowerCamelCase : str	):
    A__    =      tmp_path / "cache"
    A__    =      {"col_1": "string", "col_2": "int64", "col_3": "float64"}
    A__    =      features.copy() if features else default_expected_features
    A__    =      (
        Features({feature: Value(_lowerCamelCase	) for feature, dtype in features.items()}	) if features is not None else None
    )
    A__    =      SqlDatasetReader("dataset"						,	"sqlite:///" + sqlite_path						,	features=_lowerCamelCase						,	cache_dir=_lowerCamelCase	).read()
    _check_sql_dataset(_lowerCamelCase						,	_lowerCamelCase	)





def 						UpperCamelCase    (							_lowerCamelCase : List[Any]	):
    with contextlib.closing(sqlitea.connect(_lowerCamelCase	)	) as con:
        A__    =      con.cursor()
        cur.execute("SELECT * FROM dataset"	)
        for row in cur:
            yield row





@require_sqlalchemy
def 						UpperCamelCase    (							_lowerCamelCase : Optional[Any]						,	_lowerCamelCase : Tuple						,	_lowerCamelCase : Any	):
    A__    =      tmp_path / "cache"
    A__    =      os.path.join(_lowerCamelCase						,	"tmp.sql"	)
    A__    =      SqlDatasetReader("dataset"						,	"sqlite:///" + sqlite_path						,	cache_dir=_lowerCamelCase	).read()
    SqlDatasetWriter(_lowerCamelCase						,	"dataset"						,	"sqlite:///" + output_sqlite_path						,	num_proc=1	).write()

    A__    =      iter_sql_file(_lowerCamelCase	)
    A__    =      iter_sql_file(_lowerCamelCase	)

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





@require_sqlalchemy
def 						UpperCamelCase    (							_lowerCamelCase : List[Any]						,	_lowerCamelCase : List[Any]						,	_lowerCamelCase : str	):
    A__    =      tmp_path / "cache"
    A__    =      os.path.join(_lowerCamelCase						,	"tmp.sql"	)
    A__    =      SqlDatasetReader("dataset"						,	"sqlite:///" + sqlite_path						,	cache_dir=_lowerCamelCase	).read()
    SqlDatasetWriter(_lowerCamelCase						,	"dataset"						,	"sqlite:///" + output_sqlite_path						,	num_proc=2	).write()

    A__    =      iter_sql_file(_lowerCamelCase	)
    A__    =      iter_sql_file(_lowerCamelCase	)

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





@require_sqlalchemy
def 						UpperCamelCase    (							_lowerCamelCase : List[str]						,	_lowerCamelCase : int						,	_lowerCamelCase : int	):
    A__    =      tmp_path / "cache"
    A__    =      os.path.join(_lowerCamelCase						,	"tmp.sql"	)
    A__    =      SqlDatasetReader("dataset"						,	"sqlite:///" + sqlite_path						,	cache_dir=_lowerCamelCase	).read()
    with pytest.raises(_lowerCamelCase	):
        SqlDatasetWriter(_lowerCamelCase						,	"dataset"						,	"sqlite:///" + output_sqlite_path						,	num_proc=0	).write()










'''simple docstring'''

from .imports import is_tqdm_available


if is_tqdm_available():
  from tqdm.auto import tqdm as _tqdm

from ..state import PartialState





def 						UpperCamelCase    (							_lowerCamelCase : bool = True						,	*_lowerCamelCase : Optional[int]						,	**_lowerCamelCase : Optional[Any]	):
    if not is_tqdm_available():
        raise ImportError("Accelerate's `tqdm` module requires `tqdm` to be installed. Please run `pip install tqdm`."	)
    A__    =      False
    if main_process_only:
        A__    =      PartialState().local_process_index == 0
    return _tqdm(*_lowerCamelCase						,	**_lowerCamelCase						,	disable=_lowerCamelCase	)



