{"record":{"id":"31094f44ffc7418a","repo":"microsoft/qlib","slug":"invalid-argument-type-for-alpha","errorCode":null,"errorMessage":"invalid argument type for `alpha`","messagePattern":"invalid argument type for `alpha`","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"qlib/model/riskmodel/shrink.py","lineNumber":69,"sourceCode":"    TGT_CONST_CORR = \"const_corr\"\n    TGT_SINGLE_FACTOR = \"single_factor\"\n\n    def __init__(self, alpha: Union[str, float] = 0.0, target: Union[str, np.ndarray] = \"const_var\", **kwargs):\n        \"\"\"\n        Args:\n            alpha (str or float): shrinking parameter or estimator (`lw`/`oas`)\n            target (str or np.ndarray): shrinking target (`const_var`/`const_corr`/`single_factor`)\n            kwargs: see `RiskModel` for more information\n        \"\"\"\n        super().__init__(**kwargs)\n\n        # alpha\n        if isinstance(alpha, str):\n            assert alpha in [self.SHR_LW, self.SHR_OAS], f\"shrinking method `{alpha}` is not supported\"\n        elif isinstance(alpha, (float, np.floating)):\n            assert 0 <= alpha <= 1, \"alpha should be between [0, 1]\"\n        else:\n            raise TypeError(\"invalid argument type for `alpha`\")\n        self.alpha = alpha\n\n        # target\n        if isinstance(target, str):\n            assert target in [\n                self.TGT_CONST_VAR,\n                self.TGT_CONST_CORR,\n                self.TGT_SINGLE_FACTOR,\n            ], f\"shrinking target `{target} is not supported\"\n        elif isinstance(target, np.ndarray):\n            pass\n        else:\n            raise TypeError(\"invalid argument type for `target`\")\n        if alpha == self.SHR_OAS and target != self.TGT_CONST_VAR:\n            raise NotImplementedError(\"currently `oas` can only support `const_var` as target\")\n        self.target = target\n\n    def _predict(self, X: np.ndarray) -> np.ndarray:","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/model/riskmodel/shrink.py#L51-L87","documentation":"ShrinkRiskModel.__init__ (qlib/model/riskmodel/shrink.py:69) validates the `alpha` argument: it must be either the string 'lw' or 'oas' (Ledoit-Wolf / Oracle Approximating Shrinkage estimators) or a float in [0, 1]. Any other type (int out of range, None, list, dict) raises TypeError('invalid argument type for `alpha`'). Note plain Python int is also rejected since only float/np.floating are accepted.","triggerScenarios":"Constructing ShrinkRiskModel(alpha=None), alpha=1 (int), alpha=[0.1, 0.2], or a misspelled estimator string; passing alpha as an unsupported estimator name like 'james_stein' (that hits the assert instead).","commonSituations":"Config files with alpha: null or integer alpha (e.g. alpha: 1); users assuming alpha accepts any sklearn covariance estimator name; copy-pasting configs between risk model classes with different alpha semantics.","solutions":["Set alpha to 'lw' or 'oas' to use a built-in estimator","Set alpha to a float between 0 and 1 inclusive, e.g. alpha=0.1 (write 0.1, not an int)","Check your YAML/JSON config for null/integer alpha values and coerce them to float or estimator strings"],"exampleFix":"# before\nmodel = ShrinkRiskModel(alpha=None)  # TypeError\n\n# after\nmodel = ShrinkRiskModel(alpha='lw')\n# or fixed float\nmodel = ShrinkRiskModel(alpha=0.1)","handlingStrategy":"validation","validationCode":"import numbers\nassert alpha in ('lw', 'oas') or (isinstance(alpha, (float, np.floating)) and 0 <= alpha <= 1), f'invalid alpha: {alpha!r}'","typeGuard":"def is_valid_alpha(alpha) -> bool:\n    return alpha in ('lw', 'oas') or (isinstance(alpha, (float, np.floating)) and 0.0 <= alpha <= 1.0)","tryCatchPattern":"try:\n    model = ShrinkRiskModel(alpha=alpha)\nexcept TypeError as e:\n    raise ValueError(f\"alpha must be 'lw'/'oas' or float in [0,1], got {alpha!r}\") from e","preventionTips":["In YAML configs write alpha as 0.1 (float) or an estimator string, never null/int","Validate risk-model hyperparameters at config load time"],"tags":["qlib","risk-model","shrinkage","alpha","type-error","validation"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}