Spaces:
Paused
Paused
# coding=utf-8 | |
# Copyright 2019-present, the HuggingFace Inc. 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. | |
import doctest | |
import logging | |
import os | |
import unittest | |
from pathlib import Path | |
from typing import List, Union | |
import transformers | |
from transformers.testing_utils import require_tf, require_torch, slow | |
logger = logging.getLogger() | |
class TestCodeExamples(unittest.TestCase): | |
def analyze_directory( | |
self, | |
directory: Path, | |
identifier: Union[str, None] = None, | |
ignore_files: Union[List[str], None] = None, | |
n_identifier: Union[str, List[str], None] = None, | |
only_modules: bool = True, | |
): | |
""" | |
Runs through the specific directory, looking for the files identified with `identifier`. Executes | |
the doctests in those files | |
Args: | |
directory (`Path`): Directory containing the files | |
identifier (`str`): Will parse files containing this | |
ignore_files (`List[str]`): List of files to skip | |
n_identifier (`str` or `List[str]`): Will not parse files containing this/these identifiers. | |
only_modules (`bool`): Whether to only analyze modules | |
""" | |
files = [file for file in os.listdir(directory) if os.path.isfile(os.path.join(directory, file))] | |
if identifier is not None: | |
files = [file for file in files if identifier in file] | |
if n_identifier is not None: | |
if isinstance(n_identifier, List): | |
for n_ in n_identifier: | |
files = [file for file in files if n_ not in file] | |
else: | |
files = [file for file in files if n_identifier not in file] | |
ignore_files = ignore_files or [] | |
ignore_files.append("__init__.py") | |
files = [file for file in files if file not in ignore_files] | |
for file in files: | |
# Open all files | |
print("Testing", file) | |
if only_modules: | |
module_identifier = file.split(".")[0] | |
try: | |
module_identifier = getattr(transformers, module_identifier) | |
suite = doctest.DocTestSuite(module_identifier) | |
result = unittest.TextTestRunner().run(suite) | |
self.assertIs(len(result.failures), 0) | |
except AttributeError: | |
logger.info(f"{module_identifier} is not a module.") | |
else: | |
result = doctest.testfile(str(".." / directory / file), optionflags=doctest.ELLIPSIS) | |
self.assertIs(result.failed, 0) | |
def test_modeling_examples(self): | |
transformers_directory = Path("src/transformers") | |
files = "modeling" | |
ignore_files = [ | |
"modeling_ctrl.py", | |
"modeling_tf_ctrl.py", | |
] | |
self.analyze_directory(transformers_directory, identifier=files, ignore_files=ignore_files) | |
def test_tokenization_examples(self): | |
transformers_directory = Path("src/transformers") | |
files = "tokenization" | |
self.analyze_directory(transformers_directory, identifier=files) | |
def test_configuration_examples(self): | |
transformers_directory = Path("src/transformers") | |
files = "configuration" | |
self.analyze_directory(transformers_directory, identifier=files) | |
def test_remaining_examples(self): | |
transformers_directory = Path("src/transformers") | |
n_identifiers = ["configuration", "modeling", "tokenization"] | |
self.analyze_directory(transformers_directory, n_identifier=n_identifiers) | |
def test_doc_sources(self): | |
doc_source_directory = Path("docs/source") | |
ignore_files = ["favicon.ico"] | |
self.analyze_directory(doc_source_directory, ignore_files=ignore_files, only_modules=False) | |