Add a simple Categorical space

This commit is contained in:
D-X-Y 2021-03-17 12:48:43 +00:00
parent 95e304495f
commit d09cb2fe65
5 changed files with 97 additions and 2 deletions

34
.github/workflows/test.yml vendored Normal file
View File

@ -0,0 +1,34 @@
name: Run Python Tests for Spaces
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
strategy:
matrix:
os: [ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-latest]
python-version: [3.6, 3.7, 3.8, 3.9]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Test Search Space
run: |
python -m pip install pytest
echo $PWD
ls
python --version
python -m pytest AutoDL-Projects/tests --durations=0

@ -1 +1 @@
Subproject commit 51187c1e9152ff79b02b11c80bca0b03b402a7e5
Subproject commit fbfcba7eb3ad19e862eca32ee0bb3195f1a8a9ef

View File

@ -1 +1,7 @@
#
#####################################################
# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.01 #
#####################################################
# Define complex searc space for AutoDL #
#####################################################
from .basic_space import Categorical

33
lib/spaces/basic_space.py Normal file
View File

@ -0,0 +1,33 @@
#####################################################
# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.01 #
#####################################################
import abc
import random
class Space(metaclass=abc.ABCMeta):
@abc.abstractmethod
def random(self):
raise NotImplementedError
@abc.abstractmethod
def __repr__(self):
raise NotImplementedError
class Categorical(Space):
def __init__(self, *data):
self._candidates = [*data]
def __getitem__(self, index):
return self._candidates[index]
def __len__(self):
return len(self._candidates)
def __repr__(self):
return "{name:}(candidates={cs:})".format(name=self.__class__.__name__, cs=self._candidates)
def random(self):
return random.choice(self._candidates)

22
tests/test_basic.py Normal file
View File

@ -0,0 +1,22 @@
#####################################################
# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.03 #
#####################################################
import sys
import unittest
import pytest
from pathlib import Path
lib_dir = (Path(__file__).parent / ".." / "lib").resolve()
print("library path: {:}".format(lib_dir))
if str(lib_dir) not in sys.path:
sys.path.insert(0, str(lib_dir))
from spaces import Categorical
class TestBasicSpace(unittest.TestCase):
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])", str(space))