'''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       lowerCAmelCase					(		UpperCamelCase__				:   Any    ,					UpperCamelCase__				:   Dict       ):


	"""simple docstring"""
	assert isinstance(UpperCamelCase__    ,					UpperCamelCase__       )
	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       lowerCAmelCase					(		UpperCamelCase__				:   List[Any]    ,					UpperCamelCase__				:   int    ,					UpperCamelCase__				:   List[Any]    ,					UpperCamelCase__				:   List[str]       ):


	"""simple docstring"""
	__UpperCAmelCase							=			tmp_path / '''cache'''
	__UpperCAmelCase							=			{'''col_1''': '''string''', '''col_2''': '''int64''', '''col_3''': '''float64'''}
	with assert_arrow_memory_increases() if keep_in_memory else assert_arrow_memory_doesnt_increase():
		__UpperCAmelCase							=			SqlDatasetReader(
		    '''dataset'''    ,					'''sqlite:///''' + sqlite_path    ,					cache_dir=UpperCamelCase__    ,					keep_in_memory=UpperCamelCase__       ).read()
	_check_sql_dataset(UpperCamelCase__    ,					UpperCamelCase__       )





@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       lowerCAmelCase					(		UpperCamelCase__				:   Optional[Any]    ,					UpperCamelCase__				:   Union[str, Any]    ,					UpperCamelCase__				:   Any    ,					UpperCamelCase__				:   Tuple       ):


	"""simple docstring"""
	__UpperCAmelCase							=			tmp_path / '''cache'''
	__UpperCAmelCase							=			{'''col_1''': '''string''', '''col_2''': '''int64''', '''col_3''': '''float64'''}
	__UpperCAmelCase							=			features.copy() if features else default_expected_features
	__UpperCAmelCase							=			(
	    Features({feature: Value(UpperCamelCase__       ) for feature, dtype in features.items()}       ) if features is not None else None
	)
	__UpperCAmelCase							=			SqlDatasetReader('''dataset'''    ,					'''sqlite:///''' + sqlite_path    ,					features=UpperCamelCase__    ,					cache_dir=UpperCamelCase__       ).read()
	_check_sql_dataset(UpperCamelCase__    ,					UpperCamelCase__       )





def       lowerCAmelCase					(		UpperCamelCase__				:   List[str]       ):


	"""simple docstring"""
	with contextlib.closing(sqlitea.connect(UpperCamelCase__       )       ) as con:
		__UpperCAmelCase							=			con.cursor()
		cur.execute('''SELECT * FROM dataset'''       )
		for row in cur:
			yield row





@require_sqlalchemy
def       lowerCAmelCase					(		UpperCamelCase__				:   Optional[int]    ,					UpperCamelCase__				:   List[Any]    ,					UpperCamelCase__				:   int       ):


	"""simple docstring"""
	__UpperCAmelCase							=			tmp_path / '''cache'''
	__UpperCAmelCase							=			os.path.join(UpperCamelCase__    ,					'''tmp.sql'''       )
	__UpperCAmelCase							=			SqlDatasetReader('''dataset'''    ,					'''sqlite:///''' + sqlite_path    ,					cache_dir=UpperCamelCase__       ).read()
	SqlDatasetWriter(UpperCamelCase__    ,					'''dataset'''    ,					'''sqlite:///''' + output_sqlite_path    ,					num_proc=1       ).write()

	__UpperCAmelCase							=			iter_sql_file(UpperCamelCase__       )
	__UpperCAmelCase							=			iter_sql_file(UpperCamelCase__       )

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





@require_sqlalchemy
def       lowerCAmelCase					(		UpperCamelCase__				:   int    ,					UpperCamelCase__				:   int    ,					UpperCamelCase__				:   Any       ):


	"""simple docstring"""
	__UpperCAmelCase							=			tmp_path / '''cache'''
	__UpperCAmelCase							=			os.path.join(UpperCamelCase__    ,					'''tmp.sql'''       )
	__UpperCAmelCase							=			SqlDatasetReader('''dataset'''    ,					'''sqlite:///''' + sqlite_path    ,					cache_dir=UpperCamelCase__       ).read()
	SqlDatasetWriter(UpperCamelCase__    ,					'''dataset'''    ,					'''sqlite:///''' + output_sqlite_path    ,					num_proc=2       ).write()

	__UpperCAmelCase							=			iter_sql_file(UpperCamelCase__       )
	__UpperCAmelCase							=			iter_sql_file(UpperCamelCase__       )

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





