autodl-projects/tests/test_basic_space.py

124 lines
4.2 KiB
Python
Raw Normal View History

2021-03-18 08:04:14 +01:00
#####################################################
# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.03 #
#####################################################
2021-03-21 06:26:52 +01:00
# pytest tests/test_basic_space.py -s #
#####################################################
2021-03-18 08:04:14 +01:00
import sys, random
import unittest
import pytest
from pathlib import Path
2021-05-19 07:00:33 +02:00
from xautodl.spaces import Categorical
from xautodl.spaces import Continuous
from xautodl.spaces import Integer
from xautodl.spaces import is_determined
from xautodl.spaces import get_min
from xautodl.spaces import get_max
2021-03-18 08:04:14 +01:00
class TestBasicSpace(unittest.TestCase):
"""Test the basic search spaces."""
def test_categorical(self):
space = Categorical(1, 2, 3, 4)
for i in range(4):
self.assertEqual(space[i], i + 1)
self.assertEqual(
"Categorical(candidates=[1, 2, 3, 4], default_index=None)", str(space)
)
2021-03-18 09:02:55 +01:00
def test_integer(self):
space = Integer(lower=1, upper=4)
for i in range(4):
self.assertEqual(space[i], i + 1)
self.assertEqual("Integer(lower=1, upper=4, default=None)", str(space))
2021-03-18 11:32:26 +01:00
self.assertEqual(get_max(space), 4)
self.assertEqual(get_min(space), 1)
2021-03-18 09:02:55 +01:00
2021-03-18 08:04:14 +01:00
def test_continuous(self):
random.seed(999)
space = Continuous(0, 1)
2021-03-19 08:17:49 +01:00
self.assertGreaterEqual(space.random().value, 0)
self.assertGreaterEqual(1, space.random().value)
2021-03-18 08:04:14 +01:00
lower, upper = 1.5, 4.6
space = Continuous(lower, upper, log=False)
values = []
for i in range(1000000):
2021-03-19 11:22:58 +01:00
x = space.random(reuse_last=False).value
2021-03-18 08:04:14 +01:00
self.assertGreaterEqual(x, lower)
self.assertGreaterEqual(upper, x)
values.append(x)
self.assertAlmostEqual((lower + upper) / 2, sum(values) / len(values), places=2)
self.assertEqual(
"Continuous(lower=1.5, upper=4.6, default_value=None, log_scale=False)",
str(space),
)
def test_determined_and_has(self):
# Test Non-nested Space
space = Categorical(1, 2, 3, 4)
self.assertFalse(space.determined)
self.assertTrue(space.has(2))
self.assertFalse(space.has(6))
space = Categorical(4)
self.assertTrue(space.determined)
space = Continuous(0.11, 0.12)
self.assertTrue(space.has(0.115))
self.assertFalse(space.has(0.1))
self.assertFalse(space.determined)
space = Continuous(0.11, 0.11)
self.assertTrue(space.determined)
# Test Nested Space
space_1 = Categorical(1, 2, 3, 4)
space_2 = Categorical(1)
nested_space = Categorical(space_1)
self.assertFalse(nested_space.determined)
self.assertTrue(nested_space.has(4))
nested_space = Categorical(space_2)
self.assertTrue(nested_space.determined)
# Test Nested Space 2
nested_space = Categorical(
Categorical(1, 2, 3),
Categorical(4, Categorical(5, 6, 7, Categorical(8, 9), 10), 11),
12,
)
2021-03-19 08:17:49 +01:00
print("\nThe nested search space:\n{:}".format(nested_space))
2021-03-18 08:04:14 +01:00
for i in range(1, 13):
self.assertTrue(nested_space.has(i))
2021-03-18 13:44:22 +01:00
# Test Simple Op
self.assertTrue(is_determined(1))
self.assertFalse(is_determined(nested_space))
2021-03-19 05:30:32 +01:00
2021-03-19 11:22:58 +01:00
def test_duplicate(self):
space = Categorical(1, 2, 3, 4)
x = space.random()
for _ in range(100):
self.assertEqual(x, space.random(reuse_last=True))
2021-03-19 05:30:32 +01:00
class TestAbstractSpace(unittest.TestCase):
"""Test the abstract search spaces."""
def test_continous(self):
2021-03-19 08:17:49 +01:00
print("")
2021-03-19 05:33:06 +01:00
space = Continuous(0, 1)
self.assertEqual(space, space.abstract())
2021-03-19 08:17:49 +01:00
print("The abstract search space for Continuous: {:}".format(space.abstract()))
space = Categorical(1, 2, 3)
self.assertEqual(len(space.abstract()), 3)
2021-03-19 05:33:06 +01:00
print(space.abstract())
2021-03-19 08:17:49 +01:00
nested_space = Categorical(
Categorical(1, 2, 3),
Categorical(4, Categorical(5, 6, 7, Categorical(8, 9), 10), 11),
12,
)
abstract_nested_space = nested_space.abstract()
print("The abstract nested search space:\n{:}".format(abstract_nested_space))