Remove some Python 2 compatibility code. (#6624)

This commit is contained in:
Robert Nishihara
2019-12-31 17:14:58 -08:00
committed by GitHub
parent ecddaafd94
commit 480206eef8
27 changed files with 47 additions and 191 deletions
+1 -4
View File
@@ -1,12 +1,9 @@
import sys
from ray.experimental.serve.backend_config import BackendConfig
from ray.experimental.serve.policy import RoutePolicy
if sys.version_info < (3, 0):
raise ImportError("serve is Python 3 only.")
from ray.experimental.serve.api import (
init, create_backend, create_endpoint, link, split, get_handle, stat,
set_backend_config, get_backend_config, accept_batch) # noqa: E402
__all__ = [
"init", "create_backend", "create_endpoint", "link", "split", "get_handle",
"stat", "set_backend_config", "get_backend_config", "BackendConfig",
@@ -3,18 +3,13 @@ from __future__ import division
from __future__ import print_function
import numpy as np
import sys
import torch
import torch.nn as nn
import unittest
from unittest.mock import MagicMock
from ray.experimental.sgd.pytorch.pytorch_runner import PyTorchRunner
if sys.version_info >= (3, 3):
from unittest.mock import MagicMock
else:
from mock import MagicMock
class LinearDataset(torch.utils.data.Dataset):
"""y = a * x + b"""
+7 -10
View File
@@ -326,17 +326,14 @@ class FunctionActorManager(object):
unnecessarily or fail to give warnings, but the application's
behavior won't change.
"""
if sys.version_info[0] >= 3:
import io
string_file = io.StringIO()
if sys.version_info[1] >= 7:
dis.dis(function_or_class, file=string_file, depth=2)
else:
dis.dis(function_or_class, file=string_file)
collision_identifier = (
function_or_class.__name__ + ":" + string_file.getvalue())
import io
string_file = io.StringIO()
if sys.version_info[1] >= 7:
dis.dis(function_or_class, file=string_file, depth=2)
else:
collision_identifier = function_or_class.__name__
dis.dis(function_or_class, file=string_file)
collision_identifier = (
function_or_class.__name__ + ":" + string_file.getvalue())
# Return a hash of the identifier in case it is too large.
return hashlib.sha1(collision_identifier.encode("ascii")).digest()
+7 -13
View File
@@ -27,7 +27,6 @@ from ray.utils import try_to_create_directory, try_to_symlink
# using logging.basicConfig in its entry/init points.
logger = logging.getLogger(__name__)
PY3 = sys.version_info.major >= 3
SESSION_LATEST = "session_latest"
@@ -599,12 +598,10 @@ class Node(object):
self.start_redis()
self.start_monitor()
self.start_raylet_monitor()
# The dashboard is Python3.x only.
if PY3:
if self._ray_params.include_webui:
self.start_dashboard(require_webui=True)
elif self._ray_params.include_webui is None:
self.start_dashboard(require_webui=False)
if self._ray_params.include_webui:
self.start_dashboard(require_webui=True)
elif self._ray_params.include_webui is None:
self.start_dashboard(require_webui=False)
def start_ray_processes(self):
"""Start all of the processes on the node."""
@@ -614,8 +611,7 @@ class Node(object):
self.start_plasma_store()
self.start_raylet()
if PY3:
self.start_reporter()
self.start_reporter()
if self._ray_params.include_log_monitor:
self.start_log_monitor()
@@ -755,10 +751,8 @@ class Node(object):
check_alive (bool): Raise an exception if the process was already
dead.
"""
# reporter is started only in PY3.
if PY3:
self._kill_process_type(
ray_constants.PROCESS_TYPE_REPORTER, check_alive=check_alive)
self._kill_process_type(
ray_constants.PROCESS_TYPE_REPORTER, check_alive=check_alive)
def kill_dashboard(self, check_alive=True):
"""Kill the dashboard.
+1 -6
View File
@@ -446,9 +446,7 @@ def start_ray_process(command,
# in interactive sessions. This is only supported in Python 3.3 and above.
def block_sigint():
import signal
import sys
if sys.version_info >= (3, 3):
signal.pthread_sigmask(signal.SIG_BLOCK, {signal.SIGINT})
signal.pthread_sigmask(signal.SIG_BLOCK, {signal.SIGINT})
process = subprocess.Popen(
command,
@@ -1068,9 +1066,6 @@ def start_dashboard(require_webui,
if redis_password:
command += ["--redis-password", redis_password]
if sys.version_info <= (3, 0):
return None, None
webui_dependencies_present = True
try:
import aiohttp # noqa: F401
-15
View File
@@ -38,16 +38,6 @@ def test_actor_init_error_propagated(ray_start_regular):
ray.get(actor.foo.remote())
@pytest.mark.skipif(
sys.version_info >= (3, 0), reason="This test requires Python 2.")
def test_old_style_error(ray_start_regular):
with pytest.raises(TypeError):
@ray.remote
class Actor:
pass
def test_keyword_args(ray_start_regular):
@ray.remote
class Actor(object):
@@ -189,8 +179,6 @@ def test_custom_classes(ray_start_regular):
assert results2[2].x == 3
@pytest.mark.skipif(
sys.version_info < (3, 0), reason="This test requires Python 3.")
def test_actor_class_attributes(ray_start_regular):
class Grandparent(object):
GRANDPARENT = 2
@@ -423,8 +411,6 @@ def test_actor_deletion(ray_start_regular):
[ray.test_utils.wait_for_pid_to_exit(pid) for pid in pids]
@pytest.mark.skipif(
sys.version_info < (3, 0), reason="This test requires Python 3.")
def test_actor_method_deletion(ray_start_regular):
@ray.remote
class Actor(object):
@@ -1497,5 +1483,4 @@ def test_actor_creation_task_crash(ray_start_regular):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
-6
View File
@@ -403,8 +403,6 @@ def test_actor_multiple_gpus_from_multiple_tasks(ray_start_cluster):
assert ready_ids == []
@pytest.mark.skipif(
sys.version_info < (3, 0), reason="This test requires Python 3.")
def test_actors_and_tasks_with_gpus(ray_start_cluster):
cluster = ray_start_cluster
num_nodes = 3
@@ -638,9 +636,6 @@ def test_blocking_actor_task(shutdown_only):
assert remaining_ids == [x_id]
@pytest.mark.skipif(
sys.version_info < (3, 0),
reason="This test is currently failing on Python 2.7.")
def test_lifetime_and_transient_resources(ray_start_regular):
# This actor acquires resources only when running methods.
@ray.remote
@@ -743,5 +738,4 @@ def test_creating_more_actors_than_resources(shutdown_only):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
+3 -8
View File
@@ -272,14 +272,9 @@ class CaptureOutputAndError(object):
"""
def __init__(self, captured_output_and_error):
if sys.version_info >= (3, 0):
import io
self.output_buffer = io.StringIO()
self.error_buffer = io.StringIO()
else:
import cStringIO
self.output_buffer = cStringIO.StringIO()
self.error_buffer = cStringIO.StringIO()
import io
self.output_buffer = io.StringIO()
self.error_buffer = io.StringIO()
self.captured_output_and_error = captured_output_and_error
def __enter__(self):
+1 -4
View File
@@ -2,6 +2,7 @@ from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from importlib import reload
import numpy as np
from numpy.testing import assert_equal, assert_almost_equal
import pytest
@@ -12,9 +13,6 @@ import ray.experimental.array.remote as ra
import ray.experimental.array.distributed as da
import ray.cluster_utils
if sys.version_info >= (3, 0):
from importlib import reload
@pytest.fixture
def reload_modules():
@@ -220,5 +218,4 @@ def test_distributed_array_methods(ray_start_cluster_2_nodes, reload_modules):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
+1 -21
View File
@@ -63,9 +63,6 @@ def test_simple_serialization(ray_start_regular):
np.float64(1.9),
]
if sys.version_info < (3, 0):
primitive_objects.append(long(0)) # noqa: E501,F821
composite_objects = (
[[obj]
for obj in primitive_objects] + [(obj, )
@@ -185,17 +182,7 @@ def complex_serialization(use_pickle):
assert obj1 == obj2, "Objects {} and {} are different.".format(
obj1, obj2)
if sys.version_info >= (3, 0):
long_extras = [0, np.array([["hi", u"hi"], [1.3, 1]])]
else:
long_extras = [
long(0), # noqa: E501,F821
np.array([
["hi", u"hi"],
[1.3, long(1)] # noqa: E501,F821
])
]
long_extras = [0, np.array([["hi", u"hi"], [1.3, 1]])]
PRIMITIVE_OBJECTS = [
0, 0.0, 0.9, 1 << 62, 1 << 100, 1 << 999, [1 << 100, [1 << 100]], "a",
@@ -810,8 +797,6 @@ def test_keyword_args(ray_start_regular):
assert ray.get(f3.remote(4)) == 4
@pytest.mark.skipif(
sys.version_info < (3, 0), reason="This test requires Python 3.")
@pytest.mark.parametrize(
"ray_start_regular", [{
"local_mode": True
@@ -847,8 +832,6 @@ def test_args_starkwargs(ray_start_regular):
ray.get(remote_test_function.remote(local_method, actor_method))
@pytest.mark.skipif(
sys.version_info < (3, 0), reason="This test requires Python 3.")
@pytest.mark.parametrize(
"ray_start_regular", [{
"local_mode": True
@@ -890,8 +873,6 @@ def test_args_named_and_star(ray_start_regular):
ray.get(remote_test_function.remote(local_method, actor_method))
@pytest.mark.skipif(
sys.version_info < (3, 0), reason="This test requires Python 3.")
@pytest.mark.parametrize(
"ray_start_regular", [{
"local_mode": True
@@ -1655,5 +1636,4 @@ def test_wait(ray_start_regular):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
-1
View File
@@ -51,7 +51,6 @@ def test_raylet_gdb(ray_gdb_start):
if __name__ == "__main__":
import pytest
import sys
# Make subprocess happy in bazel.
os.environ["LC_ALL"] = "en_US.UTF-8"
os.environ["LANG"] = "en_US.UTF-8"
-2
View File
@@ -644,8 +644,6 @@ def test_warning_for_too_many_nested_tasks(shutdown_only):
wait_for_errors(ray_constants.WORKER_POOL_LARGE_ERROR, 1)
@pytest.mark.skipif(
sys.version_info < (3, 0), reason="This test requires Python 3.")
def test_warning_for_many_duplicate_remote_functions_and_actors(shutdown_only):
ray.init(num_cpus=1)
+1 -6
View File
@@ -9,17 +9,13 @@ import subprocess
import yaml
from click.testing import CliRunner
import sys
from unittest.mock import patch, DEFAULT
from contextlib import contextmanager
from ray.projects.scripts import session_start, session_execute
import ray
if sys.version_info >= (3, 3):
from unittest.mock import patch, DEFAULT
else:
from mock import patch, DEFAULT
TEST_DIR = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "project_files")
@@ -240,7 +236,6 @@ def test_session_create_multiple():
if __name__ == "__main__":
import sys
# Make subprocess happy in bazel.
os.environ["LC_ALL"] = "en_US.UTF-8"
os.environ["LANG"] = "en_US.UTF-8"
-3
View File
@@ -299,8 +299,6 @@ def test_nondeterministic_task(ray_start_reconstruction):
@pytest.mark.skipif(
os.environ.get("RAY_USE_NEW_GCS") == "on",
reason="Failing with new GCS API on Linux.")
@pytest.mark.skipif(
sys.version_info < (3, 0), reason="This test requires Python 3.")
@pytest.mark.parametrize(
"ray_start_object_store_memory", [10**9], indirect=True)
def test_driver_put_errors(ray_start_object_store_memory):
@@ -375,5 +373,4 @@ def test_driver_put_errors(ray_start_object_store_memory):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
+1 -5
View File
@@ -7,7 +7,6 @@ import time
import inspect
import threading
import traceback
import sys
from six.moves import queue
from ray.tune import track
@@ -249,10 +248,7 @@ def wrap_function(train_func):
use_track = False
try:
if sys.version_info >= (3, 3):
func_args = inspect.getfullargspec(train_func).args
else:
func_args = inspect.getargspec(train_func).args
func_args = inspect.getfullargspec(train_func).args
use_track = ("reporter" not in func_args and len(func_args) == 1)
if use_track:
logger.info("tune.track signature detected.")
@@ -6,14 +6,10 @@ from __future__ import print_function
import random
import sys
import unittest
from unittest.mock import patch
from ray.tune.checkpoint_manager import Checkpoint, CheckpointManager, logger
if sys.version_info >= (3, 3):
from unittest.mock import patch
else:
from mock import patch
class CheckpointManagerTest(unittest.TestCase):
@staticmethod
@@ -108,5 +104,4 @@ class CheckpointManagerTest(unittest.TestCase):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
+1 -6
View File
@@ -9,6 +9,7 @@ import os
import pytest
import shutil
import sys
from unittest.mock import MagicMock
import ray
from ray import tune
@@ -23,11 +24,6 @@ from ray.tune.resources import Resources
from ray.tune.trial_runner import TrialRunner
from ray.tune.suggest import BasicVariantGenerator
if sys.version_info >= (3, 3):
from unittest.mock import MagicMock
else:
from mock import MagicMock
def _start_new_cluster():
cluster = Cluster(
@@ -599,5 +595,4 @@ tune.run(
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
@@ -3,18 +3,13 @@ from __future__ import division
from __future__ import print_function
import collections
import sys
import time
import unittest
from unittest.mock import MagicMock
from ray.tune.trial import Trial
from ray.tune.progress_reporter import _fair_filter_trials
if sys.version_info >= (3, 3):
from unittest.mock import MagicMock
else:
from mock import MagicMock
class ProgressReporterTest(unittest.TestCase):
def mock_trial(self, status, start_time):
@@ -6,6 +6,7 @@ from __future__ import print_function
import json
import sys
import unittest
from unittest.mock import patch
import ray
from ray.exceptions import RayTimeoutError
@@ -18,11 +19,6 @@ from ray.tune.trial import Trial, Checkpoint
from ray.tune.resources import Resources
from ray.cluster_utils import Cluster
if sys.version_info >= (3, 3):
from unittest.mock import patch
else:
from mock import patch
class RayTrialExecutorTest(unittest.TestCase):
def setUp(self):
@@ -220,5 +216,4 @@ class LocalModeExecutorTest(RayTrialExecutorTest):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
+1 -6
View File
@@ -8,6 +8,7 @@ import shutil
import sys
import tempfile
import unittest
from unittest.mock import patch
import ray
from ray.rllib import _register_all
@@ -16,11 +17,6 @@ from ray import tune
from ray.tune import TuneError
from ray.tune.syncer import CommandBasedClient
if sys.version_info >= (3, 3):
from unittest.mock import patch
else:
from mock import patch
class TestSyncFunctionality(unittest.TestCase):
def setUp(self):
@@ -214,5 +210,4 @@ class TestSyncFunctionality(unittest.TestCase):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
+1 -6
View File
@@ -5,6 +5,7 @@ from __future__ import print_function
import os
import sys
import unittest
from unittest.mock import patch
import ray
from ray.rllib import _register_all
@@ -18,11 +19,6 @@ from ray.tune.trial_runner import TrialRunner
from ray.tune.resources import Resources
from ray.tune.suggest import BasicVariantGenerator
if sys.version_info >= (3, 3):
from unittest.mock import patch
else:
from mock import patch
def create_mock_components():
class _MockScheduler(FIFOScheduler):
@@ -330,5 +326,4 @@ class TrialRunnerTest2(unittest.TestCase):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
@@ -10,8 +10,9 @@ import numpy as np
import sys
import tempfile
import shutil
import ray
from unittest.mock import MagicMock
import ray
from ray.tune.result import TRAINING_ITERATION
from ray.tune.schedulers import (HyperBandScheduler, AsyncHyperBandScheduler,
PopulationBasedTraining, MedianStoppingRule,
@@ -25,11 +26,6 @@ from ray.tune.resources import Resources
from ray.rllib import _register_all
_register_all()
if sys.version_info >= (3, 3):
from unittest.mock import MagicMock
else:
from mock import MagicMock
def result(t, rew):
return dict(
@@ -1195,5 +1191,4 @@ class AsyncHyperBandSuite(unittest.TestCase):
if __name__ == "__main__":
import pytest
import sys
sys.exit(pytest.main(["-v", __file__]))
+3 -9
View File
@@ -4,22 +4,16 @@ from __future__ import print_function
import json
import logging
import sys
import threading
from urllib.parse import urljoin, urlparse
from http.server import SimpleHTTPRequestHandler, HTTPServer
import ray.cloudpickle as cloudpickle
from ray.tune import TuneError
from ray.tune.suggest import BasicVariantGenerator
from ray.utils import binary_to_hex, hex_to_binary
if sys.version_info[0] == 2:
from urlparse import urljoin, urlparse
from SimpleHTTPServer import SimpleHTTPRequestHandler
from SocketServer import TCPServer as HTTPServer
elif sys.version_info[0] == 3:
from urllib.parse import urljoin, urlparse
from http.server import SimpleHTTPRequestHandler, HTTPServer
logger = logging.getLogger(__name__)
try:
+2 -4
View File
@@ -61,8 +61,6 @@ LOCAL_MODE = 2
ERROR_KEY_PREFIX = b"Error:"
PY3 = sys.version_info.major >= 3
# Logger for this module. It should be configured at the entry point
# into the program using Ray. Ray provides a default configuration at
# entry/init points.
@@ -1456,7 +1454,7 @@ def get(object_ids, timeout=None):
worker = global_worker
worker.check_connected()
if PY3 and hasattr(
if hasattr(
worker,
"core_worker") and worker.core_worker.current_actor_is_asyncio():
raise RayError("Using blocking ray.get inside async actor. "
@@ -1575,7 +1573,7 @@ def wait(object_ids, num_returns=1, timeout=None):
"""
worker = global_worker
if PY3 and hasattr(
if hasattr(
worker,
"core_worker") and worker.core_worker.current_actor_is_asyncio():
raise RayError("Using blocking ray.wait inside async method. "