





import os

import pytest
import yaml

from datasets.features.features import Features, Value
from datasets.info import DatasetInfo, DatasetInfosDict


@pytest.mark.parametrize(
    '''files'''    ,       [
        ['''full:README.md''', '''dataset_infos.json'''],
        ['''empty:README.md''', '''dataset_infos.json'''],
        ['''dataset_infos.json'''],
        ['''full:README.md'''],
    ]    ,       )
def     SCREAMING_SNAKE_CASE			(      lowerCAmelCase    ,       lowerCAmelCase					):
       _UpperCamelCase              =						tmp_path_factory.mktemp('''dset_infos_dir'''					)
       if "full:README.md" in files:
              with open(dataset_infos_dir / '''README.md'''    ,       '''w'''					) as f:
                     f.write('''---\ndataset_info:\n  dataset_size: 42\n---'''					)
       if "empty:README.md" in files:
              with open(dataset_infos_dir / '''README.md'''    ,       '''w'''					) as f:
                     f.write(''''''					)
    # we want to support dataset_infos.json for backward compatibility
       if "dataset_infos.json" in files:
              with open(dataset_infos_dir / '''dataset_infos.json'''    ,       '''w'''					) as f:
                     f.write('''{"default": {"dataset_size": 42}}'''					)
       _UpperCamelCase              =						DatasetInfosDict.from_directory(lowerCAmelCase					)
       assert dataset_infos
       assert dataset_infos["default"].dataset_size == 42


@pytest.mark.parametrize(
    '''dataset_info'''    ,       [
        DatasetInfo(),
        DatasetInfo(
            description='''foo'''    ,       features=Features({'''a''': Value('''int32'''					)}					)    ,       builder_name='''builder'''    ,       config_name='''config'''    ,       version='''1.0.0'''    ,       splits=[{'''name''': '''train'''}]    ,       download_size=42    ,       ),
    ]    ,       )
def     SCREAMING_SNAKE_CASE			(      lowerCAmelCase    ,       lowerCAmelCase					):
       _UpperCamelCase              =						str(lowerCAmelCase					)
       dataset_info.write_to_directory(lowerCAmelCase					)
       _UpperCamelCase              =						DatasetInfo.from_directory(lowerCAmelCase					)
       assert dataset_info == reloaded
       assert os.path.exists(os.path.join(lowerCAmelCase    ,       '''dataset_info.json'''					)					)


def     SCREAMING_SNAKE_CASE			(      ):
       _UpperCamelCase              =						DatasetInfo(
           description='''foo'''    ,       citation='''bar'''    ,       homepage='''https://foo.bar'''    ,       license='''CC0'''    ,       features=Features({'''a''': Value('''int32'''					)}					)    ,       post_processed={}    ,       supervised_keys=()    ,       task_templates=[]    ,       builder_name='''builder'''    ,       config_name='''config'''    ,       version='''1.0.0'''    ,       splits=[{'''name''': '''train''', '''num_examples''': 42}]    ,       download_checksums={}    ,       download_size=1_337    ,       post_processing_size=442    ,       dataset_size=1_234    ,       size_in_bytes=1_337 + 442 + 1_234    ,       )
       _UpperCamelCase              =						dataset_info._to_yaml_dict()
       assert sorted(lowerCAmelCase					) == sorted(DatasetInfo._INCLUDED_INFO_IN_YAML					)
       for key in DatasetInfo._INCLUDED_INFO_IN_YAML:
              assert key in dataset_info_yaml_dict
              assert isinstance(dataset_info_yaml_dict[key]    ,       (list, dict, int, str)					)
       _UpperCamelCase              =						yaml.safe_dump(lowerCAmelCase					)
       _UpperCamelCase              =						yaml.safe_load(lowerCAmelCase					)
       assert dataset_info_yaml_dict == reloaded


def     SCREAMING_SNAKE_CASE			(      ):
       _UpperCamelCase              =						DatasetInfo()
       _UpperCamelCase              =						dataset_info._to_yaml_dict()
       assert dataset_info_yaml_dict == {}


@pytest.mark.parametrize(
    '''dataset_infos_dict'''    ,       [
        DatasetInfosDict(),
        DatasetInfosDict({'''default''': DatasetInfo()}					),
        DatasetInfosDict({'''my_config_name''': DatasetInfo()}					),
        DatasetInfosDict(
            {
                '''default''': DatasetInfo(
                    description='''foo'''    ,       features=Features({'''a''': Value('''int32'''					)}					)    ,       builder_name='''builder'''    ,       config_name='''config'''    ,       version='''1.0.0'''    ,       splits=[{'''name''': '''train'''}]    ,       download_size=42    ,       )
            }					),
        DatasetInfosDict(
            {
                '''v1''': DatasetInfo(dataset_size=42					),
                '''v2''': DatasetInfo(dataset_size=1_337					),
            }					),
    ]    ,       )
