{"record":{"id":"4836a54c35ab7714","repo":"HKUDS/Vibe-Trading","slug":"method-must-be-spearman-or-pearson-got-metho","errorCode":null,"errorMessage":"method must be 'spearman' or 'pearson', got {method!r}","messagePattern":"method must be 'spearman' or 'pearson', got (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"agent/src/quantlib/factormodel.py","lineNumber":775,"sourceCode":"    Measures the predictive power and persistence of a factor by calculating\n    daily/periodic cross-sectional correlations between factor scores and subsequent\n    forward returns (Grinold-Kahn fundamental law framework).\n\n    Args:\n        factor_panel: DataFrame of factor scores (index = dates, columns = assets).\n        forward_returns: DataFrame of forward returns (same shape and alignment; should be pre-shifted by caller).\n        method: Correlation method, ``'spearman'`` (Rank IC) or ``'pearson'`` (Linear IC).\n        min_cross_section: Minimum number of valid assets on a date to compute IC.\n\n    Returns:\n        :class:`FactorICResult` containing mean IC, IC IR, t-statistic, p-value,\n        higher moments, and full IC time series.\n\n    Raises:\n        ValueError: If inputs are empty, share no common dates or assets, or method is unknown.\n    \"\"\"\n    if method not in (\"spearman\", \"pearson\"):\n        raise ValueError(f\"method must be 'spearman' or 'pearson', got {method!r}\")\n\n    if factor_panel.empty or forward_returns.empty:\n        raise ValueError(\"factor_panel and forward_returns must be non-empty\")\n\n    # Align dates and assets\n    common_dates = factor_panel.index.intersection(forward_returns.index)\n    common_assets = factor_panel.columns.intersection(forward_returns.columns)\n\n    if common_dates.empty or common_assets.empty:\n        raise ValueError(\"No common dates and assets between factor_panel and forward_returns\")\n\n    f_sub = factor_panel.loc[common_dates, common_assets]\n    r_sub = forward_returns.loc[common_dates, common_assets]\n\n    ic_records: dict[object, float] = {}\n\n    for date in common_dates:\n        f_row = f_sub.loc[date].dropna()","sourceCodeStart":757,"sourceCodeEnd":793,"githubUrl":"https://github.com/HKUDS/Vibe-Trading/blob/80ffdda44c5c4db0dd84d70e051cca591cea67df/agent/src/quantlib/factormodel.py#L757-L793","documentation":"factor_ic_analysis computes per-date cross-sectional correlations and only supports rank (spearman) or linear (pearson) correlation; any other method string is rejected immediately.","triggerScenarios":"factor_ic_analysis(panel, rets, method='kendall') or a typo like 'Spearman' (capitalized) or 'spearmaan'.","commonSituations":"Case-sensitivity bug; method read from a config file with different capitalization; copy-paste from a library that allows 'kendall'.","solutions":["Use exactly 'spearman' or 'pearson' lowercase","Normalize config values: method=str(method).lower() before the call","If you need kendall, compute it yourself per cross-section"],"exampleFix":"# before\nic = factor_ic_analysis(panel, rets, method=config['method'])\n# after\nic = factor_ic_analysis(panel, rets, method=config['method'].lower())","handlingStrategy":"validation","validationCode":"assert method in ('spearman', 'pearson')","typeGuard":"def is_valid_method(m: str) -> bool:\n    return str(m).lower() in ('spearman', 'pearson')","tryCatchPattern":null,"preventionTips":["Lowercase config-driven method strings at read time","Validate enum-ish config values at startup"],"tags":["quantlib","factormodel","ic-analysis","enum-validation"],"backgroundTag":"invalid-enum-argument","analyzedSha":"80ffdda44c5c4db0dd84d70e051cca591cea67df","analyzedAt":"2026-08-28T12:46:38.989Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}