

'''simple docstring'''

import importlib
import os
import platform
from pathlib import Path

from packaging import version

from .utils.logging import get_logger


UpperCAmelCase				   =  get_logger(__name__)

# Datasets
UpperCAmelCase				   =  '''https://s3.amazonaws.com/datasets.huggingface.co/datasets/datasets'''
UpperCAmelCase				   =  '''https://cdn-datasets.huggingface.co/datasets/datasets'''
UpperCAmelCase				   =  '''https://raw.githubusercontent.com/huggingface/datasets/{revision}/datasets/{path}/{name}'''

# Metrics
UpperCAmelCase				   =  '''https://s3.amazonaws.com/datasets.huggingface.co/datasets/metrics'''
UpperCAmelCase				   =  '''https://cdn-datasets.huggingface.co/datasets/metric'''
UpperCAmelCase				   =  '''https://raw.githubusercontent.com/huggingface/datasets/{revision}/metrics/{path}/{name}'''

# Hub
UpperCAmelCase				   =  os.environ.get('''HF_ENDPOINT''', '''https://huggingface.co''')
UpperCAmelCase				   =  HF_ENDPOINT + '''/datasets/{repo_id}/resolve/{revision}/{path}'''
UpperCAmelCase				   =  '''main'''

UpperCAmelCase				   =  version.parse(platform.python_version())

if PY_VERSION < version.parse('''3.8'''):
       import importlib_metadata
else:
       import importlib.metadata as importlib_metadata

# General environment variables accepted values for booleans
UpperCAmelCase				   =  {'''1''', '''ON''', '''YES''', '''TRUE'''}
UpperCAmelCase				   =  ENV_VARS_TRUE_VALUES.union({'''AUTO'''})


# Imports
UpperCAmelCase				   =  version.parse(importlib_metadata.version('''dill'''))
UpperCAmelCase				   =  version.parse(importlib_metadata.version('''pandas'''))
UpperCAmelCase				   =  version.parse(importlib_metadata.version('''pyarrow'''))

UpperCAmelCase				   =  os.environ.get('''USE_TF''', '''AUTO''').upper()
UpperCAmelCase				   =  os.environ.get('''USE_TORCH''', '''AUTO''').upper()
UpperCAmelCase				   =  os.environ.get('''USE_JAX''', '''AUTO''').upper()

UpperCAmelCase				   =  '''N/A'''
UpperCAmelCase				   =  False

if USE_TORCH in ENV_VARS_TRUE_AND_AUTO_VALUES and USE_TF not in ENV_VARS_TRUE_VALUES:
       UpperCAmelCase				   =  importlib.util.find_spec('''torch''') is not None
       if TORCH_AVAILABLE:
              try:
                     UpperCAmelCase				   =  version.parse(importlib_metadata.version('''torch'''))
                     logger.info(F'''PyTorch version {TORCH_VERSION} available.''')
              except importlib_metadata.PackageNotFoundError:
                     pass
else:
       logger.info('''Disabling PyTorch because USE_TF is set''')

UpperCAmelCase				   =  '''N/A'''
UpperCAmelCase				   =  False

if USE_TF in ENV_VARS_TRUE_AND_AUTO_VALUES and USE_TORCH not in ENV_VARS_TRUE_VALUES:
       UpperCAmelCase				   =  importlib.util.find_spec('''tensorflow''') is not None
       if TF_AVAILABLE:
              # For the metadata, we have to look for both tensorflow and tensorflow-cpu
              for package in [
                  "tensorflow",
                  "tensorflow-cpu",
                  "tensorflow-gpu",
                  "tf-nightly",
                  "tf-nightly-cpu",
                  "tf-nightly-gpu",
                  "intel-tensorflow",
                  "tensorflow-rocm",
                  "tensorflow-macos",
              ]:
                     try:
                            UpperCAmelCase				   =  version.parse(importlib_metadata.version(package))
                     except importlib_metadata.PackageNotFoundError:
                            continue
                     else:
                            break
              else:
                     UpperCAmelCase				   =  False
       if TF_AVAILABLE:
              if TF_VERSION.major < 2:
                     logger.info(F'''TensorFlow found but with version {TF_VERSION}. `datasets` requires version 2 minimum.''')
                     UpperCAmelCase				   =  False
              else:
                     logger.info(F'''TensorFlow version {TF_VERSION} available.''')
