A zero pixel span previously produced sx/sy == 0, so to_data_* returned NaN or +/-inf. axis_scale now substitutes a unit pixel span (1.0) when |p1 - p0| <= 1e-12, keeping the mapping finite and invertible while leaving non-collapsed spans byte-identical. Add committed coverage for from_range (linear, flipped pixel axis, log x, degenerate data range, collapsed pixel span) and log10_positive clamping.