SYMBOL INDEX (72 symbols across 11 files) FILE: src/analyze_claude_round1.py function load_scores (line 31) | def load_scores(today_str: str) -> dict: function normalize_ticker (line 39) | def normalize_ticker(ticker: str) -> str: function build_prompt (line 43) | def build_prompt(scores: dict) -> str: function call_claude_with_retry (line 146) | def call_claude_with_retry(prompt: str) -> str: function parse_claude_response (line 176) | def parse_claude_response(raw: str) -> dict: function run (line 187) | def run(): FILE: src/analyze_claude_round2.py function load_round1 (line 31) | def load_round1(today_str: str) -> dict: function load_options (line 39) | def load_options(today_str: str) -> dict: function format_options_for_prompt (line 47) | def format_options_for_prompt(ticker: str, opt_data: dict) -> str: function build_round2_prompt (line 96) | def build_round2_prompt(r1: dict, options_data: dict) -> str: function call_claude_with_retry (line 166) | def call_claude_with_retry(prompt: str) -> str: function parse_response (line 196) | def parse_response(raw: str) -> dict: function validate_result (line 207) | def validate_result(result: dict) -> bool: function run (line 225) | def run(): FILE: src/backtest.py function load_all_analyses (line 25) | def load_all_analyses() -> list[dict]: function _yf_ticker (line 37) | def _yf_ticker(ticker: str) -> str: function check_stock_performance (line 42) | def check_stock_performance(ticker: str, signal_date_str: str) -> dict: function run (line 97) | def run() -> dict: FILE: src/date_check.py function next_business_day (line 26) | def next_business_day(d: date) -> date: function get_expected_run_date (line 33) | def get_expected_run_date(ref: date) -> date: function should_run_today (line 43) | def should_run_today(today: date, force: bool = False, target_override: ... function write_github_output (line 67) | def write_github_output(key: str, value: str): FILE: src/fetch_filings.py function _sleep (line 25) | def _sleep(): function edgar_get (line 29) | def edgar_get(url: str) -> requests.Response: function get_latest_13f_filing (line 38) | def get_latest_13f_filing(cik: str) -> dict | None: function get_filing_files (line 76) | def get_filing_files(cik: str, accession: str) -> list[dict]: function find_infotable_filename (line 115) | def find_infotable_filename(items: list[dict]) -> str | None: function download_infotable (line 140) | def download_infotable(filing_meta: dict) -> str | None: function parse_infotable (line 181) | def parse_infotable(xml_text: str) -> list[dict]: function _openfigi_headers (line 225) | def _openfigi_headers() -> dict: function map_cusips_to_tickers (line 234) | def map_cusips_to_tickers(cusips: list[str]) -> dict[str, str]: function _is_valid_equity_ticker (line 278) | def _is_valid_equity_ticker(ticker: str) -> bool: function check_recent_splits (line 296) | def check_recent_splits(tickers: list[str]) -> dict[str, float]: function run (line 326) | def run(): FILE: src/multi_quarter.py function load_historical_parsed (line 17) | def load_historical_parsed(today_str: str) -> list[dict]: function build_multi_quarter_signals (line 40) | def build_multi_quarter_signals(today_str: str) -> dict[str, dict]: function get_multiplier (line 144) | def get_multiplier(ticker: str, signals: dict[str, dict]) -> float: FILE: src/notify.py function send_alert (line 21) | def send_alert(subject: str, body: str): FILE: src/options_lookup.py function get_headers (line 28) | def get_headers() -> dict: function get_stock_quotes (line 38) | def get_stock_quotes(tickers: list[str], headers: dict) -> dict[str, dict]: function normalize_ticker_for_tradier (line 53) | def normalize_ticker_for_tradier(ticker: str) -> str: function get_expiration_dates (line 57) | def get_expiration_dates(ticker: str, headers: dict) -> list[str]: function get_option_chain (line 81) | def get_option_chain(ticker: str, expiry: str, headers: dict) -> list[di... function filter_options (line 101) | def filter_options(chain: list[dict], direction: str = "BULLISH", function fetch_options_for_ticker (line 192) | def fetch_options_for_ticker(ticker: str, direction: str, headers: dict, function run (line 262) | def run(): FILE: src/parse_13f.py function load_latest_raw (line 21) | def load_latest_raw(today_str: str) -> dict: function load_prior_quarter (line 29) | def load_prior_quarter(today_str: str) -> dict | None: function build_position_lookup (line 67) | def build_position_lookup(filer_data: dict) -> dict: function adjust_shares_for_splits (line 132) | def adjust_shares_for_splits(shares: int, ticker: str, splits: dict) -> ... function compute_delta (line 146) | def compute_delta(current_shares: int, prior_shares: int | None, ticker:... function parse_and_enrich (line 189) | def parse_and_enrich(raw: dict, prior: dict | None) -> dict: function run (line 318) | def run(): FILE: src/scoring.py function load_parsed (line 30) | def load_parsed(today_str: str) -> dict: function fetch_price_changes (line 40) | def fetch_price_changes(tickers: list[str], filing_dates: dict[str, str]... function compute_raw_score (line 135) | def compute_raw_score(pos: dict, filer_name: str) -> float: function apply_flags (line 171) | def apply_flags(pos: dict, rank: int) -> list[str]: function build_scored_universe (line 196) | def build_scored_universe(parsed: dict, mq_signals: dict[str, dict]) -> ... function enrich_with_price_action (line 250) | def enrich_with_price_action(scored: list[dict]) -> list[dict]: function detect_clusters (line 300) | def detect_clusters(scored: list[dict]) -> dict[str, list[str]]: function apply_cluster_bonus (line 325) | def apply_cluster_bonus(scored: list[dict], clusters: dict[str, list[str... function normalize_scores (line 340) | def normalize_scores(scored: list[dict]) -> list[dict]: function aggregate_by_ticker (line 360) | def aggregate_by_ticker(scored: list[dict]) -> list[dict]: function run (line 408) | def run(): FILE: src/send_report.py function load_final_analysis (line 24) | def load_final_analysis(today_str: str) -> dict: function load_backtest (line 32) | def load_backtest(today_str: str) -> dict | None: function flag_badge (line 40) | def flag_badge(flag: str) -> str: function _post_filing_block (line 52) | def _post_filing_block(perf: dict) -> str: function generate_backtest_html (line 101) | def generate_backtest_html(backtest: dict) -> str: function generate_html_report (line 169) | def generate_html_report(analysis: dict, backtest: dict | None = None) -... function send_gmail (line 350) | def send_gmail(html_content: str, today_str: str): function run (line 379) | def run():