pairwise_sqdist

std.geometry.pairwise_sqdist · Level L0

Squared distances between every point of X and every point of Y, with one matrix product.

Dᵢⱼ = ‖xᵢ‖² + ‖yⱼ‖² − 2·xᵢ·yⱼ

Signature

pairwise_sqdist(X: f64[m, d], Y: f64[k, d]) → f64[m, k]

Structure

The function as NOVA stores it: one box per input, operation and output, and arrows that carry values. A double border marks another library function this one runs — called once, or by Scan once per element; select it to open that function.

Xf64[m, d]Yf64[k, d]MultiplyXXMultiplyYYTransposeYtReduceSumx2ReduceSumy2MatMulXY2.0Reshapey2rMultiplyXY2Addn2SubtractDDf64[m, k]
  • input
  • operation
  • constant
  • call
  • output

Verification

  • Signature proven by NOVA’s shape solver, for every size.
  • Equal to the reference ((X[:, None, :] - Y[None, :, :]) ** 2).sum(-1) in exact rational arithmetic, on all 40 test cases.
  • All 572 float64 results inside the running error bound; the closest uses 48% of it.
  • Interpreter and NumPy backend return bit-identical results.
Accuracy in detail
correctly rounded (the float64 nearest the exact value)
65%
bit-equal to the NumPy formula in float64
58%
largest error, in units in the last place
5.8e+3

Large ulp counts appear where a result is tiny next to the numbers it is computed from (after cancellation, for example), so one unit in the last place is tiny too; the absolute error is still inside the bound. Results within their own error of zero are not counted.

Note

The expanded form is fast but cancels when two points nearly coincide; the verification bound shows exactly how much. For one pair, sqdist is more accurate.

Identity

Calls
—
Called by
sha256:b8a714fe8e09a2d5aa1cbdb19899ada7a9dca369cf7ae00ffb6befb142841356

The semantic hash of the graph. It changes when the program changes, and never when only its documentation does.

Control handle

Symbol
Ω:std.geometry.pairwise_sqdist · Ω:pairwise_sqdist
Pins
sha256:be0435f0321d7165b1060b2d5eb4a597e3ae536bd7df0a2c3a196af328ed26e3this graph alone
Evidence
sha256:becd1e1237f48fd10d076ca2e5bcf9e88173abfc76bb1dbcc85bebf48c6e80c0the hash of its verification record
Needs
no capability: a pure function

Through NOVA’s control layer, the symbol launches this function only while the program still matches what it pins: a change to this graph, or to any graph it reaches, needs a migration first.