forked from optuna/optuna
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_experimental.py
106 lines (72 loc) · 3.2 KB
/
test_experimental.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
from typing import Any
import pytest
from optuna import _experimental
from optuna.exceptions import ExperimentalWarning
def _sample_func() -> int:
return 10
class _Sample:
def __init__(self, a: Any, b: Any, c: Any) -> None:
pass
def _method(self) -> None:
"""summary
detail
"""
pass
def _method_expected(self) -> None:
"""summary
detail
.. note::
Added in v1.1.0 as an experimental feature. The interface may change in newer versions
without prior notice. See https://github.com/optuna/optuna/releases/tag/v1.1.0.
"""
pass
@pytest.mark.parametrize("version", ["1.1", 100, None])
def test_experimental_raises_error_for_invalid_version(version: Any) -> None:
with pytest.raises(ValueError):
_experimental.experimental_func(version)
with pytest.raises(ValueError):
_experimental.experimental_class(version)
def test_experimental_func_decorator() -> None:
version = "1.1.0"
decorator_experimental = _experimental.experimental_func(version)
assert callable(decorator_experimental)
decorated_func = decorator_experimental(_sample_func)
assert decorated_func.__name__ == _sample_func.__name__
assert decorated_func.__doc__ == _experimental._EXPERIMENTAL_NOTE_TEMPLATE.format(ver=version)
with pytest.warns(ExperimentalWarning):
decorated_func()
def test_experimental_instance_method_decorator() -> None:
version = "1.1.0"
decorator_experimental = _experimental.experimental_func(version)
assert callable(decorator_experimental)
decorated_method = decorator_experimental(_Sample._method)
assert decorated_method.__name__ == _Sample._method.__name__
assert decorated_method.__doc__ == _Sample._method_expected.__doc__
with pytest.warns(ExperimentalWarning):
decorated_method(None) # type: ignore
def test_experimental_class_decorator() -> None:
version = "1.1.0"
decorator_experimental = _experimental.experimental_class(version)
assert callable(decorator_experimental)
decorated_class = decorator_experimental(_Sample)
assert decorated_class.__name__ == "_Sample"
assert decorated_class.__init__.__name__ == "__init__"
assert decorated_class.__doc__ == _experimental._EXPERIMENTAL_NOTE_TEMPLATE.format(ver=version)
with pytest.warns(ExperimentalWarning):
decorated_class("a", "b", "c")
def test_experimental_class_decorator_name() -> None:
name = "foo"
decorator_experimental = _experimental.experimental_class("1.1.0", name=name)
decorated_sample = decorator_experimental(_Sample)
with pytest.warns(ExperimentalWarning) as record:
decorated_sample("a", "b", "c")
assert isinstance(record.list[0].message, Warning)
assert name in record.list[0].message.args[0]
def test_experimental_decorator_name() -> None:
name = "bar"
decorator_experimental = _experimental.experimental_func("1.1.0", name=name)
decorated_sample_func = decorator_experimental(_sample_func)
with pytest.warns(ExperimentalWarning) as record:
decorated_sample_func()
assert isinstance(record.list[0].message, Warning)
assert name in record.list[0].message.args[0]