else:
       logger.info('''Disabling Tensorflow because USE_TORCH is set''')


UpperCAmelCase				   =  '''N/A'''
UpperCAmelCase				   =  False

if USE_JAX in ENV_VARS_TRUE_AND_AUTO_VALUES:
       UpperCAmelCase				   =  importlib.util.find_spec('''jax''') is not None and importlib.util.find_spec('''jaxlib''') is not None
       if JAX_AVAILABLE:
              try:
                     UpperCAmelCase				   =  version.parse(importlib_metadata.version('''jax'''))
                     logger.info(F'''JAX version {JAX_VERSION} available.''')
              except importlib_metadata.PackageNotFoundError:
                     pass
else:
       logger.info('''Disabling JAX because USE_JAX is set to False''')


UpperCAmelCase				   =  os.environ.get('''USE_BEAM''', '''AUTO''').upper()
UpperCAmelCase				   =  '''N/A'''
UpperCAmelCase				   =  False
if USE_BEAM in ENV_VARS_TRUE_AND_AUTO_VALUES:
       try:
              UpperCAmelCase				   =  version.parse(importlib_metadata.version('''apache_beam'''))
              UpperCAmelCase				   =  True
              logger.info(F'''Apache Beam version {BEAM_VERSION} available.''')
       except importlib_metadata.PackageNotFoundError:
              pass
else:
       logger.info('''Disabling Apache Beam because USE_BEAM is set to False''')


# Optional tools for data loading
UpperCAmelCase				   =  importlib.util.find_spec('''sqlalchemy''') is not None

# Optional tools for feature decoding
UpperCAmelCase				   =  importlib.util.find_spec('''PIL''') is not None
UpperCAmelCase				   =  importlib.util.find_spec('''soundfile''') is not None and version.parse(
    importlib.import_module('''soundfile''').__libsndfile_version__
) >= version.parse('''1.0.31''')
UpperCAmelCase				   =  importlib.util.find_spec('''soundfile''') is not None and version.parse(
    importlib.import_module('''soundfile''').__libsndfile_version__
) >= version.parse('''1.1.0''')

# Optional compression tools
UpperCAmelCase				   =  importlib.util.find_spec('''rarfile''') is not None
UpperCAmelCase				   =  importlib.util.find_spec('''zstandard''') is not None
UpperCAmelCase				   =  importlib.util.find_spec('''lz4''') is not None
UpperCAmelCase				   =  importlib.util.find_spec('''py7zr''') is not None


# Cache location
UpperCAmelCase				   =  '''~/.cache'''
UpperCAmelCase				   =  os.getenv('''XDG_CACHE_HOME''', DEFAULT_XDG_CACHE_HOME)
UpperCAmelCase				   =  os.path.join(XDG_CACHE_HOME, '''huggingface''')
UpperCAmelCase				   =  os.path.expanduser(os.getenv('''HF_HOME''', DEFAULT_HF_CACHE_HOME))

UpperCAmelCase				   =  os.path.join(HF_CACHE_HOME, '''datasets''')
UpperCAmelCase				   =  Path(os.getenv('''HF_DATASETS_CACHE''', DEFAULT_HF_DATASETS_CACHE))

UpperCAmelCase				   =  os.path.join(HF_CACHE_HOME, '''metrics''')
UpperCAmelCase				   =  Path(os.getenv('''HF_METRICS_CACHE''', DEFAULT_HF_METRICS_CACHE))

UpperCAmelCase				   =  os.path.join(HF_CACHE_HOME, '''modules''')
UpperCAmelCase				   =  Path(os.getenv('''HF_MODULES_CACHE''', DEFAULT_HF_MODULES_CACHE))

UpperCAmelCase				   =  '''downloads'''
UpperCAmelCase				   =  os.path.join(HF_DATASETS_CACHE, DOWNLOADED_DATASETS_DIR)
UpperCAmelCase				   =  Path(os.getenv('''HF_DATASETS_DOWNLOADED_DATASETS_PATH''', DEFAULT_DOWNLOADED_DATASETS_PATH))

