microsoft/qlib · error · ValueError
Unsupported reweighter type.
Error message
Unsupported reweighter type.
What it means
Raised in GRUModelTS.fit when `reweighter` is neither None nor a qlib.model.base.Reweighter instance. The TS DataLoader pairs each sample with a weight from this reweighter, so the type check is strict isinstance-based; a callable or array is rejected.
Source
Thrown at qlib/contrib/model/pytorch_gru_ts.py:222
save_path=None,
reweighter=None,
):
dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L)
dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L)
if dl_train.empty or dl_valid.empty:
raise ValueError("Empty data from dataset, please check your dataset config.")
dl_train.config(fillna_type="ffill+bfill") # process nan brought by dataloader
dl_valid.config(fillna_type="ffill+bfill") # process nan brought by dataloader
if reweighter is None:
wl_train = np.ones(len(dl_train))
wl_valid = np.ones(len(dl_valid))
elif isinstance(reweighter, Reweighter):
wl_train = reweighter.reweight(dl_train)
wl_valid = reweighter.reweight(dl_valid)
else:
raise ValueError("Unsupported reweighter type.")
train_loader = DataLoader(
ConcatDataset(dl_train, wl_train),
batch_size=self.batch_size,
shuffle=True,
num_workers=self.n_jobs,
drop_last=True,
)
valid_loader = DataLoader(
ConcatDataset(dl_valid, wl_valid),
batch_size=self.batch_size,
shuffle=False,
num_workers=self.n_jobs,
drop_last=True,
)
save_path = get_or_create_path(save_path)
View on GitHub (pinned to 79633dd950)
Solutions
- Wrap weighting logic in a qlib.model.base.Reweighter subclass implementing reweight(df).
- Pass reweighter=None for uniform weights.
Example fix
# before
model.fit(dataset, reweighter=np.linspace(0.1, 1.0, n)) # ValueError
# after
from qlib.model.base import Reweighter
class LinearReweighter(Reweighter):
def reweight(self, df):
return np.linspace(0.1, 1.0, len(df))
model.fit(dataset, reweighter=LinearReweighter()) Defensive patterns
Strategy: type-guard
Validate before calling
from qlib.model.base import Reweighter assert reweighter is None or isinstance(reweighter, Reweighter), "reweighter must be None or Reweighter instance"
Type guard
from qlib.model.base import Reweighter
def is_valid_reweighter(r) -> bool:
return r is None or isinstance(r, Reweighter) Try / catch
try:
model.fit(dataset, reweighter=reweighter)
except ValueError as e:
if "Unsupported reweighter type" in str(e):
model.fit(dataset)
else:
raise Prevention
- Always subclass qlib.model.base.Reweighter for custom weighting; isinstance is enforced.
- Pass reweighter=None when weighting is not needed.
When it happens
Trigger: fit(dataset, reweighter=lambda df: ...) or passing a numpy weight array; also passing a Reweighter-like duck-typed object that does not subclass Reweighter.
Common situations: Custom sample weighting implemented as a plain function; migrating code that passed sample_weight arrays to sklearn-style APIs.
Related errors
- Unsupported reweighter type.
- Unsupported reweighter type.
- Unsupported reweighter type.
- Unsupported reweighter type.
- Unsupported reweighter type.
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/6f09b6ef0d3991f5.
Report an issue: GitHub.