
import pytest

from datasets.parallel import ParallelBackendConfig, parallel_backend
from datasets.utils.py_utils import map_nested

from .utils import require_dill_gt_0_3_2, require_joblibspark, require_not_windows





def 						SCREAMING_SNAKE_CASE__     (   __lowerCAmelCase				):  # picklable for multiprocessing
    return i + 1





@require_dill_gt_0_3_2
@require_joblibspark
@require_not_windows
def 						SCREAMING_SNAKE_CASE__     (   ):
    with parallel_backend("spark"				):
        assert ParallelBackendConfig.backend_name == "spark"

    snake_case__    =					[1, 2, 3]
    with pytest.raises(__lowerCAmelCase				):
        with parallel_backend("unsupported backend"				):
            map_nested(__lowerCAmelCase     ,		__lowerCAmelCase     ,		num_proc=2				)

    with pytest.raises(__lowerCAmelCase				):
        with parallel_backend("unsupported backend"				):
            map_nested(__lowerCAmelCase     ,		__lowerCAmelCase     ,		num_proc=-1				)





@require_dill_gt_0_3_2
@require_joblibspark
@require_not_windows
@pytest.mark.parametrize("num_proc"     ,		[2, -1]				)
def 						SCREAMING_SNAKE_CASE__     (   __lowerCAmelCase				):
    snake_case__    =					[1, 2]
    snake_case__    =					{"a": 1, "b": 2}
    snake_case__    =					{"a": [1, 2], "b": [3, 4]}
    snake_case__    =					{"a": {"1": 1}, "b": 2}
    snake_case__    =					{"a": 1, "b": 2, "c": 3, "d": 4}
    snake_case__    =					[2, 3]
    snake_case__    =					{"a": 2, "b": 3}
    snake_case__    =					{"a": [2, 3], "b": [4, 5]}
    snake_case__    =					{"a": {"1": 2}, "b": 3}
    snake_case__    =					{"a": 2, "b": 3, "c": 4, "d": 5}

    with parallel_backend("spark"				):
        assert map_nested(__lowerCAmelCase     ,		__lowerCAmelCase     ,		num_proc=__lowerCAmelCase				) == expected_map_nested_sa
        assert map_nested(__lowerCAmelCase     ,		__lowerCAmelCase     ,		num_proc=__lowerCAmelCase				) == expected_map_nested_sa
        assert map_nested(__lowerCAmelCase     ,		__lowerCAmelCase     ,		num_proc=__lowerCAmelCase				) == expected_map_nested_sa
        assert map_nested(__lowerCAmelCase     ,		__lowerCAmelCase     ,		num_proc=__lowerCAmelCase				) == expected_map_nested_sa
        assert map_nested(__lowerCAmelCase     ,		__lowerCAmelCase     ,		num_proc=__lowerCAmelCase				) == expected_map_nested_sa





# coding=utf-8
# Copyright 2020 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 script dumps information about the environment

import os
import sys

import transformers


__magic_name__  							=	'''3'''

print('''Python version:''', sys.version)
print('''transformers version:''', transformers.__version__)

try:
     import torch

     print('''Torch version:''', torch.__version__)
     print('''Cuda available:''', torch.cuda.is_available())
     print('''Cuda version:''', torch.version.cuda)
     print('''CuDNN version:''', torch.backends.cudnn.version())
     print('''Number of GPUs available:''', torch.cuda.device_count())
     print('''NCCL version:''', torch.cuda.nccl.version())
except ImportError:
     print('''Torch version:''', None)

try:
     import deepspeed

     print('''DeepSpeed version:''', deepspeed.__version__)
except ImportError:
     print('''DeepSpeed version:''', None)

try:
     import tensorflow as tf

     print('''TensorFlow version:''', tf.__version__)
     print('''TF GPUs available:''', bool(tf.config.list_physical_devices('''GPU''')))
     print('''Number of TF GPUs available:''', len(tf.config.list_physical_devices('''GPU''')))
except ImportError:
     print('''TensorFlow version:''', None)