def     SCREAMING_SNAKE_CASE			(      lowerCAmelCase    ,       lowerCAmelCase					):
       _UpperCamelCase              =						str(lowerCAmelCase					)
       dataset_infos_dict.write_to_directory(lowerCAmelCase					)
       _UpperCamelCase              =						DatasetInfosDict.from_directory(lowerCAmelCase					)

       # the config_name of the dataset_infos_dict take over the attribute
       for config_name, dataset_info in dataset_infos_dict.items():
              _UpperCamelCase              =						config_name
              # the yaml representation doesn't include fields like description or citation
              # so we just test that we can recover what we can from the yaml
              _UpperCamelCase              =						DatasetInfo._from_yaml_dict(dataset_info._to_yaml_dict()					)
       assert dataset_infos_dict == reloaded

       if dataset_infos_dict:
              assert os.path.exists(os.path.join(lowerCAmelCase    ,       '''README.md'''					)					)













from tempfile import TemporaryDirectory
from unittest import TestCase
from unittest.mock import MagicMock, patch

from transformers import AutoModel, TFAutoModel
from transformers.onnx import FeaturesManager
from transformers.testing_utils import SMALL_MODEL_IDENTIFIER, require_tf, require_torch

@require_torch
@require_tf
class  __A(						__UpperCAmelCase ):

     def 	_UpperCamelCase     (      self      ):





            """simple docstring"""

            _UpperCamelCase              =						SMALL_MODEL_IDENTIFIER
            _UpperCamelCase              =						'''pt'''
            _UpperCamelCase              =						'''tf'''

     def 	_UpperCamelCase     (      self,       A      ):





            """simple docstring"""

            _UpperCamelCase              =						AutoModel.from_pretrained(self.test_model      )
            model_pt.save_pretrained(A      )

     def 	_UpperCamelCase     (      self,       A      ):





            """simple docstring"""

            _UpperCamelCase              =						TFAutoModel.from_pretrained(self.test_model,       from_pt=A      )
            model_tf.save_pretrained(A      )

     def 	_UpperCamelCase     (      self      ):





            """simple docstring"""

            _UpperCamelCase              =						'''mock_framework'''

            # Framework provided - return whatever the user provides
            _UpperCamelCase              =						FeaturesManager.determine_framework(self.test_model,       A      )
            self.assertEqual(A,       A      )

            # Local checkpoint and framework provided - return provided framework
            # PyTorch checkpoint
            with TemporaryDirectory() as local_pt_ckpt:
                   self._setup_pt_ckpt(A      )
                   _UpperCamelCase              =						FeaturesManager.determine_framework(A,       A      )
                   self.assertEqual(A,       A      )

            # TensorFlow checkpoint
            with TemporaryDirectory() as local_tf_ckpt:
                   self._setup_tf_ckpt(A      )
                   _UpperCamelCase              =						FeaturesManager.determine_framework(A,       A      )
                   self.assertEqual(A,       A      )

     def 	_UpperCamelCase     (      self      ):





            """simple docstring"""

            with TemporaryDirectory() as local_pt_ckpt:
                   self._setup_pt_ckpt(A      )
                   _UpperCamelCase              =						FeaturesManager.determine_framework(A      )
                   self.assertEqual(A,       self.framework_pt      )

            # TensorFlow checkpoint
            with TemporaryDirectory() as local_tf_ckpt:
                   self._setup_tf_ckpt(A      )
                   _UpperCamelCase              =						FeaturesManager.determine_framework(A      )
                   self.assertEqual(A,       self.framework_tf      )

            # Invalid local checkpoint
            with TemporaryDirectory() as local_invalid_ckpt:
                   with self.assertRaises(A      ):
                          _UpperCamelCase              =						FeaturesManager.determine_framework(A      )



     def 	_UpperCamelCase     (      self      ):





            """simple docstring"""

            _UpperCamelCase              =						MagicMock(return_value=A      )
            with patch('''transformers.onnx.features.is_tf_available''',       A      ):
                   _UpperCamelCase              =						FeaturesManager.determine_framework(self.test_model      )
                   self.assertEqual(A,       self.framework_pt      )

            # PyTorch not in environment -> use TensorFlow
            _UpperCamelCase              =						MagicMock(return_value=A      )
            with patch('''transformers.onnx.features.is_torch_available''',       A      ):
                   _UpperCamelCase              =						FeaturesManager.determine_framework(self.test_model      )
                   self.assertEqual(A,       self.framework_tf      )

            # Both in environment -> use PyTorch
            _UpperCamelCase              =						MagicMock(return_value=A      )
            _UpperCamelCase              =						MagicMock(return_value=A      )
            with patch('''transformers.onnx.features.is_tf_available''',       A      ), patch(
                '''transformers.onnx.features.is_torch_available''',       A      ):
                   _UpperCamelCase              =						FeaturesManager.determine_framework(self.test_model      )
                   self.assertEqual(A,       self.framework_pt      )

            # Both not in environment -> raise error
            _UpperCamelCase              =						MagicMock(return_value=A      )
            _UpperCamelCase              =						MagicMock(return_value=A      )
            with patch('''transformers.onnx.features.is_tf_available''',       A      ), patch(
                '''transformers.onnx.features.is_torch_available''',       A      ):
                   with self.assertRaises(A      ):
                          _UpperCamelCase              =						FeaturesManager.determine_framework(self.test_model      )