UpperCAmelCase				   =  '''extracted'''
UpperCAmelCase				   =  os.path.join(DEFAULT_DOWNLOADED_DATASETS_PATH, EXTRACTED_DATASETS_DIR)
UpperCAmelCase				   =  Path(os.getenv('''HF_DATASETS_EXTRACTED_DATASETS_PATH''', DEFAULT_EXTRACTED_DATASETS_PATH))

# Download count for the website
UpperCAmelCase				   =  (
    os.environ.get('''HF_UPDATE_DOWNLOAD_COUNTS''', '''AUTO''').upper() in ENV_VARS_TRUE_AND_AUTO_VALUES
)

# Batch size constants. For more info, see:
# https://github.com/apache/arrow/blob/master/docs/source/cpp/arrays.rst#size-limitations-and-recommendations)
UpperCAmelCase				   =  1000

# Size of the preloaded record batch in `Dataset.__iter__`
UpperCAmelCase				   =  10

# Pickling tables works only for small tables (<4GiB)
# For big tables, we write them on disk instead
UpperCAmelCase				   =  4 << 30

# Max shard size in bytes (e.g. to shard parquet datasets in push_to_hub or download_and_prepare)
UpperCAmelCase				   =  '''500MB'''

# Parquet configuration
UpperCAmelCase				   =  100
UpperCAmelCase				   =  100
UpperCAmelCase				   =  100

# Offline mode
UpperCAmelCase				   =  os.environ.get('''HF_DATASETS_OFFLINE''', '''AUTO''').upper() in ENV_VARS_TRUE_VALUES

# In-memory
UpperCAmelCase				   =  0  # Disabled
UpperCAmelCase				   =  float(os.environ.get('''HF_DATASETS_IN_MEMORY_MAX_SIZE''', DEFAULT_IN_MEMORY_MAX_SIZE))

# File names
UpperCAmelCase				   =  '''dataset.arrow'''
UpperCAmelCase				   =  '''indices.arrow'''
UpperCAmelCase				   =  '''state.json'''
UpperCAmelCase				   =  '''dataset_info.json'''
UpperCAmelCase				   =  '''dataset_infos.json'''
UpperCAmelCase				   =  '''LICENSE'''
UpperCAmelCase				   =  '''metric_info.json'''
UpperCAmelCase				   =  '''dataset_dict.json'''

UpperCAmelCase				   =  '''datasets_modules'''

UpperCAmelCase				   =  255

# Streaming
UpperCAmelCase				   =  20
UpperCAmelCase				   =  5

# Datasets without script
UpperCAmelCase				   =  200
UpperCAmelCase				   =  10
UpperCAmelCase				   =  200

# Progress bars
UpperCAmelCase				   =  0.05  # 20 progress updates per sec





'''simple docstring'''

from __future__ import annotations

# Define the Gravitational Constant G and the function
UpperCAmelCase				   =  6.6_7_4_3E-1_1  # unit of G : m^3 * kg^-1 * s^-2

def 				__UpperCamelCase							(	lowercase__						:  float,					lowercase__						:  float,					lowercase__						:  float,					lowercase__						:  float ):






     '''simple docstring'''





     __lowercase					=mass_a * mass_a

     if (force, mass_a, mass_a, distance).count(0 ) != 1:
          raise ValueError('One and only one argument must be 0' )
     if force < 0:
          raise ValueError('Gravitational force can not be negative' )
     if distance < 0:
          raise ValueError('Distance can not be negative' )
     if mass_a < 0 or mass_a < 0:
          raise ValueError('Mass can not be negative' )
     if force == 0:
          __lowercase					=GRAVITATIONAL_CONSTANT * product_of_mass / (distance**2)
          return {"force": force}
     elif mass_a == 0:
          __lowercase					=(force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_a)
          return {"mass_1": mass_a}
     elif mass_a == 0:
          __lowercase					=(force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_a)
          return {"mass_2": mass_a}
     elif distance == 0:
          __lowercase					=(GRAVITATIONAL_CONSTANT * product_of_mass / (force)) ** 0.5
          return {"distance": distance}
     raise ValueError('One and only one argument must be 0' )


# Run doctest
if __name__ == "__main__":
       import doctest

       doctest.testmod()


