{"record":{"id":"4566dfafd4ae0268","repo":"microsoft/qlib","slug":"optimizer-is-not-supported-4566df","errorCode":null,"errorMessage":"optimizer {} is not supported!","messagePattern":"optimizer (.+?) is not supported!","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"qlib/contrib/model/pytorch_tcts.py","lineNumber":298,"sourceCode":"        self.fore_model = GRUModel(\n            d_feat=self.d_feat,\n            hidden_size=self.hidden_size,\n            num_layers=self.num_layers,\n            dropout=self.dropout,\n        )\n        self.weight_model = MLPModel(\n            d_feat=self.input_dim + 3 * self.output_dim + 1,\n            hidden_size=self.hidden_size,\n            num_layers=self.num_layers,\n            dropout=self.dropout,\n            output_dim=self.output_dim,\n        )\n        if self._fore_optimizer.lower() == \"adam\":\n            self.fore_optimizer = optim.Adam(self.fore_model.parameters(), lr=self.fore_lr)\n        elif self._fore_optimizer.lower() == \"gd\":\n            self.fore_optimizer = optim.SGD(self.fore_model.parameters(), lr=self.fore_lr)\n        else:\n            raise NotImplementedError(\"optimizer {} is not supported!\".format(self._fore_optimizer))\n        if self._weight_optimizer.lower() == \"adam\":\n            self.weight_optimizer = optim.Adam(self.weight_model.parameters(), lr=self.weight_lr)\n        elif self._weight_optimizer.lower() == \"gd\":\n            self.weight_optimizer = optim.SGD(self.weight_model.parameters(), lr=self.weight_lr)\n        else:\n            raise NotImplementedError(\"optimizer {} is not supported!\".format(self._weight_optimizer))\n\n        self.fitted = False\n        self.fore_model.to(self.device)\n        self.weight_model.to(self.device)\n\n        best_loss = np.inf\n        best_epoch = 0\n        stop_round = 0\n\n        for epoch in range(self.n_epochs):\n            print(\"Epoch:\", epoch)\n","sourceCodeStart":280,"sourceCodeEnd":316,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/contrib/model/pytorch_tcts.py#L280-L316","documentation":"Thrown in TCTSModel.fit while building the optimizer for the forecasting head (fore_model). The `fore_optimizer` hyperparameter is matched case-insensitively against 'adam' and 'gd'; anything else raises NotImplementedError before training starts. This is the forecasting model's optimizer, distinct from the weight model's.","triggerScenarios":"TCTSModel(fore_optimizer='sgd'|'adamw'|...) followed by fit(); the if/elif over self._fore_optimizer falls through to the raise.","commonSituations":"'sgd' spelled as in other qlib models instead of 'gd'; using 'adamw' expecting modern support; mixing up fore_optimizer and weight_optimizer keys and setting one to an unsupported value.","solutions":["Set fore_optimizer='adam' or fore_optimizer='gd'.","If you meant plain SGD, note this codebase spells it 'gd'.","For other optimizers, subclass TCTSModel and construct the fore optimizer manually in an overridden fit."],"exampleFix":"# before\nmodel = TCTSModel(..., fore_optimizer=\"sgd\")\n\n# after\nmodel = TCTSModel(..., fore_optimizer=\"gd\")","handlingStrategy":"validation","validationCode":"for key in (\"fore_optimizer\", \"weight_optimizer\"):\n    v = model_kwargs.get(key, \"adam\")\n    assert v.lower() in (\"adam\", \"gd\"), f\"TCTSModel {key} must be 'adam' or 'gd', got {v!r}\"","typeGuard":null,"tryCatchPattern":"try:\n    model.fit(dataset)\nexcept NotImplementedError as e:\n    if \"optimizer\" in str(e):\n        model_kwargs.setdefault(\"fore_optimizer\", \"adam\")\n        if model_kwargs[\"fore_optimizer\"].lower() not in (\"adam\", \"gd\"):\n            model_kwargs[\"fore_optimizer\"] = \"adam\"\n        model = TCTSModel(**model_kwargs)\n        model.fit(dataset)\n    else:\n        raise","preventionTips":["Set both TCTS optimizer keys explicitly to supported values.","Remember 'gd' == plain SGD across these qlib models; 'sgd' is never accepted."],"tags":["qlib","pytorch","tcts","optimizer","hyperparameter"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}