Refactor: Replace if-elif chain with optimizer config dict #8
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test Benchmark Refactoring | |
on: | |
push: | |
branches: [ refactor-optimizer-selection ] | |
pull_request: | |
branches: [ main ] | |
jobs: | |
test-refactoring: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python-version: [3.8, 3.9, '3.10', 3.11] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install numpy | |
# Try to install pypop7 if setup.py exists, otherwise skip | |
if [ -f setup.py ]; then | |
pip install -e . | |
else | |
echo "No setup.py found, skipping pypop7 installation" | |
fi | |
- name: Run syntax check | |
run: | | |
python -m py_compile tutorials/benchmarking_lsbbo_2.py | |
- name: Test optimizer loading | |
run: | | |
python -c " | |
# Test only the configuration part without importing the full script | |
import sys | |
import os | |
# Read the file and extract just the OPTIMIZER_CONFIGS part | |
with open('tutorials/benchmarking_lsbbo_2.py', 'r') as f: | |
content = f.read() | |
# Extract the configuration section | |
import re | |
config_match = re.search(r'OPTIMIZER_CONFIGS.*?^}', content, re.MULTILINE | re.DOTALL) | |
if config_match: | |
print('✓ OPTIMIZER_CONFIGS found in file') | |
# Count the number of optimizers | |
optimizer_count = content.count('OptimizerConfig(') | |
print(f'✓ Found {optimizer_count} optimizers configured') | |
# Check for some key optimizers | |
key_optimizers = ['CMAES', 'PRS', 'JADE', 'SPSO'] | |
for opt in key_optimizers: | |
if f\"'{opt}':\" in content: | |
print(f'✓ {opt}: Found in configuration') | |
else: | |
print(f'✗ {opt}: Missing from configuration') | |
else: | |
print('✗ OPTIMIZER_CONFIGS not found') | |
sys.exit(1) | |
" | |
- name: Test argument validation | |
run: | | |
# Just test that the file contains proper argument parser setup | |
python -c " | |
with open('tutorials/benchmarking_lsbbo_2.py', 'r') as f: | |
content = f.read() | |
# Check for argparse usage | |
if 'argparse.ArgumentParser' in content: | |
print('✓ Argument parser found') | |
else: | |
print('✗ Argument parser missing') | |
sys.exit(1) | |
# Check for required arguments | |
required_args = ['--start', '--end', '--optimizer', '--ndim_problem'] | |
for arg in required_args: | |
if arg in content: | |
print(f'✓ {arg}: Found') | |
else: | |
print(f'✗ {arg}: Missing') | |
sys.exit(1) | |
" | |
- name: Test invalid optimizer | |
run: | | |
echo "Skipping invalid optimizer test due to pypop7 dependency" | |
- name: Quick integration test | |
run: | | |
echo "Skipping integration test due to pypop7 dependency" | |
code-quality: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: Install linting tools | |
run: | | |
pip install flake8 | |
- name: Lint with flake8 | |
run: flake8 tutorials/benchmarking_lsbbo_2.py --max-line-length=100 --ignore=E501,W503,F401 |