chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
import io
|
||||
import logging
|
||||
import sys
|
||||
import time
|
||||
|
||||
import pytest
|
||||
|
||||
from ray.tune.search.variant_generator import format_vars
|
||||
from ray.tune.utils.util import Tee, logger as util_logger, retry_fn
|
||||
|
||||
|
||||
def test_format_vars():
|
||||
|
||||
# Format brackets correctly
|
||||
assert (
|
||||
format_vars(
|
||||
{
|
||||
("a", "b", "c"): 8.1234567,
|
||||
("a", "b", "d"): [7, 8],
|
||||
("a", "b", "e"): [[[3, 4]]],
|
||||
}
|
||||
)
|
||||
== "c=8.1235,d=7_8,e=3_4"
|
||||
)
|
||||
# Sorted by full keys, but only last key is reported
|
||||
assert (
|
||||
format_vars(
|
||||
{
|
||||
("a", "c", "x"): [7, 8],
|
||||
("a", "b", "x"): 8.1234567,
|
||||
}
|
||||
)
|
||||
== "x=8.1235,x=7_8"
|
||||
)
|
||||
# Filter out invalid chars. It's ok to have empty keys or values.
|
||||
assert (
|
||||
format_vars(
|
||||
{
|
||||
("a c?x",): " <;%$ok ",
|
||||
("some",): " ",
|
||||
}
|
||||
)
|
||||
== "a_c_x=ok,some="
|
||||
)
|
||||
|
||||
|
||||
def test_retry_fn_repeat(tmpdir):
|
||||
success = tmpdir / "success"
|
||||
marker = tmpdir / "marker"
|
||||
|
||||
def _fail_once():
|
||||
if marker.exists():
|
||||
success.write_text(".", encoding="utf-8")
|
||||
return
|
||||
marker.write_text(".", encoding="utf-8")
|
||||
raise RuntimeError("Failing")
|
||||
|
||||
assert not success.exists()
|
||||
assert not marker.exists()
|
||||
|
||||
assert retry_fn(
|
||||
fn=_fail_once,
|
||||
exception_type=RuntimeError,
|
||||
sleep_time=0,
|
||||
)
|
||||
|
||||
assert success.exists()
|
||||
assert marker.exists()
|
||||
|
||||
|
||||
def test_retry_fn_timeout(tmpdir):
|
||||
success = tmpdir / "success"
|
||||
marker = tmpdir / "marker"
|
||||
|
||||
def _fail_once():
|
||||
if not marker.exists():
|
||||
marker.write_text(".", encoding="utf-8")
|
||||
raise RuntimeError("Failing")
|
||||
time.sleep(5)
|
||||
success.write_text(".", encoding="utf-8")
|
||||
return
|
||||
|
||||
assert not success.exists()
|
||||
assert not marker.exists()
|
||||
|
||||
assert not retry_fn(
|
||||
fn=_fail_once, exception_type=RuntimeError, sleep_time=0, timeout=0.1
|
||||
)
|
||||
|
||||
assert not success.exists()
|
||||
assert marker.exists()
|
||||
|
||||
|
||||
def test_tee_recursion():
|
||||
f = io.StringIO()
|
||||
g = io.StringIO()
|
||||
|
||||
tee = Tee(f, g)
|
||||
|
||||
hdlr = logging.StreamHandler(tee)
|
||||
util_logger.addHandler(hdlr)
|
||||
|
||||
util_logger.info("BEFORE")
|
||||
f.close()
|
||||
util_logger.info("AFTER")
|
||||
|
||||
util_logger.removeHandler(hdlr)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(pytest.main(["-v", __file__]))
|
||||
Reference in New Issue
Block a user