Skip to content

fix(core): report output_dim, not min_output_dim, when it is too small #38

Description

@ChrisW09

Summary

With adaptive=False, setting an output_dim below the family floor produces an error that
blames min_output_dim — a parameter the user never set, and one that is ignored in
non-adaptive mode.

Reproduction

importnumpyasnp, pandasaspdfrompretabimportPreprocessordf=pd.DataFrame({"a": np.random.default_rng(0).normal(size=50)})
y=np.random.default_rng(1).normal(size=50)
formethodin ["ple", "cubicspline"]:
try:
Preprocessor(numerical_method=method, output_dim=0).fit(df, y)
exceptExceptionase:
print(f"{method:14} -> {str(e).splitlines()[0]}")
ple -> min_output_dim must be >= 1, got 0.
cubicspline -> output_dim must be >= 3 for the cubic spline basis, got 0

Both were given output_dim=0. The families that pre-validate output_dim themselves report
it correctly; those that rely on the shared bounds resolver do not.

The follow-up line compounds it: "Fix: raise min_output_dim to at least the family minimum"
— acting on that advice would not help, since min_output_dim is unused when
adaptive=False.

Expected

The message names the parameter the caller actually set.

Actual

min_output_dim is named whenever the floor check trips, regardless of which parameter
produced the offending value.

Root cause

pretab/core/adaptive.py:89-94:

label=floor_labeliffloor_labelisnotNoneelsestr(floor)
iflo<floor:
raiseInvalidParamError(
f"min_output_dim must be >= {label}, got {lo}.\n""Fix: raise min_output_dim to at least the family minimum."
)

lo is set a few lines earlier to output_dim on the non-adaptive branch
(adaptive.py:84), so the message is only correct when adaptive=Trueand the user
supplied min_output_dim.

Suggested fix

Pick the name from the branch that produced lo:

iflo<floor:
name="min_output_dim"ifself.adaptiveandmin_reqisnotNoneelse"output_dim"raiseInvalidParamError(
f"{name} must be >= {label}, got {lo}.\n"f"Fix: raise {name} to at least the family minimum."
)

Cosmetic, but it is the first thing a user sees when they mis-size a transformer, and it
currently points them at the wrong knob.

Environment

  • pretab 0.1.0 (main @ 51c3043)
  • Python 3.11.15, numpy 2.4.6, pandas 2.3.3, scikit-learn 1.9.0, scipy 1.17.1
  • macOS (darwin 25.5.0)

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions