codingutf8 2019present 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 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 this test validates that we can stack skip decorators in groups and whether they work correctly with other decorators since the decorators have already built their decision params like checking env we can t mock the env and test each of the combinations so ideally the following 4 should be run but since we have different ci jobs running different configs all combinations should get covered runslow1 pytest ra teststestskipdecorators py runslow1 cudavisibledevices pytest ra teststestskipdecorators py runslow0 pytest ra teststestskipdecorators py runslow0 cudavisibledevices pytest ra teststestskipdecorators py skipping in unittest tests test that we can stack our skip decorators with 3rd party decorators test that we can stack our skip decorators the combination of any skip decorator followed by parameterized fails to skip the tests 1 slow manages to correctly skip testparamslowfirst 2 but then parameterized creates new tests with a unique name for each parameter groups it has no idea that they are to be skipped and so they all run ignoring slow therefore skip decorators must come after parameterized slow parameterized expandparams def testparamslowfirstself paramnone checkslow this works as expected 1 parameterized creates new tests with unique names 2 each of them gets an opportunity to be skipped skipping in nonunittest tests no problem at all here coding utf 8 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 this test validates that we can stack skip decorators in groups and whether they work correctly with other decorators since the decorators have already built their decision params like checking env we can t mock the env and test each of the combinations so ideally the following 4 should be run but since we have different ci jobs running different configs all combinations should get covered run_slow 1 pytest ra tests test_skip_decorators py run_slow 1 cuda_visible_devices pytest ra tests test_skip_decorators py run_slow 0 pytest ra tests test_skip_decorators py run_slow 0 cuda_visible_devices pytest ra tests test_skip_decorators py skipping in unittest tests test that we can stack our skip decorators with 3rd party decorators test that we can stack our skip decorators the combination of any skip decorator followed by parameterized fails to skip the tests 1 slow manages to correctly skip test_param_slow_first 2 but then parameterized creates new tests with a unique name for each parameter groups it has no idea that they are to be skipped and so they all run ignoring slow therefore skip decorators must come after parameterized slow parameterized expand params def test_param_slow_first self param none check_slow this works as expected 1 parameterized creates new tests with unique names 2 each of them gets an opportunity to be skipped skipping in non unittest tests no problem at all here
import os
import unittest

import pytest
from parameterized import parameterized

from transformers.testing_utils import require_torch, require_torch_gpu, slow, torch_device




params = [(1,)]



def check_slow():
    run_slow = bool(os.getenv("RUN_SLOW", 0))
    if run_slow:
        assert True
    else:
        assert False, "should have been skipped"



def check_slow_torch_cuda():
    run_slow = bool(os.getenv("RUN_SLOW", 0))
    if run_slow and torch_device == "cuda":
        assert True
    else:
        assert False, "should have been skipped"


@require_torch
class SkipTester(unittest.TestCase):
    @slow
    @require_torch_gpu
    def test_2_skips_slow_first(self):
        check_slow_torch_cuda()

    @require_torch_gpu
    @slow
    def test_2_skips_slow_last(self):
        check_slow_torch_cuda()

    
    
    
    
    
    
    
    
    
    

    
    
    
    @parameterized.expand(params)
    @slow
    def test_param_slow_last(self, param=None):
        check_slow()






@slow
@require_torch_gpu
def test_pytest_2_skips_slow_first():
    check_slow_torch_cuda()


@require_torch_gpu
@slow
def test_pytest_2_skips_slow_last():
    check_slow_torch_cuda()


@slow
@pytest.mark.parametrize("param", [1])
def test_pytest_param_slow_first(param):
    check_slow()


@pytest.mark.parametrize("param", [1])
@slow
def test_pytest_param_slow_last(param):
    check_slow()