"""Rule Registry — register Wyckoff rules without modifying engines.""" from __future__ import annotations from crypto_wyckoff.rules.base import WyckoffRule class RuleRegistry: def __init__(self) -> None: self._rules: dict[str, WyckoffRule] = {} def register(self, rule: WyckoffRule) -> None: self._rules[rule.rule_id] = rule def get(self, rule_id: str) -> WyckoffRule | None: return self._rules.get(rule_id) def by_category(self, category: str, timeframe: str | None = None) -> list[WyckoffRule]: out = [r for r in self._rules.values() if r.category == category] if timeframe: out = [r for r in out if timeframe in r.timeframes] return out def all(self) -> list[WyckoffRule]: return list(self._rules.values()) rule_registry = RuleRegistry() def _register_defaults() -> None: from crypto_wyckoff.rules import cycle_rules, event_rules, phase_rules for mod in (cycle_rules, phase_rules, event_rules): for rule in mod.build_rules(): rule_registry.register(rule) _register_defaults()