- Not started
- [~] In progress
- Done
- [D] Parity debt/deferred — observable NumPy behavior not yet closed
- [A] Architecture note — no current behavior gap unless future evidence proves one
- Implement
unique_axis(&self, axis: isize)on UFuncArray - Handle axis parameter: extract slices along axis, compare them, deduplicate
- Return unique slices preserving sorted order
- Add tests: 2D array unique rows, unique columns
- Add
concatenate_with_dtype(arrays, axis, dtype, casting)method - Validate casting via
fnp_dtype::can_castfor each input → output dtype - Cast each input array to target dtype before concatenation
- Add
stack_with_dtype(arrays, axis, dtype, casting)variant - Add tests: concatenate with dtype promotion, casting rejection
- Add
reduce_sum_initial(&self, axis, keepdims, initial: f64)method - Add
reduce_prod_initial(&self, axis, keepdims, initial: f64)method - Initial value added to sum / multiplied into product
- Add tests: sum with initial, prod with initial
- [D] Deferred parity debt — NumPy exposes
dtype=as observable API behavior even when f64 accumulation is internally precise - [D] Python FFI explicit
dtype=keyword conformance is covered forsum,prod,mean,std, andvar; remaining follow-up must define Rust-core accumulator/result dtype semantics for integer, unsigned, float, bool, and complex reductions before this gap can be marked closed
- Add
percentile_keepdimsmethod - Add
quantile_keepdimsmethod - When keepdims=true, insert size-1 dimension at reduced axis
- Handle axis=None case (all dims become size 1)
- Add tests: axis keepdims, None axis keepdims
- [A] NumPy currently exposes one accepted algorithm token (
introselect); parity work should still verify accepted/invalid token behavior and error text
- Add
unique_axis_with_info(axis, return_index, return_inverse, return_counts)on UFuncArray - Return NumPy-shaped
return_index,return_inverse, andreturn_countsmetadata for unique axis slices - Cover large-integer sidecars, signed-zero representatives, and NaN slice distinctness
- clip_optional (one-sided clipping with None min/max)
- reshape_order (F-order reshape)
- histogram_full (density, range, weights parameters)
- [D]
outparameter on array functions — Rust internals are immutable, but Python/NumPy-facing APIs still expose in-place output semantics that need explicit parity handling or documented wrapper delegation - [D]
orderon sort/partition — structured/object-array ordering remains observable NumPy behavior and should stay tracked as parity debt - [D]
overwrite_inputon percentile/quantile — immutable internals do not remove the need to match accepted parameter behavior and error surfaces - [D]
dtypeon reductions — f64 accumulation is an implementation detail; NumPy result dtype and accumulator dtype behavior remain parity debt