mirror of
https://github.com/open-thought/reasoning-gym.git
synced 2026-04-25 17:10:51 +00:00
44 lines
No EOL
1.9 KiB
Python
44 lines
No EOL
1.9 KiB
Python
import logging
|
|
from typing import Dict, Any, Tuple
|
|
from reasoning_gym import exercises, curricula
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class ExerciseRegistrar:
|
|
"""Handles registration of exercises and curricula."""
|
|
|
|
@staticmethod
|
|
def register_all() -> Dict[str, Tuple[Any, Any]]:
|
|
"""
|
|
Register all exercises and their curricula.
|
|
Returns dict of {exercise_name: (exercise_instance, curriculum_instance)}.
|
|
"""
|
|
registered = {}
|
|
|
|
# Get all Exercise classes from exercises module
|
|
for exercise_name in exercises.__all__:
|
|
if exercise_name.endswith('Exercise'):
|
|
exercise_class = getattr(exercises, exercise_name)
|
|
exercise_base = exercise_name[:-7] # Remove 'Exercise'
|
|
curriculum_name = f"{exercise_base}Curriculum"
|
|
|
|
if hasattr(curricula, curriculum_name):
|
|
try:
|
|
curriculum_class = getattr(curricula, curriculum_name)
|
|
|
|
# Create instances
|
|
exercise_instance = exercise_class()
|
|
curriculum_instance = curriculum_class()
|
|
|
|
# Convert CamelCase to snake_case for exercise name
|
|
exercise_name = ''.join([f'_{c.lower()}' if c.isupper() else c
|
|
for c in exercise_base]).lstrip('_')
|
|
|
|
registered[exercise_name] = (exercise_instance, curriculum_instance)
|
|
logger.info(f"ExerciseRegistrar: Registered exercise: {exercise_name}")
|
|
except Exception as e:
|
|
logger.error(f"ExerciseRegistrar: Error instantiating {exercise_name}: {e}", exc_info=True)
|
|
else:
|
|
logger.warning(f"ExerciseRegistrar: No curriculum found for {exercise_name}")
|
|
|
|
return registered |