[BUG] ValueDifferenceMetric.pairwise silently ignores extra features

Author: aswanth-07Created Aug 9, 2026Updated Sep 2, 2026

Describe the bug

After ValueDifferenceMetric is fitted, pairwise does not validate that X and Y have the fitted number of features. Extra columns are silently ignored because the distance loop only processes self.n_features_in_ columns.

This can produce a plausible distance matrix that omits part of the supplied feature vectors instead of reporting a schema mismatch.

Steps/Code to Reproduce

python
import numpy as np

from imblearn.metrics.pairwise import ValueDifferenceMetric

X_train = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.int32)
y = np.array([0, 0, 1, 1])
vdm = ValueDifferenceMetric().fit(X_train, y)

X_valid = np.array([[0, 0], [1, 1]], dtype=np.int32)
X_extra = np.column_stack([X_valid, [999, 999]])

print(vdm.pairwise(X_valid))
print(vdm.pairwise(X_extra))
print(np.array_equal(vdm.pairwise(X_valid), vdm.pairwise(X_extra)))

Expected Results

pairwise(X_extra) should raise a ValueError because the metric was fitted with two features but received three. The same validation should apply when a mismatched array is passed as Y.

Actual Results

The extra feature is silently ignored:

[[0. 4.]
 [4. 0.]]
[[0. 4.]
 [4. 0.]]
True

Versions

Windows-10-10.0.26200-SP0
Python 3.10.11
NumPy 2.2.6
SciPy 1.15.3
Scikit-Learn 1.7.2
Imbalanced-Learn 0.15.dev0 (master at 8504e95f)

AI assistance

OpenAI Codex was used to audit the code, reproduce and de-duplicate this issue, and draft this report.

Source: scikit-learn-contrib/imbalanced-learn