


import unittest

from transformers import load_tool

from .test_tools_common import ToolTesterMixin


snake_case__  				=			'\nHugging Face was founded in 2016 by French entrepreneurs Clément Delangue, Julien Chaumond, and Thomas Wolf originally as a company that developed a chatbot app targeted at teenagers.[2] After open-sourcing the model behind the chatbot, the company pivoted to focus on being a platform for machine learning.\n\nIn March 2021, Hugging Face raised $40 million in a Series B funding round.[3]\n\nOn April 28, 2021, the company launched the BigScience Research Workshop in collaboration with several other research groups to release an open large language model.[4] In 2022, the workshop concluded with the announcement of BLOOM, a multilingual large language model with 176 billion parameters.[5]\n'



class      snake_case__	(   unittest.TestCase    ,							_A	):
				def 			UpperCamelCase_    (	self   ):




										"""simple docstring"""




										__magic_name__					:				int				=   load_tool('summarization'   )
										self.tool.setup()
										__magic_name__					:				Optional[Any]				=   load_tool('summarization'  ,   remote=_UpperCAmelCase   )
				def 			UpperCamelCase_    (	self   ):




										"""simple docstring"""




										__magic_name__					:				Dict				=   self.tool(_UpperCAmelCase   )
										self.assertEqual(
										    _UpperCAmelCase  ,   'Hugging Face was founded in 2016 by French entrepreneurs Clément Delangue, Julien Chaumond, and Thomas Wolf. In March 2021, Hugging Face raised $40 million in a Series B funding round. On April 28, 2021, the company launched the BigScience Research Workshop in collaboration with several other research groups to release an open large language model. In 2022, the workshop concluded with the announcement of BLOOM.'  ,   )
				def 			UpperCamelCase_    (	self   ):




										"""simple docstring"""




										__magic_name__					:				List[str]				=   self.remote_tool(_UpperCAmelCase   )
										self.assertEqual(
										    _UpperCAmelCase  ,   'Hugging Face was founded in 2016 by French entrepreneurs Clément Delangue, Julien Chaumond, and Thomas Wolf. In March 2021, Hugging Face raised $40 million in a Series B funding round. On April 28, 2021, the company launched the BigScience Research Workshop in collaboration with several other research groups to release an open large language model. In 2022, the workshop concluded with the announcement of BLOOM.'  ,   )
				def 			UpperCamelCase_    (	self   ):




										"""simple docstring"""




										__magic_name__					:				Union[str, Any]				=   self.tool(text=_UpperCAmelCase   )
										self.assertEqual(
										    _UpperCAmelCase  ,   'Hugging Face was founded in 2016 by French entrepreneurs Clément Delangue, Julien Chaumond, and Thomas Wolf. In March 2021, Hugging Face raised $40 million in a Series B funding round. On April 28, 2021, the company launched the BigScience Research Workshop in collaboration with several other research groups to release an open large language model. In 2022, the workshop concluded with the announcement of BLOOM.'  ,   )





				def 			UpperCamelCase_    (	self   ):




										"""simple docstring"""




										__magic_name__					:				str				=   self.remote_tool(text=_UpperCAmelCase   )
										self.assertEqual(
										    _UpperCAmelCase  ,   'Hugging Face was founded in 2016 by French entrepreneurs Clément Delangue, Julien Chaumond, and Thomas Wolf. In March 2021, Hugging Face raised $40 million in a Series B funding round. On April 28, 2021, the company launched the BigScience Research Workshop in collaboration with several other research groups to release an open large language model. In 2022, the workshop concluded with the announcement of BLOOM.'  ,   )






import sys
from dataclasses import dataclass
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union

import pandas as pd
import pyarrow as pa

import datasets
import datasets.config
from datasets.features.features import require_storage_cast
from datasets.table import table_cast


if TYPE_CHECKING:
			import sqlitea

			import sqlalchemy


snake_case__  				=			datasets.utils.logging.get_logger(__name__)



