2020 the huggingface team licensed under the apache license version 2 0 the license you may not use this file except in compliance with the license you may obtain a copy of the license at http www apache orglicenseslicense2 0 unless required by applicable law or agreed to in writing software distributed under the license is distributed on an as is basis without warranties or conditions of any kind either express or implied see the license for the specific language governing permissions and limitations under the license try to import everything from transformers to ensure every object can be loaded an actual model hosted on huggingface co default branch name one particular commit not the top of main this commit does not exist so we should 404 sha1 of config json on the top of main for checking purposes sha256 of pytorchmodel bin on the top of main for checking purposes dummy contexts to test contextmanagers if the spec is missing importlib would not be able to import the module dynamically the print statement adds a new line at the end of the output the output should be wrapped with an english welcome and goodbye the output should be wrapped with an english and french welcome and goodbye findlabels works regardless of the class name it detects the framework through inheritance findlabels works regardless of the class name it detects the framework through inheritance flax models don t have labels findlabels works regardless of the class name it detects the framework through inheritance 2020 the huggingface team licensed under the apache license version 2 0 the license you may not use this file except in compliance with the license you may obtain a copy of the license at http www apache org licenses license 2 0 unless required by applicable law or agreed to in writing software distributed under the license is distributed on an as is basis without warranties or conditions of any kind either express or implied see the license for the specific language governing permissions and limitations under the license try to import everything from transformers to ensure every object can be loaded noqa f406 an actual model hosted on huggingface co default branch name one particular commit not the top of main this commit does not exist so we should 404 sha 1 of config json on the top of main for checking purposes sha 256 of pytorch_model bin on the top of main for checking purposes dummy contexts to test contextmanagers if the spec is missing importlib would not be able to import the module dynamically the print statement adds a new line at the end of the output the output should be wrapped with an english welcome and goodbye the output should be wrapped with an english and french welcome and goodbye find_labels works regardless of the class name it detects the framework through inheritance find_labels works regardless of the class name it detects the framework through inheritance flax models don t have labels find_labels works regardless of the class name it detects the framework through inheritance
import contextlib
import importlib
import io
import unittest

import transformers


from transformers import *  
from transformers.testing_utils import DUMMY_UNKNOWN_IDENTIFIER, require_flax, require_tf, require_torch
from transformers.utils import ContextManagers, find_labels, is_flax_available, is_tf_available, is_torch_available


if is_torch_available():
    from transformers import BertForPreTraining, BertForQuestionAnswering, BertForSequenceClassification

if is_tf_available():
    from transformers import TFBertForPreTraining, TFBertForQuestionAnswering, TFBertForSequenceClassification

if is_flax_available():
    from transformers import FlaxBertForPreTraining, FlaxBertForQuestionAnswering, FlaxBertForSequenceClassification


MODEL_ID = DUMMY_UNKNOWN_IDENTIFIER


REVISION_ID_DEFAULT = "main"

REVISION_ID_ONE_SPECIFIC_COMMIT = "f2c752cfc5c0ab6f4bdec59acea69eefbee381c2"

REVISION_ID_INVALID = "aaaaaaa"


PINNED_SHA1 = "d9e9f15bc825e4b2c9249e9578f884bbcb5e3684"

PINNED_SHA256 = "4b243c475af8d0a7754e87d7d096c92e5199ec2fe168a2ee7998e3b8e9bcb1d3"




@contextlib.contextmanager
def context_en():
    print("Welcome!")
    yield
    print("Bye!")


@contextlib.contextmanager
def context_fr():
    print("Bonjour!")
    yield
    print("Au revoir!")


class TestImportMechanisms(unittest.TestCase):
    def test_module_spec_available(self):
        
        assert transformers.__spec__ is not None
        assert importlib.util.find_spec("transformers") is not None


class GenericUtilTests(unittest.TestCase):
    @unittest.mock.patch("sys.stdout", new_callable=io.StringIO)
    def test_context_managers_no_context(self, mock_stdout):
        with ContextManagers([]):
            print("Transformers are awesome!")
        
        self.assertEqual(mock_stdout.getvalue(), "Transformers are awesome!\n")

    @unittest.mock.patch("sys.stdout", new_callable=io.StringIO)
    def test_context_managers_one_context(self, mock_stdout):
        with ContextManagers([context_en()]):
            print("Transformers are awesome!")
        
        self.assertEqual(mock_stdout.getvalue(), "Welcome!\nTransformers are awesome!\nBye!\n")

    @unittest.mock.patch("sys.stdout", new_callable=io.StringIO)
    def test_context_managers_two_context(self, mock_stdout):
        with ContextManagers([context_fr(), context_en()]):
            print("Transformers are awesome!")
        
        self.assertEqual(mock_stdout.getvalue(), "Bonjour!\nWelcome!\nTransformers are awesome!\nBye!\nAu revoir!\n")

    @require_torch
    def test_find_labels_pt(self):
        self.assertEqual(find_labels(BertForSequenceClassification), ["labels"])
        self.assertEqual(find_labels(BertForPreTraining), ["labels", "next_sentence_label"])
        self.assertEqual(find_labels(BertForQuestionAnswering), ["start_positions", "end_positions"])

        
        class DummyModel(BertForSequenceClassification):
            pass

        self.assertEqual(find_labels(DummyModel), ["labels"])

    @require_tf
    def test_find_labels_tf(self):
        self.assertEqual(find_labels(TFBertForSequenceClassification), ["labels"])
        self.assertEqual(find_labels(TFBertForPreTraining), ["labels", "next_sentence_label"])
        self.assertEqual(find_labels(TFBertForQuestionAnswering), ["start_positions", "end_positions"])

        
        class DummyModel(TFBertForSequenceClassification):
            pass

        self.assertEqual(find_labels(DummyModel), ["labels"])

    @require_flax
    def test_find_labels_flax(self):
        
        self.assertEqual(find_labels(FlaxBertForSequenceClassification), [])
        self.assertEqual(find_labels(FlaxBertForPreTraining), [])
        self.assertEqual(find_labels(FlaxBertForQuestionAnswering), [])

        
        class DummyModel(FlaxBertForSequenceClassification):
            pass

        self.assertEqual(find_labels(DummyModel), [])