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
import numpy as np, pandas as pd
from pretab import Preprocessor
df = pd.DataFrame({"a": np.random.default_rng(0).normal(size=50)})
y = np.random.default_rng(1).normal(size=50)
for method in ["ple", "cubicspline"]:
try:
Preprocessor(numerical_method=method, output_dim=0).fit(df, y)
except Exception as e:
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_label if floor_label is not None else str(floor)
if lo < floor:
raise InvalidParamError(
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=True and the user
supplied min_output_dim.
Suggested fix
Pick the name from the branch that produced lo:
if lo < floor:
name = "min_output_dim" if self.adaptive and min_req is not None else "output_dim"
raise InvalidParamError(
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)