@require_sqlalchemy
def       lowerCAmelCase					(		UpperCamelCase__				:   str    ,					UpperCamelCase__				:   Tuple    ,					UpperCamelCase__				:   str       ):


	"""simple docstring"""
	__UpperCAmelCase							=			tmp_path / '''cache'''
	__UpperCAmelCase							=			os.path.join(UpperCamelCase__    ,					'''tmp.sql'''       )
	__UpperCAmelCase							=			SqlDatasetReader('''dataset'''    ,					'''sqlite:///''' + sqlite_path    ,					cache_dir=UpperCamelCase__       ).read()
	with pytest.raises(UpperCamelCase__       ):
		SqlDatasetWriter(UpperCamelCase__    ,					'''dataset'''    ,					'''sqlite:///''' + output_sqlite_path    ,					num_proc=0       ).write()

'''simple docstring'''


import argparse
import os
import re

import packaging.version


__lowerCAmelCase	:       Optional[int]						       =	"examples/"
__lowerCAmelCase	:       Dict						       =	{
    "examples": (re.compile(r"^check_min_version\(\"[^\"]+\"\)\s*$", re.MULTILINE), "check_min_version(\"VERSION\")\n"),
    "init": (re.compile(r"^__version__\s+=\s+\"([^\"]+)\"\s*$", re.MULTILINE), "__version__ = \"VERSION\"\n"),
    "setup": (re.compile(r"^(\s*)version\s*=\s*\"[^\"]+\",", re.MULTILINE), r"\1version=\"VERSION\","),
    "doc": (re.compile(r"^(\s*)release\s*=\s*\"[^\"]+\"$", re.MULTILINE), "release = \"VERSION\"\n"),
}
__lowerCAmelCase	:       List[str]						       =	{
    "init": "src/transformers/__init__.py",
    "setup": "setup.py",
}
__lowerCAmelCase	:       int						       =	"README.md"





def       lowerCAmelCase					(		UpperCamelCase__				:   List[str]    ,					UpperCamelCase__				:   int    ,					UpperCamelCase__				:   Tuple       ):


	"""simple docstring"""
	with open(UpperCamelCase__    ,					'''r'''    ,					encoding='''utf-8'''    ,					newline='''\n'''       ) as f:
		__UpperCAmelCase							=			f.read()
	__UpperCAmelCase				,			__UpperCAmelCase							=			REPLACE_PATTERNS[pattern]
	__UpperCAmelCase							=			replace.replace('''VERSION'''    ,					UpperCamelCase__       )
	__UpperCAmelCase							=			re_pattern.sub(UpperCamelCase__    ,					UpperCamelCase__       )
	with open(UpperCamelCase__    ,					'''w'''    ,					encoding='''utf-8'''    ,					newline='''\n'''       ) as f:
		f.write(UpperCamelCase__       )





def       lowerCAmelCase					(		UpperCamelCase__				:   Optional[int]       ):


	"""simple docstring"""
	for folder, directories, fnames in os.walk(UpperCamelCase__       ):
		# Removing some of the folders with non-actively maintained examples from the walk
		if "research_projects" in directories:
			directories.remove('''research_projects'''       )
		if "legacy" in directories:
			directories.remove('''legacy'''       )
		for fname in fnames:
			if fname.endswith('''.py'''       ):
				update_version_in_file(os.path.join(UpperCamelCase__    ,					UpperCamelCase__       )    ,					UpperCamelCase__    ,					pattern='''examples'''       )





def       lowerCAmelCase					(		UpperCamelCase__				:   Any    ,					UpperCamelCase__				:   Any=False       ):


	"""simple docstring"""
	for pattern, fname in REPLACE_FILES.items():
		update_version_in_file(UpperCamelCase__    ,					UpperCamelCase__    ,					UpperCamelCase__       )
	if not patch:
		update_version_in_examples(UpperCamelCase__       )





