# Path: geopy/exc.py
# class GeocoderServiceError(GeopyError):
#     """
#     There was an exception caused when calling the remote geocoding service,
#     and no more specific exception could be raised by geopy. When calling
#     geocoders' ``geocode`` or `reverse` methods, this is the most generic
#     exception that can be raised, and any non-geopy exception will be caught
#     and turned into this. The exception's message will be that of the
#     original exception.
#     """
# 
# Path: geopy/util.py
# NUMBER_TYPES = (int, float, Decimal)
# def pairwise(seq):
# def join_filter(sep, seq, pred=bool):
# def get_version():


import asyncio
import inspect
import threading
from itertools import chain, count
from time import sleep
from timeit import default_timer
from geopy.exc import GeocoderServiceError
from geopy.util import logger
            :class:`geopy.exc.GeocoderServiceError` exceptions are
            retried -- others are always re-raised. ``max_retries + 1``
            requests would be performed at max per query. Set
            ``max_retries=0`` to disable retries.

        :param float error_wait_seconds:
            Time to wait between retries after errors. Must be
            greater or equal to ``min_delay_seconds``.

        :param bool swallow_exceptions:
            Should an exception be swallowed after retries? If not,
            it will be re-raised. If yes, the ``return_value_on_exception``
            will be returned.

        :param return_value_on_exception:
            Value to return on failure when ``swallow_exceptions=True``.

        """
        super().__init__(
            min_delay_seconds=min_delay_seconds,
            max_retries=max_retries,
            swallow_exceptions=swallow_exceptions,
            return_value_on_exception=return_value_on_exception,
        )
        self.func = func
        self.error_wait_seconds = error_wait_seconds
        assert error_wait_seconds >= min_delay_seconds
        assert max_retries >= 0

    async def _sleep(self, seconds):  # pragma: no cover

# Path: geopy/exc.py
# class GeocoderServiceError(GeopyError):
#     """
#     There was an exception caused when calling the remote geocoding service,
#     and no more specific exception could be raised by geopy. When calling
#     geocoders' ``geocode`` or `reverse` methods, this is the most generic
#     exception that can be raised, and any non-geopy exception will be caught
#     and turned into this. The exception's message will be that of the
#     original exception.
#     """
# 
# Path: geopy/util.py
# NUMBER_TYPES = (int, float, Decimal)
# def pairwise(seq):
# def join_filter(sep, seq, pred=bool):
# def get_version():


# Path: geopy/extra/rate_limiter.py
import asyncio
import inspect
import threading
from itertools import chain, count
from time import sleep
from timeit import default_timer
from geopy.exc import GeocoderServiceError
from geopy.util import logger

            :class:`geopy.exc.GeocoderServiceError` exceptions are
            retried -- others are always re-raised. ``max_retries + 1``
            requests would be performed at max per query. Set
            ``max_retries=0`` to disable retries.

        :param float error_wait_seconds:
            Time to wait between retries after errors. Must be
            greater or equal to ``min_delay_seconds``.

        :param bool swallow_exceptions:
            Should an exception be swallowed after retries? If not,
            it will be re-raised. If yes, the ``return_value_on_exception``
            will be returned.

        :param return_value_on_exception:
            Value to return on failure when ``swallow_exceptions=True``.

        """
        super().__init__(
            min_delay_seconds=min_delay_seconds,
            max_retries=max_retries,
            swallow_exceptions=swallow_exceptions,
            return_value_on_exception=return_value_on_exception,
        )
        self.func = func
        self.error_wait_seconds = error_wait_seconds
        assert error_wait_seconds >= min_delay_seconds
        assert max_retries >= 0

    async def _sleep(self, seconds):  # pragma: no cover

        logger.debug(type(self).__name__ + " sleep(%r)", seconds)