@dataclass
class      snake_case__	(   datasets.BuilderConfig	):
				__lowerCAmelCase		=   None
				__lowerCAmelCase		=   None
				__lowerCAmelCase		=   None
				__lowerCAmelCase		=   True
				__lowerCAmelCase		=   None
				__lowerCAmelCase		=   None
				__lowerCAmelCase		=   None
				__lowerCAmelCase		=   10_000
				__lowerCAmelCase		=   None
				def 			UpperCamelCase_    (	self   ):




										"""simple docstring"""




										if self.sql is None:
																raise ValueError('sql must be specified'   )
										if self.con is None:
																raise ValueError('con must be specified'   )
				def 			UpperCamelCase_    (	self  ,   _UpperCAmelCase  ,   _UpperCAmelCase = None  ,   ):




										"""simple docstring"""




										__magic_name__					:				Optional[int]				=   config_kwargs.copy()
										# We need to stringify the Selectable object to make its hash deterministic

										# The process of stringifying is explained here: http://docs.sqlalchemy.org/en/latest/faq/sqlexpressions.html
										__magic_name__					:				Union[str, Any]				=   config_kwargs['sql']
										if not isinstance(_UpperCAmelCase  ,   _UpperCAmelCase   ):
																if datasets.config.SQLALCHEMY_AVAILABLE and "sqlalchemy" in sys.modules:
																						import sqlalchemy

																						if isinstance(_UpperCAmelCase  ,   sqlalchemy.sql.Selectable   ):
																												__magic_name__					:				List[Any]				=   sqlalchemy.create_engine(config_kwargs['con'].split('://'   )[0] + '://'   )
																												__magic_name__					:				Any				=   str(sql.compile(dialect=engine.dialect   )   )
																												__magic_name__					:				str				=   sql_str
																						else:
																												raise TypeError(
																												    F"Supported types for 'sql' are string and sqlalchemy.sql.Selectable but got {type(_UpperCAmelCase   )}: {sql}"   )
																else:
																						raise TypeError(
																						    F"Supported types for 'sql' are string and sqlalchemy.sql.Selectable but got {type(_UpperCAmelCase   )}: {sql}"   )
										__magic_name__					:				List[Any]				=   config_kwargs['con']
										if not isinstance(_UpperCAmelCase  ,   _UpperCAmelCase   ):
																__magic_name__					:				Dict				=   id(_UpperCAmelCase   )
																logger.info(
																    F"SQL connection 'con' of type {type(_UpperCAmelCase   )} couldn't be hashed properly. To enable hashing, specify 'con' as URI string instead."   )

										return super().create_config_id(_UpperCAmelCase  ,   custom_features=_UpperCAmelCase   )





				@property
				def 			UpperCamelCase_    (	self   ):




										"""simple docstring"""




										__magic_name__					:				str				=   {
										    'index_col': self.index_col,
										    'columns': self.columns,
										    'params': self.params,
										    'coerce_float': self.coerce_float,
										    'parse_dates': self.parse_dates,
										}
										return pd_read_sql_kwargs






class      snake_case__	(   datasets.ArrowBasedBuilder	):
				__lowerCAmelCase		=   SqlConfig
				def 			UpperCamelCase_    (	self   ):




										"""simple docstring"""




										return datasets.DatasetInfo(features=self.config.features   )
				def 			UpperCamelCase_    (	self  ,   _UpperCAmelCase   ):




										"""simple docstring"""




										return [datasets.SplitGenerator(name=datasets.Split.TRAIN  ,   gen_kwargs={}   )]
				def 			UpperCamelCase_    (	self  ,   _UpperCAmelCase   ):




										"""simple docstring"""




										if self.config.features is not None:
																__magic_name__					:				List[Any]				=   self.config.features.arrow_schema
																if all(not require_storage_cast(_UpperCAmelCase   ) for feature in self.config.features.values()   ):
																						# cheaper cast
																						__magic_name__					:				Dict				=   pa.Table.from_arrays([pa_table[field.name] for field in schema]  ,   schema=_UpperCAmelCase   )
																else:
																						# more expensive cast; allows str <-> int/float or str to Audio for example
																						__magic_name__					:				List[Any]				=   table_cast(_UpperCAmelCase  ,   _UpperCAmelCase   )
										return pa_table





				def 			UpperCamelCase_    (	self   ):




										"""simple docstring"""




										__magic_name__					:				int				=   self.config.chunksize
										__magic_name__					:				Tuple				=   pd.read_sql(
										    self.config.sql  ,   self.config.con  ,   chunksize=_UpperCAmelCase  ,   **self.config.pd_read_sql_kwargs   )
										__magic_name__					:				Dict				=   [sql_reader] if chunksize is None else sql_reader
										for chunk_idx, df in enumerate(_UpperCAmelCase   ):
																__magic_name__					:				Optional[Any]				=   pa.Table.from_pandas(_UpperCAmelCase   )
																yield chunk_idx, self._cast_table(_UpperCAmelCase   )


