jax-ml/jax · error · ValueError
Unknown boundary option '{boundary}', must be one of: {list(
Error message
Unknown boundary option '{boundary}', must be one of: {list(boundary_funcs.keys())} What it means
The boundary argument of the spectral functions selects how each segment is extended before windowing; JAX implements only 'even', 'odd', 'zeros', and None (None skips extension). Any other string is rejected with the list of valid keys.
Source
Thrown at jax/_src/scipy/signal.py:650
def make_pad(mode, **kwargs):
def pad(x, n, axis=-1):
pad_width = [(0, 0) for unused_n in range(x.ndim)]
pad_width[axis] = (n, n)
return jnp.pad(x, pad_width, mode, **kwargs)
return pad
boundary_funcs = {
'even': make_pad('reflect'),
'odd': odd_ext,
'constant': make_pad('edge'),
'zeros': make_pad('constant', constant_values=0.0),
None: lambda x, *args, **kwargs: x
}
# Check/ normalize inputs
if boundary not in boundary_funcs:
raise ValueError(
f"Unknown boundary option '{boundary}', "
f"must be one of: {list(boundary_funcs.keys())}")
axis = core.concrete_or_error(operator.index, axis, "axis of windowed-FFT")
axis = canonicalize_axis(axis, x.ndim)
if y is None:
check_arraylike('spectral_helper', x)
x, = promote_dtypes_inexact(x)
y_arr = x # place-holder for type checking
outershape = tuple_delete(x.shape, axis)
else:
if mode != 'psd':
raise ValueError("two-argument mode is available only when mode=='psd'")
check_arraylike('spectral_helper', x, y)
x, y_arr = promote_dtypes_inexact(x, y)
if x.ndim != y_arr.ndim:
raise ValueError("two-arguments must have the same rank ({x.ndim} vs {y.ndim}).")View on GitHub (pinned to 1e1c6a8fc0)
Solutions
- Use one of 'even', 'odd', 'zeros', or None
- Pass boundary=None and pre-pad manually if you need other extension semantics
Example fix
// before jax.scipy.signal.stft(x, boundary='symmetric') // after jax.scipy.signal.stft(x, boundary='even') # or pre-pad: jax.scipy.signal.stft(jnp.pad(x,(k,k)), boundary=None)
Defensive patterns
Strategy: validation
Validate before calling
BOUNDARIES = ('even', 'odd', 'zeros', None)
assert boundary in BOUNDARIES, f'boundary must be one of {BOUNDARIES}' Type guard
def is_valid_boundary(b) -> bool:
return b in ('even', 'odd', 'zeros', None) Prevention
- Remember boundary vocabulary differs from jnp.pad mode names
- Pre-pad manually and use boundary=None for custom extension
When it happens
Trigger: jax.scipy.signal.stft(x, boundary='reflect') or 'constant' (scipy pad-style names); boundary='' from an unset config.
Common situations: Confusing jnp.pad mode names ('wrap', 'symmetric') with the boundary vocabulary; porting code from other STFT implementations.
Related errors
- unsupported mode: {mode}
- Got {method=}; expected 'auto', 'fft', or 'direct'.
- convolve2d() only supports boundary='fill', fillvalue=0
- correlate2d() only supports boundary='fill', fillvalue=0
- Trend type must be 'linear' or 'constant'.
AI-assisted analysis of jax-ml/jax@1e1c6a8fc0 (2026-08-27).
Data as JSON: /api/errors/daa0e3bc33225325.
Report an issue: GitHub.