from typing import Dict, Any, Optional from config import PHYSICS_CONSTANTS class PhysicsConstantsLookup: """A tool for looking up physical constants.""" def __init__(self): self.constants = PHYSICS_CONSTANTS def get_constant(self, name: str) -> Optional[Dict[str, Any]]: """ Look up a physical constant by name. Args: name: The name of the constant (case-insensitive) Returns: Dictionary with value, unit, and symbol, or None if not found """ name_lower = name.lower().replace(" ", "_") return self.constants.get(name_lower) def search_constants(self, keyword: str) -> Dict[str, Dict[str, Any]]: """ Search for constants containing a keyword. Args: keyword: The keyword to search for Returns: Dictionary of matching constants """ keyword_lower = keyword.lower() matches = {} for const_name, const_data in self.constants.items(): if (keyword_lower in const_name.lower() or keyword_lower in const_data.get("symbol", "").lower()): matches[const_name] = const_data return matches def list_all_constants(self) -> Dict[str, Dict[str, Any]]: """Return all available constants.""" return self.constants def format_constant(self, name: str, data: Dict[str, Any]) -> str: """Format a constant for display.""" return f"{name.replace('_', ' ').title()}: {data['value']} {data['unit']} (Symbol: {data['symbol']})"