Add a simple Categorical space
This commit is contained in:
		
							
								
								
									
										34
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
										Normal 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 | ||||
| 	 | ||||
 Submodule .latent-data/NATS-Bench updated: 51187c1e91...fbfcba7eb3
									
								
							| @@ -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
									
								
							
							
						
						
									
										33
									
								
								lib/spaces/basic_space.py
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										22
									
								
								tests/test_basic.py
									
									
									
									
									
										Normal 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)) | ||||
		Reference in New Issue
	
	Block a user