def       lowerCAmelCase					(		):


	"""simple docstring"""
	__UpperCAmelCase							=			'''🤗 Transformers currently provides the following architectures'''
	__UpperCAmelCase							=			'''1. Want to contribute a new model?'''
	with open(UpperCamelCase__    ,					'''r'''    ,					encoding='''utf-8'''    ,					newline='''\n'''       ) as f:
		__UpperCAmelCase							=			f.readlines()

	# Find the start of the list.
	__UpperCAmelCase							=			0
	while not lines[start_index].startswith(_start_prompt       ):
		start_index += 1
	start_index += 1

	__UpperCAmelCase							=			start_index
	# Update the lines in the model list.
	while not lines[index].startswith(_end_prompt       ):
		if lines[index].startswith('''1.'''       ):
			__UpperCAmelCase							=			lines[index].replace(
			    '''https://huggingface.co/docs/transformers/main/model_doc'''    ,					'''https://huggingface.co/docs/transformers/model_doc'''    ,					)
		index += 1

	with open(UpperCamelCase__    ,					'''w'''    ,					encoding='''utf-8'''    ,					newline='''\n'''       ) as f:
		f.writelines(UpperCamelCase__       )





def       lowerCAmelCase					(		):


	"""simple docstring"""
	with open(REPLACE_FILES['''init''']    ,					'''r'''       ) as f:
		__UpperCAmelCase							=			f.read()
	__UpperCAmelCase							=			REPLACE_PATTERNS['''init'''][0].search(UpperCamelCase__       ).groups()[0]
	return packaging.version.parse(UpperCamelCase__       )





def       lowerCAmelCase					(		UpperCamelCase__				:   Any=False       ):


	"""simple docstring"""
	__UpperCAmelCase							=			get_version()
	if patch and default_version.is_devrelease:
		raise ValueError('''Can\'t create a patch version from the dev branch, checkout a released version!'''       )
	if default_version.is_devrelease:
		__UpperCAmelCase							=			default_version.base_version
	elif patch:
		__UpperCAmelCase							=			f"""{default_version.major}.{default_version.minor}.{default_version.micro + 1}"""
	else:
		__UpperCAmelCase							=			f"""{default_version.major}.{default_version.minor + 1}.0"""

	# Now let's ask nicely if that's the right one.
	__UpperCAmelCase							=			input(f"""Which version are you releasing? [{default_version}]"""       )
	if len(UpperCamelCase__       ) == 0:
		__UpperCAmelCase							=			default_version

	print(f"""Updating version to {version}."""       )
	global_version_update(UpperCamelCase__    ,					patch=UpperCamelCase__       )
	if not patch:
		print('''Cleaning main README, don\'t forget to run `make fix-copies`.'''       )
		clean_main_ref_in_model_list()





def       lowerCAmelCase					(		):


	"""simple docstring"""
	__UpperCAmelCase							=			get_version()
	__UpperCAmelCase							=			f"""{current_version.major}.{current_version.minor + 1}.0.dev0"""
	__UpperCAmelCase							=			current_version.base_version

	# Check with the user we got that right.
	__UpperCAmelCase							=			input(f"""Which version are we developing now? [{dev_version}]"""       )
	if len(UpperCamelCase__       ) == 0:
		__UpperCAmelCase							=			dev_version

	print(f"""Updating version to {version}."""       )
	global_version_update(UpperCamelCase__       )
	print('''Cleaning main README, don\'t forget to run `make fix-copies`.'''       )
	clean_main_ref_in_model_list()


if __name__ == "__main__":
					__lowerCAmelCase	:       Tuple						       =	argparse.ArgumentParser()
					parser.add_argument("--post_release", action="store_true", help="Whether this is pre or post release.")
					parser.add_argument("--patch", action="store_true", help="Whether or not this is a patch release.")
					__lowerCAmelCase	:       Tuple						       =	parser.parse_args()
					if not args.post_release:
										pre_release_work(patch=args.patch)
					elif args.patch:
										print("Nothing to do after a patch :-)")
					else:
										post_release_work()
