
from typing import List, Optional, TypeVar

from .arrow_dataset import Dataset, _concatenate_map_style_datasets, _interleave_map_style_datasets
from .dataset_dict import DatasetDict, IterableDatasetDict
from .info import DatasetInfo
from .iterable_dataset import IterableDataset, _concatenate_iterable_datasets, _interleave_iterable_datasets
from .splits import NamedSplit
from .utils import logging
from .utils.py_utils import Literal


UpperCamelCase__      :		List[Any]       							=  logging.get_logger(__name__)


UpperCamelCase__      :		str       							=  TypeVar("DatasetType", Dataset, IterableDataset)
def    lowerCAmelCase_	(				SCREAMING_SNAKE_CASE_    ,      SCREAMING_SNAKE_CASE_ = None    ,      SCREAMING_SNAKE_CASE_ = None    ,      SCREAMING_SNAKE_CASE_ = None    ,      SCREAMING_SNAKE_CASE_ = None    ,      SCREAMING_SNAKE_CASE_ = "first_exhausted"    ,      )     ->     List[str]:




   """simple docstring"""
   from .arrow_dataset import Dataset
   from .iterable_dataset import IterableDataset

   if not datasets:
      raise ValueError("""Unable to interleave an empty list of datasets."""						)
   for i, dataset in enumerate(snake_case__						):
      if not isinstance(snake_case__    ,      (Dataset, IterableDataset)						):
         if isinstance(snake_case__    ,      (DatasetDict, IterableDatasetDict)						):
            if not dataset:
               raise ValueError(
                   F"Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} "
                   """is an empty dataset dictionary."""						)
            raise ValueError(
                F"Dataset at position {i} has at least one split: {list(snake_case__						)}\n"
                F"Please pick one to interleave with the other datasets, for example: dataset['{next(iter(snake_case__						)						)}']"						)
         raise ValueError(
             F"Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} is a {type(snake_case__						).__name__}."						)
      if i == 0:
         _SCREAMING_SNAKE_CASE      =				(
             (Dataset, IterableDataset) if isinstance(snake_case__    ,      snake_case__						) else (IterableDataset, Dataset)
         )
      elif not isinstance(snake_case__    ,      snake_case__						):
         raise ValueError(
             F"Unable to interleave a {dataset_type.__name__} (at position 0) with a {other_type.__name__} (at position {i}). Expected a list of Dataset objects or a list of IterableDataset objects."						)
   if stopping_strategy not in ["first_exhausted", "all_exhausted"]:
      raise ValueError(F"{stopping_strategy} is not supported. Please enter a valid stopping_strategy."						)
   if dataset_type is Dataset:
      return _interleave_map_style_datasets(
          snake_case__    ,      snake_case__    ,      snake_case__    ,      info=snake_case__    ,      split=snake_case__    ,      stopping_strategy=snake_case__						)
   else:
      return _interleave_iterable_datasets(
          snake_case__    ,      snake_case__    ,      snake_case__    ,      info=snake_case__    ,      split=snake_case__    ,      stopping_strategy=snake_case__						)







def    lowerCAmelCase_	(				SCREAMING_SNAKE_CASE_    ,      SCREAMING_SNAKE_CASE_ = None    ,      SCREAMING_SNAKE_CASE_ = None    ,      SCREAMING_SNAKE_CASE_ = 0    ,      )     ->     int:




   """simple docstring"""

   if not dsets:
      raise ValueError("""Unable to concatenate an empty list of datasets."""						)
   for i, dataset in enumerate(snake_case__						):
      if not isinstance(snake_case__    ,      (Dataset, IterableDataset)						):
         if isinstance(snake_case__    ,      (DatasetDict, IterableDatasetDict)						):
            if not dataset:
               raise ValueError(
                   F"Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} "
                   """is an empty dataset dictionary."""						)
            raise ValueError(
                F"Dataset at position {i} has at least one split: {list(snake_case__						)}\n"
                F"Please pick one to interleave with the other datasets, for example: dataset['{next(iter(snake_case__						)						)}']"						)
         raise ValueError(
             F"Expected a list of Dataset objects or a list of IterableDataset objects, but element at position {i} is a {type(snake_case__						).__name__}."						)
      if i == 0:
         _SCREAMING_SNAKE_CASE      =				(
             (Dataset, IterableDataset) if isinstance(snake_case__    ,      snake_case__						) else (IterableDataset, Dataset)
         )
      elif not isinstance(snake_case__    ,      snake_case__						):
         raise ValueError(
             F"Unable to interleave a {dataset_type.__name__} (at position 0) with a {other_type.__name__} (at position {i}). Expected a list of Dataset objects or a list of IterableDataset objects."						)
   if dataset_type is Dataset:
      return _concatenate_map_style_datasets(snake_case__    ,      info=snake_case__    ,      split=snake_case__    ,      axis=snake_case__						)
   else:
      return _concatenate_iterable_datasets(snake_case__    ,      info=snake_case__    ,      split=snake_case__    ,      axis=snake_case__						)








