



'''simple docstring'''





from math import ceil





def   a_   (		_UpperCAmelCase    :      Tuple ,_UpperCAmelCase    :      List[str]				)    ->  int:
      __snake_case :   Tuple													=    list(range(0 ,_UpperCAmelCase				)				)

      __snake_case :   Union[str, Any]													=    [item for sublist in list(device_map.values()				) for item in sublist]

      # Duplicate check
      __snake_case :   List[str]													=    []
      for i in device_map_blocks:
            if device_map_blocks.count(_UpperCAmelCase				) > 1 and i not in duplicate_blocks:
                  duplicate_blocks.append(_UpperCAmelCase				)
    # Missing blocks
      __snake_case :   str													=    [i for i in blocks if i not in device_map_blocks]
      __snake_case :   Dict													=    [i for i in device_map_blocks if i not in blocks]

      if len(_UpperCAmelCase				) != 0:
            raise ValueError(
                'Duplicate attention blocks specified in device_map. Attention blocks must be specified to one device.'
                ' These attention blocks were specified more than once: ' + str(_UpperCAmelCase				)				)
      if len(_UpperCAmelCase				) != 0:
            raise ValueError(
                'There are attention blocks for this model that are not specified in the device_map. Add these attention '
                'blocks to a device on the device_map: ' + str(_UpperCAmelCase				)				)
      if len(_UpperCAmelCase				) != 0:
            raise ValueError(
                'The device_map contains more attention blocks than this model has. Remove these from the device_map:'
                + str(_UpperCAmelCase				)				)





def   a_   (		_UpperCAmelCase    :      int ,_UpperCAmelCase    :      List[Any]				)    ->  Union[str, Any]:
      __snake_case :   List[str]													=    list(range(_UpperCAmelCase				)				)
      __snake_case :   int													=    int(ceil(n_layers / len(_UpperCAmelCase				)				)				)
      __snake_case :   Any													=    [layers[i : i + n_blocks] for i in range(0 ,_UpperCAmelCase ,_UpperCAmelCase				)]

      return dict(zip(_UpperCAmelCase ,_UpperCAmelCase				)				)








'''simple docstring'''





import json
import logging
import os
import sys
from time import time
from unittest.mock import patch

from transformers.testing_utils import TestCasePlus, require_torch_tpu


logging.basicConfig(level=logging.DEBUG)

A__    :   List[str]           =					logging.getLogger()





def   a_   (		_UpperCAmelCase    :      int				)    ->  Optional[int]:
      __snake_case :   List[str]													=    {}
      __snake_case :   List[str]													=    os.path.join(_UpperCAmelCase ,'all_results.json'				)
      if os.path.exists(_UpperCAmelCase				):
            with open(_UpperCAmelCase ,'r'				) as f:
                  __snake_case :   Dict													=    json.load(_UpperCAmelCase				)
      else:
            raise ValueError(f'''can\'t find {path}'''				)
      return results


A__    :   Dict           =					logging.StreamHandler(sys.stdout)
logger.addHandler(stream_handler)





@require_torch_tpu
class  snake_case__						(    SCREAMING_SNAKE_CASE_				):
 def A_   (   self						:							Optional[Any]  )      ->   List[str]:







       '''simple docstring'''
       import xla_spawn

       __snake_case :   int													=    self.get_auto_remove_tmp_dir()
       __snake_case :   Tuple													=    f'''
            ./examples/pytorch/text-classification/run_glue.py
            --num_cores=8
            ./examples/pytorch/text-classification/run_glue.py
            --model_name_or_path distilbert-base-uncased
            --output_dir {tmp_dir}
            --overwrite_output_dir
            --train_file ./tests/fixtures/tests_samples/MRPC/train.csv
            --validation_file ./tests/fixtures/tests_samples/MRPC/dev.csv
            --do_train
            --do_eval
            --debug tpu_metrics_debug
            --per_device_train_batch_size=2
            --per_device_eval_batch_size=1
            --learning_rate=1e-4
            --max_steps=10
            --warmup_steps=2
            --seed=42
            --max_seq_length=128
            '''.split()

       with patch.object(__a      ,     'argv'      ,     __a  ):
             __snake_case :   Tuple													=    time()
             xla_spawn.main()
             __snake_case :   Optional[int]													=    time()

             __snake_case :   List[Any]													=    get_results(__a  )
             self.assertGreaterEqual(result['eval_accuracy']      ,     0.7_5  )

             # Assert that the script takes less than 500 seconds to make sure it doesn't hang.
             self.assertLess(end - start      ,     500  )





 def A_   (   self						:							List[str]  )      ->   Optional[int]:







       '''simple docstring'''
       import xla_spawn

       __snake_case :   Optional[Any]													=    '\n            ./tests/test_trainer_tpu.py\n            --num_cores=8\n            ./tests/test_trainer_tpu.py\n            '.split()
       with patch.object(__a      ,     'argv'      ,     __a  ):
             xla_spawn.main()



