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)
Summary
With
adaptive=False, setting anoutput_dimbelow the family floor produces an error thatblames
min_output_dim— a parameter the user never set, and one that is ignored innon-adaptive mode.
Reproduction
Both were given
output_dim=0. The families that pre-validateoutput_dimthemselves reportit 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_dimis unused whenadaptive=False.Expected
The message names the parameter the caller actually set.
Actual
min_output_dimis named whenever the floor check trips, regardless of which parameterproduced the offending value.
Root cause
pretab/core/adaptive.py:89-94:lois set a few lines earlier tooutput_dimon the non-adaptive branch(
adaptive.py:84), so the message is only correct whenadaptive=Trueand the usersupplied
min_output_dim.Suggested fix
Pick the name from the branch that produced
lo: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
main@ 51c3043)