'''simple docstring'''



from sklearn.metrics import matthews_corrcoef

import datasets


UpperCamelCase__      :		List[str]       							=  "\nCompute the Matthews correlation coefficient (MCC)\n\nThe Matthews correlation coefficient is used in machine learning as a\nmeasure of the quality of binary and multiclass classifications. It takes\ninto account true and false positives and negatives and is generally\nregarded as a balanced measure which can be used even if the classes are of\nvery different sizes. The MCC is in essence a correlation coefficient value\nbetween -1 and +1. A coefficient of +1 represents a perfect prediction, 0\nan average random prediction and -1 an inverse prediction.  The statistic\nis also known as the phi coefficient. [source: Wikipedia]\n"

UpperCamelCase__      :		List[Any]       							=  "\nArgs:\n    predictions (list of int): Predicted labels, as returned by a model.\n    references (list of int): Ground truth labels.\n    sample_weight (list of int, float, or bool): Sample weights. Defaults to `None`.\nReturns:\n    matthews_correlation (dict containing float): Matthews correlation.\nExamples:\n    Example 1, a basic example with only predictions and references as inputs:\n        >>> matthews_metric = datasets.load_metric(\"matthews_correlation\")\n        >>> results = matthews_metric.compute(references=[1, 3, 2, 0, 3, 2],\n        ...                                     predictions=[1, 2, 2, 0, 3, 3])\n        >>> print(round(results['matthews_correlation'], 2))\n        0.54\n\n    Example 2, the same example as above, but also including sample weights:\n        >>> matthews_metric = datasets.load_metric(\"matthews_correlation\")\n        >>> results = matthews_metric.compute(references=[1, 3, 2, 0, 3, 2],\n        ...                                     predictions=[1, 2, 2, 0, 3, 3],\n        ...                                     sample_weight=[0.5, 3, 1, 1, 1, 2])\n        >>> print(round(results['matthews_correlation'], 2))\n        0.1\n\n    Example 3, the same example as above, but with sample weights that cause a negative correlation:\n        >>> matthews_metric = datasets.load_metric(\"matthews_correlation\")\n        >>> results = matthews_metric.compute(references=[1, 3, 2, 0, 3, 2],\n        ...                                     predictions=[1, 2, 2, 0, 3, 3],\n        ...                                     sample_weight=[0.5, 1, 0, 0, 0, 1])\n        >>> print(round(results['matthews_correlation'], 2))\n        -0.25\n"

UpperCamelCase__      :		Any       							=  "\\n@article{scikit-learn,\n  title={Scikit-learn: Machine Learning in {P}ython},\n  author={Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V.\n         and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P.\n         and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and\n         Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.},\n  journal={Journal of Machine Learning Research},\n  volume={12},\n  pages={2825--2830},\n  year={2011}\n}\n"

@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION  ,					_KWARGS_DESCRIPTION)
class    _a				(datasets.Metric):





       """simple docstring"""




       def        UpperCamelCase				(							self      )    ->			Optional[Any]:
          return datasets.MetricInfo(
              description=_DESCRIPTION       ,							citation=_CITATION       ,							inputs_description=_KWARGS_DESCRIPTION       ,							features=datasets.Features(
                  {
                      """predictions""": datasets.Value("""int32"""      ),
                      """references""": datasets.Value("""int32"""      ),
                  }      )       ,							reference_urls=[
                  """https://scikit-learn.org/stable/modules/generated/sklearn.metrics.matthews_corrcoef.html"""
              ]       ,							)






       def        UpperCamelCase				(							self       ,							A__       ,							A__       ,							A__=None      )    ->			List[str]:
          return {
              "matthews_correlation": float(matthews_corrcoef(A__       ,							A__       ,							sample_weight=A__      )      ),
          }






