From 14fea9ca4fc1f18ea571b899288adc4a24979aca Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 06:06:54 +0000 Subject: [PATCH 01/23] DOC: Add full codebase audit report (bugs, numerics, performance, architecture) Consolidated findings from a systematic audit of the core topography classes, Uniform/Nonuniform/Generic analysis modules, all IO readers, Container/Support infrastructure, and the C++ extensions. Findings are severity-ranked with file:line references; cross-cutting themes and a suggested triage order are included at the end. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- AUDIT.md | 695 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 695 insertions(+) create mode 100644 AUDIT.md diff --git a/AUDIT.md b/AUDIT.md new file mode 100644 index 00000000..6c9f7dfc --- /dev/null +++ b/AUDIT.md @@ -0,0 +1,695 @@ +# SurfaceTopography codebase audit + +Date: 2026-07-23. Scope: full repository at commit `119cb66` — core topography +classes, `Uniform/`, `Nonuniform/`, `Generic/`, `IO/`, `Container/`, +`Support/`, `Models/`, the C++ extensions in `cpp/`, and packaging. Findings +were verified by re-reading code, cross-checking against the test suite, and — +where marked *(verified by execution)* — by running the code against the +installed extension. Line numbers refer to this commit. + +Severity legend: +- **HIGH** — silently wrong scientific results or data corruption on realistic inputs. +- **MEDIUM** — crashes on valid inputs, wrong results under non-default but supported options, resource/metadata correctness. +- **LOW** — edge cases, performance, documentation drift, code health. + +--- + +## 1. High severity — silent data corruption / wrong results + +### 1.1 Lazy `transpose()` does not swap `pixel_size` → wrong derivatives and PSDs *(verified by execution)* + +`SurfaceTopography/UniformLineScanAndTopography.py:669` — `TransposedUniformTopography` +overrides `nb_grid_pts` and `physical_sizes` but inherits `pixel_size`, +`nb_subdomain_grid_pts` and `subdomain_locations` from +`DecoratedUniformTopography`, which delegates to the parent. For anisotropic +pixels every derivative-based quantity of a transposed topography is wrong, +with no error: + +``` +t = Topography(np.random.rand(64, 32), (2., 4.), periodic=True) +t.rms_gradient() -> 13.8586 +t.transpose().rms_gradient() -> 10.3769 (silently wrong) +t.transpose().squeeze().rms_gradient() -> 13.8586 (correct) +``` + +`Uniform/Derivative.py:349,374` divides FFT frequencies by `pixel_size`. The +un-swapped `nb_subdomain_grid_pts` additionally breaks shape checks under MPI. +**Fix:** override `pixel_size`, `nb_subdomain_grid_pts`, `subdomain_locations` +to swap components. + +### 1.2 `downsample()` reports parent pixel size → derivatives/PSD normalization wrong by the downsampling factor *(verified by execution)* + +`SurfaceTopography/Uniform/Filtering.py:80-93` — `DownsampledUniformTopography` +overrides `nb_grid_pts` but inherits `pixel_size`/`area_per_pt` from the +parent. A 64×64 map of size 1.0 downsampled by 2 reports `pixel_size = 1/64` +(should be 1/32) and `area_per_pt` wrong by 4×; `derivative()` on the result is +wrong by ~the same factor. For non-divisible factors, sample positions are also +inconsistent with `positions()`. **Fix:** override `pixel_size`/`area_per_pt`; +shrink `physical_sizes` to `nb_grid_pts*fx*px` or reject non-divisible factors. + +### 1.3 Non-square scans scrambled by wrong reshape order in four readers + +The raw buffer of these formats is stored scan-line-major, i.e. C-order shape +`(ny, nx)`, but the readers reshape to `(nx, ny)`. Whenever `nx != ny` (partial +/ aborted scans, rectangular acquisition settings) scan lines are interleaved +into garbage, silently. All test fixtures for these formats are square, so the +test suite cannot see it: + +- `SurfaceTopography/IO/DI.py:308-310` (Bruker Nanoscope) +- `SurfaceTopography/IO/EZD.py:221-223` (NanoSurf easyScan) +- `SurfaceTopography/IO/MI.py:156,181` (Molecular Imaging; additionally pairs the transposed shape with un-swapped sizes) +- `SurfaceTopography/IO/PS.py:211` (Park Systems TIFF) + +**Fix:** `reshape(ny, nx)` then `.T` (the pattern FRT.py:623 and GWY.py:290 +already use correctly). Add a non-square fixture per format. + +Related latent axis-pairing issues for non-square maps (untested, ambiguous +rather than provably wrong): `IO/DATX.py:101,122,130,243-248` pairs the HDF5 +row count with the X converter and hands data to `Topography` untransposed; +`IO/LEXT.py:114-117,231` same pattern (contrast JPK.py:350, which transposes +correctly and is verified by a non-square fixture). + +### 1.4 MI reader: lateral sizes in meters labeled with the height unit (µm) — mixed quantities off by ~10⁶ + +`SurfaceTopography/IO/MI.py:117,181` — `xLength`/`yLength` are meters per the +MI spec (2e-05 in the test file), but the topography is constructed with +`unit=bufferUnit` (µm, which correctly applies to the heights via +`bufferRange`). A 20 µm × 20 µm scan is reported as 2×10⁻⁵ µm wide; rms slope, +PSD, curvature are off by ~10⁶. `test/IO/test_mi.py:64` asserts the wrong +value. **Fix:** convert lengths from m into `bufferUnit`. + +### 1.5 BCR reader misinterprets `voidpixels` as the invalid-data marker value + +`SurfaceTopography/IO/BCR.py:217-219` — per the BCR-STM spec (and Gwyddion), +`voidpixels` is the *count* of void pixels; the void marker is 32767 (int16) +or ~3.4e38 (float). Consequences: a file with `voidpixels = 0` masks every +pixel whose value is 0 (mass corruption); real void pixels are never masked; +a missing key crashes `topography()` with `KeyError`. Only works for the +single test file because its writer non-conformantly stored the marker value +in that field. **Fix:** treat as count, mask against the format's marker +constant, set `undefined_data` on `ChannelInfo`. + +### 1.6 Channel selection returns the wrong channel's data in three readers + +- `SurfaceTopography/IO/NMM.py:256-258` — every `ChannelInfo` is created with + index 0 inside the scan loop, so `channels[i].topography()` always loads + scan 1. +- `SurfaceTopography/IO/OIR.py:523-528` — late-binding closure: the reader + lambda captures loop variables `uuid`/`nx`/`ny`/`dtype` by reference; with + ≥2 height channels every channel returns the last channel's data. **Fix:** + bind via default arguments. +- `SurfaceTopography/IO/OIR.py:563-597` — `POIRReader` concatenates + sub-readers' channels but keeps per-file `_index`; `channels[1].topography()` + on a two-file container returns file 0's data. **Fix:** renumber `_index`. + +### 1.7 C++ triangle moments are mathematically wrong — all `uniform2d_*` moment bindings return garbage *(verified by execution)* + +`cpp/moments.h:115-175` — `_TriangleMoment` has a sign error and a missing +`2/(h3−h1)` prefactor relative to the correct moment of the linearly +interpolated triangle distribution. Live results: `uniform2d_mean(const 5.0) = +0.0`; `uniform2d_variance` of a ±1 terraced surface = 0.0 (should be 1.0). The +generic order-4 path divides by `(h2−h1)`/`(h3−h2)` with no degeneracy guard → +NaN for any triangle with two equal corner heights (ubiquitous in quantized +data). `test/test_moments.py:140-166,354-358` *codifies* the broken behavior +("returns 0 due to triangle integration"). The bindings are exported but +currently unused inside the library. **Fix:** rederive the integral, add the +order-4 specialization, handle degenerate corners analytically, fix the tests. + +### 1.8 Order-4 line-scan moments return 0 for flat segments *(verified by execution)* + +`cpp/moments.h:34-40` — the `|h2−h1| < 1e-12` guard returns 0 where the +correct limit is `(order+1)·h^order`, and no order-4 specialization exists, so +`nonuniform_moment4`/`uniform1d_moment4` hit this path: `uniform1d_moment4(2.0 +· ones) = 0.0` (true 16). Kurtosis of surfaces with flat segments is +systematically underestimated; the absolute epsilon is also unit-dependent +(meters-scale heights zero out entirely). **Fix:** exact factored form +`h1⁴+h1³h2+h1²h2²+h1h2³+h2⁴`; drop the epsilon guard. + +The same removable-singularity bug exists in pure Python: +`SurfaceTopography/Nonuniform/ScalarParameters.py:74` — `moment()` evaluates +`(h₂^{α+1} − h₁^{α+1})/(h₂ − h₁)` directly; any two equal adjacent heights +(quantized instrument data) give 0/0 → NaN which propagates to the whole +result. **Fix:** `np.where(dh == 0, (alpha+1)*h**alpha, ...)`. + +### 1.9 `Bicubic.__call__` reads non-contiguous arrays as contiguous — wrong values and out-of-bounds reads *(verified by execution)* + +`cpp/bicubic.cpp:362-363,385-388,409-421` — `py::array_t::ensure` does +not force C-contiguity and strides are never consulted. A strided view +(`x[::2]`) gives values wrong by up to 0.31; a negative-stride view walks up +to `n−1` doubles past the allocation (heap OOB read / UB). **Fix:** +`py::array_t`. + +Related copy-paste bug on the Python side, `SurfaceTopography/Uniform/Interpolation.py:167`: + +```python +interp_derxy = interp_derxx / dx / dy # should be interp_derxy +``` + +Every `derivative=2` user of `interpolate_bicubic` gets the xx-derivative +(rescaled with the wrong units) in place of the cross-derivative. + +### 1.10 Periodic 2D bearing-area bounds built with flattened `np.roll` → corrupts `median()`, MAD statistics, robust detrending *(verified by execution)* + +`SurfaceTopography/Uniform/BearingArea.py:126-133` — `np.roll(h, (-1, 0))` +without `axis=` flattens the array and rolls by the *sum* of the shifts, so +the element min/max bounds pair wrong pixels. On periodic 8×8 maps, 252/3400 +tested heights fell outside `[lower, upper]`; `bisect()` in +`Generic/RobustStatistics.py` relies on these bounds and returned a "median" +with `bearing_area(median) = 0.626` instead of 0.5. Affects `median()`, +`mad_height()`, `mad_polyfit()` and `'median'`/`'mad-tilt'`/`'mad-curvature'` +detrending for periodic 2D topographies. **Fix:** `np.roll(h, -1, axis=0)`, +`np.roll(h, -1, axis=1)`, `np.roll(h, (-1, -1), axis=(0, 1))`. + +### 1.11 `to_uniform()` produces garbage for line scans whose x-axis does not start at 0 + +`SurfaceTopography/Nonuniform/Converters.py:158-165` — the uniform grid always +spans `[0, s]` while the parent's positions may start anywhere; `np.interp` +clamps outside the parent range, so a scan with `x[0] = 5` gets most of the +grid filled with the constant `h[0]`. This silently poisons the default +`'fft'` paths of `power_spectrum_from_profile`, `autocorrelation_from_profile`, +`derivative(distance=...)`, scale-dependent statistics, and the +scanning-probe reliability cutoff. Masked in practice only because the +XYZ/Mitutoyo readers shift `x -= min(x)`; the public `NonuniformLineScan(x, y)` +constructor does not. **Fix:** interpolate at `x + parent.positions()[0]`. + +Two more `x[0] == 0` assumptions in the same subsystem: + +- `SurfaceTopography/Nonuniform/Detrending.py:107` — `'slope'` detrend uses + `a0 = mean(h)` (missing the `−a1·⟨x⟩` correction) and an unweighted + `derivative(1).mean()` where the rms-minimizing constant is the + length-weighted mean `(h[-1]−h[0])/L`. Example: `x=[0,1,10], h=[0,1,1]` → + slope 0.5 instead of 0.1. +- `SurfaceTopography/Nonuniform/PowerSpectrum.py:107-109` — the Hann window is + evaluated at absolute `x`, not `x − x.min()`; for offset scans the window is + ≈1.5 at the endpoints instead of 0, defeating leakage suppression (and + nonperiodic scans get this window by default). + +### 1.12 Scale-dependent curvature stencil silently wrong with default arguments + +`SurfaceTopography/Generic/Curvature.py:64-72,104-112` — the pairing +`8·A[1+i] − 2·A[2+2i]` implements `8A(λ) − 2A(2λ)` only for a linearly spaced, +origin-anchored ACF grid, but `autocorrelation_from_profile` defaults to +`resampling_method='bin-average', collocation='log'` (log-spaced `r`), and +with `resampling_method=None` a reliability cutoff trims leading points and +shifts the origin. Both default and reliability paths therefore compute +curvatures from mismatched distance pairs. Existing tests only check +`np.max` loosely / "finishes without failing". **Fix:** compute the ACF on a +linear grid internally, apply the reliability mask after forming the stencil, +or interpolate `A(2λ)`. + +### 1.13 ZAG containers return topographies backed by an already-closed stream + +`SurfaceTopography/Container/IO/ZAG.py:156-175` + +`Container/IO/__init__.py:128-131` — `read_container()` does `with +open_container(fn) as reader:` and returns the lazy container after `__exit__` +closed the file stream; every subsequent element access reads from a closed +`ZipExtFile`. `CEReader` avoids this by re-opening the ZIP per read; ZAG does +not. Unnoticed because `test/IO/test_zag.py` is `@pytest.mark.skip` with a +hardcoded path `/home/pastewka/Downloads/zag-1.zag`. **Fix:** a re-opening +opener object like `CEFileOpener`; check in a fixture and unskip the test. + +### 1.14 `fourier_synthesis` populates the q=0 mode with a spurious, unit-dependent amplitude *(verified by execution)* + +`SurfaceTopography/Generation.py:283-292` — `q_sq[0] = 1.` (to avoid +`0**negative`) causes the DC amplitude to equal `C(q=1)`, which depends on the +arbitrary length unit. For 128×128, `rms_height=1.0`, realization means come +out at `4.4, −22.9, −13.7, 4.9, 19.4` — a mean offset that dwarfs the +requested roughness for any consumer that does not first subtract the mean. +**Fix:** zero the DC mode instead. + +### 1.15 `make_sphere(..., periodic=True)` silently returns a nonperiodic topography *(verified by execution)* + +`SurfaceTopography/Special.py:216-223` — neither constructor call passes +`periodic=periodic` (the wrapped radii are computed, but the flag is dropped). +The flag controls detrending defaults, PSD/ACF windowing and derivative +stencils. The existing test checks only height values. **Fix:** pass the flag +(and `communicator` in the 1D branch). + +### 1.16 `scale_dependent_statistical_property` reports wrong distances with `scale_factor` + +`SurfaceTopography/Generic/ScaleDependentStatistics.py:130-131` — `distance = +scale_factor * np.mean(physical_sizes)` contradicts the module's own +convention (`distance = scale_factor · n · pixel_size`); the returned abscissa +is too large by ~`nb_grid_pts/n` (e.g. 512×), and since this distance feeds +the reliability mask, unreliable scales are never filtered when `scale_factor` +is combined with reliability metadata. + +### 1.17 Scan-line alignment `direction` semantics inverted + +`SurfaceTopography/Uniform/ScanLineAlignment.py:66-68,171-181` — the docstring +says `'x'` means the fast scan runs along x, but the implementation iterates +`heights[i, :]`, and in this library the first index *is* x. Users with +standard fast-scan-x AFM maps (the default) get the per-line correction +applied across scan lines. The tests added with the feature encode the same +inversion. **Fix:** transpose for `'x'` instead of `'y'`. + +--- + +## 2. Medium severity + +### 2.1 Analysis correctness under non-default options + +- `Support/__init__.py:50-52` (`fold_fft_half`, callers + `Uniform/PowerSpectrum.py:105`, `Uniform/Autocorrelation.py:118`) — the + final `/= 2` also halves the q=0 row, which has no mirrored partner; + `power_spectrum_from_profile(resampling_method=None)` returns `C[0]` exactly + half the true DC power *(verified by execution)*. Fix: halve `result[1:]` + only. +- `Uniform/PowerSpectrum.py:129` — `min_value=q[1]` is applied after q=0 was + already stripped, discarding the fundamental mode from 1D log-collocation + resampling *(verified)*. Fix: `q[0]`. +- `Uniform/Derivative.py:449` — `"disabled"` vs accepted option `"disable"`: + the guard is dead; `interpolation='disable'` with a fractional scale factor + silently truncates the stencil step *and* divides by the fractional pixel + size — doubly wrong instead of raising *(verified)*. +- `Uniform/Interpolation.py:53-68` — linear interpolator truncates toward zero + instead of flooring; negative fractional positions on periodic topographies + extrapolate (`interp(-1.5) → 10.5` outside data range) and corrupt the first + pixels of scale-dependent slope/curvature with fractional scale factors + *(verified)*. Fix: `np.floor(...).astype(int)`. +- `Uniform/Interpolation.py:205-227` — `interpolate_fourier` halves Nyquist + rows/columns even when that dimension is not enlarged; interpolation onto + the same grid is not the identity (max error 0.49 on unit-variance 8×8) + *(verified)*. Fix: halve only when actually padding that dimension. +- `Uniform/Autocorrelation.py:227,242` — factor-2 inconsistency in the + reliability cutoff between profile (`short_cutoff / 2`) and area + (`short_cutoff`) ACF paths; the area path discards a factor-2 band of + reliable short-distance data (the `other_cutoff` defaults also differ). +- `Nonuniform/VariableBandwidth.py:158-166` — the loop condition tests the + *previous* magnification's minimum point count, so the last recorded level + can contain segments below `nb_grid_pts_cutoff` (down to 2 points, rms + exactly 0), biasing the smallest-bandwidth datum low. The uniform version + checks before recording. +- `Nonuniform/VariableBandwidth.py:39,85,94` — absolute tolerance `tol=1e-6` + compared against position differences is unit-dependent: in SI meters it + exceeds entire subdivisions; in nm-scale coordinates it is effectively zero. +- `Models/SelfAffine.py:246-266` — `generate_roughness` resolves + `longcut_wavelength` and then never uses it (always passes the model's + rolloff to `fourier_synthesis`); the `order == hurst_exponent` branch of + `variance_derivative` (line 218) also uses the wrong lower limit. +- `Generation.py:140-148` — `Hurst=1` with `rms_slope` (and `Hurst=0` with + `rms_height`) produce 0/0 → all-NaN surfaces with only a RuntimeWarning + *(verified)*. Fix: raise, or implement the logarithmic limits. + +### 2.2 Masked / undefined data handled inconsistently + +- `Uniform/Detrending.py:47-50` — `polyfit_line_scan` fits the raw buffer + under the mask (`np.polyfit` on a masked array); the 2D counterpart + correctly compresses. Verified: junk under 10 masked points shifts a + unit-slope fit to coefficients ~1e5. +- `Uniform/VariableBandwidth.py:88-92,169-173` — `np.bincount(region_index, + h * x**i)` strips masks; masked points contribute raw fill values with no + `has_undefined_data` guard *(verified: detrended heights of magnitude 3e6)*. +- `Uniform/ScalarParameters.py:60-68,91-95` — `Rq`/`Sq` normalize by the total + grid-point count including masked ones; a half-masked constant profile + returns `Rq = 0.354` instead of 0 *(verified)*. +- `Uniform/GeometryAnalysis.py:112-114` — periodic wrap merge in + `assign_patch_numbers_profile` uses `patch_ids[0]` (the *second* pixel's + id); a masked patch spanning the wrap boundary comes back from + `interpolate_undefined_data()` with one pixel still masked while + `has_undefined_data` reports `False` *(verified)*. +- `Uniform/Imputation.py:110-118` — the Laplace-matrix neighbor lookup uses + unconditional `np.roll`, wrapping across the boundary of *nonperiodic* + topographies and coupling edge pixels to per-patch unknown #0 *(verified: + wrong harmonic fill values for edge-touching patches)*. +- `IO/FromFile.py:196-215` (HGT) — SRTM voids (−32768) are not masked (they + enter statistics as −32768 m spikes), and fabricated + `physical_sizes=data.shape` makes it impossible to pass real sizes later + (`MetadataAlreadyFixedByFile`). +- `IO/SDF.py:105-115,304-308` — ASCII variant never maps integer invalid + markers (−32768/−2³¹) to NaN; only the literal `BAD` token. Binary path is + correct. Also uses deprecated `np.fromstring`. +- `IO/X3P.py` — ignores the ISO 5436-2 `ValidPointsLink` mask and the CZ + `Offset`; integer invalid points read as real heights. The writer casts NaN + through `astype(uint16)`. + +### 2.3 Crashes on valid inputs + +- `Special.py:205-228` — `make_sphere(kind='paraboloid', standoff=1.0)` → + `UnboundLocalError` (`standoff_val` only set in the sphere branch) + *(verified)*. +- `UniformLineScanAndTopography.py:745-750` — `translate()` crashes for 1D + line scans (`axis=1` roll), even with the default offset *(verified)*. +- `UniformLineScanAndTopography.py:707-709` — `transpose()` of a 1D line scan + crashes in `positions()` (`too many values to unpack`) although 1D transpose + is intended as identity *(verified)*. +- `HeightContainer.py:285-295,348-357` — `__eq__` raises (broadcast error / + `AttributeError`) instead of returning `False` for mismatched grids or + foreign types, and defining `__eq__` without `__hash__` makes all + topographies unhashable *(verified)*. +- `Uniform/Filtering.py:229,274-276` — the default `filter_function` of + `FourierFilteredUniformTopography` crashes with `isotropic=True` (wrong + arity), has an operator-precedence bug if called with two args, and error + paths `raise ("ValueError: ...")` raise a string (→ `TypeError`) + *(verified)*. +- `Uniform/Interpolation.py:265-272` — `MirrorStichedTopography.positions()` + is shape-inconsistent with `heights()` (10×10 vs 20×20), breaking + `positions_and_heights()` *(verified)*. +- `IO/GWY.py:149-158` — any GWY file containing an object array (graphs / + spectra) crashes twice over: the reader-dict entry doesn't accept + `skip_arrays` and a missing comma makes `range(nb_items)` receive a tuple. +- `IO/GWY.py:204,250` — channel-index regex `([0-9])` accepts one digit; + files with ≥11 channels crash with `TypeError`. +- `IO/FRT.py:460` — invalid struct format `'gint32'` (copied from Gwyddion C + source); any FRT file containing block 0x00ae fails to open. Should be `'i'`. +- `IO/EZD.py:70-72` — magic check compares `bytes` to `str` (always False) + *and* has inverted logic; net effect: no format validation at all. +- `IO/MI.py:146-152` — ASCII-data branch references undefined `encode_length` + → `NameError` for text-format MI files the header parser explicitly detects. +- `IO/MI.py:162` — `if meta['scanUp']:` tests the *string* `'FALSE'` (truthy): + scan-down images are also flipped. +- `IO/NC.py:287-296` — nonuniform line scans report `nb_grid_pts=(None,)` + (reads the wrong dimension attribute) *(verified by write/read round trip)*. +- `IO/NC.py:452` — MPI guard `rank > 1` should be `rank > 0`: ranks 0 and 1 + both write the same file concurrently in non-decomposed runs. +- `IO/PLUX.py:118-150,177-180` — multi-layer files advertise N channels but + `topography()` raises for any `channel_index != 0`. +- `IO/H5.py:64-65` — crashes with `AttributeError` on HDF5 files containing + groups (`Group` has no `.shape`). +- `IO/DATX.py:119,127,135` — `and` where `or` is needed in converter + validation (both conditions must fail to raise), plus a copy-paste error + message in the Z-converter check. +- `Nonuniform/ScaleDependentStatistics.py:162-164` — the 2D single-distance + fallback assigns `np.nan` into a *tuple* → `TypeError` when the threshold + trips; a Python-list `distances` argument crashes against the reliability + mask (`list > float`). +- `Generic/Slope.py:107` — `scale_dependent_slope_from_area` is registered on + `NonuniformLineScanInterface`, which has no `autocorrelation_from_area` → + guaranteed `AttributeError`. +- `HeightContainer.py:306-307` — `is_reentrant` crashes for scans with < 2 + points *(verified)*. +- `IO/Mitutoyo.py:101,139,163` — bare `IndexError` for spreadsheets without a + roughness-metric cell or 1-point scans; locale-dependent `%b` date parsing; + workbook handle never closed. +- `Support/UnitConversion.py:181` — `suggest_length_unit` crashes with + `OverflowError` on all-zero data (`log10(0)`); `mangle_length_unit_ascii('Å') + = 'A'` round-trips to an unconvertible unit. +- `Container/ScaleDependentStatistics.py:89-119,158-174` — the docstring + example (`distance=[...]`) crashes with `TypeError: multiple values for + 'distance'`; scalar `distances` unsupported despite docs; inner loop reuses + the outer loop variable. +- `Container/IO/__init__.py:130` — `read_container(**kwargs)` forwards kwargs + that neither `CEReader.container` nor `ZAGReader.container` accepts. + +### 2.4 Infrastructure and metadata correctness + +- `SurfaceTopography/Metadata.py:33-44` — `InfoModel` silently *discards* + arbitrary `info` keys (pydantic `extra='ignore'`) although docstrings + throughout promise a free-form dict for third-party codes; explicit `None` + values raise `ValidationError` (fields typed `str = None` instead of + `Optional[str]`) *(verified)*. Fix: `extra='allow'` (or `'forbid'` to fail + loudly) and `Optional[...]` annotations. +- `HeightContainer.py:184-189` — the base-class `DecoratedTopography.info` + passes a `BaseModel` to `model_copy(update=)` which requires a dict → + `AttributeError` under pydantic 2; currently shadowed by two copy-pasted + correct overrides in the uniform/nonuniform subclasses *(verified)*. Fix in + the base, delete both overrides. +- `HeightContainer.py:67-68`, `Container/SurfaceContainer.py:43-44` — + `apply()` discards the function's return value in both dispatch bases + *(verified)*. Add `return`. +- `Support/Bibliography.py:59-88` — `doi.dois`/`doi._n` are class-level + globals with no try/finally: any exception inside a wrapped analysis leaves + the decorator permanently "on", silently dumping DOIs into a user's set on + all later calls; thread-unsafe *(verified)*. Fix: try/finally, or a + `contextvars.ContextVar`. +- `Support/JSON.py:15-29,121-125` — `json.dump` bypasses the NaN handling + (only `encode()` is overridden, not `iterencode()`; `IO/DZI.py:197` uses + exactly `json.dump`); `nan_to_none` crashes on `nomask` and on 2-D masked + arrays; Inf passes through as invalid JSON *(all verified)*. +- `Support/UnitConversion.py:242-247` — `find_length_unit_in_string` matches + substrings of alias keys only: `'X Axis'` → `'Å'` (wrong unit, wrong + scaling), `'Height (nm)'` → `None`; result feeds the XYZ reader's + unit/height-scale *(verified)*. +- `IO/JPK.py:279-280` — every channel's `raw_metadata` contains the *last* + TIFF page's metadata (stale loop variable `channel_metadata`; should be + `channel`). +- `IO/ZON.py:227,243` — mutable default `info={}` is mutated + (`info.update(...)`) and permanently polluted across calls — including into + ZAG containers; the merge direction also lets file metadata overwrite + user-supplied info, opposite of every other reader *(verified)*. +- `IO/MetroPro.py:124,167-239` — little-endian and native-endian struct fields + in a big-endian format: heights are unaffected (offsets verified to line + up), but `raw_metadata` values and the reported instrument serial are + garbage. `_HEADER_FORMATS`/`_HEADER_SIZE*` are dead code. +- `IO/OPD.py:142-151,157` — named metadata blocks read fixed 2–4 bytes + regardless of the directory-declared length (silent offset shift if they + differ); missing `Wavelength` block → `NameError`. +- `IO/VK.py:258-261` — physical size uses `(n−1)·pixel` (interval convention) + where the library convention (and Gwyddion) is `n·pixel`. +- `Container/IO/__init__.py:134-158` — `read_published_container` has no + `raise_for_status()` (404 → confusing `KeyError`), no timeout, buffers the + whole download in memory, and applies `**request_args` to only one of the + two requests. +- `Container/IO/CE.py:74-80` — `CEFileOpener` never closes the `ZipFile` + (relies on refcount GC) and re-parses the central directory on every lazy + topography access. +- cpp — `eigen_helper.h:30`: `Eigen::Array` breaks Windows wheels + (LLP64 `long` is 32-bit; non-const `Ref` needs exact dtype match → + `TypeError` from every `NonuniformLineScan.bearing_area()` call). Fix: + `std::int64_t`. +- cpp — all bindings take non-const `Eigen::Ref`: read-only, int-dtype or + F-ordered inputs are rejected although nothing is written; a read-only + input array breaks `t.mean()`, `t.rms_height_from_profile()` etc. for + nonuniform scans *(verified)*. Fix: `Eigen::Ref`. +- cpp — `patchfinder.cpp:66-82`: single-`if` periodic wrap → OOB reads (and + potentially writes) for stencil offsets ≥ grid dimension *(verified)*; + `shortest_distance` correctly uses `while` loops. +- cpp — `moments.h:186`, `bearing_area.cpp:140`, `patchfinder.cpp:213,251`: + `int` accumulators / flat indices overflow at `nx·ny ≥ 2³¹` (32768²), within + the project's stated large-memory scope. +- cpp — `stack.h:272-298`: unchecked `malloc` → null `memcpy` (segfault + instead of `MemoryError`); diagnostic `printf` writes to stdout during + normal `distance_map` operation *(verified)*. +- cpp — `autocorrelation.cpp:90-92`: `nonuniform_autocorrelation` divides by + `physical_size − distance` with no validation → NaN/garbage for user-supplied + distances ≥ physical size *(verified)*; distances are mandatory user input + on this path. +- cpp — `module.cpp`: no `py::call_guard` on any + kernel; O(N²) autocorrelation and full-map flood fills hold the GIL for + seconds to minutes. +- `Pipeline.py:80-87` — the generated class's `__getattr__` shadows the + `_functions` dispatch and silently applies chained pipeline functions to the + *parent*, discarding the wrapped transformation *(verified: scale(3) of a + doubling wrapper returns 3×, not 6×)*; the module has zero callers and its + pickle support is dead code. Delete or fix. +- Registration system (`HeightContainer.py:199-208`, + `Container/SurfaceContainer.py:33,65-67`) — `register_function` mutates the + *shared* base-class `_functions` dict (2-D-only functions like + `interpolate_bicubic`/`mirror_stitch` appear on 1-D line scans and fail with + unrelated errors); the `deprecated=` flag is accepted and ignored at ~8 call + sites; the `func_with_doi` double-wrap check is defeated by + `functools.wraps` *(all verified)*. +- Loggers — `logging.Logger(__name__)` instead of `getLogger` in + `Support/Regression.py:37`, `Container/Averaging.py:37`, + `Container/ScaleDependentStatistics.py:35`, `Container/IO/ZAG.py:60`, + `IO/XYZ.py:47`: detached from the logging hierarchy, user configuration + never applies. +- `IO/__init__.py:323`, `Container/IO/__init__.py:90` — `raise + FileExistsError("file not found")`: wrong builtin (`FileNotFoundError`). +- `IO/Reader.py:1342-1349` — `DeclarativeReaderBase.topography` calls + `.scale(None)` when a format has no height-scale metadata, and its signature + lacks `channel_id`/`height_channel_index`. +- `Special.py:107` — `make_topography_from_function` assigns `_heights` + directly, bypassing NaN-masking/float conversion/shape validation + *(verified: NaNs with `has_undefined_data == False`)*. + +### 2.5 Performance + +- `Container/Integration.py:51-68,119-136` — container PSD integration is + O(N²) in topography reads: the per-topography `average(qx)` callback loops + over all topographies again, and `LazySurfaceContainer.__getitem__` + re-reads the file from the ZIP each time (own TODO admits it). Precompute + the bandwidth-count table once and/or memoize container elements. +- `IO/binary.py:843,862-878` + `IO/MNT.py:720-753` — zlib block scanning reads + the whole file and walks it byte-by-byte in pure Python with speculative + `zlib.decompress` on every `0x78` false positive; MNT additionally + reimplements the scan inline (never advancing past decoded blocks) instead + of using the shared `ZlibBlockChain`, and retains the whole file plus all + decompressed blocks for the reader's lifetime. +- `IO/XYZ.py:199-320` — the file is fully parsed twice (once at `__init__` + for channel info, again in `topography()`), with a per-token pure-Python + accumulator loop (`data[key] += [float(value)]`) — orders of magnitude + slower than `numpy.loadtxt`/`pandas` for large point clouds. +- `IO/MI.py:133-155` — data block converted bytes → `[chr(_) for _ in + buffer]` → join → re-encode → `np.frombuffer`: an identity transform + creating ~64M temporary objects for a 4k×4k map; the whole file is retained + in `self.lines`. +- `IO/IBW.py:52-58` — `loadibw` reads the entire wave (all channels) at open + time and keeps it for the reader's lifetime, violating the documented lazy + design rule; `assert`-based file validation vanishes under `python -O` + (same anti-pattern in FRT, BCR, JPK, LEXT, ZON). +- `Nonuniform/Autocorrelation.py:74-105` — double Python loop over all segment + pairs (own `# FIXME!!! This is slow`) while the height-difference variant + already delegates to C++; the function is unregistered and used only by + tests. +- cpp — `patchfinder.cpp:42,54`: fresh 16 MB `malloc`/`free` per patch; + `patchfinder.cpp:499-520`: O(max_dist⁴) correlation integration where a + prefix sum is O(max_dist²); `bearing_area.cpp:138-163`: full-grid sweep per + query height with no pruning (the nonuniform variant prunes); the Python + wrapper already computes sorted bounds the C++ never uses. +- cpp — `bicubic.cpp:142-148`: eager precomputation of all 16 coefficients per + node costs ~128 bytes/pixel (~2.1 GB for a 4096² map) before the first + evaluation; `n1_*n2_` is `int × int` (overflow ≥ 46341²). +- `Support/Regression.py:278-293` — GP regression factorizes the covariance + twice per solve (no Cholesky reuse); log-space branch returns log-space + variance next to exponentiated values (FIXME acknowledges). +- `ScanningProbe/RigidScan.py:53-72` — per-pixel Python loop, vectorizable. + +--- + +## 3. Low severity (selected) + +- `IO/AL3D.py:100,104-105` — `rowstride` is already in bytes but is multiplied + by `itemsize` again (4× over-read into the texture image; works by luck); + invalid-pixel mask misses `abs()` on the marker. +- `IO/WSXM.py:153,237` — leftover debug `print(...)` on every load; + ZeroDivisionError for perfectly flat scans. +- `IO/DZI.py:153-154` — division by zero for flat topographies → all-NaN + image pyramid. +- `IO/ZON.py:83-87` — multi-entry `as_strided` strides scrambled (currently + unreachable; guarded only by an `assert`). +- `IO/NMS.py:166` — full-scale mapping divides by 65534 instead of 65535 (or + 0xFFFF is an unhandled invalid marker); no undefined-data handling. +- `IO/Text.py:124-141,270,467` — x/y regex mapping swaps instrument axes for + Wyko/SPIP flavors (Aspect factor lands on the wrong axis); `defaultdict(None)` + no-op; off-by-one channel bounds check. +- `IO/JPK.py:332-337` — `except KeyError` around list indexing (`IndexError`) + — friendly error is dead code. +- `IO/binary.py:45` + `IO/FRT.py:516` — `decode()` defaults to native byte + order; FRT relies on it for little-endian structures (breaks on big-endian + hosts). +- `IO/binary.py:626-633` — `TLVContainer._parse_entry` temporarily mutates a + shared class-level layout object (not reentrant/thread-safe). +- `FFTTricks.py:61-72` — `_mufft` cache ignores the `communicator` argument. +- `UniformLineScanAndTopography.py:738-743,782-795` — `CompoundTopography` + validates with `assert` and carries dead state; `offset` setter has an + unreachable `offsety` branch. +- `Generic/ScanningProbe.py:68` — misplaced parenthesis in the geometric-mean + normalization `exp((log l + log u / 2))` (root unaffected; intent defeated). +- `Nonuniform/PowerSpectrum.py:43-59` — `dsinc` branch threshold at 1e-6 sits + in the cancellation zone (~1e-3 relative error band); raise to ~1e-2. Integer + input inherits integer dtype → truncation. Line 209-210 dead code. +- `Uniform/PowerSpectrum.py:186` — radial-average `qmax` uses only the + x-Nyquist; result changes under transposition for anisotropic pixels. +- `Uniform/Derivative.py:517` — per-operator normalization assumes operator + index equals Cartesian direction (single y-operator divides by the x pixel + size). +- `Uniform/Integration.py:82-97` — docstring formula off by 2 vs the two-sided + sum; `try/except TypeError` dispatch can mask user errors. +- `Uniform/VariableBandwidth.py:199,267,320` — documented quantity `'s'` is + registered as `'g'` (`KeyError: 's'`); from_area error message says + from_profile. +- `Uniform/ScalarParameters.py:57-67` — dead NuMPI/MPI machinery behind an + unconditional `NotImplementedError`. +- `Support/Regression.py:85` — `make_grid('log')` treats `nb_points` as edge + count, linear/quadratic as point count; callers compensate (+1) — API trap. +- `Support/Deprecation.py:47` — warnings lack `stacklevel=2`, pointing at the + decorator instead of the caller. +- `Generic/Moments.py:33,81,92,120` — syntactically invalid doctest; docstring + formulas differ from the code by `(2π)^d` prefactors (code is right). +- `Nonuniform/` docstring drift: `Converters.py:59` (padding "zeros" is + actually edge-clamped), `Interpolation.py:43` ("linear" on the cubic + routine), `__init__.py:27` ("uniform"), `ScalarParameters.py:66,145` + (return descriptions wrong). +- cpp `stack.h` — rule-of-three violation (double free if copied); misnamed + (used exclusively as a FIFO); `get_size()` asserts a legitimately occurring + state. +- cpp `patchfinder.cpp:131-155` — `assign_segment_numbers`, `distance_map`, + `closest_patch_map`, `perimeter_length` are always periodic, with no + `periodic` flag, unlike `assign_patch_numbers` — silent contract gap. +- cpp misc — stale "column-major" comments on row-major loops; ACF ½ + convention undocumented; 3-way corner sort copy-pasted 5×; bearing-area + bindings lack `py::arg` names; `distance_map` fills a `next` map it never + returns. +- `cpp/bicubic.cpp:350-359` — scalar path ignores `derivative=1/2` and returns + a bare float where callers unpack a tuple *(verified)*. + +--- + +## 4. Cross-cutting themes and architectural recommendations + +**T1. The decorated-topography pattern has a systematic property-forwarding +hazard.** `transpose()` (1.1) and `downsample()` (1.2) both broke the same +way: a decorator overrides some geometry properties but inherits others that +are no longer consistent. Recommendation: give `DecoratedUniformTopography` a +single source of truth (derive `pixel_size`/`area_per_pt` from +`physical_sizes` and `nb_grid_pts` of *self*, not of the parent), and add a +generic invariant test run against every decorator class +(`pixel_size == physical_sizes / nb_grid_pts`, `positions().shape == +heights().shape`, etc.). + +**T2. Row-major files vs. the x-first array convention is re-decided in every +reader — and decided wrong in four of them.** DI, EZD, MI, PS scramble +non-square scans; DATX and LEXT are ambiguous; FRT, GWY, JPK are correct. The +per-reader copy-pasted `topography()` boilerplate (metadata-override checks, +masked-array wrap, reshape, scale) is what allows this. Recommendation: a +shared helper ("read row-major block → transpose → mask → scale") in +`IO/binary.py`, plus one non-square fixture per binary format (the square-only +fixtures are why none of this is caught). + +**T3. The nonuniform code path repeatedly assumes `x[0] == 0`.** `to_uniform` +(1.11), slope detrending, Hann windowing — all masked by IO readers that shift +the origin, all exposed by the public constructor. Recommendation: normalize +the origin in one place (or make analyses origin-invariant) and add tests with +offset x grids; `Nonuniform/Detrending.py:79-88` should also center x before +solving the normal equations (ill-conditioned for large offsets). + +**T4. Masked (undefined) data is a partially supported concept.** PSD/ACF +guard with `has_undefined_data`; detrending of line scans, variable bandwidth, +`Rq`/`Sq`, checkerboard detrend and several readers do not (2.2). +Recommendation: decide a contract per function (raise `UndefinedDataError` or +handle the mask), and enforce it with a shared parametrized test over the +registered-function table. + +**T5. The string-keyed registration system needs hardening.** +`register_function` writes into shared base-class dicts (functions leak across +classes), `deprecated=` is silently ignored, `__getattr__` dispatch swallows +internal `AttributeError`s and re-reports them as "no analysis function +registered" (masking real bugs like the broken base-class `info` property), +and nothing is visible to IDEs/type checkers or `dir()`. Recommendation: +per-class dicts via `__init_subclass__`, implement or remove `deprecated`, +re-raise internal `AttributeError`s with the original traceback, and consider +generating real methods with `setattr`. + +**T6. Tests validate "runs without error" more than correctness in exactly +the areas that broke.** Scale-dependent statistics, nonuniform detrending, +container IO (the only ZAG test is skipped with a hardcoded developer path), +`uniform2d_*` moments (tests assert the broken values), scan-line alignment +(tests encode the inverted axis). CLI has no tests. Recommendation: +property-based invariants (Parseval for PSD, `bearing_area(median()) == 0.5`, +transpose/flip invariance of scalar analyses, non-square and offset-origin +fixtures) would have caught most of the high-severity findings here. + +**T7. Analyses are implemented three times with drifting signatures.** +Uniform/Nonuniform/Container triplets of PSD, ACF, variable bandwidth, scalar +parameters; `bandwidth` exists in three `common.py` files; +`ciso_moment`/`c1d_moment` are copy-paste identical except one call. The +`Generic/` package shows the better pattern (one implementation registered on +both interfaces) but is applied inconsistently. Long-term: converge on +`Generic/`-style single implementations. + +**T8. Packaging risks.** `pyproject.toml:61` depends on the deprecated +misspelled alias package `tiffile` (and code imports `from tiffile import +TiffFile` in JPK/PS/LEXT) — switch to `tifffile`; `matplotlib>=1.0.0` is a +meaningless floor; `pytest-flake8` is unmaintained (with a `flake8<8` pin +papering over it); `meson.build:6` runs `run_command('python', ...)` which +fails on distros without a `python` alias; every `.py` must be hand-listed in +per-directory `meson.build` files with no completeness check (a forgotten +entry ships a silently broken wheel) — add a glob-based CI check. + +--- + +## 5. Suggested triage order + +1. **Wrong-results bugs users cannot detect** (§1.1–1.4, 1.7–1.12, 1.14, + 1.17): decorator geometry, non-square reshapes + MI units, triangle/flat + moments, bearing-area bounds, `to_uniform` origin, curvature stencil, + `fourier_synthesis` DC. +2. **Reader crashes and channel misdirection** (§1.5, 1.6, 2.3): cheap, + contained fixes; add fixtures while touching each format. +3. **Masked-data contract** (§2.2, T4) and the **registration system** (T5). +4. **Container IO** (§1.13, 2.4, 2.5): ZAG stream lifetime, caching layer to + kill the O(N²) reads, HTTP hardening. +5. **C++ hygiene** (§2.4 cpp items): const refs, int64 sizes/dtypes, GIL + release, contiguity — mostly mechanical. +6. Structural work per themes T1–T7, guarded by the new invariant tests. From 0934a665cab8d2f986fda2a53471cb3f9846b84a Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 07:37:58 +0000 Subject: [PATCH 02/23] BUG: Fix pixel size of lazily transposed and downsampled topographies DecoratedUniformTopography now derives pixel_size and area_per_pt from the physical_sizes and nb_grid_pts of the decorated topography itself instead of forwarding the parent's values. Decorators that change the geometry (transpose, downsample) previously reported the parent's pixel size, silently corrupting every derivative-based quantity (rms_gradient, scale-dependent slope/curvature, PSD normalizations) for transposed topographies with anisotropic pixels and for downsampled topographies. - TransposedUniformTopography additionally swaps nb_subdomain_grid_pts and subdomain_locations and no longer crashes in positions() for line scans. - DownsampledUniformTopography now reports physical_sizes consistent with the retained samples when the downsampling factor does not divide the number of grid points. - ScaledUniformTopography drops its pixel_size/area_per_pt overrides, which would now double-apply the scale factor. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/Uniform/Filtering.py | 15 +++++++ .../UniformLineScanAndTopography.py | 39 +++++++++++++------ test/test_downsample.py | 14 +++++++ test/test_pipeline.py | 11 ++++++ 4 files changed, 67 insertions(+), 12 deletions(-) diff --git a/SurfaceTopography/Uniform/Filtering.py b/SurfaceTopography/Uniform/Filtering.py index 1f2e244d..01e1d324 100644 --- a/SurfaceTopography/Uniform/Filtering.py +++ b/SurfaceTopography/Uniform/Filtering.py @@ -81,6 +81,21 @@ def __setstate__(self, state): def nb_grid_pts(self): return tuple(n // f for n, f in zip(self.parent_topography.nb_grid_pts, self._factor)) + @property + def physical_sizes(self): + # The downsampled grid has a pixel size of `factor` times the parent + # pixel size. If the downsampling factor does not divide the number + # of grid points, trailing points are discarded and the physical size + # shrinks accordingly. (The pixel size reported by the base class is + # physical_sizes / nb_grid_pts, which then remains consistent with + # the actual sample spacing.) + return tuple( + n * f * p + for n, f, p in zip( + self.nb_grid_pts, self._factor, self.parent_topography.pixel_size + ) + ) + def heights(self): heights = self.parent_topography.heights() fx, fy = self._factor diff --git a/SurfaceTopography/UniformLineScanAndTopography.py b/SurfaceTopography/UniformLineScanAndTopography.py index 2aaaaf7a..2bc009c2 100644 --- a/SurfaceTopography/UniformLineScanAndTopography.py +++ b/SurfaceTopography/UniformLineScanAndTopography.py @@ -478,7 +478,14 @@ def dim(self): @property def pixel_size(self): - return self.parent_topography.pixel_size + # Derive the pixel size from the physical sizes and number of grid + # points of the decorated topography itself, not of the parent. + # Decorators that change the geometry (e.g. transposition or + # downsampling) override `physical_sizes` and `nb_grid_pts`, and the + # pixel size must remain consistent with those. + return tuple( + s / n for s, n in zip(self.physical_sizes, self.nb_grid_pts) + ) @property def unit(self): @@ -518,7 +525,7 @@ def subdomain_slices(self): @property def area_per_pt(self): - return self.parent_topography.area_per_pt + return np.prod(self.pixel_size) def positions(self, **kwargs): return self.parent_topography.positions(**kwargs) @@ -575,21 +582,11 @@ def height_scale_factor(self): def position_scale_factor(self): return get_unit_conversion_factor(self.parent_topography.unit, self.unit) - @property - def pixel_size(self): - """Compute rescaled pixel sizes.""" - return tuple(self.position_scale_factor * s for s in super().pixel_size) - @property def physical_sizes(self): """Compute rescaled physical sizes.""" return tuple(self.position_scale_factor * s for s in super().physical_sizes) - @property - def area_per_pt(self): - """Compute rescaled physical sizes.""" - return np.prod(self.pixel_size) - def positions(self, **kwargs): """Compute the rescaled positions.""" if self.dim == 1: @@ -700,11 +697,29 @@ def physical_sizes(self): sx, sy = self.parent_topography.physical_sizes return sy, sx + @property + def nb_subdomain_grid_pts(self): + if self.dim == 1: + return self.parent_topography.nb_subdomain_grid_pts + else: + nx, ny = self.parent_topography.nb_subdomain_grid_pts + return ny, nx + + @property + def subdomain_locations(self): + if self.dim == 1: + return self.parent_topography.subdomain_locations + else: + ix, iy = self.parent_topography.subdomain_locations + return iy, ix + def heights(self): """Computes the rescaled profile.""" return self.parent_topography.heights().T def positions(self, **kwargs): + if self.dim == 1: + return self.parent_topography.positions(**kwargs) X, Y = self.parent_topography.positions(**kwargs) return Y.T, X.T diff --git a/test/test_downsample.py b/test/test_downsample.py index 6aa89b8b..30bec29a 100644 --- a/test/test_downsample.py +++ b/test/test_downsample.py @@ -48,6 +48,9 @@ def test_downsample_nth(): t_down = t.downsample(2, mode="nth") assert t_down.nb_grid_pts == (5, 4) assert t_down.physical_sizes == (sx, sy) + # Pixel size must grow by the downsampling factor + np.testing.assert_allclose(t_down.pixel_size, (2 * sx / nx, 2 * sy / ny)) + np.testing.assert_allclose(t_down.area_per_pt, 4 * sx * sy / (nx * ny)) expected_heights = heights[::2, ::2] np.testing.assert_allclose(t_down.heights(), expected_heights) @@ -92,6 +95,17 @@ def test_downsample_non_integer_multiple(): assert t_down.nb_grid_pts == (5, 4) expected_heights = heights[:10, :8][::2, ::2] np.testing.assert_allclose(t_down.heights(), expected_heights) + # Pixel size is factor times the parent pixel size; since trailing + # points are dropped, the physical size shrinks accordingly + np.testing.assert_allclose(t_down.pixel_size, (2 * sx / nx, 2 * sy / ny)) + np.testing.assert_allclose( + t_down.physical_sizes, (5 * 2 * sx / nx, 4 * 2 * sy / ny) + ) + # Positions must coincide with the positions of the retained samples + x, y = t_down.positions() + xp, yp = t.positions() + np.testing.assert_allclose(x, xp[:10, :8][::2, ::2]) + np.testing.assert_allclose(y, yp[:10, :8][::2, ::2]) t_down = t.downsample(2, mode="average") assert t_down.nb_grid_pts == (5, 4) diff --git a/test/test_pipeline.py b/test/test_pipeline.py index a98c52f3..469780e3 100644 --- a/test/test_pipeline.py +++ b/test/test_pipeline.py @@ -297,6 +297,17 @@ def test_transposed_topography(): assert sx == sy2 assert sy == sx2 assert (surf.heights() == surf2.heights().T).all() + # Pixel size and subdomain information must be transposed as well + px, py = surf.pixel_size + px2, py2 = surf2.pixel_size + assert px == py2 + assert py == px2 + assert surf2.nb_subdomain_grid_pts == (ny, nx) + assert surf2.subdomain_locations == tuple(reversed(surf.subdomain_locations)) + np.testing.assert_almost_equal(surf2.area_per_pt, surf.area_per_pt) + # Scalar analysis results must be invariant under transposition, also for + # anisotropic pixels + np.testing.assert_almost_equal(surf2.rms_gradient(), surf.rms_gradient()) def test_undefined_data_and_squeeze(): From 21ed933f07a9ae4b9668fa1b0a040effa735b04a Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 07:37:59 +0000 Subject: [PATCH 03/23] BUG: Fix silent data corruption and channel selection in file readers - DI, EZD, PS: The raw data buffer of these formats is stored scan line by scan line, i.e. it has C-order shape (ny, nx). The readers reshaped to (nx, ny), which interleaves scan lines into garbage for non-square maps. All test fixtures for these formats are square, which is why this went unnoticed. - MI: Same reshape fix. In addition, xLength/yLength are stored in meters but were reported in the channel unit (typically um), making all mixed lateral/height quantities (rms slope, PSD, curvature) wrong by ~10^6; the lateral sizes are now converted to the channel unit. The scanUp flag is textual TRUE/FALSE and was evaluated for truthiness, so scan-down images were also flipped. Text/ASCII data now raises UnsupportedFormatFeature instead of NameError. The byte-wise chr()/join()/encode() round trip was replaced by direct buffer slicing. - BCR: 'voidpixels' holds the *count* of void pixels, not the marker value. Files with voidpixels=0 previously masked every pixel with raw value 0; real void pixels (int16 32767 / float FLT_MAX) were never masked; a missing key crashed. Masking now follows the BCR-STM/BCRF specification. - EZD: The format magic check compared bytes against str (always unequal) and had inverted logic, i.e. no validation at all; it now rejects non-EZD files with FileFormatMismatch. - NMM: Every scan was registered with channel index 0, so channels[i].topography() always returned the first scan. - OIR: The channel reader lambda captured loop variables by reference; files with multiple height channels returned the last channel's data for every channel. Loop variables are now bound as default arguments. - POIR: Channels aggregated from multiple OIR sub-files retained their per-file index; selecting a channel could return data from a different file. Channels are now renumbered on concatenation (ChannelInfo gained an index setter for this purpose). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/IO/BCR.py | 19 +++++- SurfaceTopography/IO/DI.py | 11 +++- SurfaceTopography/IO/EZD.py | 13 +++-- SurfaceTopography/IO/MI.py | 102 ++++++++++++++++++++------------- SurfaceTopography/IO/NMM.py | 4 +- SurfaceTopography/IO/OIR.py | 11 +++- SurfaceTopography/IO/PS.py | 6 +- SurfaceTopography/IO/Reader.py | 9 +++ test/IO/test_mi.py | 6 +- 9 files changed, 128 insertions(+), 53 deletions(-) diff --git a/SurfaceTopography/IO/BCR.py b/SurfaceTopography/IO/BCR.py index 5bdfe184..f606e9b1 100644 --- a/SurfaceTopography/IO/BCR.py +++ b/SurfaceTopography/IO/BCR.py @@ -214,9 +214,24 @@ def topography(self, channel_index=None, physical_sizes=None, # or pcolormesh(t.heights().T) for origin in lower left and # with inverted y axis (cartesian coordinate system) - invalid_pixel_value = float(self._metadata['voidpixels']) + # `voidpixels` holds the *number* of void (undefined) pixels in the + # file, not the marker value; if the key is missing, the file + # contains no void pixels. Void pixels are marked by the maximum + # value of the respective data type: 32767 for 16-bit integer + # (bcrstm) files and single-precision FLT_MAX (~3.4028235e38) for + # floating-point (bcrf) files. + try: + nb_void_pixels = float(self._metadata.get('voidpixels', 0)) + except ValueError: + nb_void_pixels = 0 + if nb_void_pixels > 0: + if self._file_type == 'bcrstm': + mask = data == 32767 + else: + mask = data >= 3.4028e38 + data = np.ma.masked_array(data, mask=mask) topography = Topography( - np.ma.masked_array(data, mask=data == invalid_pixel_value), + data, physical_sizes=(sx, sy), unit=channel.unit, info=_info, diff --git a/SurfaceTopography/IO/DI.py b/SurfaceTopography/IO/DI.py index 7b64c3f7..45ce4ec4 100644 --- a/SurfaceTopography/IO/DI.py +++ b/SurfaceTopography/IO/DI.py @@ -305,8 +305,13 @@ def topography( fobj.seek(offset) rawdata = fobj.read(nx * ny * dtype.itemsize) - unscaleddata = np.frombuffer(rawdata, count=nx * ny, dtype=dtype).reshape( - nx, ny + # The data is stored line by line, i.e. the buffer has C-order + # shape (ny, nx). Transposing yields the (nx, ny) array with the + # x index first that `Topography` expects. + unscaleddata = ( + np.frombuffer(rawdata, count=nx * ny, dtype=dtype) + .reshape(ny, nx) + .T ) # internal information from file @@ -323,7 +328,7 @@ def topography( # with inverted y axis (cartesian coordinate system) surface = Topography( - np.fliplr(unscaleddata.T), + np.fliplr(unscaleddata), physical_sizes=(sx, sy), unit=channel.unit, info=_info, diff --git a/SurfaceTopography/IO/EZD.py b/SurfaceTopography/IO/EZD.py index 296a3338..84be41cc 100644 --- a/SurfaceTopography/IO/EZD.py +++ b/SurfaceTopography/IO/EZD.py @@ -68,7 +68,7 @@ def __init__(self, file_path): with OpenFromAny(self._file_path, "rb") as fobj: metadata = {} line = fobj.readline() - if line == self._MAGIC: + if line != self._MAGIC.encode("latin-1"): raise FileFormatMismatch("This is not a NanoSurf easyScan data file") section_name = "DataSet" @@ -218,8 +218,13 @@ def topography( fobj.seek(self._start_of_data + offset) rawdata = fobj.read(nx * ny * dtype.itemsize) - unscaleddata = np.frombuffer(rawdata, count=nx * ny, dtype=dtype).reshape( - nx, ny + # The data is stored line by line, i.e. the buffer has C-order + # shape (ny, nx). Transposing yields the (nx, ny) array with the + # x index first that `Topography` expects. + unscaleddata = ( + np.frombuffer(rawdata, count=nx * ny, dtype=dtype) + .reshape(ny, nx) + .T ) # internal information from file @@ -236,7 +241,7 @@ def topography( # with inverted y axis (cartesian coordinate system) topography = Topography( - np.fliplr(unscaleddata.T), + np.fliplr(unscaleddata), physical_sizes=(sx, sy), unit=channel.unit, info=_info, diff --git a/SurfaceTopography/IO/MI.py b/SurfaceTopography/IO/MI.py index ec209370..3b37dc1f 100644 --- a/SurfaceTopography/IO/MI.py +++ b/SurfaceTopography/IO/MI.py @@ -27,8 +27,16 @@ import numpy as np -from ..Exceptions import CorruptFile, MetadataAlreadyFixedByFile -from ..Support.UnitConversion import mangle_length_unit_utf8 +from ..Exceptions import ( + CorruptFile, + MetadataAlreadyFixedByFile, + UnsupportedFormatFeature, +) +from ..Support.UnitConversion import ( + get_unit_conversion_factor, + is_length_unit, + mangle_length_unit_utf8, +) from ..UniformLineScanAndTopography import Topography from .common import OpenFromAny from .Reader import ChannelInfo, ReaderBase @@ -114,9 +122,23 @@ def process_header(self): buf.meta['range'] = buf.meta.pop('bufferRange') buf.meta['label'] = buf.meta.pop('bufferLabel') - self._physical_sizes = float(self.mifile.meta['xLength']), float(self.mifile.meta['yLength']) + # `xLength` and `yLength` are always given in meters + self._physical_sizes_in_m = float(self.mifile.meta['xLength']), float(self.mifile.meta['yLength']) self._nb_grid_pts = int(self.mifile.meta['xPixels']), int(self.mifile.meta['yPixels']) + def _physical_sizes_in_unit(self, unit): + """ + Return the lateral physical sizes, converted from meters (the unit of + `xLength`/`yLength` in the file) to `unit` if `unit` is a length unit. + For channels whose data is not a height (e.g. deflection in V), the + lateral sizes are reported in meters since there is no meaningful + conversion. + """ + if unit is not None and is_length_unit(unit): + fac = get_unit_conversion_factor('m', unit) + return tuple(fac * s for s in self._physical_sizes_in_m) + return self._physical_sizes_in_m + def topography(self, channel_index=None, physical_sizes=None, height_scale_factor=None, unit=None, info={}, periodic=False, subdomain_locations=None, nb_subdomain_grid_pts=None): @@ -130,42 +152,43 @@ def topography(self, channel_index=None, physical_sizes=None, output_channel = self.mifile.channels[channel_index] - buffer = b''.join(self.lines[self.data_start:]) - buffer = [chr(_) for _ in buffer] + if not self.is_image: + raise UnsupportedFormatFeature( + 'Spectroscopy MI files are not supported.') # Read height data - if self.is_image: - if self.data_type == 'binary': - dt = "i2" - encode_length = 2 - type_range = 32768 - elif self.data_type == 'binary32': - dt = "i4" - encode_length = 4 - type_range = 2147483648 - else: # text or ascii - type_range = 32768 - - start = int(self.mifile.xres) * int( - self.mifile.yres) * encode_length * channel_index - end = int(self.mifile.xres) * int( - self.mifile.yres) * encode_length * (channel_index + 1) - - data = ''.join(buffer[start:end]) - out = np.frombuffer(str.encode(data, "raw_unicode_escape"), dt) - out = out.reshape((int(self.mifile.xres), int(self.mifile.yres))) - - # Undo normalizing with range of data type - out = out / type_range - - # If scan direction is upwards, flip the height map vertically - if self.mifile.meta['scanUp']: - out = np.flip(out, 0) - - # Multiply the heights with the bufferRange - out *= float(output_channel.meta['range']) - else: - pass # TODO + if self.data_type == 'binary': + dt = " Date: Thu, 23 Jul 2026 07:37:59 +0000 Subject: [PATCH 04/23] BUG: Fix bearing-area bounds, spurious DC mode, make_sphere and scan-line alignment - Uniform/BearingArea: The periodic 2D element bounds called np.roll with a tuple shift and no axis, which flattens the array and rolls by the sum of the shifts. The min/max bounds therefore paired wrong pixels and no longer bracketed the exact bearing area, silently corrupting median(), mad_height() and the robust detrending modes for periodic topographies. bearing_area(median()) is now exactly 0.5. - Generation.fourier_synthesis: The q=0 Fourier mode was populated with a random amplitude equal to C(q=1), giving generated surfaces a random, unit-dependent mean offset that typically dwarfs the requested rms height. The mean is now exactly zero. - Special.make_sphere: The periodic flag was silently dropped (the returned topography was always nonperiodic); kind='paraboloid' with a numeric standoff crashed with UnboundLocalError. The redundant fill_undefined_data() wrapper for numeric standoffs was removed. - Uniform/ScanLineAlignment: direction semantics were inverted relative to the library's x-first array convention: the default direction='x' (fast scan along x) detrended lines running along y. Scan lines along x are columns of the height array and are now transposed accordingly. Tests were updated to construct artifacts matching the documented semantics; direction is now validated. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/Generation.py | 10 +++++ SurfaceTopography/Special.py | 13 +++--- SurfaceTopography/Uniform/BearingArea.py | 14 ++++-- .../Uniform/ScanLineAlignment.py | 25 +++++++---- angstrom_unit.nc | Bin 0 -> 133640 bytes no_physical_sizes.nc | Bin 0 -> 131172 bytes no_unit.nc | Bin 0 -> 133580 bytes parallel_save_test.nc | Bin 0 -> 133640 bytes test/file_format_examples/workflowtest.npy | Bin 0 -> 65664 bytes test/test_scan_line_alignment.py | 41 ++++++++++-------- test_der.png | Bin 0 -> 18692 bytes 11 files changed, 68 insertions(+), 35 deletions(-) create mode 100644 angstrom_unit.nc create mode 100644 no_physical_sizes.nc create mode 100644 no_unit.nc create mode 100644 parallel_save_test.nc create mode 100644 test/file_format_examples/workflowtest.npy create mode 100644 test_der.png diff --git a/SurfaceTopography/Generation.py b/SurfaceTopography/Generation.py index 52836275..d118c6bf 100644 --- a/SurfaceTopography/Generation.py +++ b/SurfaceTopography/Generation.py @@ -306,6 +306,16 @@ def fourier_synthesis(nb_grid_pts, physical_sizes, karr[x, mask] = rolloff * ran[mask] * q_min ** (-(1 + hurst)) else: karr[mask] = rolloff * ran[mask] * q_min ** (-(0.5 + hurst)) + if x == 0 and psd is None: + # The q=0 mode only controls the mean height, which we fix to + # zero. (Setting q_sq[0] to 1 above merely avoids a + # divide-by-zero; without zeroing this mode the surface would + # acquire a random mean offset of magnitude C(q=1), which is + # unit-dependent and typically dwarfs the rms height.) + if len(nb_grid_pts) == 2: + karr[0, 0] = 0. + else: + karr[0] = 0. if len(nb_grid_pts) == 2: for iy in [0, -1] if ny % 2 == 0 else [0]: # Enforce symmetry diff --git a/SurfaceTopography/Special.py b/SurfaceTopography/Special.py index bc1c749d..534d5783 100644 --- a/SurfaceTopography/Special.py +++ b/SurfaceTopography/Special.py @@ -214,18 +214,21 @@ def get_r(res, size, centre, subd_loc, subd_res): "Should be 'sphere' or 'paraboloid'".format(kind))) if dim == 1: - ret_top = UniformLineScan(h + offset, physical_sizes) + ret_top = UniformLineScan(h + offset, physical_sizes, + periodic=periodic) else: ret_top = Topography(h + offset, physical_sizes, + periodic=periodic, decomposition='subdomain', nb_grid_pts=nb_grid_pts, subdomain_locations=subdomain_locations, communicator=communicator) - if standoff == "undefined": - return ret_top - else: - return ret_top.fill_undefined_data(standoff_val) + # For `standoff="undefined"` the region outside the sphere contains NaNs, + # which the constructors above turn into masked (undefined) data points. + # For a numeric standoff the heights outside the sphere were already set + # to the (finite) standoff value above; no filling is necessary. + return ret_top class PlasticTopography(DecoratedUniformTopography): diff --git a/SurfaceTopography/Uniform/BearingArea.py b/SurfaceTopography/Uniform/BearingArea.py index 5e22bf9c..10e8c9f9 100644 --- a/SurfaceTopography/Uniform/BearingArea.py +++ b/SurfaceTopography/Uniform/BearingArea.py @@ -123,13 +123,19 @@ def __init__(self, h, is_periodic): self._is_periodic = is_periodic if self._is_periodic: + # Note: `np.roll` needs explicit axes; with a tuple shift and no + # axis it would flatten the array and roll by the sum of the + # shifts. + h10 = np.roll(h, -1, axis=0) + h01 = np.roll(h, -1, axis=1) + h11 = np.roll(h, (-1, -1), axis=(0, 1)) self._el_min_heights = np.sort(np.ma.compressed([ - np.minimum(np.minimum(h, np.roll(h, (-1, 0))), np.roll(h, (0, -1))), - np.minimum(np.minimum(np.roll(h, (-1, -1)), np.roll(h, (-1, 0))), np.roll(h, (0, -1))) + np.minimum(np.minimum(h, h10), h01), + np.minimum(np.minimum(h11, h10), h01) ])) self._el_max_heights = np.sort(np.ma.compressed([ - np.maximum(np.maximum(h, np.roll(h, (-1, 0))), np.roll(h, (0, -1))), - np.maximum(np.maximum(np.roll(h, (-1, -1)), np.roll(h, (-1, 0))), np.roll(h, (0, -1))) + np.maximum(np.maximum(h, h10), h01), + np.maximum(np.maximum(h11, h10), h01) ])) else: self._el_min_heights = np.sort(np.ma.compressed([ diff --git a/SurfaceTopography/Uniform/ScanLineAlignment.py b/SurfaceTopography/Uniform/ScanLineAlignment.py index 009dfba9..eba72442 100644 --- a/SurfaceTopography/Uniform/ScanLineAlignment.py +++ b/SurfaceTopography/Uniform/ScanLineAlignment.py @@ -63,9 +63,12 @@ def __init__(self, topography, direction='x', mode='median', degree=1, topography : Topography 2D topography to align. direction : str, optional - Scan line direction: 'x' (rows, default) or 'y' (columns). - 'x' means each row is a scan line (fast scan in x-direction). - For AFM, 'x' is typically the fast scan direction. + Direction along which the scan lines run: 'x' (default) or 'y'. + 'x' means each scan line runs along the x direction (fast scan + in x), i.e. each line has constant y. For AFM, 'x' is typically + the fast scan direction. Note that the first index of the height + array is the x index in this library, so scan lines along x are + *columns* of the height array. mode : str, optional Method for computing line centers during alignment: - 'median': Use median for robust offset alignment (default). @@ -85,6 +88,8 @@ def __init__(self, topography, direction='x', mode='median', degree=1, "2D topographies") if degree < 0: raise ValueError("Polynomial degree must be non-negative") + if direction not in ('x', 'y'): + raise ValueError("Direction must be 'x' or 'y'") super().__init__(topography, info=info) self._direction = direction self._mode = mode @@ -167,8 +172,11 @@ def _compute_alignment(self, heights): heights : ndarray 2D array of height values. """ - # Transpose if aligning columns instead of rows - if self._direction == 'y': + # The first array index is the x index in this library. A scan line + # running along the x direction therefore corresponds to a *column* + # heights[:, j] of the height array; transpose so that the loop below + # (which iterates over the first index) walks over scan lines. + if self._direction == 'x': heights = heights.T nx, ny = heights.shape @@ -237,8 +245,9 @@ def heights(self): if self._line_coeffs is None: self._compute_alignment(heights) - # Transpose if aligning columns instead of rows - if self._direction == 'y': + # See note in `_compute_alignment`: scan lines along x are columns + # of the height array + if self._direction == 'x': heights = heights.T nx, ny = heights.shape @@ -253,7 +262,7 @@ def heights(self): heights[i, :] += self._offsets[i] # Transpose back if we transposed earlier - if self._direction == 'y': + if self._direction == 'x': heights = heights.T return heights diff --git a/angstrom_unit.nc b/angstrom_unit.nc new file mode 100644 index 0000000000000000000000000000000000000000..0e0f4a131ccab3d9c5303c46ce2ef45a8f6d99b9 GIT binary patch literal 133640 zcmd43X*iUB{6C5$NeWp?Qc=>TRSIp^q>xfkkv+*0ZBmr%DlOJ*v+rYOq)>SkLP|v& zk`^T;OO_PU`Fzjsod5YhIM2?L)IB)9*bpM2y{Xy~CpU$^52 z1CDu<2gr{sxk*b+*}Q>l72K>21q3+%uP6Wa=VXrs9ttDB^M4-CCUS@T$o;QRk&=-o z`~UZG{`Z;x{rva2N?348yz*`;3p4l4#u3W&gwR_9J2{yXG zztaVFP)XUsG)1r;y$+hM5(19tg409qWx(;@>T@vhFxX2PO>Sd7m~+lcEw+6J`f$I? z7grh39Ucri{%r)Ur}n$<)p4M$D~zAB;RL7wZC@9^3<5>>>biK1F67^QT=FMzWBqk7dPY`F?@j=%JHaC1;sQ_`PP=(jCV+ZC zz1RL(6sRV9vSy^UgQ_qr+!uTnl%+qv8jYKY{3MJ1S#E!je>&w=o?;U6z+7>tD;17jUV zc>OA1e7_hPBI*IN{PAn`J+WZcMXC6i9|g0bS}}BzA(*eP+Y9CYfn}cY%A?8}?3k-7 zET0B}!-xypp=b=wt9p%1Z#=;nD4NnxBmnp7M@S8E!JBe5B=Mj+c%3)Sb@WC-a7;?a zbH#ZGbLbUIbjDD?DGc@sS_hHqF*Pl-Y>0K^^DJ*=L0k~|Ic(-uNaV8w8UKnP(Wuxw zjVc9+n)=A$Qv+n*x-)v-42VB&uz9|q7vkMx6VE7ULA)tXt(sj7@#T(M#(E*d_hwT| z4k>kuC^|5K)S1Y(Da3w{hu?nqW@!EnR8d3wr8@NST~O(A&+P7p`mu{hxjRzur1hf7|`6b>4wG zV`rW2A_e4^@RjT>&w!%r)c7eO1C%o@B?b?kfU0)-SmJ@FpneN053vW#M;q&}Bk2dV1qP+haT9l6?!PSL^%LjcP!>e(dk^lT$&nJY}}XZY`+SM)yZt znFoqw14mo943xjBL)ZCCQ1xsNtUM_JrR-}#V9<9^)W6?|%)W@+XFl>#8=aBE+tiwHIVNdUQ-_zcm=kW!B&5{#%|&o>wZz4mX@S}k|b|6V_3vpgTnDaVfrWR8QS%pbb#whpY%CdY?N;;GZ%Vzm5Hkau9o_3$ln3DMo|G8Tlnt)kQpX2&=fPcIx~;9j8C-Ko z#T*MM@Ss57vZm?v;z1Yg!;|xRW$5VlN6rHMf z4JW=@`WRxFxszXi>xVcwZMNsbM2KmxzLxFMfcWazhdIgx5I?R8S$eMy;-0Tg@l?`p zuKpcR9`l2ETG%yHiXKGKbuQCRSfZf6D_k^@50QRYv}5c!h=T9>#uZmXq|Nm?zS|wb zrmUuVgLVij|HV!+w}tTF_rFUgv%&8*zHZ+|2d}3q(;{&lcn8j$U2Ycv-n&Eey*>xP zJ9b*LcKbqbA1N++mbVdHt0{WhwPV1Ue(7$}cpq?ljTcPk+yU3`it&7_R&eV4xz34I zWX|vOn#%A5fAx$nukWt_Z+=R|*JY{T1#$Vc|NOvX4XQsck^yfY*K>2&C(;M@jVZ^S z1$Que&`LI#d_Nx!Yc$UX=j-W#L$6Z7(JG!x4;c^k#`FJ}oe5xBIN$aR5Q6cc`+Tse zIT)!G8oGViV0ffFJNoJp=<1hG&!8;>l^>lo@YYZvQ&U|AAcRXPTGw$B;WkVO`ZK7i8BqG}ALXapV2D!74ioWL;KR zHCizhS+Q!%tDGW{CGG8S+j==NeN5#`u|*CW0E-GPi7z6~SRs5>8Ogle)L@6j!YP^?iZO;}%)aP4o|-JplB; zDUC80=Yp}uWX*`oJ}|77O;TO)1dPL(J%6As&UInLk{n_kX4{(MQw5LRi!QGO^N(m*` z^E4~1gadr=HhOO#%VLu2eNIwi)G2T?X=??6W#Cy>9Vnjs9RiAZvCwQ31?yY8RT|?U z(z(1~WabD&F3TVL`K3cdd%SOF?0kqX=(EQi_zubZWid`e_aLDjynf**9g?_$0-uw{ zq%T~0wc<-V#P|1YDt~eu;t!<(gRjycuG?03N>v8p?9TR~8Zji(kN%pxZ3QHIXIyOx z7=&bI(gOA8q<_5J5^oq7N#_5l27|k{5N{7<8mjW-s{#m2bbf4- z(E|V0wQSL@S>T6D_stAi4ZiV#oL?Uez;lyIKTC4}xAX7Jb2j_HEt=6QcmFfEDpzz1 z=U0L|eG1O@C6jvp*rF2_58m=foH!l@UT&#>oz6n=wH$n-_mY0VstvUJlm;GM#j_&z zAb78i_(yQZz@M^d^|wV6z?ZWyyy^57ysbA5?nx&7IHyTqvEeDW+coZgcrF93^I4ya zNeqO?%Llt^ecn5jF|h6XX0I&v19N!C5Hm>@j50-~Xtt^4tJBF|Lhx*+VOU-#Xf49fylokvAGtPm zTW&e%^M*Y9)}94@>s{Zad8FR+r{%1OUkQf7i{`rf#bAt?C>m5;0^=?_=DdK^futc| z!kags-%xvfr1U3fbvYLon!N|L>zeC}FHb<}|4{2)cm?@+n!a!1pCDiF&xgjhG~`vA zqD=VgW3s^ZeRpo0tPI#UUUOY% zHG@5n{VMxfDY&yThgti^gG=?Fv$}pSxbGXU74BUMo*yOk>6RDIby4Md#B1xVCRiCVmG04>!?Uoot(PA6cx}3H~0Np62*5@cJvC zr~M^-Alaq-;^`;gY5zK7LFoohX8CCwODeeC3X>`|u7JO}sA9FnBJcyw_T2wHjl8Zc zy*O?mcoBjh^x0Fuo0N1gLz>`y{}x()mn?W$8^^P(R)RMovp+HA3wW)ab$eJ7z}p+W zCANrsA1OM2tPc}hG4RheNc%asr(L9+R&4-Be%_Lc zfEsUnAeas#E15m6pcjnwn^8`Yx$R{9VP*)Zw=Y~YwfqE%_0!P>4nIIq@}IAHi4W?< zdzAw3K2QatbKYg|1J$y!aqM3!s46SdRinx4SZ_?)^m9O6ax{FR)Vtj{E66PMdUmB{rx=U0`ji&t)B8$BkzXd-;FYH$oVQp_uLU=Uu&J`8@~&= z6F(I@bjtlziVv!8k)d-UgFKZ_yc+^;iAx%CaX1HlL4JT;N;q^K~@ z_XzTv=4gL14+52!>Ao%UDyZ*#dB(@dd46uX?w-mz!hZ&PXH}BFD=S8&V^%-t{Z|vz zR#k%`H^p>@1L*_T+W%Z-DuT(B>N>#A0kcs(HaS%etaIn&wRV04>&oh{yN9yDx;dZ+H1fWx3pujo*g*TOk^Czhr!vXuM%@b8JvHiTZW|V!QFN%_w(Et1gAD_ z$WUAiUYvc6ap(o`ukQGMbGADKPfAp6?8_h=UU+Wiu|9~bZCzG&cR+M~Gh20j*{h(#HI0z)`$Cg1F(J9#MeiR^>i%}0 z)`B`ONIZ0XA9+uOu}035faU( zp*kT^5El#DxZ&1+i~K#sREOsOV@1CgEh zd0vwX3a)*zl3QdkiVIcye$nmV~pUoC}DD*yfATfGo2yr9z-JqSV3&cZ$Yw;|9E zKT(}b&cm8#*GH1d!1ps7ta5M%@8?6ui1*Uq-THLA^#S1tG-ad0<1XMmkJ#wDQ4YLo zPpp3%2ZCP_llAJtMDQQ!-Ap;;4ZcFnU0MLa{qLIGGY*qJu&__rcZn^y-^S`>GSx`` zxKweNSqxr?nbn(KRl)-@d7j^h?vl)07q|a0_(mh+``r}5yDEJus_7!Q*Hgtyy5hlc zdfOgUbrzh>f8B2I9KpUba{TsYK3HS1oNrIxf_X`2R^Zm_pqE@|96Unii%%98yB2|V z_}|`?lbM89Gi^@2B|NomKshO{fcn?NsW^DOzBOLWDUr)wLJg3-}s_~~mE7=0^3l$bM!j#wucdn^a~ zH~lFck6J)mGUU-Q_6XG6{?AS3-Goo~Z|E}`0END+&#UbhDEfCPg+F4DKj6MON8*b7 z%bM2Lo+}_v^Nq!>DHX`6+;`C?;S+MtmL%R8Z;QP0r2FRV1;|^lpjPUP7jjeOW!i%E zkaP5Fo}DV;3F19$yMKIS#*KuAo;E<{&8{CgX`qIuKbH4M>)KV^JAsx25=h8s4x}LrJ zVmPQDn*Z8fbpm~k#X#PnWYC-X;y+%h1O3`p#ojr7U^u6FS;$TXv&56XPcW6#yUy23 zZ}x(18*N3+E(crLeMjwpI@k(ZHoGi)1kRICul3*B!TDmsG4Ce2lrV&AQ1cp`ztyeF zmk``I;jBjg?_)&Ydl`C;y$C$jm406B1K@r5Q(aCo2mkp`>c!!y5V{;oog;T11(g>x zCa<%GC^r9csOSzvHxC4aE15#PrGF!@Ne|-M3;i#5Rzcjl*iP+E93(sDx_eC~^FObc zv67_@N!HaI`>%@$4)A1z%{T~2=SI3g43^`e!MXc+^qO7V}+{-Z%XUDevzElyH~bdH$4h|VOCvD2dQ6GS=Xeyq`&Tb zJke%i0C+X4Gu1AT`VXEEw%wob`!3anm7ay*PcS$f-Y5gUPGrgH!_&Z5K7X((E(3gn z+>@r%Ch#8cgXZLnknfGZ>{+ifIPVPK-!_#7CvNa%7-b{TcQiaU8f$&P{3e`N+l&PS5 zg|;MLCOF>z(t`SfHDup0)z z%#*NQR)FzrzsvC(Trkwv%qZPL^aH`P_PntuqCY&PxXf@T`1!`yo8_}X^(*M3C@moU z>3rL4f}1Ilmj{DA$#G~+v9z@F2W8(XOS7Zvk$*8+G2!fQkRUe))W5F-;it-5|6wHtvvccQ)CU!muG9#BGZ1khjrU`WGxM^j?i0+ zT*ddT(VwZv*D%|s`g#F!r&sH*@>z$xgpG_%dp96IayHvTIuexN`Sb42r-17AI6v(6 z7trGJ5A97N{V?&F{JDmB&^^}Biuq#D?t5jtiSBACJ6RSzVCO$NgKCoX|HPPXoyCA?N$QEtNmeL`v}$)uy9wd@uNQ=} z$`DSkG1S{@3_--D;~F1j!7mRBJie|N{3j>(hwQise&3hXagmqEzRBiylP`n6Cay2Q zS3r1CSIoDQ1K@_8p4Mydis)|<*-@?6!G504{{4PGI9r-d*eDSF|CpTX)kSx}>CmYh zS$GXR#aA8H&BO=zu>9#9`v>41^w*wba-8TbRt?j>PXgEQz}+jnwcsu5{9g0G3jE75 zLo=-f;6Lc+Gn~AM9^tPpwd)Q9Zc-EIW#o7_372Ti*9MOl_o%C3HF$|Vo*(I?-zZ1l z7RK)ZS0-@dkFAzq|9+=fPIx_AN!Fm?Zx2`l3Kx=2w1Aa0F@y47y;FP6Ps>s%{T5K(gkGIhxE+)`^O6JD>xhnhdQ|}NA1J>f_BR%c1Jy8Y z?b1v6plw>El@vqtXalE~q^zr8xHzi#>>CHBy=d-mls6cW?rYkd4}qSRGBHY{1B|na zduZ-Nub#RxIXjf-Rfb0^LSEejqg&S3)#)$j6}LW0)eV8xrsgz%`fSiY9qIY>MGy4R ze4CZBa|w?qlw1DK0<`CwSB(W)5FFszzI1pzD6W+$&m4n6DgU}I@#9TUrp4}lvwt1( zCxs1l3R;lYSslpWjvzlG;z#Hv^7kpL>C$^9gR-Hx+jNsR@&}Lp9KYWOxpR-__NSdi z7TuOY?_Y;ZgM(FVV@zc2sb>|P*F>)J-94TQ$@^aUy<_$~F7jup9h> zksq2Brr;M9yep2|N#>yLN2`%o2v`jUI~>9w3@QF*e{41ig!)Te-l`K_ol&OkO#C>< zvaI)V+lel>v*cv?en^5uNtqh639rw$er`rq3o< zSOnYnO(OG}TO?~h=Jw&^-x`KF5chAq?54LA;#a1>jlZyo-tTd4SkDULU-Jy?-VuFZ zS@GMT(=`+dPKetYi+hJt$Zr@ zFa8~iKKm1V??=PO%$F12^JvjX;!p6>_vEhi?f{n_`D5P&qQ56TDq>&y0Cw)qsgu9{ z0DH}gg*jzJXUXf^%{8KdeVMZPtyBWoPxoK>3c}N)UdunsF#-2;`j*lhGVe17L^skO zg3FiQ{BAk%0lNp(mQDNseqHMAIsf&gl6vD;TdK(S@pp9h-e3sz)5l+@?13O@>b8i5 z2Ov37gMEfuA|8h$Je&?MwJIU@i-;*|)DBKjeVp`eaxjZUcMhsC$qg z3hbV=Z4Yh!g7tcQ<%)zFFb&M=hg8CdKG^*>n5zKlmmt@Wh1Q_%e(i1=UJk0Lp*GD>lk>!5kM7sb?GsX42-^g4)+oBY- zHV3RJ^}F6)iv-hqV#Q8Zc`&zUdIT4c=PNya^WD3^n#hQ?FCqNaSnX~%s}%Gh*`E?! zCg|42Zx{_k_foOmvn||*_?fd_VP_%e%*Fmw+vb6OJ-#ibOp54`v{~oBazS~pahdGN zN1$}a=;iF34@#`^f#au$F3=oeWBA?*`HdU@EnFT7itL@x(kuZeb5F+=cd3E0%y8Lm zi4yX89i!VP%MyJcG2HpkH)K7tFkMp9flP%nTYH`SaN|(f;`JZHk+(LLV$aw_{Jo+* z3r~fEqLA0RX4yUD^8yqpzl~C z;oR{6Lt1pb#fJDaF=BS+UOgeCM4~gD(Q^fnV0?Q1_J%!O4m#Q#hX?XuYaHz1RrBJ+~`iwFVG& z#7NJ%vx4~MY8{svf+1qHbiW*b72=d>;#xBWNKX42dR`*)_p0~$&F}X@LiZ^Z2eD_&PX7nS7#~!(E*+6tcsU5B2yc9?#P7nw-tcGN^ zao90Y9nlkiQwL@dKj9hO>;sSZ6V;?*ZG+G? zT)z6nVF)e@l=h?$oX)+q%@)JpA1M31bcocSeL%G8cT@0MZp=&BGZno2_NYy9`os@e zVw}z-eZc?YxR7U`z_}`FRAfyDM>esxbo&6&)7#O(44S_`Bw+RmX~{98Yw{VcSGkl*(L~f{d^w$hUkQsn`*{ww*hx( zeZ0*u(Ia2q%vgB$I`Jo}!uoykz%lFOhjm{BTeTtaOlumLrzGtQ#RRwC+1_(X>jY?1 zFITS7CixuiBZ*bsaiDb86-zA`05yf0GJo-FP+c#lkH!)Ge-cG3bSJ#L>nQKx)1_cA zK4x2w)q?TlQKvoa9hvJEyMA7^BiHRr^CxYj&dY@-X6hdV%hHHCPE8D!hS@nOduy;5 z?_G<9>0k~Nck|s1z|<|hGsBtaf-`6DOG?;I^oo`WpX6YI|9S6RS_w`mF>sna_?h5? z-> z6DluSB0!nk@$|Yc5&_aHbw;}WlY<|GKt7$x4>x0Cq!iOpw<;Z&*Ol@MC}Gq|ix>Sp=yc=c6Fo zV4X{0912z+edU}(atq(GH(k_rfKX?@|*ZwrP=8z-! zDvlo-3w^+AcRgv_n-9LH?fMT}8^IqR)@eD%8@ydB&*je`=QZ=&g=f*L!R?sXR`rtT z?}y$7xz|^Ky{SBC#-moSZ60La-CPfLq5Y|!@(aOvm`sa1%mnvtte*2N;w#iWu^(9a z2z(PeSJ6(wLr&f;SQ}_fzNcBihw`UFFnviu-(#Xn^nV*!+Oq=%<81xfb%+leci!vM z#(W4f-gl?TFN5HMX=i220&=`#w`O134sKIvPKQYWxY3FaQ*=RgPN!?#cVJh6zZxO&y74mJ#={3 zu!`i@^j5VVu_XC{=Q+p5-5|RDGy#2Xr6L%V_|*2CSA?(HbvPNTfwgSH{U3Qmmr`G? zD{Flk><9BxTsmZlK3U!+I&BWN{=|1?>jJ@gDbljBnFQ7}pFbVt4q$dRv>NKJBYnWs zORIka7>XaOFF280oOrv|%Zvj=x4bJeL1P(c0@w3a4z{4S>jbZ-5k61f8f`iDnCO6C z={Mfb24!KlL&^MRg7f_Xf8M?V3P&?uYw9p4DGBMB_k)rDQ0xA|Pp6PS_m1I_G=JpM z^t-kgD{BD*Za~s2*2MOtlgjm%4)X3#ypbm z>y-HvOpO3lx;-`0!yMG{`6H2i`^ot#7+CMJ1k{!f;TCJVK<(QbzEypc?*dW3 z>I3%An-H^osOR$LKw{j}S-NB$B#ECdL`D<*{XAuKt*#LyU$<(FX~?3`ntvo^7t!?} z#uV1fR3`es{l98~L=Uu$xe=;O^nrC%ZP|V{q+Xx(XuA---z(Jn=m^0DaVva%Jslyc zvM~9lrbBdl#=^t0{t&5|?!J1z3Zkzb&0;m8JEX{6zqZAN=nax2l|w`yxVR+feaR@{ zA@AvBJLwR=e%oWR-4S8~pJMOuCB(NF`>-JA6AErGU4OKV`2IIH^j&Et`sQ5kSgErn z5Nc^~Z9MfL&^3>_zKZ1kdc~SypO_FxUm5ChUjzOdr`OltT!O%0r}Nr0I{05^UX--Q zfL}GX`0&l=5bP1()*B@H>3NS&U(`rm@7Otq6ykrghivvGS^0uJI_O;Q>FN53$Pv(35&UL~0 z#HX~=KQXS;1;Sg0HV0%pN5P|qpVJz9P+&4uqN7ao3^iZhenn;Q?9NIB7o>vgqTuFC za#)-VEnkxTzJfia`tsTEFfcu$;@c+?elBw_v_Q5DjIYyta@5a)p{KvkMaU+4K<|+N z#T}rf?wu-olIZLQlP(-gUr74FLe23t1P81rR@F}H1a;dP;}s7VgI4PD%i68e`|I)$uH~IsHvMSAbEv% zRxT&Bz#dn*v`3Hy)~N4=_?sNC4$s#pI%^B&nV%aE&)ER_o(EI5vq=8vZu75~Q}2N` z^If3JTY|rTm~Ndm=nBfXWQ#3|-N=8gmaTeVJt)=9)m@P!-*9K^oRYId$1I#1Axvxo z#V;{t&rmGk17- zLFVLO_o~X8ODO1V`4LT743R^aInK5~RAld!>}*c@fV5Ym?H!08OnJHNJgH+J6FKoB zqVv_uKaE|`P4GUgrb|B?k`_y*NY2wRR?c}Xz`pG4>1Oj(tf7wrb5ye+9XV+ zdWe^QRP3>(L432P-BKZM`{!r~$*K8o#X|R8b zEb;%%#||_$?uKxK@wzq{p-(^p7qk|N<=gv9R z{A~cI?1^;I>|St^rRL_R+LIjMQoC~v#6OItD)Iw!AxQJO7F9PHf>^gVNnfJD-|+ae z6vF~MN=aE_TMhX1imas@A3{(TW5D`E`tcps+{UFKSC=!rWdhq?cP z;D;jk$ye__@;eT$t+w`0%fH}E*&q4QjNt2}J<@fmLnH^(@qF9_lB)^c?fq8yJm?Ka z?tbt!0OM_lo>t)}Ft*jKX}@~~jH3&xHRXv99r5shV-?BmAFb4|wtfQI_=+OG^qZi* z8Q!r+j`(mN9UM>FT>@?CJyZFMWd5h=S{+}v9jsluJze9&z}|avrO?q0oKw$r=m!VD zc|;;5A9ZfethV#^o?Jj_9_l;{8#}>%(=^K8u2d+GgrnOI|izeO3S8@ zGEnW+IE9m`M6aOcP_sz>M*eVBe0mZn0hyfzPYJJy*uTT=)TIAjfAGzt8OR@}xbD%q z<;d4cePd=w{QDUPcVAmT^!@cCM;3d_BX9b)NuCy@KfGv4@4t1Hi9)%luj9T+oZ8~H}J ziV_`XTM&OeHr}*Xh2-~m$@Sj0Gl>r0)%7Nd==ZnY6wpY1R^lqKC>I=tSbVr4()&5Y zTP=dUOQIn*`?p@p$c^OuUdEct7=iey)?2D7*>9QmxQQbRamS6C$61`4$PSfZ7E8_&UvP=UYB2C6(FIfeZ>#MAUnm#7eig~@ zWOgbrU1x$PoMZRZT?4!yY_GkA2f*8|^x)dnrQnv{_NuyX2Hq@_;jw*Nh~Iz5(x>St z@%k z76h3*o1WjX5GGuYAALY_%XMxKp4LqukNqM3AHnv)4=vmTDq;h44ebrb&e&QzyQ?mBgY~rsN4MtXfW`kL3b@Rh%QZJjnJeu?7E$Gvu zZcmDi2F-lG(&p+?&{iG~>Wb|FUCPOzCXlRmIv3QiNJMb?>;4qIrfHx)Y>1dJ`UR95 zi_SUQlXV5J8ywC~A^v4{<`P$pouFLb=@U?62a1}*E{!(}kbmjdx~ayqk!Ss#b%{L- zd4YV@1Tuf}SGpZqc7x=Ow1X~8Blv(?%ChqhkRj)TQ{z)l=J^Dl4U1KSKud{C`Rq6d zTEmGGn?&WHyNuhr_h&8WuP$!W5Ai2HhO(LTFM{i%!rgwfp8|7#rxZ<*`lSyL zzowrP?-Z2*R^h+A@02(&B`0NPKP2aOS6zSl6_V>)_I<2mg(0c`Gf_*npC# zAo`!ti}x?2q9C?cRFip2@^>dD9qap743X2pJMHsTAc{}haO@b-^VY2HydF(_dpof4XR?|b};`uUXSM@QV2Pr&AkprREdgZbOybHlinHf1TD6eIEQ<0nLB4?-HGV^j_+q z4Z#myitK?wqB9yU7px8g-%Z|f)`U;sXOEv*vi>Xt`-;7F7fC}n+38?kKiN;0FFa22 zuKb7{=9_kt{^N4kRk~XOPED5ni<4)-zT`h|%hEWoC#mSQWMzUGWuW5x$qS6mw`vXC zg(OGrK2tY235-@H+B~ZuFm0SlC$F^tb8^&U^|moEZrUjYvNVZ*7x;4i$O14{lb7R- z-dwO#|D~(DWrN-A-XA#k8aT|1&h;wfx}Ef|dut(C$8>UzXpx^6*ioTMX-MQX-x)P7%hOar$ z?Ll$lKEfwr00b@D7NZ5ZjK!xJm&JOQ;uYQZ++N3 zP%Hsuc;@rgIoF78pnc9{>sI8e*1S&|YeF7>cDQku5Attq>U7$^7?dfKRSbtzK-JvT zE?j;KG~Ma*i}X7{v!Nwl5|MRN)N0F=>~_%GT6f;zTM*noG2}M8mE;|%GGV3KB-i({ z{&rwAS(m355b%fOwf21t*}GU9ti|KLxl#%KFHxJnc{mu%=T@`#8{GvnJ3)Pv3Xn;zO0co10@o@+iOkZ0G0f0QbyzueD*s@4LFZhA#uz>h|VclyjZ;qbonJj z4~CatEF|@Q{ATs)Wu2t%C(fEZ&_{BLhM!*CBgZ3uO@4eQAngCN!cd>!ezVL*%8vIC z8Y(hV{*8lhSO3E;4@uve#iA^d z)BEu{iJ$0fWKLh;pzxDjDID=OgD3VcV zCiT5odT&P(`0R-jU%ys^aDi;b(IaJ~zE7qfp$H&Q&%Po(O7w^`ulmAv=7OKPWM@#T zG6V~wUbde)2f>HaU*#K1Ah6&rJ~ox;mB&u%Y+mLGUPgcLRT(Fe3uI58wY40ax9z3E z0}|J@ky7A%|k{C%INkn8KuPG6D(XX%?=*F882X4?C? ztt8LQC}>Z3rfvkrAN@SVX&S^Qn2_W1VHKEx-JQ$SJ;73!AK3Je3)anxn@9Ctg1x0< z*RLJK2QBM$D%yO2%x_(O_~$tUk9?ebFn2ZaKW|CjT}S#rmvxbbaXi>(e=HG~{{=fq zuFBErBiNeLuB@K+87yiq)2^HNT$jGz@_0^slo`6m_YDSvwf$C;bHYb3bEe;&GqwcG zed4{8B2zHqW%bVAhy_Ee{U~f9nWsBfsPF@SfD!lZ>8|_RKwsn$>85=Y)T2W$WPN); z@oxQC=t+G4Af@tP6QUQ^>sv1FivmR~CB1QR3aMvmwUfXB`4x#~Ru$>UyZvWF$dAp0 z4@8-7cv6e}zn>h>Z5~4Y&>@r0zOA4*G!G2S`T%O%9VI_EqEGIa^3H+e*=V+hDdyKI zN&fMM!3QSs`wuSX+*n2d-H?*PwITef{QePVxn3}RA4REJ$Ajhj^qyy|E?9fHmctEv zFi+PGHwBRAKXc{=ElVP}V87kqCmLAyA0*dE(ZIPj%C>$_^nDHYtkYrV!1=hp&2i-! zQuq7~v0upg)s@eDbgvA6&xw!yL)JU-&r?+Uw>|*>x1aZuCt?UXGcW!=Nv=Qj-Rlyj zZGr$lkM&nn5?s2XJieN&_vwk4`SuoB59fDet@Rs%SJmv=xx}{=gp?W|7@P!Qxn;sD zsbP{2JT*Tl>oW?P)PC&X^`W5T4L8Pw;Pe%5DHFo(5+1MQBp3G-1qBOEO<6+b^Y}Ui zC2wztocq_6s+K}z9n?wh!Wa+ zjRH(iK>u{mcicA!o0YU~>5v?t`qzE(g?}LMO|v>ao6P5z3+nA{W%+9 z>8t-p8~j7zO39vt$9w*{Hc49nyhVdy_mpmf*U;8g9Yo&uW}jSU=Pw9^uXE3L-vs}2 zs5n&GPHEZ=61mJmSkmyPSLoj=Rv+q#y$S zx<*j40?8?q+gnOIkoAL09xfTpoJRD2qXXsoQQ$^S7?¥rk^U0Uo!@=7trisbm% zv*vI#ycUD~GA7uRbqMUAe}v4=5U_+oFRM=@U{>|jX+3xb)+FD0%XR*`M~&wCiM7gXcvw)wPZP)y=aip#$tziT0P{d*zt2bW!1wP67HX~LEA zJ%>TLFk#k~O>2>VAy478BGCn{{Jx3SkpDa2Y^H5&6hZvLY*DLOB=Y;Fmpru+fwJ@L zRtJ)|qMn~#qyO_f(f`&r>`D1Va7FXD9DR~gY`l>5`50NRP_c19{MZQ8oTclxX;DC% zwf`WNv}Tzi^FN&Uaj?GHUi z`fP!&CjE6HxYX!$*EDTkO8EYq{WjE} zsstzcd@hzd4S|ib68zth>$)^>y&CbCyT+}V8>Wm<#0bX62-N3yIGczb4hG zeGK9QYHPpuH9(a6`q#UZ42Y~2U)5C;Ks3F>2?_EjSRt1mnNbbltD47^YTF+vuaDoTsDYVWT6-X!T8Kp?iNJ|G;PKx95u4FFMl_Y$c@WIbR>VOS$sKPr%VnSZ04_yBj?jg?GKgZEc8*HM$`k5Y+i z1lyz`a9p?W$%(z-UwmBptkMU3-XEt4$LE2c*c!EAp9lC0q}1*d6FgGZJXt$~=m_sd z*b8b2KN$Dn&h|}YJ@IELgXY0%aPJvCTjfaB5y|YesdbwUu5Y4Q#v&hZcYSlzBzXkR z7D%~I{0`2d!PAS6kaf*kHF2}zOaIg5)1&Rly3*Lll3pv4C)&Du(b?i@U^A5mKkJj6 zc}DLGvn5<`)zjm~MU(4r?pSq#?q!mLoImC8D>A3-ZmyV@`3>C7uH*Mu^?_6I<0pG% z0yxn%{|80a8BYZp#Sx;6lw?J=jEqWVMjDigBuOGEDMCUrB4s8kA?tGYFp^Z{s8kXe z*;!c?p&}#VJ@2Rcqj0(RIpe<`rttYFpv>CV8~(Gyd4lJW>(L!Rx%S+UAX_{7}$OZ%2;(O7lc?>G?lEc=0n_lH)QE)Xrafd<1nrxtrVKT5;dsmipvdH0B}@ zpVF*^Q8z4aPBd&s{C|p*pB?9!?226#jz;+Lm_IVE0C|m#g4Z4=LSC|$&8fAh|7ohy z{@}(3gr`q+#=N8;Uq$(Jvr-`t{$$A%{^A5Y@v)`V?ubM7=`5yV4#FBQqbCh4ApWu8 zNa4b{CcerIp5h!(fBczV7V@Q=_t2Vz`>4!nO343Y`6 z*LoGuZJcaRjqeBg*zyUH`Yd2nx9@1DARac;C;h?>=i&f zqGE=9ZJW=~?|!T^;SXP^-+d>9^3?4%#uzv&&;g9EGGLy?yx_}?7n!W;lT_O~vB0f_e{1#_D%La|To z*z65F_eURGD{){$zv3Hmrx4<1Kf?EP?UaDR)M8KTh(ciTNu&nwqwkSG3oJT&4s|jF zk=BFgf40s4=lN9_m}}F#m_*bAsrm|=ZpYuFQe(H1?}*9n@U6OfTf)IL`I&u14KZ&r8u3tTQ=xttRSSfq6

XT~(|@h$9@d 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

Ge{4L@E4asUDn~dlLayXc)rC~ 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 QVE2y>Ma5l5#-$_v2L;AG(*OVf literal 0 HcmV?d00001 diff --git a/no_unit.nc b/no_unit.nc new file mode 100644 index 0000000000000000000000000000000000000000..4047ca5cbc0882ed8284621e674d16a7d306070e GIT binary patch literal 133580 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%0D+$$P3 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 literal 0 HcmV?d00001 diff --git a/parallel_save_test.nc b/parallel_save_test.nc new file mode 100644 index 0000000000000000000000000000000000000000..45f7ae1cc0af1ff55831ed9147dd29c716bf27ee GIT binary patch literal 133640 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

h9cxR~{3rZ5rw<1C3dg-zd%82pu4U<>O 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 X%hf@=r7}&{1iz(up1*0Fc`E)N=jN$g literal 0 HcmV?d00001 diff --git a/test/test_scan_line_alignment.py b/test/test_scan_line_alignment.py index 650f6c93..e542fd08 100644 --- a/test/test_scan_line_alignment.py +++ b/test/test_scan_line_alignment.py @@ -44,7 +44,7 @@ def test_scan_line_align_removes_offsets(): h[i, :] += offsets[i] topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align() + aligned = topo.scan_line_align(direction='y') # Check that aligned heights have reduced line-to-line variation aligned_heights = aligned.heights() @@ -65,7 +65,7 @@ def test_scan_line_align_removes_tilt(): h[i, :] = slope * y topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align() + aligned = topo.scan_line_align(direction='y') # Check that slopes within lines are reduced aligned_heights = aligned.heights() @@ -75,17 +75,22 @@ def test_scan_line_align_removes_tilt(): assert abs(slope) < 0.001 -def test_scan_line_align_y_direction(): - """Test scan line alignment in y-direction.""" +def test_scan_line_align_x_direction(): + """Test scan line alignment in the (default) x-direction. + + The first array index is the x index, so scan lines running along the + x direction are *columns* of the height array; each column has constant + y and is acquired as one fast scan. + """ nx, ny = 32, 32 h = np.zeros((nx, ny)) - # Add offsets to columns instead of rows + # Add a per-scan-line offset; each scan line along x is a column np.random.seed(42) for j in range(ny): h[:, j] += np.random.randn() * 5 topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align(direction='y') + aligned = topo.scan_line_align(direction='x') aligned_heights = aligned.heights() col_means = [aligned_heights[:, j].mean() for j in range(ny)] @@ -106,7 +111,7 @@ def test_scan_line_align_preserves_features(): h[i, :] += np.random.randn() * 0.1 * np.arange(ny) / ny # Tilt topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align() + aligned = topo.scan_line_align(direction='y') # The bump should still be visible after alignment # (center should be higher than corners) @@ -132,7 +137,7 @@ def test_scan_line_align_masked_data(): h = np.ma.array(h, mask=mask) topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align() + aligned = topo.scan_line_align(direction='y') # Should complete without error aligned_heights = aligned.heights() @@ -153,7 +158,7 @@ def test_scan_line_align_pipeline(): topo = Topography(h, (1, 1), unit='um') # Should work in pipeline: first align scan lines, then global detrend - result = topo.scan_line_align().detrend() + result = topo.scan_line_align(direction='y').detrend() assert result.heights().shape == (32, 32) # The pipeline should be preserved @@ -169,7 +174,7 @@ def test_scan_line_align_mode_mean(): h[i, :] += np.random.randn() * 5 topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align(mode='mean') + aligned = topo.scan_line_align(direction='y', mode='mean') aligned_heights = aligned.heights() line_means = [aligned_heights[i, :].mean() for i in range(nx)] @@ -182,7 +187,7 @@ def test_scan_line_align_periodicity(): topo = Topography(h, (1, 1), unit='um', periodic=True) assert topo.is_periodic - aligned = topo.scan_line_align() + aligned = topo.scan_line_align(direction='y') assert not aligned.is_periodic @@ -195,7 +200,7 @@ def test_scan_line_align_coefficients(): h[i, :] = 2 + 3 * np.arange(ny) / ny # Same tilt for all lines topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align() + aligned = topo.scan_line_align(direction='y') # Access coefficients coeffs = aligned.line_coeffs @@ -229,7 +234,7 @@ def test_scan_line_align_pickling(): h[i, :] += i * 0.5 topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align() + aligned = topo.scan_line_align(direction='y') # Trigger computation original_heights = aligned.heights() @@ -259,7 +264,7 @@ def test_scan_line_align_degree_0(): h[i, :] += 5 * t topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align(degree=0) + aligned = topo.scan_line_align(direction='y', degree=0) # Offsets should be removed aligned_heights = aligned.heights() @@ -293,7 +298,7 @@ def test_scan_line_align_degree_2(): topo = Topography(h, (1, 1), unit='um') # With degree=2, quadratic term should be removed - aligned_deg2 = topo.scan_line_align(degree=2) + aligned_deg2 = topo.scan_line_align(direction='y', degree=2) aligned_heights_2 = aligned_deg2.heights() # Check residual curvature is small curvatures_2 = [np.polyfit(t, aligned_heights_2[i, :], 2)[0] @@ -327,7 +332,7 @@ def test_scan_line_align_degree_3(): h[i, :] = a * t**3 + b * t**2 + c * t + d topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align(degree=3) + aligned = topo.scan_line_align(direction='y', degree=3) # Check coefficients shape assert aligned.line_coeffs.shape == (nx, 4) @@ -362,7 +367,7 @@ def test_scan_line_align_pickling_with_degree(): h[i, :] = np.random.randn() * t**2 + np.random.randn() * t + i * 0.5 topo = Topography(h, (1, 1), unit='um') - aligned = topo.scan_line_align(degree=2) + aligned = topo.scan_line_align(direction='y', degree=2) # Trigger computation original_heights = aligned.heights() @@ -399,7 +404,7 @@ def test_scan_line_align_scanner_bow_correction(): topo = Topography(h, (10, 20), unit='um') # Correct with degree=2 - aligned = topo.scan_line_align(degree=2) + aligned = topo.scan_line_align(direction='y', degree=2) aligned_heights = aligned.heights() # The parabolic bow should be removed diff --git a/test_der.png b/test_der.png new file mode 100644 index 0000000000000000000000000000000000000000..950aadf76ed4a052f6437c5409526d2a1e984f80 GIT binary patch literal 18692 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�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 literal 0 HcmV?d00001 From 8b5573f680788cc49aa0108ef2683bab63e16167 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 07:37:59 +0000 Subject: [PATCH 05/23] BUG: Fix origin handling in nonuniform analyses and scale-dependent statistics - Nonuniform/Converters.to_uniform: The uniform interpolation grid always starts at zero, but the parent scan's x-coordinates can start anywhere; np.interp clamps outside the data range, so scans with an offset origin produced garbage heights (and thereby garbage FFT-based PSD, ACF, derivatives and reliability cutoffs). The interpolation points are now shifted by the parent's origin. - Nonuniform/Detrending 'slope' mode: The rms-slope-minimizing constant slope is the length-weighted mean of the derivative, (h[-1] - h[0]) / L, not the plain mean of the per-segment slopes; and the offset must remove the mean of the *tilt-corrected* profile, which requires the -a1* correction for scans not starting at x = 0. - Nonuniform/PowerSpectrum: The Hann window was evaluated at absolute x instead of x - x.min(), defeating leakage suppression for scans with an offset origin. - Generic/Curvature: The scale-dependent curvature stencil 8A(lambda) - 2A(2*lambda) was implemented via index arithmetic that is only valid on a linearly spaced ACF grid anchored at zero. The default arguments deliver a log-spaced grid, and reliability trimming shifts the origin, silently pairing wrong distances. A(2*lambda) is now obtained by interpolation, which is exact on linear origin-anchored grids and correct on any other grid. Verified against the analytic curvature of a cosine profile and against artifact-free ground truth in the tip-artifact tests (error drops from 48% to 6%); test tolerances that were calibrated against the old behavior were updated and now additionally compare against the unartefacted topography. - Generic/ScaleDependentStatistics: When called with scale_factor, the reported distance was scale_factor * mean(physical_sizes) instead of scale_factor * n * mean(pixel_size) - too large by a factor of nb_grid_pts/n - and this wrong distance also fed the reliability mask. A list-valued distance no longer crashes the reliability check. - Uniform/Derivative: interpolation='disable' with a fractional scale factor silently truncated the stencil step while normalizing by the fractional pixel size; the guard compared against the misspelled option 'disabled' and was unreachable. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/Generic/Curvature.py | 48 ++++++++++++------- .../Generic/ScaleDependentStatistics.py | 9 +++- SurfaceTopography/Nonuniform/Converters.py | 9 +++- SurfaceTopography/Nonuniform/Detrending.py | 20 +++++++- SurfaceTopography/Nonuniform/PowerSpectrum.py | 4 +- SurfaceTopography/Uniform/Derivative.py | 2 +- test/test_nonuniform_line_scan.py | 37 ++++++++++++++ test/test_scalar_parameters.py | 25 ++++++++-- 8 files changed, 128 insertions(+), 26 deletions(-) diff --git a/SurfaceTopography/Generic/Curvature.py b/SurfaceTopography/Generic/Curvature.py index e0f183a7..c9357dea 100644 --- a/SurfaceTopography/Generic/Curvature.py +++ b/SurfaceTopography/Generic/Curvature.py @@ -32,6 +32,34 @@ from ..HeightContainer import NonuniformLineScanInterface, UniformTopographyInterface +def _curvature_stencil(r, A): + r""" + Evaluate :math:`B(\lambda) = 8A(\lambda) - 2A(2\lambda)` from a sampled + autocorrelation function. + + The autocorrelation may be sampled on an arbitrary (e.g. log-spaced or + reliability-trimmed) grid, so :math:`A` is evaluated by linear + interpolation. This is exact where :math:`2\lambda` falls onto a grid + point, in particular everywhere on a linearly spaced grid that starts + at zero. + """ + valid = np.isfinite(r) & np.isfinite(A) + r = r[valid] + A = A[valid] + # We need A(2 lambda), i.e. we can only evaluate B up to half the + # largest sampled distance; distance zero is excluded because the + # curvature expression divides by lambda^2 + mask = np.logical_and(r > 0, 2 * r <= r[-1]) + rm = r[mask] + B = 8 * np.interp(rm, r, A) - 2 * np.interp(2 * rm, r, A) + # Truncate at the first negative value + nz = np.nonzero(B < 0)[0] + if len(nz) > 0: + rm = rm[:nz[0]] + B = B[:nz[0]] + return rm, B + + def scale_dependent_curvature_from_profile(topography, **kwargs): r""" Compute the one-dimensional scale-dependent curvature. @@ -62,14 +90,8 @@ def scale_dependent_curvature_from_profile(topography, **kwargs): Curvature. (Units: 1/length) """ # noqa: E501 r, A = topography.autocorrelation_from_profile(**kwargs) - n = (len(r) + 1) // 2 - r = r[1:n] - B = 8 * A[1:n] - 2 * A[2::2] - nz = np.nonzero(B < 0)[0] - if len(nz) > 0: - n = nz[0] - # Important: The following expression relies on the fact that r is equally spaced! - return r[:n], np.sqrt(B[:n]) / r[:n] ** 2 + r, B = _curvature_stencil(r, A) + return r, np.sqrt(B) / r ** 2 def scale_dependent_curvature_from_area(topography, **kwargs): @@ -102,14 +124,8 @@ def scale_dependent_curvature_from_area(topography, **kwargs): Curvature. (Units: 1/length) """ # noqa: E501 r, A = topography.autocorrelation_from_area(**kwargs) - n = (len(r) + 1) // 2 - r = r[1:n] - B = 8 * A[1:n] - 2 * A[2::2] - nz = np.nonzero(B < 0)[0] - if len(nz) > 0: - n = nz[0] - # Important: The following expression relies on the fact that r is equally spaced! - return 2 * r[:n], np.sqrt(B[:n]) / r[:n] ** 2 + r, B = _curvature_stencil(r, A) + return 2 * r, np.sqrt(B) / r ** 2 # Register analysis functions from this module diff --git a/SurfaceTopography/Generic/ScaleDependentStatistics.py b/SurfaceTopography/Generic/ScaleDependentStatistics.py index 64c2c66b..10e0b198 100644 --- a/SurfaceTopography/Generic/ScaleDependentStatistics.py +++ b/SurfaceTopography/Generic/ScaleDependentStatistics.py @@ -128,7 +128,13 @@ def scale_dependent_statistical_property(self, func, n=1, scale_factor=None, dis d = self.derivative(n=n, scale_factor=scale_factor, distance=distance, interpolation=interpolation, progress_callback=progress_callback) if distance is None: - distance = scale_factor * np.mean(self.physical_sizes) + # The scale factor scales the stencil of the derivative, i.e. the + # physical distance is scale_factor * n * pixel_size (see + # `Uniform.Derivative.derivative`, which converts distances to scale + # factors via scale_factor = distance / (n * px)). Note that scale + # factors are only supported for uniform topographies, so + # `pixel_size` is guaranteed to exist here. + distance = np.asarray(scale_factor) * n * np.mean(self.pixel_size) if self.dim == 1: try: if scale_factor is not None: @@ -166,6 +172,7 @@ def scale_dependent_statistical_property(self, func, n=1, scale_factor=None, dis short_cutoff = self.short_reliability_cutoff() if reliable else None if short_cutoff is not None: + distance = np.asarray(distance) mask = distance > short_cutoff * n / 2 if mask.sum() == 0: raise NoReliableDataError('Dataset contains no reliable data.') diff --git a/SurfaceTopography/Nonuniform/Converters.py b/SurfaceTopography/Nonuniform/Converters.py index 4c57aabc..34268d9b 100644 --- a/SurfaceTopography/Nonuniform/Converters.py +++ b/SurfaceTopography/Nonuniform/Converters.py @@ -161,8 +161,13 @@ def positions(self): def heights(self): """ Computes the rescaled profile. """ - x = self.positions() - return np.interp(x, *self.parent_topography.positions_and_heights()) + parent_x, parent_h = self.parent_topography.positions_and_heights() + # The uniform grid starts at zero, but the parent topography's + # x-coordinates may start anywhere; shift the interpolation points + # by the parent's origin. (np.interp clamps outside the data range, + # so without the shift most of the grid would be filled with the + # first or last height value.) + return np.interp(self.positions() + parent_x[0], parent_x, parent_h) # Register pipeline functions from this module diff --git a/SurfaceTopography/Nonuniform/Detrending.py b/SurfaceTopography/Nonuniform/Detrending.py index 61582d4f..896cad2b 100644 --- a/SurfaceTopography/Nonuniform/Detrending.py +++ b/SurfaceTopography/Nonuniform/Detrending.py @@ -88,6 +88,24 @@ def polyfit(self, deg): return np.linalg.solve(A, b) +def _slope_detrend_coeffs(topography): + """ + Compute the coefficients [a0, a1] that minimize the rms slope of the + detrended profile and center it around zero. + + The constant slope that minimizes the rms slope is the length-weighted + mean of the derivative, i.e. (h(x_max) - h(x_min)) / (x_max - x_min). + (A plain mean over the per-segment slopes would weight each segment + equally, irrespective of its length.) The offset a0 removes the mean of + the tilt-corrected profile; note that the trend a0 + a1 x is evaluated + at the absolute positions x, which do not necessarily start at zero. + """ + x, h = topography.positions_and_heights() + a1 = (h[-1] - h[0]) / (x[-1] - x[0]) + a0 = topography.mean() - a1 * (x[0] + x[-1]) / 2 + return [a0, a1] + + class DetrendedNonuniformTopography(DecoratedNonuniformTopography): """ Remove trends from a topography. This is achieved by fitting polynomials @@ -104,7 +122,7 @@ class DetrendedNonuniformTopography(DecoratedNonuniformTopography): # same as 'rms-tilt', deprecate 'height' in the future 'height': lambda self: self.parent_topography.polyfit(1), 'mad-tilt': lambda self: self.parent_topography.mad_polyfit(1), - 'slope': lambda self: [self.parent_topography.mean(), self.parent_topography.derivative(1).mean()], + 'slope': lambda self: _slope_detrend_coeffs(self.parent_topography), 'rms-curvature': lambda self: self.parent_topography.polyfit(2), # same as 'rms-curvature', deprecate 'curvature' in the future 'curvature': lambda self: self.parent_topography.polyfit(2), diff --git a/SurfaceTopography/Nonuniform/PowerSpectrum.py b/SurfaceTopography/Nonuniform/PowerSpectrum.py index bc457bca..d5548db8 100644 --- a/SurfaceTopography/Nonuniform/PowerSpectrum.py +++ b/SurfaceTopography/Nonuniform/PowerSpectrum.py @@ -106,7 +106,9 @@ def apply_window(x, y, window=None): """ if window == 'hann': length = x.max() - x.min() - return (2 / 3) ** (1 / 2) * (1 - np.cos(2 * np.pi * x / length)) * y + # The window argument must be relative to the start of the scan; + # the x-coordinates do not necessarily start at zero. + return (2 / 3) ** (1 / 2) * (1 - np.cos(2 * np.pi * (x - x.min()) / length)) * y elif window is None or window == 'None': return y else: diff --git a/SurfaceTopography/Uniform/Derivative.py b/SurfaceTopography/Uniform/Derivative.py index 44b1c3bb..a92e7a11 100644 --- a/SurfaceTopography/Uniform/Derivative.py +++ b/SurfaceTopography/Uniform/Derivative.py @@ -446,7 +446,7 @@ def derivative( interpolation_required = ( np.any(s - s.astype(int) != 0) or interpolation == "fourier" ) - if interpolation_required and interpolation == "disabled": + if interpolation_required and interpolation == "disable": raise ValueError( "Interpolation is required to compute derivative at the " "desired scale but is explicitly disabled through the " diff --git a/test/test_nonuniform_line_scan.py b/test/test_nonuniform_line_scan.py index f78b3c6c..2d45978c 100644 --- a/test/test_nonuniform_line_scan.py +++ b/test/test_nonuniform_line_scan.py @@ -165,6 +165,43 @@ def test_detrend_slope(file_format_examples): assert not t.detrend("slope").is_periodic +def test_detrend_slope_coefficients(): + # The rms-slope-minimizing constant slope is the *length-weighted* mean + # of the derivative, i.e. (h[-1] - h[0]) / L, and the offset must remove + # the mean of the tilt-corrected profile + t = NonuniformLineScan(x=[0.0, 1.0, 10.0], y=[0.0, 1.0, 1.0]) + d = t.detrend("slope") + a0, a1 = d.coeffs + np.testing.assert_allclose(a1, 0.1) + np.testing.assert_allclose(d.mean(), 0, atol=1e-15) + + +def test_detrend_slope_origin_invariance(): + # Detrending must not depend on where the x-axis starts + x = np.array([0.0, 1.3, 2.4, 3.5, 4.8, 6.0]) + h = np.array([1.0, -0.5, 2.0, 0.7, -1.2, 0.3]) + for mode in ["center", "height", "slope", "curvature"]: + r0 = NonuniformLineScan(x, h).detrend(mode).rms_height_from_profile() + r5 = NonuniformLineScan(x + 5.0, h).detrend(mode).rms_height_from_profile() + np.testing.assert_allclose(r0, r5, err_msg=f"mode {mode}") + + +def test_to_uniform_offset_origin(): + # The uniform grid starts at zero; the parent scan may start anywhere. + # The interpolation must be shifted by the parent's origin, otherwise + # np.interp clamps and fills the grid with the boundary values. + x = np.array([5.0, 6.0, 7.0, 8.0]) + h = np.array([1.0, 2.0, 3.0, 4.0]) + u = NonuniformLineScan(x, h).to_uniform(nb_points=4, padding=0) + np.testing.assert_allclose(u.heights(), h) + # PSD of the interpolated scan must not depend on the x origin + t0 = NonuniformLineScan(x - 5.0, h) + t5 = NonuniformLineScan(x, h) + q0, C0 = t0.power_spectrum_from_profile(reliable=False) + q5, C5 = t5.power_spectrum_from_profile(reliable=False) + np.testing.assert_allclose(C0, C5) + + def test_detrend_curvature(file_format_examples): t = XYZReader(os.path.join(file_format_examples, "xy-1.txt")).topography() assert not t.detrend("curvature").is_periodic diff --git a/test/test_scalar_parameters.py b/test/test_scalar_parameters.py index 3575b145..05dfbfbe 100644 --- a/test/test_scalar_parameters.py +++ b/test/test_scalar_parameters.py @@ -682,8 +682,21 @@ def func(dx, dy=None): # Makes sure there is a significant difference by removing tip artefacts, so we are doing a meaningful test assert hrms_r[2] / hrms_tip_artefacts_removed[2] > 4 - # now we test that we indeed removed the tip artefacts when integrating the PSD - assert abs(hrms_f_reliable[2] / hrms_tip_artefacts_removed[2] - 1) < 0.2 + # The tip-artefact-cleaned scale-dependent curvature must match the + # scale-dependent curvature of the original (unartefacted) topography at + # the same distances + r_clean, k_clean = t_artefacted.scale_dependent_curvature_from_profile( + reliable=True, resampling_method=None + ) + r_ref, k_ref = t.scale_dependent_curvature_from_profile(resampling_method=None) + np.testing.assert_allclose( + np.max(k_clean), np.max(np.interp(r_clean, r_ref, k_ref)), rtol=0.2 + ) + # PSD integration weights small scales differently than the + # second-derivative stencil (whose transfer function rolls off towards + # the stencil's Nyquist frequency), so these two measures of the rms + # curvature over the reliable band agree only roughly + assert abs(hrms_f_reliable[2] / hrms_tip_artefacts_removed[2] - 1) < 0.5 def test_integrate_psd_from_profile_remove_tip_artefacts_areal_scan(): @@ -916,8 +929,12 @@ def func(dx, dy=None): # Makes sure there is a significant difference by removing tip artefacts, so we are doing a meaningful test assert hrms_r[2] / hrms_tip_artefacts_removed[2] > 4 # now we test that we indeed removed the tip artefacts when integrating the PSD, - # i.e. that reliable PSD integration is approx equivalent to reliable SDRPs - assert abs(hrms_f_reliable[2] / hrms_tip_artefacts_removed[2] - 1) < 0.2 + # i.e. that reliable PSD integration is approx equivalent to reliable SDRPs. + # PSD integration weights small scales differently than the + # second-derivative stencil (whose transfer function rolls off towards + # the stencil's Nyquist frequency), so these two measures agree only + # roughly + assert abs(hrms_f_reliable[2] / hrms_tip_artefacts_removed[2] - 1) < 0.5 # Assert the container gives the same results: c_artefacted = InMemorySurfaceContainer( From fcf0bdabecc20875384424e8d07cd0786e0a181c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 07:37:59 +0000 Subject: [PATCH 06/23] BUG: Fix ZAG containers reading from a closed stream read_container() opens the container reader as a context manager and returns the lazy container after __exit__ has closed the underlying stream. ZAGReader handed ZipExtFile streams bound to that stream to the ZONReaders it constructs, so every element access on the returned container read from a closed file. The readers now receive a callable (ZAGFileOpener) that reopens the ZIP member on each read, following the pattern established by CEFileOpener. The only ZAG test was skipped and pointed at a hardcoded local path; it is replaced by tests that synthesize a minimal ZAG container around the zon-1.zon fixture, including a regression test for container access after the reader has been closed. Also use logging.getLogger instead of instantiating a detached Logger. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/Container/IO/ZAG.py | 36 ++++++++++++-- test/IO/test_zag.py | 68 ++++++++++++++++++++++----- 2 files changed, 90 insertions(+), 14 deletions(-) diff --git a/SurfaceTopography/Container/IO/ZAG.py b/SurfaceTopography/Container/IO/ZAG.py index 17564889..d00a60e8 100644 --- a/SurfaceTopography/Container/IO/ZAG.py +++ b/SurfaceTopography/Container/IO/ZAG.py @@ -57,7 +57,30 @@ from ..SurfaceContainer import LazySurfaceContainer from .Reader import ContainerReaderBase -_log = logging.Logger(__name__) +_log = logging.getLogger(__name__) + + +class ZAGFileOpener(object): + """ + Callable that (re)opens a member of the ZIP archive embedded in a ZAG + file. Readers constructed from ZAG containers hold on to this callable + instead of an open stream, so that reading topographies still works + after `ZAGReader.close` has been called (e.g. when the reader was used + as a context manager by `read_container`). + """ + + def __init__(self, fobj, filename): + self._fobj = fobj # file name or stream + self._filename = filename + + def __call__(self): + # `ZipFile` automatically skips the ZAG header (magic + BMP + # thumbnail) preceding the ZIP archive, since ZIP archives are + # located through their central directory at the end of the file. + if hasattr(self._fobj, "read"): + return ZipFile(self._fobj, "r").open(self._filename, "r") + else: + return ZipFile(open(self._fobj, "rb"), "r").open(self._filename, "r") class ZAGReader(ContainerReaderBase): @@ -113,6 +136,7 @@ def __init__(self, fobj): from ...IO.common import OpenFromAny # Open if a file name is given + self._fobj = fobj if not hasattr(fobj, "read"): # This is a string self._fstream = open(fobj, "rb") @@ -155,10 +179,16 @@ def __init__(self, fobj): # Lazy import to avoid circular dependency during package initialization from ...IO import ZONReader data_path = data.find(self._PATH_TAG).text + # We pass a callable that reopens the ZIP member + # rather than an open stream: the stream `f` + # is closed when this reader is closed, but the + # lazy container must be able to read + # topographies after that (see `read_container`). readers += [ ZONReader( - z.open( - f"{data_uuid}/{data_path}/{self._ZON_UUID}", "r" + ZAGFileOpener( + self._fobj, + f"{data_uuid}/{data_path}/{self._ZON_UUID}", ) ).topography ] diff --git a/test/IO/test_zag.py b/test/IO/test_zag.py index 4c633fae..8a62d1e1 100644 --- a/test/IO/test_zag.py +++ b/test/IO/test_zag.py @@ -23,23 +23,69 @@ # SOFTWARE. # +import io +import os +import struct +import zipfile + +import numpy as np import pytest -from SurfaceTopography.Container.IO import ZAGReader +from SurfaceTopography.Container.IO import ZAGReader, read_container +from SurfaceTopography.IO import ZONReader + + +@pytest.fixture +def synthetic_zag(file_format_examples, tmp_path): + """ + Build a minimal ZAG container (header + BMP thumbnail + ZIP archive) + that wraps the `zon-1.zon` example file, mirroring the layout parsed + by `ZAGReader`. + """ + with open(os.path.join(file_format_examples, "zon-1.zon"), "rb") as f: + zon = f.read() + + buf = io.BytesIO() + fake_bmp = b"BM" + b"\x00" * 62 # dummy thumbnail + buf.write(b"KPK0" + struct.pack("abc/item.xml" + "", + ) + z.writestr( + "abc/item.xml", + "data0" + "", + ) + z.writestr(f"abc/data0/{ZAGReader._ZON_UUID}", zon) + fn = tmp_path / "zag-1.zag" + fn.write_bytes(buf.getvalue()) + return str(fn) -@pytest.mark.skip -def test_zag(): - file_path = "/home/pastewka/Downloads/zag-1.zag" - with ZAGReader(file_path) as r: +def test_zag(synthetic_zag, file_format_examples): + with ZAGReader(synthetic_zag) as r: c = r.container(0) + assert len(c) == 1 + t = c[0] + assert t.dim == 2 - import matplotlib.pyplot as plt + # Heights must match a direct read of the wrapped ZON file + t_ref = ZONReader( + os.path.join(file_format_examples, "zon-1.zon") + ).topography() + np.testing.assert_allclose(c[0].heights(), t_ref.heights()) - for t in c: - plt.figure() - t.plot() - print(t.info) - plt.show() +def test_zag_read_container_outlives_reader(synthetic_zag, file_format_examples): + # `read_container` closes the reader (and its stream) before returning + # the lazy container; element access must still work afterwards + (c,) = read_container(synthetic_zag) + t = c[0] + t_ref = ZONReader( + os.path.join(file_format_examples, "zon-1.zon") + ).topography() + np.testing.assert_allclose(t.heights(), t_ref.heights()) From 9f63e74c749f1a2d4fd6f350c36e4bd4227aa5d0 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 07:38:00 +0000 Subject: [PATCH 07/23] BUG: Fix triangle/segment height moments and bicubic interpolation input handling - cpp/moments.h: The generic triangle moment had a sign error and a missing 2/(h3-h1) prefactor, and the order-1..3 specializations were equally wrong: uniform2d_mean of a constant surface at height 5 returned 0, uniform2d_variance of a terraced surface returned 0, and the (unspecialized) order-4 path divided by height differences without a degeneracy guard, returning NaN for quantized data. All triangle moments are now computed from the barycentric integral formula, = 2/((n+1)(n+2)) H_n(h1,h2,h3), where H_n is the complete homogeneous symmetric polynomial - exact, stable, no sorting and no division by height differences. The line-scan moments use the same polynomial form for the generic (order >= 4) case, replacing an epsilon guard that returned 0 for flat segments (the correct limit for a constant profile at height 2 is 16, not 0). Tests that had codified the broken values are corrected and extended with analytic references. - SurfaceTopography/Nonuniform/ScalarParameters.moment: same removable 0/0 singularity in pure Python; any two equal adjacent heights (quantized instrument data) propagated NaN into the result. Replaced by the equivalent complete homogeneous polynomial. - cpp/bicubic.cpp: Array inputs were only 'ensure'd, not forced C-contiguous, but the evaluation loop walks the buffer linearly: strided views returned silently wrong values and negative strides read out of bounds. Inputs are now converted with c_style | forcecast. The scalar path also ignored the derivative argument and returned a bare float where callers unpack 3- or 6-tuples. - SurfaceTopography/Uniform/Interpolation.py: the second-order bicubic cross-derivative was overwritten by a copy-paste error (interp_derxx / dx / dy instead of interp_derxy / dx / dy). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- .../Nonuniform/ScalarParameters.py | 13 ++- SurfaceTopography/Uniform/Interpolation.py | 2 +- cpp/bicubic.cpp | 23 ++++- cpp/moments.h | 87 ++++++---------- test/test_moments.py | 98 +++++++++++++++---- 5 files changed, 135 insertions(+), 88 deletions(-) diff --git a/SurfaceTopography/Nonuniform/ScalarParameters.py b/SurfaceTopography/Nonuniform/ScalarParameters.py index 0bea5bf3..a16055b4 100644 --- a/SurfaceTopography/Nonuniform/ScalarParameters.py +++ b/SurfaceTopography/Nonuniform/ScalarParameters.py @@ -63,15 +63,22 @@ def moment(topography, alpha): Returns ------- - moment : float or array - Root-mean square height. + moment : float + Moment of order `alpha` of the heights. """ # noqa: E501 x, h = topography.positions_and_heights() dx = np.diff(x) if len(x) <= 1: return 0.0 L = x[-1] - x[0] - return 1 / (alpha + 1) * np.sum(dx * (h[1:] ** (alpha + 1) - h[:-1] ** (alpha + 1)) / (h[1:] - h[:-1])) / L + # The quotient (h2^(alpha+1) - h1^(alpha+1)) / (h2 - h1) given in the + # docstring equals the complete homogeneous symmetric polynomial of + # degree alpha in h1 and h2. The polynomial form is exact for equal + # heights (where the quotient is 0/0, e.g. for quantized instrument + # data) and avoids cancellation for nearly equal heights. + h1, h2 = h[:-1], h[1:] + s = sum(h1 ** k * h2 ** (alpha - k) for k in range(alpha + 1)) + return np.sum(dx * s) / ((alpha + 1) * L) def rms_height(self): diff --git a/SurfaceTopography/Uniform/Interpolation.py b/SurfaceTopography/Uniform/Interpolation.py index 28413429..0238824a 100644 --- a/SurfaceTopography/Uniform/Interpolation.py +++ b/SurfaceTopography/Uniform/Interpolation.py @@ -164,7 +164,7 @@ def bicubic_interpolator_topography(x, y, derivative=0): interp_derxx = interp_derxx / dx ** 2 interp_deryy = interp_deryy / dy ** 2 - interp_derxy = interp_derxx / dx / dy + interp_derxy = interp_derxy / dx / dy return interp_field, interp_derx, interp_dery, interp_derxx, interp_deryy, interp_derxy diff --git a/cpp/bicubic.cpp b/cpp/bicubic.cpp index cc4a215c..85226ad3 100644 --- a/cpp/bicubic.cpp +++ b/cpp/bicubic.cpp @@ -353,14 +353,27 @@ Bicubic::call(py::object py_x, py::object py_y, int derivative) double x = py_x.cast(); double y = py_y.cast(); double v, dx_out, dy_out; - eval(x, y, v, dx_out, dy_out); - return py::float_(v); + if (derivative == 0) { + eval(x, y, v); + return py::float_(v); + } else if (derivative == 1) { + eval(x, y, v, dx_out, dy_out); + return py::make_tuple(v, dx_out, dy_out); + } else { + double d2x, d2y, d2xy; + eval(x, y, v, dx_out, dy_out, d2x, d2y, d2xy); + return py::make_tuple(v, dx_out, dy_out, d2x, d2y, d2xy); + } } } - // Array inputs - convert to numpy arrays - py::array_t x_arr = py::array_t::ensure(py_x); - py::array_t y_arr = py::array_t::ensure(py_y); + // Array inputs - convert to numpy arrays. Note: `c_style` forces a + // C-contiguous copy for strided views; the evaluation loop below walks + // the buffers linearly and would silently read wrong (or out-of-bounds) + // elements from non-contiguous arrays. + using carray_t = py::array_t; + carray_t x_arr = carray_t::ensure(py_x); + carray_t y_arr = carray_t::ensure(py_y); if (!x_arr || !y_arr) { throw std::invalid_argument("Could not convert inputs to arrays."); diff --git a/cpp/moments.h b/cpp/moments.h index 3d2a21a1..ac8f5372 100644 --- a/cpp/moments.h +++ b/cpp/moments.h @@ -32,11 +32,18 @@ template class _LineScanMoment { public: static double eval(double h1, double h2) { - if (std::abs(h2 - h1) < 1e-12) { - return 0; + /* (order+1) times the mean of h^order over a segment with linearly + interpolated end point heights h1 and h2. Analytically this is + (h2^(order+1) - h1^(order+1)) / (h2 - h1), which equals the + complete homogeneous symmetric polynomial of degree `order` in h1 + and h2. The polynomial form is exact for equal heights (where the + quotient is 0/0) and does not suffer from cancellation for nearly + equal heights. */ + double sum{0}; + for (int k{0}; k <= order; k++) { + sum += std::pow(h1, k) * std::pow(h2, order - k); } - // This is the generic expression, but it has numerical issues when h1 and h2 are close to each other - return (std::pow(h2, order+1) - std::pow(h1, order+1)) / (h2 - h1); + return sum; } }; @@ -114,63 +121,25 @@ double uniform1d_moment(Eigen::Ref topography_h, bool periodic, template class _TriangleMoment { -public: - static double eval(double h1_in, double h2_in, double h3_in) { - double h1{h1_in}, h2{h2_in}, h3{h3_in}; - - /* Sort h1, h2, h3 in ascending order */ - if (h1 > h2) std::swap(h1, h2); - if (h2 > h3) std::swap(h2, h3); - if (h1 > h2) std::swap(h1, h2); - - /* Compute moment */ - return ((std::pow(h2, order+2) - std::pow(h1, order+2)) / (h2 - h1) + - (std::pow(h3, order+2) - std::pow(h2, order+2)) / (h3 - h2)) / (order + 2) - - (h1*(std::pow(h2, order+1) - std::pow(h1, order+1)) / (h2 - h1) + - h3*(std::pow(h3, order+1) - std::pow(h2, order+1)) / (h3 - h2)) / (order + 1); - } -}; - -template <> -class _TriangleMoment<1> { public: static double eval(double h1, double h2, double h3) { - /* Sort h1, h2, h3 in ascending order */ - if (h1 > h2) std::swap(h1, h2); - if (h2 > h3) std::swap(h2, h3); - if (h1 > h2) std::swap(h1, h2); - - /* Compute moment */ - return (4*h2*h2 - h1*h1 - h3*h3 - h1*h2 - h2*h3) / 6; - } -}; - -template <> -class _TriangleMoment<2> { -public: - static double eval(double h1, double h2, double h3) { - /* Sort h1, h2, h3 in ascending order */ - if (h1 > h2) std::swap(h1, h2); - if (h2 > h3) std::swap(h2, h3); - if (h1 > h2) std::swap(h1, h2); - - /* Compute moment */ - return (6*h2*h2*h2 - h1*h1*h1 - h3*h3*h3 - h1*h1*h2 - h1*h2*h2 - h2*h2*h3 - h2*h3*h3) / 12; - } -}; - -template <> -class _TriangleMoment<3> { -public: - static double eval(double h1, double h2, double h3) { - /* Sort h1, h2, h3 in ascending order */ - if (h1 > h2) std::swap(h1, h2); - if (h2 > h3) std::swap(h2, h3); - if (h1 > h2) std::swap(h1, h2); - - /* Compute moment */ - return (8*h2*h2*h2*h2 - h1*h1*h1*h1 - h3*h3*h3*h3 - h1*h1*h1*h2 - h1*h1*h2*h2 - h1*h2*h2*h2 - h2*h2*h2*h3 - - h2*h2*h3*h3 - h2*h3*h3*h3) / 20; + /* Mean of h^order over a triangle whose corner heights are h1, h2 + and h3 (linear interpolation). Using the barycentric integral + formula + int_T l1^i l2^j l3^k dA = 2 A i! j! k! / (i+j+k+2)! + the mean evaluates to + = 2 / ((order+1) (order+2)) * H_order(h1, h2, h3) + where H_order is the complete homogeneous symmetric polynomial of + degree `order`. This expression is exact, requires no sorting of + the corner heights and remains valid for degenerate (equal + height) corners. */ + double sum{0}; + for (int i{0}; i <= order; i++) { + for (int j{0}; j <= order - i; j++) { + sum += std::pow(h1, i) * std::pow(h2, j) * std::pow(h3, order - i - j); + } + } + return 2 * sum / ((order + 1) * (order + 2)); } }; diff --git a/test/test_moments.py b/test/test_moments.py index 03e78f37..b384a56e 100644 --- a/test/test_moments.py +++ b/test/test_moments.py @@ -137,33 +137,41 @@ def test_with_nan_values(self): # ============================================================================= # Tests for uniform2d_mean # ============================================================================= -# NOTE: uniform2d_mean uses triangle-based integration which computes moments -# differently than simple averaging. For a constant surface at height h with -# ref_h=0, the result is 0 (not h). These functions are not currently used -# in the codebase but are tested for coverage. +# uniform2d_mean uses triangle-based integration: each pixel is split into +# two triangles over which the heights are interpolated linearly. class TestUniform2dMean: """Tests for uniform2d_mean function.""" - def test_constant_topography_returns_zero(self): - """Constant topography with ref_h=0 returns 0 due to triangle integration.""" + def test_constant_topography(self): + """Mean of a constant topography is that constant.""" h = np.full((4, 4), 5.0) - # Triangle-based moment returns 0 for constant surface mean_periodic = cpp.uniform2d_mean(h, True) mean_nonperiodic = cpp.uniform2d_mean(h, False) - assert_allclose(mean_periodic, 0.0, atol=1e-10) - assert_allclose(mean_nonperiodic, 0.0, atol=1e-10) + assert_allclose(mean_periodic, 5.0, rtol=1e-10) + assert_allclose(mean_nonperiodic, 5.0, rtol=1e-10) - def test_varying_topography_nonzero(self): - """Varying topography should return non-zero moment.""" + def test_linear_ramp(self): + """Mean of a linear (nonperiodic) ramp is the midpoint height.""" h = np.array([[0.0, 0.0, 0.0], [1.0, 1.0, 1.0], [2.0, 2.0, 2.0]]) mean = cpp.uniform2d_mean(h, False) - # Should return some non-zero value for varying data - assert mean != 0.0 + assert_allclose(mean, 1.0, rtol=1e-10) + + def test_vs_numpy(self): + """ + For periodic topographies every grid point is shared by exactly six + triangles, so the triangle-based mean equals np.mean exactly. + """ + np.random.seed(42) + h = np.random.randn(64, 64) + + mean = cpp.uniform2d_mean(h, True) + + assert_allclose(mean, np.mean(h), atol=1e-10) # ============================================================================= @@ -236,6 +244,22 @@ def test_constant_zero_variance(self): assert_allclose(var, 0.0, atol=1e-10) + def test_terraced_variance(self): + """ + Variance of a terraced +1/-1 surface (rows alternating) about its + mean. Within the linear interpolation, each pixel is a ramp from -1 + to +1 (or constant), analogous to the 1D alternating case. + """ + h = np.empty((4, 4)) + h[0::2, :] = 1.0 + h[1::2, :] = -1.0 + + var = cpp.uniform2d_variance(h, True, ref_h=0.0) + + # Every triangle has corner heights (+1, -1, +1) up to sign; + # = 2/12 * H_2(1, -1, 1) = 2/12 * (1+1+1-1+1-1) = 1/3 + assert_allclose(var, 1.0 / 3.0, rtol=1e-10) + # ============================================================================= # Tests for 3rd moment functions @@ -303,6 +327,41 @@ def test_uniform1d_moment4_positive(self): m4 = cpp.uniform1d_moment4(h, True, ref_h=0.0) + # Each segment ramps from -1 to +1; = H_4(-1, 1)/5 = 1/5 + assert_allclose(m4, 1.0 / 5.0, rtol=1e-10) + + def test_uniform1d_moment4_flat_segments(self): + """ + 4th moment of a constant profile about a different reference; flat + segments must contribute their exact moment (the analytic quotient + is a removable 0/0 singularity here). + """ + h = np.full(5, 2.0) + + m4 = cpp.uniform1d_moment4(h, False, ref_h=0.0) + + assert_allclose(m4, 16.0, rtol=1e-10) + + def test_nonuniform_moment4_flat_segments(self): + """Same as above for the nonuniform variant.""" + x = np.array([0.0, 1.0, 3.0]) + h = np.array([5.0, 5.0, 5.0]) + + m4 = cpp.nonuniform_moment4(x, h, ref_h=0.0) + + assert_allclose(m4, 625.0, rtol=1e-10) + + def test_uniform2d_moment4_quantized_no_nan(self): + """ + Quantized (rounded) height data produces many triangles with equal + corner heights; the moment must remain finite (no 0/0). + """ + np.random.seed(42) + h = np.round(np.random.randn(16, 16)) + + m4 = cpp.uniform2d_moment4(h, True, ref_h=0.0) + + assert np.isfinite(m4) assert m4 > 0 def test_uniform2d_moment4_varying_positive(self): @@ -351,14 +410,13 @@ def test_uniform1d_variance_vs_numpy(self): # Should be close for smooth data assert_allclose(var_cpp, var_numpy, rtol=0.1) - def test_uniform2d_mean_constant_is_zero(self): - """uniform2d_mean of constant returns 0 due to triangle integration.""" + def test_uniform2d_mean_constant(self): + """uniform2d_mean of a constant surface is that constant.""" h = np.full((10, 10), 7.5) mean_cpp = cpp.uniform2d_mean(h, True) - # Triangle-based integration returns 0 for constant surfaces - assert_allclose(mean_cpp, 0.0, atol=1e-10) + assert_allclose(mean_cpp, 7.5, rtol=1e-10) # ============================================================================= @@ -393,9 +451,9 @@ def test_uniform2d_2x2(self): mean = cpp.uniform2d_mean(h, False) - # Triangle-based integration returns non-zero for varying data - # Note: the exact value depends on triangle integration details - assert np.isfinite(mean) + # Two triangles with corner heights (0, 1, 1) and (1, 2, 1): + # means 2/3 and 4/3, average 1 + assert_allclose(mean, 1.0, rtol=1e-10) def test_all_nan_uniform1d(self): """All NaN values should result in NaN or 0.""" From 007aa063bf64e65f096136b2d4dbef808b52dda4 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 07:38:00 +0000 Subject: [PATCH 08/23] DOC: Mark wrong-results tier (audit section 1) as fixed Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- AUDIT.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/AUDIT.md b/AUDIT.md index 6c9f7dfc..2504763b 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -12,6 +12,19 @@ Severity legend: - **MEDIUM** — crashes on valid inputs, wrong results under non-default but supported options, resource/metadata correctness. - **LOW** — edge cases, performance, documentation drift, code health. +> **Status update (2026-07-23):** All findings in section 1 (the +> wrong-results tier, §1.1–§1.17) have been **fixed** on this branch, with +> regression tests; see the commit history following the commit that added +> this report. Exceptions and adjacent items: the latent non-square +> axis-pairing in DATX/LEXT noted under §1.3 is *not* changed (unprovable +> without a non-square reference file); a handful of adjacent §2 items that +> shared code with §1 fixes were fixed along the way (EZD magic check, MI +> ASCII crash and `scanUp` flag, the dead `interpolation='disable'` guard +> in `Uniform/Derivative.py`, scalar bicubic derivative returns, the ZAG +> logger instantiation, and the 1D crash in +> `TransposedUniformTopography.positions`). Sections 2–3 otherwise remain +> open. + --- ## 1. High severity — silent data corruption / wrong results From d3373f389bc9188085deab292be39f3a3ae04609 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 07:52:50 +0000 Subject: [PATCH 09/23] MAINT: Remove accidentally committed NetCDF test artifacts These files are written to the current working directory by the NetCDF writer tests and were inadvertently picked up by an earlier commit on this branch. Remove them and ignore them so future test runs cannot re-add them. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- .gitignore | 6 ++++++ angstrom_unit.nc | Bin 133640 -> 0 bytes no_physical_sizes.nc | Bin 131172 -> 0 bytes no_unit.nc | Bin 133580 -> 0 bytes parallel_save_test.nc | Bin 133640 -> 0 bytes 5 files changed, 6 insertions(+) delete mode 100644 angstrom_unit.nc delete mode 100644 no_physical_sizes.nc delete mode 100644 no_unit.nc delete mode 100644 parallel_save_test.nc diff --git a/.gitignore b/.gitignore index 32a2b189..3922124d 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,9 @@ docs/_build /subprojects/* !/subprojects/*.wrap .junie + +# NetCDF files written to the working directory by the test suite +/angstrom_unit.nc +/no_physical_sizes.nc +/no_unit.nc +/parallel_save_test.nc diff --git a/angstrom_unit.nc b/angstrom_unit.nc deleted file mode 100644 index 0e0f4a131ccab3d9c5303c46ce2ef45a8f6d99b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133640 zcmd43X*iUB{6C5$NeWp?Qc=>TRSIp^q>xfkkv+*0ZBmr%DlOJ*v+rYOq)>SkLP|v& zk`^T;OO_PU`Fzjsod5YhIM2?L)IB)9*bpM2y{Xy~CpU$^52 z1CDu<2gr{sxk*b+*}Q>l72K>21q3+%uP6Wa=VXrs9ttDB^M4-CCUS@T$o;QRk&=-o z`~UZG{`Z;x{rva2N?348yz*`;3p4l4#u3W&gwR_9J2{yXG zztaVFP)XUsG)1r;y$+hM5(19tg409qWx(;@>T@vhFxX2PO>Sd7m~+lcEw+6J`f$I? z7grh39Ucri{%r)Ur}n$<)p4M$D~zAB;RL7wZC@9^3<5>>>biK1F67^QT=FMzWBqk7dPY`F?@j=%JHaC1;sQ_`PP=(jCV+ZC zz1RL(6sRV9vSy^UgQ_qr+!uTnl%+qv8jYKY{3MJ1S#E!je>&w=o?;U6z+7>tD;17jUV zc>OA1e7_hPBI*IN{PAn`J+WZcMXC6i9|g0bS}}BzA(*eP+Y9CYfn}cY%A?8}?3k-7 zET0B}!-xypp=b=wt9p%1Z#=;nD4NnxBmnp7M@S8E!JBe5B=Mj+c%3)Sb@WC-a7;?a zbH#ZGbLbUIbjDD?DGc@sS_hHqF*Pl-Y>0K^^DJ*=L0k~|Ic(-uNaV8w8UKnP(Wuxw zjVc9+n)=A$Qv+n*x-)v-42VB&uz9|q7vkMx6VE7ULA)tXt(sj7@#T(M#(E*d_hwT| z4k>kuC^|5K)S1Y(Da3w{hu?nqW@!EnR8d3wr8@NST~O(A&+P7p`mu{hxjRzur1hf7|`6b>4wG zV`rW2A_e4^@RjT>&w!%r)c7eO1C%o@B?b?kfU0)-SmJ@FpneN053vW#M;q&}Bk2dV1qP+haT9l6?!PSL^%LjcP!>e(dk^lT$&nJY}}XZY`+SM)yZt znFoqw14mo943xjBL)ZCCQ1xsNtUM_JrR-}#V9<9^)W6?|%)W@+XFl>#8=aBE+tiwHIVNdUQ-_zcm=kW!B&5{#%|&o>wZz4mX@S}k|b|6V_3vpgTnDaVfrWR8QS%pbb#whpY%CdY?N;;GZ%Vzm5Hkau9o_3$ln3DMo|G8Tlnt)kQpX2&=fPcIx~;9j8C-Ko z#T*MM@Ss57vZm?v;z1Yg!;|xRW$5VlN6rHMf z4JW=@`WRxFxszXi>xVcwZMNsbM2KmxzLxFMfcWazhdIgx5I?R8S$eMy;-0Tg@l?`p zuKpcR9`l2ETG%yHiXKGKbuQCRSfZf6D_k^@50QRYv}5c!h=T9>#uZmXq|Nm?zS|wb zrmUuVgLVij|HV!+w}tTF_rFUgv%&8*zHZ+|2d}3q(;{&lcn8j$U2Ycv-n&Eey*>xP zJ9b*LcKbqbA1N++mbVdHt0{WhwPV1Ue(7$}cpq?ljTcPk+yU3`it&7_R&eV4xz34I zWX|vOn#%A5fAx$nukWt_Z+=R|*JY{T1#$Vc|NOvX4XQsck^yfY*K>2&C(;M@jVZ^S z1$Que&`LI#d_Nx!Yc$UX=j-W#L$6Z7(JG!x4;c^k#`FJ}oe5xBIN$aR5Q6cc`+Tse zIT)!G8oGViV0ffFJNoJp=<1hG&!8;>l^>lo@YYZvQ&U|AAcRXPTGw$B;WkVO`ZK7i8BqG}ALXapV2D!74ioWL;KR zHCizhS+Q!%tDGW{CGG8S+j==NeN5#`u|*CW0E-GPi7z6~SRs5>8Ogle)L@6j!YP^?iZO;}%)aP4o|-JplB; zDUC80=Yp}uWX*`oJ}|77O;TO)1dPL(J%6As&UInLk{n_kX4{(MQw5LRi!QGO^N(m*` z^E4~1gadr=HhOO#%VLu2eNIwi)G2T?X=??6W#Cy>9Vnjs9RiAZvCwQ31?yY8RT|?U z(z(1~WabD&F3TVL`K3cdd%SOF?0kqX=(EQi_zubZWid`e_aLDjynf**9g?_$0-uw{ zq%T~0wc<-V#P|1YDt~eu;t!<(gRjycuG?03N>v8p?9TR~8Zji(kN%pxZ3QHIXIyOx z7=&bI(gOA8q<_5J5^oq7N#_5l27|k{5N{7<8mjW-s{#m2bbf4- z(E|V0wQSL@S>T6D_stAi4ZiV#oL?Uez;lyIKTC4}xAX7Jb2j_HEt=6QcmFfEDpzz1 z=U0L|eG1O@C6jvp*rF2_58m=foH!l@UT&#>oz6n=wH$n-_mY0VstvUJlm;GM#j_&z zAb78i_(yQZz@M^d^|wV6z?ZWyyy^57ysbA5?nx&7IHyTqvEeDW+coZgcrF93^I4ya zNeqO?%Llt^ecn5jF|h6XX0I&v19N!C5Hm>@j50-~Xtt^4tJBF|Lhx*+VOU-#Xf49fylokvAGtPm zTW&e%^M*Y9)}94@>s{Zad8FR+r{%1OUkQf7i{`rf#bAt?C>m5;0^=?_=DdK^futc| z!kags-%xvfr1U3fbvYLon!N|L>zeC}FHb<}|4{2)cm?@+n!a!1pCDiF&xgjhG~`vA zqD=VgW3s^ZeRpo0tPI#UUUOY% zHG@5n{VMxfDY&yThgti^gG=?Fv$}pSxbGXU74BUMo*yOk>6RDIby4Md#B1xVCRiCVmG04>!?Uoot(PA6cx}3H~0Np62*5@cJvC zr~M^-Alaq-;^`;gY5zK7LFoohX8CCwODeeC3X>`|u7JO}sA9FnBJcyw_T2wHjl8Zc zy*O?mcoBjh^x0Fuo0N1gLz>`y{}x()mn?W$8^^P(R)RMovp+HA3wW)ab$eJ7z}p+W zCANrsA1OM2tPc}hG4RheNc%asr(L9+R&4-Be%_Lc zfEsUnAeas#E15m6pcjnwn^8`Yx$R{9VP*)Zw=Y~YwfqE%_0!P>4nIIq@}IAHi4W?< zdzAw3K2QatbKYg|1J$y!aqM3!s46SdRinx4SZ_?)^m9O6ax{FR)Vtj{E66PMdUmB{rx=U0`ji&t)B8$BkzXd-;FYH$oVQp_uLU=Uu&J`8@~&= z6F(I@bjtlziVv!8k)d-UgFKZ_yc+^;iAx%CaX1HlL4JT;N;q^K~@ z_XzTv=4gL14+52!>Ao%UDyZ*#dB(@dd46uX?w-mz!hZ&PXH}BFD=S8&V^%-t{Z|vz zR#k%`H^p>@1L*_T+W%Z-DuT(B>N>#A0kcs(HaS%etaIn&wRV04>&oh{yN9yDx;dZ+H1fWx3pujo*g*TOk^Czhr!vXuM%@b8JvHiTZW|V!QFN%_w(Et1gAD_ z$WUAiUYvc6ap(o`ukQGMbGADKPfAp6?8_h=UU+Wiu|9~bZCzG&cR+M~Gh20j*{h(#HI0z)`$Cg1F(J9#MeiR^>i%}0 z)`B`ONIZ0XA9+uOu}035faU( zp*kT^5El#DxZ&1+i~K#sREOsOV@1CgEh zd0vwX3a)*zl3QdkiVIcye$nmV~pUoC}DD*yfATfGo2yr9z-JqSV3&cZ$Yw;|9E zKT(}b&cm8#*GH1d!1ps7ta5M%@8?6ui1*Uq-THLA^#S1tG-ad0<1XMmkJ#wDQ4YLo zPpp3%2ZCP_llAJtMDQQ!-Ap;;4ZcFnU0MLa{qLIGGY*qJu&__rcZn^y-^S`>GSx`` zxKweNSqxr?nbn(KRl)-@d7j^h?vl)07q|a0_(mh+``r}5yDEJus_7!Q*Hgtyy5hlc zdfOgUbrzh>f8B2I9KpUba{TsYK3HS1oNrIxf_X`2R^Zm_pqE@|96Unii%%98yB2|V z_}|`?lbM89Gi^@2B|NomKshO{fcn?NsW^DOzBOLWDUr)wLJg3-}s_~~mE7=0^3l$bM!j#wucdn^a~ zH~lFck6J)mGUU-Q_6XG6{?AS3-Goo~Z|E}`0END+&#UbhDEfCPg+F4DKj6MON8*b7 z%bM2Lo+}_v^Nq!>DHX`6+;`C?;S+MtmL%R8Z;QP0r2FRV1;|^lpjPUP7jjeOW!i%E zkaP5Fo}DV;3F19$yMKIS#*KuAo;E<{&8{CgX`qIuKbH4M>)KV^JAsx25=h8s4x}LrJ zVmPQDn*Z8fbpm~k#X#PnWYC-X;y+%h1O3`p#ojr7U^u6FS;$TXv&56XPcW6#yUy23 zZ}x(18*N3+E(crLeMjwpI@k(ZHoGi)1kRICul3*B!TDmsG4Ce2lrV&AQ1cp`ztyeF zmk``I;jBjg?_)&Ydl`C;y$C$jm406B1K@r5Q(aCo2mkp`>c!!y5V{;oog;T11(g>x zCa<%GC^r9csOSzvHxC4aE15#PrGF!@Ne|-M3;i#5Rzcjl*iP+E93(sDx_eC~^FObc zv67_@N!HaI`>%@$4)A1z%{T~2=SI3g43^`e!MXc+^qO7V}+{-Z%XUDevzElyH~bdH$4h|VOCvD2dQ6GS=Xeyq`&Tb zJke%i0C+X4Gu1AT`VXEEw%wob`!3anm7ay*PcS$f-Y5gUPGrgH!_&Z5K7X((E(3gn z+>@r%Ch#8cgXZLnknfGZ>{+ifIPVPK-!_#7CvNa%7-b{TcQiaU8f$&P{3e`N+l&PS5 zg|;MLCOF>z(t`SfHDup0)z z%#*NQR)FzrzsvC(Trkwv%qZPL^aH`P_PntuqCY&PxXf@T`1!`yo8_}X^(*M3C@moU z>3rL4f}1Ilmj{DA$#G~+v9z@F2W8(XOS7Zvk$*8+G2!fQkRUe))W5F-;it-5|6wHtvvccQ)CU!muG9#BGZ1khjrU`WGxM^j?i0+ zT*ddT(VwZv*D%|s`g#F!r&sH*@>z$xgpG_%dp96IayHvTIuexN`Sb42r-17AI6v(6 z7trGJ5A97N{V?&F{JDmB&^^}Biuq#D?t5jtiSBACJ6RSzVCO$NgKCoX|HPPXoyCA?N$QEtNmeL`v}$)uy9wd@uNQ=} z$`DSkG1S{@3_--D;~F1j!7mRBJie|N{3j>(hwQise&3hXagmqEzRBiylP`n6Cay2Q zS3r1CSIoDQ1K@_8p4Mydis)|<*-@?6!G504{{4PGI9r-d*eDSF|CpTX)kSx}>CmYh zS$GXR#aA8H&BO=zu>9#9`v>41^w*wba-8TbRt?j>PXgEQz}+jnwcsu5{9g0G3jE75 zLo=-f;6Lc+Gn~AM9^tPpwd)Q9Zc-EIW#o7_372Ti*9MOl_o%C3HF$|Vo*(I?-zZ1l z7RK)ZS0-@dkFAzq|9+=fPIx_AN!Fm?Zx2`l3Kx=2w1Aa0F@y47y;FP6Ps>s%{T5K(gkGIhxE+)`^O6JD>xhnhdQ|}NA1J>f_BR%c1Jy8Y z?b1v6plw>El@vqtXalE~q^zr8xHzi#>>CHBy=d-mls6cW?rYkd4}qSRGBHY{1B|na zduZ-Nub#RxIXjf-Rfb0^LSEejqg&S3)#)$j6}LW0)eV8xrsgz%`fSiY9qIY>MGy4R ze4CZBa|w?qlw1DK0<`CwSB(W)5FFszzI1pzD6W+$&m4n6DgU}I@#9TUrp4}lvwt1( zCxs1l3R;lYSslpWjvzlG;z#Hv^7kpL>C$^9gR-Hx+jNsR@&}Lp9KYWOxpR-__NSdi z7TuOY?_Y;ZgM(FVV@zc2sb>|P*F>)J-94TQ$@^aUy<_$~F7jup9h> zksq2Brr;M9yep2|N#>yLN2`%o2v`jUI~>9w3@QF*e{41ig!)Te-l`K_ol&OkO#C>< zvaI)V+lel>v*cv?en^5uNtqh639rw$er`rq3o< zSOnYnO(OG}TO?~h=Jw&^-x`KF5chAq?54LA;#a1>jlZyo-tTd4SkDULU-Jy?-VuFZ zS@GMT(=`+dPKetYi+hJt$Zr@ zFa8~iKKm1V??=PO%$F12^JvjX;!p6>_vEhi?f{n_`D5P&qQ56TDq>&y0Cw)qsgu9{ z0DH}gg*jzJXUXf^%{8KdeVMZPtyBWoPxoK>3c}N)UdunsF#-2;`j*lhGVe17L^skO zg3FiQ{BAk%0lNp(mQDNseqHMAIsf&gl6vD;TdK(S@pp9h-e3sz)5l+@?13O@>b8i5 z2Ov37gMEfuA|8h$Je&?MwJIU@i-;*|)DBKjeVp`eaxjZUcMhsC$qg z3hbV=Z4Yh!g7tcQ<%)zFFb&M=hg8CdKG^*>n5zKlmmt@Wh1Q_%e(i1=UJk0Lp*GD>lk>!5kM7sb?GsX42-^g4)+oBY- zHV3RJ^}F6)iv-hqV#Q8Zc`&zUdIT4c=PNya^WD3^n#hQ?FCqNaSnX~%s}%Gh*`E?! zCg|42Zx{_k_foOmvn||*_?fd_VP_%e%*Fmw+vb6OJ-#ibOp54`v{~oBazS~pahdGN zN1$}a=;iF34@#`^f#au$F3=oeWBA?*`HdU@EnFT7itL@x(kuZeb5F+=cd3E0%y8Lm zi4yX89i!VP%MyJcG2HpkH)K7tFkMp9flP%nTYH`SaN|(f;`JZHk+(LLV$aw_{Jo+* z3r~fEqLA0RX4yUD^8yqpzl~C z;oR{6Lt1pb#fJDaF=BS+UOgeCM4~gD(Q^fnV0?Q1_J%!O4m#Q#hX?XuYaHz1RrBJ+~`iwFVG& z#7NJ%vx4~MY8{svf+1qHbiW*b72=d>;#xBWNKX42dR`*)_p0~$&F}X@LiZ^Z2eD_&PX7nS7#~!(E*+6tcsU5B2yc9?#P7nw-tcGN^ zao90Y9nlkiQwL@dKj9hO>;sSZ6V;?*ZG+G? zT)z6nVF)e@l=h?$oX)+q%@)JpA1M31bcocSeL%G8cT@0MZp=&BGZno2_NYy9`os@e zVw}z-eZc?YxR7U`z_}`FRAfyDM>esxbo&6&)7#O(44S_`Bw+RmX~{98Yw{VcSGkl*(L~f{d^w$hUkQsn`*{ww*hx( zeZ0*u(Ia2q%vgB$I`Jo}!uoykz%lFOhjm{BTeTtaOlumLrzGtQ#RRwC+1_(X>jY?1 zFITS7CixuiBZ*bsaiDb86-zA`05yf0GJo-FP+c#lkH!)Ge-cG3bSJ#L>nQKx)1_cA zK4x2w)q?TlQKvoa9hvJEyMA7^BiHRr^CxYj&dY@-X6hdV%hHHCPE8D!hS@nOduy;5 z?_G<9>0k~Nck|s1z|<|hGsBtaf-`6DOG?;I^oo`WpX6YI|9S6RS_w`mF>sna_?h5? z-> z6DluSB0!nk@$|Yc5&_aHbw;}WlY<|GKt7$x4>x0Cq!iOpw<;Z&*Ol@MC}Gq|ix>Sp=yc=c6Fo zV4X{0912z+edU}(atq(GH(k_rfKX?@|*ZwrP=8z-! zDvlo-3w^+AcRgv_n-9LH?fMT}8^IqR)@eD%8@ydB&*je`=QZ=&g=f*L!R?sXR`rtT z?}y$7xz|^Ky{SBC#-moSZ60La-CPfLq5Y|!@(aOvm`sa1%mnvtte*2N;w#iWu^(9a z2z(PeSJ6(wLr&f;SQ}_fzNcBihw`UFFnviu-(#Xn^nV*!+Oq=%<81xfb%+leci!vM z#(W4f-gl?TFN5HMX=i220&=`#w`O134sKIvPKQYWxY3FaQ*=RgPN!?#cVJh6zZxO&y74mJ#={3 zu!`i@^j5VVu_XC{=Q+p5-5|RDGy#2Xr6L%V_|*2CSA?(HbvPNTfwgSH{U3Qmmr`G? zD{Flk><9BxTsmZlK3U!+I&BWN{=|1?>jJ@gDbljBnFQ7}pFbVt4q$dRv>NKJBYnWs zORIka7>XaOFF280oOrv|%Zvj=x4bJeL1P(c0@w3a4z{4S>jbZ-5k61f8f`iDnCO6C z={Mfb24!KlL&^MRg7f_Xf8M?V3P&?uYw9p4DGBMB_k)rDQ0xA|Pp6PS_m1I_G=JpM z^t-kgD{BD*Za~s2*2MOtlgjm%4)X3#ypbm z>y-HvOpO3lx;-`0!yMG{`6H2i`^ot#7+CMJ1k{!f;TCJVK<(QbzEypc?*dW3 z>I3%An-H^osOR$LKw{j}S-NB$B#ECdL`D<*{XAuKt*#LyU$<(FX~?3`ntvo^7t!?} z#uV1fR3`es{l98~L=Uu$xe=;O^nrC%ZP|V{q+Xx(XuA---z(Jn=m^0DaVva%Jslyc zvM~9lrbBdl#=^t0{t&5|?!J1z3Zkzb&0;m8JEX{6zqZAN=nax2l|w`yxVR+feaR@{ zA@AvBJLwR=e%oWR-4S8~pJMOuCB(NF`>-JA6AErGU4OKV`2IIH^j&Et`sQ5kSgErn z5Nc^~Z9MfL&^3>_zKZ1kdc~SypO_FxUm5ChUjzOdr`OltT!O%0r}Nr0I{05^UX--Q zfL}GX`0&l=5bP1()*B@H>3NS&U(`rm@7Otq6ykrghivvGS^0uJI_O;Q>FN53$Pv(35&UL~0 z#HX~=KQXS;1;Sg0HV0%pN5P|qpVJz9P+&4uqN7ao3^iZhenn;Q?9NIB7o>vgqTuFC za#)-VEnkxTzJfia`tsTEFfcu$;@c+?elBw_v_Q5DjIYyta@5a)p{KvkMaU+4K<|+N z#T}rf?wu-olIZLQlP(-gUr74FLe23t1P81rR@F}H1a;dP;}s7VgI4PD%i68e`|I)$uH~IsHvMSAbEv% zRxT&Bz#dn*v`3Hy)~N4=_?sNC4$s#pI%^B&nV%aE&)ER_o(EI5vq=8vZu75~Q}2N` z^If3JTY|rTm~Ndm=nBfXWQ#3|-N=8gmaTeVJt)=9)m@P!-*9K^oRYId$1I#1Axvxo z#V;{t&rmGk17- zLFVLO_o~X8ODO1V`4LT743R^aInK5~RAld!>}*c@fV5Ym?H!08OnJHNJgH+J6FKoB zqVv_uKaE|`P4GUgrb|B?k`_y*NY2wRR?c}Xz`pG4>1Oj(tf7wrb5ye+9XV+ zdWe^QRP3>(L432P-BKZM`{!r~$*K8o#X|R8b zEb;%%#||_$?uKxK@wzq{p-(^p7qk|N<=gv9R z{A~cI?1^;I>|St^rRL_R+LIjMQoC~v#6OItD)Iw!AxQJO7F9PHf>^gVNnfJD-|+ae z6vF~MN=aE_TMhX1imas@A3{(TW5D`E`tcps+{UFKSC=!rWdhq?cP z;D;jk$ye__@;eT$t+w`0%fH}E*&q4QjNt2}J<@fmLnH^(@qF9_lB)^c?fq8yJm?Ka z?tbt!0OM_lo>t)}Ft*jKX}@~~jH3&xHRXv99r5shV-?BmAFb4|wtfQI_=+OG^qZi* z8Q!r+j`(mN9UM>FT>@?CJyZFMWd5h=S{+}v9jsluJze9&z}|avrO?q0oKw$r=m!VD zc|;;5A9ZfethV#^o?Jj_9_l;{8#}>%(=^K8u2d+GgrnOI|izeO3S8@ zGEnW+IE9m`M6aOcP_sz>M*eVBe0mZn0hyfzPYJJy*uTT=)TIAjfAGzt8OR@}xbD%q z<;d4cePd=w{QDUPcVAmT^!@cCM;3d_BX9b)NuCy@KfGv4@4t1Hi9)%luj9T+oZ8~H}J ziV_`XTM&OeHr}*Xh2-~m$@Sj0Gl>r0)%7Nd==ZnY6wpY1R^lqKC>I=tSbVr4()&5Y zTP=dUOQIn*`?p@p$c^OuUdEct7=iey)?2D7*>9QmxQQbRamS6C$61`4$PSfZ7E8_&UvP=UYB2C6(FIfeZ>#MAUnm#7eig~@ zWOgbrU1x$PoMZRZT?4!yY_GkA2f*8|^x)dnrQnv{_NuyX2Hq@_;jw*Nh~Iz5(x>St z@%k z76h3*o1WjX5GGuYAALY_%XMxKp4LqukNqM3AHnv)4=vmTDq;h44ebrb&e&QzyQ?mBgY~rsN4MtXfW`kL3b@Rh%QZJjnJeu?7E$Gvu zZcmDi2F-lG(&p+?&{iG~>Wb|FUCPOzCXlRmIv3QiNJMb?>;4qIrfHx)Y>1dJ`UR95 zi_SUQlXV5J8ywC~A^v4{<`P$pouFLb=@U?62a1}*E{!(}kbmjdx~ayqk!Ss#b%{L- zd4YV@1Tuf}SGpZqc7x=Ow1X~8Blv(?%ChqhkRj)TQ{z)l=J^Dl4U1KSKud{C`Rq6d zTEmGGn?&WHyNuhr_h&8WuP$!W5Ai2HhO(LTFM{i%!rgwfp8|7#rxZ<*`lSyL zzowrP?-Z2*R^h+A@02(&B`0NPKP2aOS6zSl6_V>)_I<2mg(0c`Gf_*npC# zAo`!ti}x?2q9C?cRFip2@^>dD9qap743X2pJMHsTAc{}haO@b-^VY2HydF(_dpof4XR?|b};`uUXSM@QV2Pr&AkprREdgZbOybHlinHf1TD6eIEQ<0nLB4?-HGV^j_+q z4Z#myitK?wqB9yU7px8g-%Z|f)`U;sXOEv*vi>Xt`-;7F7fC}n+38?kKiN;0FFa22 zuKb7{=9_kt{^N4kRk~XOPED5ni<4)-zT`h|%hEWoC#mSQWMzUGWuW5x$qS6mw`vXC zg(OGrK2tY235-@H+B~ZuFm0SlC$F^tb8^&U^|moEZrUjYvNVZ*7x;4i$O14{lb7R- z-dwO#|D~(DWrN-A-XA#k8aT|1&h;wfx}Ef|dut(C$8>UzXpx^6*ioTMX-MQX-x)P7%hOar$ z?Ll$lKEfwr00b@D7NZ5ZjK!xJm&JOQ;uYQZ++N3 zP%Hsuc;@rgIoF78pnc9{>sI8e*1S&|YeF7>cDQku5Attq>U7$^7?dfKRSbtzK-JvT zE?j;KG~Ma*i}X7{v!Nwl5|MRN)N0F=>~_%GT6f;zTM*noG2}M8mE;|%GGV3KB-i({ z{&rwAS(m355b%fOwf21t*}GU9ti|KLxl#%KFHxJnc{mu%=T@`#8{GvnJ3)Pv3Xn;zO0co10@o@+iOkZ0G0f0QbyzueD*s@4LFZhA#uz>h|VclyjZ;qbonJj z4~CatEF|@Q{ATs)Wu2t%C(fEZ&_{BLhM!*CBgZ3uO@4eQAngCN!cd>!ezVL*%8vIC z8Y(hV{*8lhSO3E;4@uve#iA^d z)BEu{iJ$0fWKLh;pzxDjDID=OgD3VcV zCiT5odT&P(`0R-jU%ys^aDi;b(IaJ~zE7qfp$H&Q&%Po(O7w^`ulmAv=7OKPWM@#T zG6V~wUbde)2f>HaU*#K1Ah6&rJ~ox;mB&u%Y+mLGUPgcLRT(Fe3uI58wY40ax9z3E z0}|J@ky7A%|k{C%INkn8KuPG6D(XX%?=*F882X4?C? ztt8LQC}>Z3rfvkrAN@SVX&S^Qn2_W1VHKEx-JQ$SJ;73!AK3Je3)anxn@9Ctg1x0< z*RLJK2QBM$D%yO2%x_(O_~$tUk9?ebFn2ZaKW|CjT}S#rmvxbbaXi>(e=HG~{{=fq zuFBErBiNeLuB@K+87yiq)2^HNT$jGz@_0^slo`6m_YDSvwf$C;bHYb3bEe;&GqwcG zed4{8B2zHqW%bVAhy_Ee{U~f9nWsBfsPF@SfD!lZ>8|_RKwsn$>85=Y)T2W$WPN); z@oxQC=t+G4Af@tP6QUQ^>sv1FivmR~CB1QR3aMvmwUfXB`4x#~Ru$>UyZvWF$dAp0 z4@8-7cv6e}zn>h>Z5~4Y&>@r0zOA4*G!G2S`T%O%9VI_EqEGIa^3H+e*=V+hDdyKI zN&fMM!3QSs`wuSX+*n2d-H?*PwITef{QePVxn3}RA4REJ$Ajhj^qyy|E?9fHmctEv zFi+PGHwBRAKXc{=ElVP}V87kqCmLAyA0*dE(ZIPj%C>$_^nDHYtkYrV!1=hp&2i-! zQuq7~v0upg)s@eDbgvA6&xw!yL)JU-&r?+Uw>|*>x1aZuCt?UXGcW!=Nv=Qj-Rlyj zZGr$lkM&nn5?s2XJieN&_vwk4`SuoB59fDet@Rs%SJmv=xx}{=gp?W|7@P!Qxn;sD zsbP{2JT*Tl>oW?P)PC&X^`W5T4L8Pw;Pe%5DHFo(5+1MQBp3G-1qBOEO<6+b^Y}Ui zC2wztocq_6s+K}z9n?wh!Wa+ zjRH(iK>u{mcicA!o0YU~>5v?t`qzE(g?}LMO|v>ao6P5z3+nA{W%+9 z>8t-p8~j7zO39vt$9w*{Hc49nyhVdy_mpmf*U;8g9Yo&uW}jSU=Pw9^uXE3L-vs}2 zs5n&GPHEZ=61mJmSkmyPSLoj=Rv+q#y$S zx<*j40?8?q+gnOIkoAL09xfTpoJRD2qXXsoQQ$^S7?¥rk^U0Uo!@=7trisbm% zv*vI#ycUD~GA7uRbqMUAe}v4=5U_+oFRM=@U{>|jX+3xb)+FD0%XR*`M~&wCiM7gXcvw)wPZP)y=aip#$tziT0P{d*zt2bW!1wP67HX~LEA zJ%>TLFk#k~O>2>VAy478BGCn{{Jx3SkpDa2Y^H5&6hZvLY*DLOB=Y;Fmpru+fwJ@L zRtJ)|qMn~#qyO_f(f`&r>`D1Va7FXD9DR~gY`l>5`50NRP_c19{MZQ8oTclxX;DC% zwf`WNv}Tzi^FN&Uaj?GHUi z`fP!&CjE6HxYX!$*EDTkO8EYq{WjE} zsstzcd@hzd4S|ib68zth>$)^>y&CbCyT+}V8>Wm<#0bX62-N3yIGczb4hG zeGK9QYHPpuH9(a6`q#UZ42Y~2U)5C;Ks3F>2?_EjSRt1mnNbbltD47^YTF+vuaDoTsDYVWT6-X!T8Kp?iNJ|G;PKx95u4FFMl_Y$c@WIbR>VOS$sKPr%VnSZ04_yBj?jg?GKgZEc8*HM$`k5Y+i z1lyz`a9p?W$%(z-UwmBptkMU3-XEt4$LE2c*c!EAp9lC0q}1*d6FgGZJXt$~=m_sd z*b8b2KN$Dn&h|}YJ@IELgXY0%aPJvCTjfaB5y|YesdbwUu5Y4Q#v&hZcYSlzBzXkR z7D%~I{0`2d!PAS6kaf*kHF2}zOaIg5)1&Rly3*Lll3pv4C)&Du(b?i@U^A5mKkJj6 zc}DLGvn5<`)zjm~MU(4r?pSq#?q!mLoImC8D>A3-ZmyV@`3>C7uH*Mu^?_6I<0pG% z0yxn%{|80a8BYZp#Sx;6lw?J=jEqWVMjDigBuOGEDMCUrB4s8kA?tGYFp^Z{s8kXe z*;!c?p&}#VJ@2Rcqj0(RIpe<`rttYFpv>CV8~(Gyd4lJW>(L!Rx%S+UAX_{7}$OZ%2;(O7lc?>G?lEc=0n_lH)QE)Xrafd<1nrxtrVKT5;dsmipvdH0B}@ zpVF*^Q8z4aPBd&s{C|p*pB?9!?226#jz;+Lm_IVE0C|m#g4Z4=LSC|$&8fAh|7ohy z{@}(3gr`q+#=N8;Uq$(Jvr-`t{$$A%{^A5Y@v)`V?ubM7=`5yV4#FBQqbCh4ApWu8 zNa4b{CcerIp5h!(fBczV7V@Q=_t2Vz`>4!nO343Y`6 z*LoGuZJcaRjqeBg*zyUH`Yd2nx9@1DARac;C;h?>=i&f zqGE=9ZJW=~?|!T^;SXP^-+d>9^3?4%#uzv&&;g9EGGLy?yx_}?7n!W;lT_O~vB0f_e{1#_D%La|To z*z65F_eURGD{){$zv3Hmrx4<1Kf?EP?UaDR)M8KTh(ciTNu&nwqwkSG3oJT&4s|jF zk=BFgf40s4=lN9_m}}F#m_*bAsrm|=ZpYuFQe(H1?}*9n@U6OfTf)IL`I&u14KZ&r8u3tTQ=xttRSSfq6

XT~(|@h$9@d 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

Ge{4L@E4asUDn~dlLayXc)rC~ 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 QVE2y>Ma5l5#-$_v2L;AG(*OVf diff --git a/no_unit.nc b/no_unit.nc deleted file mode 100644 index 4047ca5cbc0882ed8284621e674d16a7d306070e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133580 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%0D+$$P3 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 diff --git a/parallel_save_test.nc b/parallel_save_test.nc deleted file mode 100644 index 45f7ae1cc0af1ff55831ed9147dd29c716bf27ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133640 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 Date: Thu, 23 Jul 2026 08:32:05 +0000 Subject: [PATCH 10/23] BUG: Fix analysis correctness issues under non-default options - Support.fold_fft_half: The q=0 entry has no mirrored partner and must not be halved; power_spectrum_from_profile(resampling_method=None) previously returned half the true DC power (Parseval violation in the first bin). The ACF caller was unaffected (A[0] = 0). - Uniform/PowerSpectrum: With log collocation, q=0 is stripped before resampling, so min_value=q[1] discarded the fundamental mode. The resampling range now starts at the smallest positive wavevector. - Uniform/Autocorrelation: The reliability cutoff of the areal ACF now carries the same factor 1/2 as the profile ACF (the cutoff is estimated from the curvature but the ACF is the slope, see 10.1016/j.apsadv.2021.100190), and uses the same two-pixel lower bound; the area path previously discarded a factor-two band of reliable short-distance data. - Uniform/Interpolation: interpolate_fourier halved (and mirrored) the Nyquist rows/columns even when that direction was not enlarged; interpolation onto the same grid was not the identity. The linear interpolator truncated positions toward zero instead of flooring, extrapolating for negative fractional positions on periodic topographies (corrupting scale-dependent derivatives with fractional scale factors near the origin). - Nonuniform/VariableBandwidth: The magnification loop recorded a level before checking the post-subdivision point count, so the last datum could average segments below nb_grid_pts_cutoff (down to two points, which have zero detrended rms height), biasing the smallest bandwidth low. The boundary-point search tolerance is now relative to the subdivision width instead of an absolute 1e-6, which is unit-dependent. - Models/SelfAffine: generate_roughness resolved longcut_wavelength and then ignored it; it now synthesizes from the model PSD (which honors shortcut, rolloff and longcut). power_spectrum_isotropic no longer evaluates the power law at q=0. The order == Hurst branch of variance_derivative uses the same lower integration limit as the general branch. - Generation.self_affine_prefactor: Hurst = 0 with rms_height and Hurst = 1 with rms_slope hit removable 0/0 limits and silently produced all-NaN topographies; they now raise ValueError. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/Generation.py | 10 +++++ SurfaceTopography/Models/SelfAffine.py | 40 ++++++++++++------ .../Nonuniform/VariableBandwidth.py | 22 +++++++--- SurfaceTopography/Support/__init__.py | 4 +- SurfaceTopography/Uniform/Autocorrelation.py | 14 +++--- SurfaceTopography/Uniform/Interpolation.py | 24 ++++++++--- SurfaceTopography/Uniform/PowerSpectrum.py | 7 ++- test_der.png | Bin 18692 -> 18630 bytes 8 files changed, 89 insertions(+), 32 deletions(-) diff --git a/SurfaceTopography/Generation.py b/SurfaceTopography/Generation.py index d118c6bf..fcbfa0f5 100644 --- a/SurfaceTopography/Generation.py +++ b/SurfaceTopography/Generation.py @@ -138,11 +138,21 @@ def self_affine_prefactor(nb_grid_pts, physical_sizes, Hurst, rms_height=None, area = np.prod(physical_sizes) if rms_height is not None: + if Hurst <= 0: + # The prefactor expression below has a 0/0 limit at Hurst = 0 + # (the rms height integral diverges logarithmically); evaluating + # it would silently produce an all-NaN topography + raise ValueError( + 'Scaling to a target rms height requires a positive Hurst exponent.') # Assuming no rolloff region fac = 2 * rms_height / np.sqrt(q_min ** (-2 * Hurst) - q_max ** (-2 * Hurst)) * np.sqrt( Hurst * np.pi) elif rms_slope is not None: + if Hurst >= 1: + # Same 0/0 limit at Hurst = 1 for the rms slope integral + raise ValueError( + 'Scaling to a target rms slope requires a Hurst exponent below unity.') fac = 2 * rms_slope / np.sqrt(q_max ** (2 - 2 * Hurst) - q_min ** (2 - 2 * Hurst)) * np.sqrt( (1 - Hurst) * np.pi) diff --git a/SurfaceTopography/Models/SelfAffine.py b/SurfaceTopography/Models/SelfAffine.py index d5f9a4f4..c6545b46 100644 --- a/SurfaceTopography/Models/SelfAffine.py +++ b/SurfaceTopography/Models/SelfAffine.py @@ -76,12 +76,17 @@ def power_spectrum_isotropic(self, q): qL = self.longcut_wavevector qr = self.rolloff_wavevector - return np.where( - np.logical_and(q < qs, q > qL), - np.where(q < qr, - self.cr, - self.cr * (q / qr) ** (-2 - 2 * self.hurst_exponent)), - 0) + # Note: only evaluate the power law where it applies; evaluating it + # at q = 0 (e.g. through np.where) would produce division warnings + # and infinities + q = np.asarray(q, dtype=float) + C = np.zeros_like(q) + inside = np.logical_and(q < qs, q > qL) + plateau = np.logical_and(inside, q < qr) + decay = np.logical_and(inside, q >= qr) + C[plateau] = self.cr + C[decay] = self.cr * (q[decay] / qr) ** (-2 - 2 * self.hurst_exponent) + return C def power_spectrum_profile(self, q): # TODO: I think this is only the simplified formula. @@ -215,7 +220,11 @@ def variance_derivative(self, order, shortcut_wavelength=None, longcut_wavelengt if shortcut_wavevector > rolloff_wavevector and longcut_wavevector < shortcut_wavevector: # self-affine region if self.hurst_exponent == order: - self_affine = c0 / (2 * np.pi) * np.log(shortcut_wavevector / rolloff_wavevector) + # The self-affine region spans from the larger of the + # rolloff and longcut wavevectors to the shortcut + # wavevector, like in the general-order branch below + self_affine = c0 / (2 * np.pi) * np.log( + shortcut_wavevector / max(rolloff_wavevector, longcut_wavevector)) else: self_affine = (c0 / (2 * np.pi) * (shortcut_wavevector ** (2 * (order - self.hurst_exponent)) @@ -253,14 +262,21 @@ def generate_roughness(self, dx = pixel_size sx = nx * dx - c0 = self.cr * (2 * np.pi / self.rolloff_wavelength) ** (2 + 2 * self.hurst_exponent) + # Build a model with the (possibly overridden) cutoffs and hand its + # PSD to the Fourier synthesis. This honors shortcut, rolloff *and* + # longcut; passing `c0`/`long_cutoff` instead would only describe + # the rolloff knee and silently ignore `longcut_wavelength`. + model = SelfAffine(cr=self.cr, + rolloff_wavelength=self.rolloff_wavelength, + hurst_exponent=self.hurst_exponent, + longcut_wavelength=longcut_wavelength, + shortcut_wavelength=shortcut_wavelength, + unit=self.unit) np.random.seed(seed) roughness = fourier_synthesis((n_pixels, n_pixels), (sx, sx), - hurst=self.hurst_exponent, - c0=c0, - short_cutoff=shortcut_wavelength, - long_cutoff=self.rolloff_wavelength, + psd=model.power_spectrum_isotropic, + short_cutoff=shortcut_wavelength if shortcut_wavelength > 0 else None, unit=self.unit, **kwargs ) diff --git a/SurfaceTopography/Nonuniform/VariableBandwidth.py b/SurfaceTopography/Nonuniform/VariableBandwidth.py index 8e9fc39c..54a79ce8 100644 --- a/SurfaceTopography/Nonuniform/VariableBandwidth.py +++ b/SurfaceTopography/Nonuniform/VariableBandwidth.py @@ -53,8 +53,10 @@ def checkerboard_detrend_profile(self, subdivisions, tol=1e-6): subdivisions : int Number of subdivisions. tol : float - Tolerance for searching for existing data points at domain boundaries. - (Default: 1e-6) + Tolerance for searching for existing data points at domain + boundaries, relative to the width of a subdivision. (An absolute + tolerance would silently misbehave depending on the length unit of + the position data.) (Default: 1e-6) Returns ------- @@ -66,6 +68,9 @@ def checkerboard_detrend_profile(self, subdivisions, tol=1e-6): x, y = self.positions_and_heights() + # Convert the relative tolerance into an absolute one + atol = tol * (x[-1] - x[0]) / subdivisions + subdivided_line_scans = [] for i in range(subdivisions): # Subdivide interval @@ -82,7 +87,7 @@ def checkerboard_detrend_profile(self, subdivisions, tol=1e-6): # Put additional data points on the left and right boundaries, if there # is none already in the data set at exactly those points - if sub_ileft != 0 and sub_xleft < x[sub_ileft] - tol: + if sub_ileft != 0 and sub_xleft < x[sub_ileft] - atol: # Linear interpolation to boundary point sub_yleft = y[sub_ileft - 1] + (sub_xleft - x[sub_ileft - 1]) / ( x[sub_ileft] - x[sub_ileft - 1]) * ( @@ -91,7 +96,7 @@ def checkerboard_detrend_profile(self, subdivisions, tol=1e-6): sub_x = np.append([sub_xleft], sub_x) sub_y = np.append([sub_yleft], sub_y) - if sub_iright != len(x) and sub_xright > x[sub_iright - 1] + tol: + if sub_iright != len(x) and sub_xright > x[sub_iright - 1] + atol: # Linear interpolation to boundary point sub_yright = y[sub_iright - 1] + ( sub_xright - x[sub_iright - 1]) / ( @@ -151,14 +156,19 @@ def variable_bandwidth_from_profile(self, quantities='bh', reliable=True, resamp raise ValueError('`variable_bandwidth_from_profile` does not support resampling.') magnification = 1 - min_nb_grid_pts, = self.nb_grid_pts magnifications = [] bandwidths = [] rms_heights = [] - while min_nb_grid_pts >= nb_grid_pts_cutoff: + while True: subdivided_line_scans = self.checkerboard_detrend_profile(magnification) min_nb_grid_pts = min( [line.nb_grid_pts[0] for line in subdivided_line_scans]) + # Check the actual subdivision *before* recording it; otherwise the + # last recorded magnification can contain segments with fewer than + # `nb_grid_pts_cutoff` points (a detrended two-point segment has an + # rms height of exactly zero), biasing the smallest-bandwidth datum. + if min_nb_grid_pts < nb_grid_pts_cutoff: + break magnifications += [magnification] bandwidths += [subdivided_line_scans[0].physical_sizes[0]] rms_heights += [ diff --git a/SurfaceTopography/Support/__init__.py b/SurfaceTopography/Support/__init__.py index f7707736..74124d6c 100644 --- a/SurfaceTopography/Support/__init__.py +++ b/SurfaceTopography/Support/__init__.py @@ -49,7 +49,9 @@ def fold_fft_half(arr, n): """ result = arr[:n // 2, ...] result[1:n // 2, ...] += arr[n - 1:(n + 1) // 2:-1, ...] - result /= 2 + # The entry at zero frequency appears just once in the FFT output and + # received no mirrored contribution above; it must not be halved. + result[1:n // 2, ...] /= 2 return result diff --git a/SurfaceTopography/Uniform/Autocorrelation.py b/SurfaceTopography/Uniform/Autocorrelation.py index dba9881e..afdf58e9 100644 --- a/SurfaceTopography/Uniform/Autocorrelation.py +++ b/SurfaceTopography/Uniform/Autocorrelation.py @@ -222,9 +222,13 @@ def autocorrelation_from_area(self, reliable=True, collocation='log', nb_points= nx, ny = self.nb_grid_pts sx, sy = self.physical_sizes - # The factor of two comes from the fact that the short cutoff is estimated - # from the curvature but the ACF is the slope, see 10.1016/j.apsadv.2021.100190 - short_cutoff = self.short_reliability_cutoff(np.mean(self.pixel_size)) if reliable else np.mean(self.pixel_size) + # The factor of two (below, in the `min_radius` arguments) comes from the + # fact that the short cutoff is estimated from the curvature but the ACF + # is the slope, see 10.1016/j.apsadv.2021.100190. The lower bound of two + # pixels mirrors the profile ACF (`autocorrelation_from_profile`), which + # uses the same convention. + short_cutoff = self.short_reliability_cutoff(2 * np.mean(self.pixel_size)) if reliable \ + else 2 * np.mean(self.pixel_size) # Compute FFT and normalize if self.is_periodic: @@ -239,7 +243,7 @@ def autocorrelation_from_area(self, reliable=True, collocation='log', nb_points= # Radial average r_val, r_edges, A_val, _ = resample_radial(A_xy, physical_sizes=(sx, sy), nb_points=nb_points, nb_points_per_decade=nb_points_per_decade, collocation=collocation, - min_radius=short_cutoff, max_radius=(sx + sy) / 4, + min_radius=short_cutoff / 2, max_radius=(sx + sy) / 4, method=resampling_method) else: p = self.heights() @@ -263,7 +267,7 @@ def autocorrelation_from_area(self, reliable=True, collocation='log', nb_points= # Radial average r_val, r_edges, A_val, _ = resample_radial(A_xy, physical_sizes=(sx, sy), collocation=collocation, nb_points=nb_points, nb_points_per_decade=nb_points_per_decade, - min_radius=short_cutoff, max_radius=(sx + sy) / 2, full=False, + min_radius=short_cutoff / 2, max_radius=(sx + sy) / 2, full=False, method=resampling_method) if return_map: diff --git a/SurfaceTopography/Uniform/Interpolation.py b/SurfaceTopography/Uniform/Interpolation.py index 0238824a..51b2e926 100644 --- a/SurfaceTopography/Uniform/Interpolation.py +++ b/SurfaceTopography/Uniform/Interpolation.py @@ -50,7 +50,10 @@ def linear_interpolator_line_scan(x, periodic=None): if not periodic: if np.any(scaled_x < 0) or np.any(scaled_x > nx-1): raise ValueError('Cannot interpolate outside of physical domain for nonperiodic line scans.') - int_x = np.array(scaled_x, dtype=int) + # Note: `floor` (not truncation towards zero) is required so that + # negative positions on periodic line scans interpolate rather than + # extrapolate + int_x = np.array(np.floor(scaled_x), dtype=int) frac_x = scaled_x - int_x return (1 - frac_x) * heights[int_x % nx] + frac_x * heights[(int_x + 1) % nx] @@ -62,8 +65,11 @@ def linear_interpolator_topography(x, y, periodic=None): if not periodic: if np.any(scaled_x < 0) or np.any(scaled_x > nx-1) or np.any(scaled_y < 0) or np.any(scaled_y > ny-1): raise ValueError('Cannot interpolate outside of physical domain for nonperiodic topographies.') - int_x = np.array(scaled_x, dtype=int) - int_y = np.array(scaled_y, dtype=int) + # Note: `floor` (not truncation towards zero) is required so that + # negative positions on periodic topographies interpolate rather + # than extrapolate + int_x = np.array(np.floor(scaled_x), dtype=int) + int_y = np.array(np.floor(scaled_y), dtype=int) frac_x = scaled_x - int_x frac_y = scaled_y - int_y @@ -201,13 +207,17 @@ def interpolate_fourier(self, nb_grid_pts): # the entries at the nyquist frequency are the superposition of the # positive and negative frequency. When we increase the fourier domain, we # will split that again between positive and negative, therefore we divide - # the value by two and copy it to the corresponding negative vector - if ny % 2 == 0: + # the value by two and copy it to the corresponding negative vector. + # Note: this splitting must only happen in directions that are actually + # enlarged; if the grid size in a direction is unchanged, the entry + # remains the (folded) Nyquist entry of the output spectrum and halving + # it would corrupt the data. + if ny % 2 == 0 and nb_grid_pts[1] > ny: # the nyquist frequency also contains the symmetric and will be # twice too big when the symmetric will be included smallspectrum[:, -1] = smallspectrum[:, -1] / 2 - if nx % 2 == 0: + if nx % 2 == 0 and nb_grid_pts[0] > nx: # the nyquist frequency also contains the symmetric and will be # twice too big when the symmetric will be included smallspectrum[int(nx / 2), :] = smallspectrum[int(nx / 2), :] / 2 @@ -223,7 +233,7 @@ def interpolate_fourier(self, nb_grid_pts): # To ensure the same behaviour in the x direction # (see test_fourier_interpolate_transpose_symmetry`)` # we have to mirror the entries at the niquist frequency by hand - if snx % 2 == 0: + if snx % 2 == 0 and nb_grid_pts[0] > nx: bigspectrum[i, :sny] = smallspectrum[i, :sny] return Topography(np.fft.irfft2(bigspectrum, s=nb_grid_pts) diff --git a/SurfaceTopography/Uniform/PowerSpectrum.py b/SurfaceTopography/Uniform/PowerSpectrum.py index c3f8ebd4..41e35bb8 100644 --- a/SurfaceTopography/Uniform/PowerSpectrum.py +++ b/SurfaceTopography/Uniform/PowerSpectrum.py @@ -126,7 +126,12 @@ def power_spectrum_from_profile(self, window=None, reliable=True, resampling_met if self.dim == 2: q = np.resize(q, (C_all.shape[1], q.shape[0])).T.ravel() C_all = np.ravel(C_all) - q, _, C, _ = resample(q, C_all, min_value=q[1], max_value=short_cutoff, collocation=collocation, + # The smallest positive wavevector limits the resampling range; note + # that q = 0 has either been stripped above (log collocation) or + # carries the (uninteresting) mean of the topography. Using q[1] + # here would discard the fundamental mode when q = 0 has already + # been stripped. + q, _, C, _ = resample(q, C_all, min_value=np.min(q[q > 0]), max_value=short_cutoff, collocation=collocation, nb_points=nb_points, nb_points_per_decade=nb_points_per_decade, method=resampling_method) return q, C diff --git a/test_der.png b/test_der.png index 950aadf76ed4a052f6437c5409526d2a1e984f80..085c8b35ec8795e426e2cd006423ed006b0f14f6 100644 GIT binary patch literal 18630 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�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 From bdbad97d4020f580752ec3b993b6e61b08eaee20 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 08:48:33 +0000 Subject: [PATCH 11/23] BUG: Handle masked (undefined) data consistently in analysis and readers - Uniform/Detrending.polyfit_line_scan: np.polyfit on a masked array silently fits the raw values stored under the mask; masked points are now excluded (like the 2D counterpart already does). - Uniform/VariableBandwidth: The checkerboard detrend built its normal equations with np.bincount, which strips masks; masked points now enter both the right-hand side and the matrix with zero weight, and retain their mask in the output. - Uniform/ScalarParameters: Rq/Sq normalized by the total number of grid points and computed means over the full grid; sums and means now use the number of defined points. (A half-masked constant profile now has zero rms height; the reference values of two tests changed - notably, the old x3p-1 reference of 9.5e-05 was almost entirely a mean-normalization artifact, the true rms of that surface is 2.4e-07.) - Uniform/GeometryAnalysis.assign_patch_numbers_profile: The periodic wrap merge assigned the id of the *second pixel* instead of the first patch; a masked patch spanning the wrap boundary came back from imputation with one pixel still masked while has_undefined_data reported False. - Uniform/Imputation: The Laplace matrix used unconditional np.roll to find neighbors, wrapping across the boundary of nonperiodic topographies and coupling edge pixels to patch unknown #0. Stencil legs crossing a nonperiodic boundary are now dropped with the diagonal reduced accordingly (natural boundary condition). - IO/FromFile (HGT): SRTM void markers (-32768) are now masked instead of entering statistics as -32768 m spikes; physical sizes are no longer fabricated from the pixel counts, so the user can (and must) provide them. - IO/SDF: The ASCII variant only replaced the literal 'BAD' token; integer invalid markers (-2^15/-2^31) are now mapped to NaN like in the binary variant. Also replaces the deprecated np.fromstring. - IO/X3P: The reader now honors the ISO 5436-2 ValidPointsLink validity file (one bit per point, LSB first) and the CZ Offset; the writer writes a validity file for undefined points and no longer casts NaN to integer for integer data types. Round trips verified for all four data types with masked data. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/IO/FromFile.py | 25 +++--- SurfaceTopography/IO/SDF.py | 13 ++- SurfaceTopography/IO/X3P.py | 82 +++++++++++++++---- SurfaceTopography/Uniform/Detrending.py | 6 ++ SurfaceTopography/Uniform/GeometryAnalysis.py | 7 +- SurfaceTopography/Uniform/Imputation.py | 65 ++++++++------- SurfaceTopography/Uniform/ScalarParameters.py | 16 ++-- .../Uniform/VariableBandwidth.py | 22 ++++- test/IO/test_io.py | 4 +- test/IO/test_x3p.py | 9 +- test/test_scalar_parameters.py | 5 +- 11 files changed, 171 insertions(+), 83 deletions(-) diff --git a/SurfaceTopography/IO/FromFile.py b/SurfaceTopography/IO/FromFile.py index ae38a0ff..23466638 100644 --- a/SurfaceTopography/IO/FromFile.py +++ b/SurfaceTopography/IO/FromFile.py @@ -198,18 +198,19 @@ def read_hgt( (dim, dim) ) - if physical_sizes is None: - topography = Topography( - data, - physical_sizes=tuple(float(x) for x in data.shape), - unit=unit, - info=info, - periodic=periodic, - ) - else: - topography = Topography( - data, physical_sizes=physical_sizes, unit=unit, info=info, periodic=periodic - ) + # SRTM marks voids (missing data, e.g. over water or in radar shadows) + # with the value -32768 + _SRTM_VOID = -32768 + if np.any(data == _SRTM_VOID): + data = np.ma.masked_array(data, mask=data == _SRTM_VOID) + + # If no physical sizes are given, the topography is constructed without + # them and the user must supply them when calling `topography()`. + # (Fabricating sizes from the pixel counts would silently fix wrong + # metadata that could then no longer be overridden.) + topography = Topography( + data, physical_sizes=physical_sizes, unit=unit, info=info, periodic=periodic + ) if height_scale_factor is not None: topography = topography.scale(height_scale_factor) return topography diff --git a/SurfaceTopography/IO/SDF.py b/SurfaceTopography/IO/SDF.py index c5390efe..8975feed 100644 --- a/SurfaceTopography/IO/SDF.py +++ b/SurfaceTopography/IO/SDF.py @@ -102,14 +102,21 @@ def _parse_ascii_header(content): return header -def _read_ascii_data(data_section, num_points, num_profiles, z_scale): +def _read_ascii_data(data_section, num_points, num_profiles, z_scale, data_type): """Parse the ASCII data section.""" # Replace BAD markers with NaN data_section = data_section.replace("BAD", "NAN") # Parse data - data = np.fromstring(data_section, sep=" ", dtype=np.float64) + data = np.array(data_section.split(), dtype=np.float64) data = data.reshape(num_profiles, num_points) + + # ASCII files with an integer DataType may also mark invalid points + # with the same numeric marker as the binary variant + invalid_value = INVALID_VALUE_MAP[data_type] + if not np.isnan(invalid_value): + data[data == invalid_value] = np.nan + data *= z_scale return data @@ -309,7 +316,7 @@ def topography( data *= z_scale else: # Parse ASCII data - data = _read_ascii_data(self._data_section, nx, ny, z_scale) + data = _read_ascii_data(self._data_section, nx, ny, z_scale, data_type) # Transpose to get (nx, ny) ordering data = data.T diff --git a/SurfaceTopography/IO/X3P.py b/SurfaceTopography/IO/X3P.py index e43e9acd..a956152b 100644 --- a/SurfaceTopography/IO/X3P.py +++ b/SurfaceTopography/IO/X3P.py @@ -147,6 +147,11 @@ def __init__(self, file_path): else: self._height_scale_factor = None + # The z-axis may carry an offset: h = raw * Increment + Offset. + # This is typically present for integer data types. + offset = cz.find("Offset") + self._height_offset = float(offset.text) if offset is not None else 0.0 + # Parse record3 matrix_dimension = record3.find("MatrixDimension") nb_grid_pts_x = int(matrix_dimension.find("SizeX").text) @@ -167,6 +172,14 @@ def __init__(self, file_path): data_link = record3.find("DataLink") self._name_of_binary_file = data_link.find("PointDataLink").text + # Optional file marking invalid (undefined) data points, + # one bit per point (ISO 5436-2). This is the only way + # invalid points can be encoded for integer data types. + valid_points_link = data_link.find("ValidPointsLink") + self._name_of_valid_points_file = ( + valid_points_link.text if valid_points_link is not None else None + ) + # Check if binary file exists and has a reasonable size binary_info = x3p.getinfo(self._name_of_binary_file) expected_file_size = ( @@ -322,6 +335,27 @@ def topography( .T ) + if self._name_of_valid_points_file is not None: + # One bit per point, least-significant bit first, in the + # same point order as the height data + validdata = x3p.open(self._name_of_valid_points_file).read() + valid = ( + np.unpackbits( + np.frombuffer(validdata, dtype=np.uint8), bitorder="little" + )[: nx * ny] + .reshape(ny, nx) + .T.astype(bool) + ) + if not valid.all(): + height_data = np.ma.masked_array(height_data, mask=~valid) + + if self._height_offset != 0: + # h = raw * Increment + Offset; we fold the offset into the raw + # data so that the height scale factor can still be applied + # through the pipeline + fac = self._height_scale_factor if self._height_scale_factor is not None else 1 + height_data = height_data + self._height_offset / fac + topo = Topography( height_data, self._physical_sizes, @@ -408,12 +442,13 @@ def write_x3p( dx = sx * scale_to_meters / nx dy = sy * scale_to_meters / ny - # Get height data and convert to meters - heights = self.heights() - if np.ma.isMaskedArray(heights): - # X3P doesn't directly support masked data - use NaN for undefined - heights = np.ma.filled(heights, np.nan) - heights = heights * scale_to_meters + # Get height data and convert to meters. Undefined (masked) data points + # are encoded as NaN for floating-point data types; for integer data + # types they are stored as the minimum raw value and marked as invalid + # in the validity file (written below). + heights = np.ma.filled(self.heights(), np.nan) * scale_to_meters + invalid_mask = np.isnan(heights) + has_invalid = invalid_mask.any() # For integer types, we need to scale the data if dtype in ("I", "L"): @@ -422,6 +457,11 @@ def write_x3p( height_range = height_max - height_min if height_range == 0: height_range = 1.0 + if has_invalid: + # NaN cannot be cast to an integer; the actual value stored for + # invalid points is arbitrary since they are flagged in the + # validity file + heights = np.where(invalid_mask, height_min, heights) if dtype == "I": scale_factor = height_range / 65535 heights = ((heights - height_min) / scale_factor).astype(np_dtype) @@ -522,6 +562,17 @@ def write_x3p( ElementTree.SubElement(data_link, "PointDataLink").text = "bindata/data.bin" ElementTree.SubElement(data_link, "MD5ChecksumPointData").text = md5_hash + # Validity data: one bit per point, least-significant bit first, in the + # same point order as the height data + valid_data = None + if has_invalid: + valid_data = np.packbits( + ~invalid_mask.T.reshape(-1), bitorder="little" + ).tobytes() + ElementTree.SubElement(data_link, "ValidPointsLink").text = "bindata/valid.bin" + ElementTree.SubElement(data_link, "MD5ChecksumValidPoints").text = \ + hashlib.md5(valid_data).hexdigest().upper() + # Record4: Checksum file reference (optional, but included for completeness) record4 = ElementTree.SubElement(root, "Record4") ElementTree.SubElement(record4, "ChecksumFile").text = "md5checksum.hex" @@ -566,18 +617,13 @@ def serialize_element(elem, indent=0): # Create checksum file content checksum_content = f"{md5_hash} *bindata/data.bin\n" - # Write ZIP file - if isinstance(fobj, str): - with ZipFile(fobj, "w") as x3p: - x3p.writestr("main.xml", xml_string.encode("utf-8")) - x3p.writestr("bindata/data.bin", binary_data) - x3p.writestr("md5checksum.hex", checksum_content.encode("utf-8")) - else: - # File-like object - with ZipFile(fobj, "w") as x3p: - x3p.writestr("main.xml", xml_string.encode("utf-8")) - x3p.writestr("bindata/data.bin", binary_data) - x3p.writestr("md5checksum.hex", checksum_content.encode("utf-8")) + # Write ZIP file (`ZipFile` accepts both file names and file-like objects) + with ZipFile(fobj, "w") as x3p: + x3p.writestr("main.xml", xml_string.encode("utf-8")) + x3p.writestr("bindata/data.bin", binary_data) + if valid_data is not None: + x3p.writestr("bindata/valid.bin", valid_data) + x3p.writestr("md5checksum.hex", checksum_content.encode("utf-8")) UniformTopographyInterface.register_function("to_x3p", write_x3p) diff --git a/SurfaceTopography/Uniform/Detrending.py b/SurfaceTopography/Uniform/Detrending.py index e2df268c..0a1bd9b7 100644 --- a/SurfaceTopography/Uniform/Detrending.py +++ b/SurfaceTopography/Uniform/Detrending.py @@ -46,6 +46,12 @@ def polyfit_line_scan(self, deg): """ x, h = self.positions_and_heights() x /= self.physical_sizes[0] + # Exclude undefined (masked) data points from the fit; np.polyfit on a + # masked array would silently fit the raw values under the mask + mask = np.ma.getmaskarray(h) + if mask.any(): + x = x[~mask] + h = np.asarray(h[~mask]) coeffs = np.polyfit(x, h, deg) return np.array(coeffs)[::-1] diff --git a/SurfaceTopography/Uniform/GeometryAnalysis.py b/SurfaceTopography/Uniform/GeometryAnalysis.py index 50dd5a2f..c82150b3 100644 --- a/SurfaceTopography/Uniform/GeometryAnalysis.py +++ b/SurfaceTopography/Uniform/GeometryAnalysis.py @@ -110,8 +110,11 @@ def assign_patch_numbers_profile(mask, periodic): # Patches are odd numbers patch_ids += 1 if periodic and mask[-1]: - # Assign same patch id to first and last patch - patch_ids[patch_ids == patch_ids[-1]] = patch_ids[0] + # Assign same patch id to first and last patch. Note that the + # patch containing the first pixel always has (pre-transform) + # id 1 here; `patch_ids[0]` would be the id of the *second* + # pixel, which is not necessarily part of the first patch. + patch_ids[patch_ids == patch_ids[-1]] = 1 # Patches are odd numbers, set even numbers to zero patch_ids += 1 patch_ids[(patch_ids & 0x1).astype(bool)] = 0 diff --git a/SurfaceTopography/Uniform/Imputation.py b/SurfaceTopography/Uniform/Imputation.py index fbf7d373..80719f2c 100644 --- a/SurfaceTopography/Uniform/Imputation.py +++ b/SurfaceTopography/Uniform/Imputation.py @@ -101,37 +101,42 @@ def heights(self): pixel_index[patch_mask] = np.arange(nb_patch) pixel_index[perimeter_mask] = np.arange(nb_patch, nb_pixels) - # Assemble Laplace matrix; diagonal terms - i0 = np.arange(nb_patch) - j0 = np.arange(nb_patch) - - # Off-diagonal terms - i1 = pixel_index[patch_mask] - j1 = np.roll(pixel_index, 1, 0)[patch_mask] - i2 = pixel_index[patch_mask] - j2 = np.roll(pixel_index, -1, 0)[patch_mask] - + # Assemble Laplace matrix. Each patch pixel couples to its + # nearest neighbors; for nonperiodic topographies, stencil + # legs that cross the domain boundary must be dropped (and + # the diagonal reduced correspondingly, yielding a natural + # boundary condition). An unconditional `np.roll` would wrap + # around the boundary and couple edge pixels to unrelated + # pixels (whose `pixel_index` entry is zero, aliasing patch + # unknown #0). + legs = [(1, 0), (-1, 0)] if dim == 2: - i3 = pixel_index[patch_mask] - j3 = np.roll(pixel_index, 1, 1)[patch_mask] - i4 = pixel_index[patch_mask] - j4 = np.roll(pixel_index, -1, 1)[patch_mask] - - # Laplace matrix from coordinates - laplace = scipy.sparse.coo_matrix( - (np.concatenate((-4 * np.ones(nb_patch), np.ones(nb_patch), np.ones(nb_patch), - np.ones(nb_patch), np.ones(nb_patch), np.ones(nb_perimeter))), - (np.concatenate((i0, i1, i2, i3, i4, np.arange(nb_patch, nb_pixels))), - np.concatenate((j0, j1, j2, j3, j4, np.arange(nb_patch, nb_pixels))))), - shape=(nb_pixels, nb_pixels)) - else: - # Laplace matrix from coordinates - laplace = scipy.sparse.coo_matrix( - (np.concatenate((-2 * np.ones(nb_patch), np.ones(nb_patch), np.ones(nb_patch), - np.ones(nb_perimeter))), - (np.concatenate((i0, i1, i2, np.arange(nb_patch, nb_pixels))), - np.concatenate((j0, j1, j2, np.arange(nb_patch, nb_pixels))))), - shape=(nb_pixels, nb_pixels)) + legs += [(1, 1), (-1, 1)] + + diagonal = np.zeros(nb_patch) + rows = [] + cols = [] + for shift, axis in legs: + neighbor = np.roll(pixel_index, shift, axis) + valid = np.ones_like(patch_mask) + if not self.is_periodic: + # `np.roll(a, 1)[p]` is the neighbor a[p - 1], so + # for shift == 1 the wrapped (invalid) entries are + # at the low edge of the axis, and at the high edge + # for shift == -1 + edge = [slice(None)] * dim + edge[axis] = 0 if shift == 1 else -1 + valid[tuple(edge)] = False + sel = np.logical_and(patch_mask, valid) + rows += [pixel_index[sel]] + cols += [neighbor[sel]] + diagonal[pixel_index[sel]] -= 1 + + laplace = scipy.sparse.coo_matrix( + (np.concatenate([diagonal] + [np.ones(len(r)) for r in rows] + [np.ones(nb_perimeter)]), + (np.concatenate([np.arange(nb_patch)] + rows + [np.arange(nb_patch, nb_pixels)]), + np.concatenate([np.arange(nb_patch)] + cols + [np.arange(nb_patch, nb_pixels)]))), + shape=(nb_pixels, nb_pixels)) # Dirichlet boundary conditions (heights on perimeter) rhs = np.zeros(nb_pixels) diff --git a/SurfaceTopography/Uniform/ScalarParameters.py b/SurfaceTopography/Uniform/ScalarParameters.py index 138fcd18..9bca8741 100644 --- a/SurfaceTopography/Uniform/ScalarParameters.py +++ b/SurfaceTopography/Uniform/ScalarParameters.py @@ -57,14 +57,11 @@ def Rq(topography): if topography.is_domain_decomposed: raise NotImplementedError("`Rq` does not support MPI-decomposed topographies.") - n = np.prod(topography.nb_grid_pts) - reduction = Reduction(topography._communicator) + # Note: all means and sums must be normalized by the number of *defined* + # (unmasked) data points; masked points do not contribute to the sums profile = topography.heights() return np.sqrt( - reduction.sum( - (profile - reduction.sum(profile, axis=0) / topography.nb_grid_pts[0]) ** 2 - ) - / n + np.ma.sum((profile - np.ma.mean(profile, axis=0)) ** 2) / np.ma.count(profile) ) @@ -89,10 +86,11 @@ def Sq(topography): "Areal rms height can only be computed for topographies, not line scans." ) elif topography.dim == 2: - n = np.prod(topography.nb_grid_pts) - reduction = Reduction(topography._communicator) + # Normalize by the number of *defined* (unmasked) data points profile = topography.heights() - return np.sqrt(reduction.sum((profile - reduction.sum(profile) / n) ** 2) / n) + return np.sqrt( + np.ma.sum((profile - np.ma.mean(profile)) ** 2) / np.ma.count(profile) + ) else: raise ValueError(f"Cannot handle topographies of dimension {topography.dim}") diff --git a/SurfaceTopography/Uniform/VariableBandwidth.py b/SurfaceTopography/Uniform/VariableBandwidth.py index e6347200..614fdbca 100644 --- a/SurfaceTopography/Uniform/VariableBandwidth.py +++ b/SurfaceTopography/Uniform/VariableBandwidth.py @@ -85,10 +85,19 @@ def checkerboard_detrend_profile(self, subdivisions, order=1, return_plane=False x = x.reshape(-1) region_index = region_index.reshape(-1) - b = np.array([np.bincount(region_index, h * (x ** i)) for i in range(order + 1)]) - C = np.array([[np.bincount(region_index, x ** (k + i)) for i in range(order + 1)] for k in range(order + 1)]) + # Undefined (masked) data points must not contribute to the fit; they + # enter both the right-hand side and the normal-equation matrix with + # zero weight. (`np.bincount` silently strips masks and would otherwise + # ingest the raw values stored under the mask.) + w = 1.0 - np.ma.getmaskarray(h) + hf = np.ma.filled(h, 0) + + b = np.array([np.bincount(region_index, w * hf * (x ** i)) for i in range(order + 1)]) + C = np.array([[np.bincount(region_index, w * x ** (k + i)) for i in range(order + 1)] for k in range(order + 1)]) a = np.linalg.solve(C.T, b.T.reshape(b.T.shape + (1,))).T[0] + # Subtracting from the original (possibly masked) heights preserves the + # mask on undefined data points detrended_h = h - np.sum([a[i, region_index] * x ** i for i in range(order + 1)], axis=0) detrended_h.shape = shape @@ -166,8 +175,13 @@ def checkerboard_detrend_area(self, subdivisions, order=1, return_plane=False): y = y.reshape(-1) region_index = region_index.reshape(-1) - b = np.array([np.bincount(region_index, h * (x ** i) * (y ** j)) for i, j in ij]) - C = np.array([[np.bincount(region_index, x ** (k + i) * y ** (l + j)) for i, j in ij] for k, l in ij]) + # See `checkerboard_detrend_profile`: masked data points enter the fit + # with zero weight + w = 1.0 - np.ma.getmaskarray(h) + hf = np.ma.filled(h, 0) + + b = np.array([np.bincount(region_index, w * hf * (x ** i) * (y ** j)) for i, j in ij]) + C = np.array([[np.bincount(region_index, w * x ** (k + i) * y ** (l + j)) for i, j in ij] for k, l in ij]) a = np.linalg.solve(C.T, b.T.reshape(b.T.shape + (1,))).T[0] detrended_h = h - np.sum([a[k, region_index] * (x ** i) * (y ** j) for k, (i, j) in enumerate(ij)], axis=0) diff --git a/test/IO/test_io.py b/test/IO/test_io.py index 3f890205..4546e5cf 100644 --- a/test/IO/test_io.py +++ b/test/IO/test_io.py @@ -179,7 +179,9 @@ def _convert_filelist(filelist): ) explicit_physical_sizes = _convert_filelist( - ["matrix-5.txt", "mat-1.mat", "example-2d.npy"] + # Note: SRTM (.hgt) files do not carry physical sizes; the user needs + # to provide them + ["matrix-5.txt", "mat-1.mat", "example-2d.npy", "N46E013.hgt"] ) text_example_memory_list = [ diff --git a/test/IO/test_x3p.py b/test/IO/test_x3p.py index 9f7eaa5a..57d23111 100644 --- a/test/IO/test_x3p.py +++ b/test/IO/test_x3p.py @@ -48,8 +48,13 @@ def test_read(file_format_examples): assert surface.unit == 'm' assert surface.is_uniform assert surface.has_undefined_data - np.testing.assert_allclose(surface.rms_height_from_area(), 9.528212249587946e-05, rtol=1e-6) - np.testing.assert_allclose(surface.interpolate_undefined_data().rms_gradient(), 0.15300265543799388, rtol=1e-6) + # Note: this file contains 1.7% undefined data points. The reference + # value used to be 9.53e-05, which was an artifact of the mean height + # being normalized by the total instead of the defined point count (the + # heights sit at about -0.00572, so the resulting systematic offset + # dwarfed the true roughness of this surface). + np.testing.assert_allclose(surface.rms_height_from_area(), 2.3756839548083504e-07, rtol=1e-6) + np.testing.assert_allclose(surface.interpolate_undefined_data().rms_gradient(), 0.15300264662900961, rtol=1e-6) assert surface.info['instrument']['name'] == 'Mountains Map Technology Software (DIGITAL SURF, version 6.2)' assert surface.info['instrument']['vendor'] == 'DIGITAL SURF' diff --git a/test/test_scalar_parameters.py b/test/test_scalar_parameters.py index 05dfbfbe..04f60525 100644 --- a/test/test_scalar_parameters.py +++ b/test/test_scalar_parameters.py @@ -306,8 +306,9 @@ def test_rms_slope_from_area(): def test_rms_height_with_undefined_data(file_format_examples): t = read_topography(os.path.join(file_format_examples, "opd-3.opd")) assert t.has_undefined_data - np.testing.assert_allclose(t.rms_height_from_profile(), 0.011449207840819613) - np.testing.assert_allclose(t.rms_height_from_area(), 0.011782116700392838) + # Sums and means are normalized by the number of *defined* data points + np.testing.assert_allclose(t.rms_height_from_profile(), 0.011449215992795511) + np.testing.assert_allclose(t.rms_height_from_area(), 0.011782127367582199) @pytest.mark.skipif( From f9fb8f62a6fc2269880e350836701f53b5750840 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 13:27:48 +0000 Subject: [PATCH 12/23] BUILD: Drop broken pytest-flake8 and switch to the tifffile package The tests CI workflow has been failing on master since 2026-06-19: pytest-flake8 is unmaintained and its pytest_collect_file hookimpl is incompatible with modern pytest (PluginValidationError at startup, the plugin breaks pytest merely by being installed). Linting is already covered by the dedicated flake8 workflow, so the plugin and the flake8<8 pin are removed from the test extra. Also replace the dependency on 'tiffile' - the deprecated, misspelled alias package - with 'tifffile', and update the imports in the JPK, PS and LEXT readers accordingly. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/IO/JPK.py | 2 +- SurfaceTopography/IO/LEXT.py | 2 +- SurfaceTopography/IO/PS.py | 2 +- pyproject.toml | 4 +--- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/SurfaceTopography/IO/JPK.py b/SurfaceTopography/IO/JPK.py index 8ca9c1cd..c75c2e72 100644 --- a/SurfaceTopography/IO/JPK.py +++ b/SurfaceTopography/IO/JPK.py @@ -30,7 +30,7 @@ import dateutil from dateutil.parser import UnknownTimezoneWarning -from tiffile import TiffFile, TiffFileError +from tifffile import TiffFile, TiffFileError from ..Exceptions import ( CorruptFile, diff --git a/SurfaceTopography/IO/LEXT.py b/SurfaceTopography/IO/LEXT.py index 8d98fa87..a8659369 100644 --- a/SurfaceTopography/IO/LEXT.py +++ b/SurfaceTopography/IO/LEXT.py @@ -29,7 +29,7 @@ import dateutil.parser import xmltodict -from tiffile import TiffFile, TiffFileError +from tifffile import TiffFile, TiffFileError from ..Exceptions import CorruptFile, FileFormatMismatch, MetadataAlreadyFixedByFile from ..UniformLineScanAndTopography import Topography diff --git a/SurfaceTopography/IO/PS.py b/SurfaceTopography/IO/PS.py index 4db96d9f..d87e300b 100644 --- a/SurfaceTopography/IO/PS.py +++ b/SurfaceTopography/IO/PS.py @@ -29,7 +29,7 @@ import io import numpy as np -from tiffile import TiffFile, TiffFileError +from tifffile import TiffFile, TiffFileError from ..Exceptions import CorruptFile, FileFormatMismatch, MetadataAlreadyFixedByFile from ..Support.UnitConversion import get_unit_conversion_factor diff --git a/pyproject.toml b/pyproject.toml index 4d585d28..e0d19d3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,7 +58,7 @@ dependencies = [ "python-dateutil", "pyyaml", "requests", - "tiffile", + "tifffile", "xmltodict", "olefile", "pandas", @@ -68,10 +68,8 @@ dependencies = [ [project.optional-dependencies] test = [ - "flake8<8", "pytest", "pytest-cov", - "pytest-flake8", "runtests" ] From 156340da4f1849a3999f8ea78964f845d7796aa0 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 13:41:47 +0000 Subject: [PATCH 13/23] BUG: Fix crashes on valid inputs across core classes, analysis and readers Core classes: - translate() crashed for 1D line scans (rolled a nonexistent second axis, even with the default zero offset). - __eq__ raised (broadcast error / AttributeError) instead of returning False for mismatched grids or NotImplemented for foreign types, and defining __eq__ without __hash__ made all topographies unhashable. - is_reentrant crashed for line scans with fewer than two points. Analysis: - FourierFilteredUniformTopography's default filter_function had the wrong arity for the default isotropic=True (and an operator-precedence bug had it been called); error paths raised strings instead of exceptions. topography.filter() now works out of the box. - MirrorStichedTopography.positions() used the parent's subdomain shape and returned arrays covering only a quarter of the mirrored domain; subdomain properties are now consistent with the mirrored grid. - scale_dependent_statistical_property crashed with TypeError in the 2D single-distance threshold branch (assignment into a tuple). - scale_dependent_slope_from_area is no longer registered for nonuniform line scans, which lack autocorrelation_from_area (guaranteed AttributeError). - suggest_length_unit crashed with OverflowError for all-zero data and nonpositive log bounds; the Angstrom ASCII round trip ('A') is now a convertible unit; find_length_unit_in_string matches whole tokens only ('X Axis' no longer detects Angstrom, 'Height (nm)' now detects nm) - this feeds the XYZ reader's unit detection. Container: - scale_dependent_statistical_property: the docstring example crashed (distance vs distances); scalar distances are now supported; the inner loop no longer shadows the outer loop variable. - read_container forwards **kwargs to the reader constructor (e.g. datafile_keys of CEReader) instead of to container(), which accepted no kwargs; FileExistsError replaced by FileNotFoundError (also in the topography open path); read_published_container now checks HTTP status, applies request_args to both requests and uses a default timeout. Readers: - GWY: files containing object arrays (graphs/spectra) crashed twice over (missing kwargs pass-through and a missing comma turning nb_items into a tuple); channel indices with more than one digit (11+ channels) crashed on a single-digit regex. - FRT: block 0x00ae contained the invalid struct format 'gint32' (copied from Gwyddion C source); files with this block failed to open. - NC: nonuniform line scans reported nb_grid_pts=(None,) (read from the absent 'x' dimension instead of 'n'); the MPI guard 'rank > 1' let ranks 0 and 1 write the same file concurrently. - PLUX: multi-layer files advertised N channels but refused to read any channel other than 0. - H5: files containing HDF5 groups crashed (groups have no .shape); the reader now walks the full hierarchy and finds nested datasets. - DATX: converter validation used 'and' where 'or' was needed, letting malformed converters through; fixed a copy-paste error message. - Mitutoyo: spreadsheets without roughness-metric cells crashed with IndexError (height unit now falls back to the lateral unit); single-point scans crashed on diff; date parsing was locale-dependent (now dateutil); the workbook handle is closed. Reference values for FRT/PLUX/DATX/GWY/OPD/X3P fixtures with undefined data points changed due to the masked-data normalization fix in the previous commit; the FRT fixtures are ~30% masked and their old rms references were dominated by the wrong-mean artifact. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/Container/IO/__init__.py | 36 ++++++++++++++----- .../Container/ScaleDependentStatistics.py | 17 +++++---- .../Generic/ScaleDependentStatistics.py | 1 + SurfaceTopography/Generic/Slope.py | 5 +-- SurfaceTopography/HeightContainer.py | 23 +++++++++++- SurfaceTopography/IO/DATX.py | 6 ++-- SurfaceTopography/IO/FRT.py | 2 +- SurfaceTopography/IO/GWY.py | 17 ++++++--- SurfaceTopography/IO/H5.py | 16 ++++++--- SurfaceTopography/IO/Mitutoyo.py | 21 +++++++---- SurfaceTopography/IO/NC.py | 13 ++++--- SurfaceTopography/IO/PLUX.py | 5 +-- SurfaceTopography/IO/__init__.py | 2 +- SurfaceTopography/Support/UnitConversion.py | 24 ++++++++++--- SurfaceTopography/Uniform/Filtering.py | 6 ++-- SurfaceTopography/Uniform/Interpolation.py | 18 +++++++--- .../UniformLineScanAndTopography.py | 6 ++++ test/IO/test_datx.py | 2 +- test/IO/test_frt.py | 16 ++++----- test/IO/test_gwy.py | 10 +++--- test/IO/test_plux.py | 8 ++--- 21 files changed, 180 insertions(+), 74 deletions(-) diff --git a/SurfaceTopography/Container/IO/__init__.py b/SurfaceTopography/Container/IO/__init__.py index 4e4ab3f0..5562632b 100644 --- a/SurfaceTopography/Container/IO/__init__.py +++ b/SurfaceTopography/Container/IO/__init__.py @@ -68,7 +68,7 @@ def detect_format(fobj): raise CannotDetectFileFormat(msg) -def open_container(fobj, format=None): +def open_container(fobj, format=None, **kwargs): r""" Returns a container reader object for the file `fobj`. @@ -79,6 +79,9 @@ def open_container(fobj, format=None): format : str, optional Specify in which format the file should be interpreted. (Default: None, which means autodetect file format) + **kwargs : dict + Additional keyword arguments passed to the reader's constructor + (e.g. `datafile_keys` or `ignore_filters` of `CEReader`). Returns ------- @@ -87,13 +90,13 @@ def open_container(fobj, format=None): """ # noqa: E501 if not hasattr(fobj, 'read'): # fobj is a path if not os.path.isfile(fobj): - raise FileExistsError("file {} not found".format(fobj)) + raise FileNotFoundError("file {} not found".format(fobj)) if format is None: msg = "" for reader in readers: try: - return reader(fobj) + return reader(fobj, **kwargs) except Exception as err: msg += "tried {}: \n {}\n\n".format(reader.__name__, err) finally: @@ -107,7 +110,7 @@ def open_container(fobj, format=None): raise UnknownFileFormat( "{} not in registered container file formats {}".format( fobj, lookup_reader_by_format.keys())) - return lookup_reader_by_format[format](fobj) + return lookup_reader_by_format[format](fobj, **kwargs) def read_container(fn, format=None, **kwargs): @@ -116,8 +119,14 @@ def read_container(fn, format=None, **kwargs): Parameters ---------- - fobj : str or filelike object + fn : str or filelike object Path of the file or file-like object. + format : str, optional + Specify in which format the file should be interpreted. + (Default: None, which means autodetect file format) + **kwargs : dict + Additional keyword arguments passed to the reader's constructor + (e.g. `datafile_keys` or `ignore_filters` of `CEReader`). Returns ------- @@ -125,9 +134,9 @@ def read_container(fn, format=None, **kwargs): A list of container objects. """ containers = [] - with open_container(fn, format=format) as reader: + with open_container(fn, format=format, **kwargs) as reader: for i in range(reader.nb_containers): - containers += [reader.container(index=i, **kwargs)] + containers += [reader.container(index=i)] return containers @@ -147,12 +156,21 @@ def read_published_container(publication_url, **request_args): container : SurfaceContainer Surface container object read from URL. """ + # Default to a finite timeout so a stale server cannot hang the caller + # indefinitely; can be overridden through `request_args` + request_args.setdefault('timeout', 60) + # If we send json as a request header, then contact.engineering will response with a JSON dictionary - response = requests.get(publication_url, headers={'Accept': 'application/json'}) + custom_headers = request_args.pop('headers', {}) + response = requests.get(publication_url, + headers={'Accept': 'application/json', **custom_headers}, + **request_args) + response.raise_for_status() data = response.json() download_url = data['download_url'] # Then download and read container - container_response = requests.get(download_url, **request_args) + container_response = requests.get(download_url, headers=custom_headers, **request_args) + container_response.raise_for_status() container_file = io.BytesIO(container_response.content) return read_container(container_file) diff --git a/SurfaceTopography/Container/ScaleDependentStatistics.py b/SurfaceTopography/Container/ScaleDependentStatistics.py index 9635e576..6a7729b8 100644 --- a/SurfaceTopography/Container/ScaleDependentStatistics.py +++ b/SurfaceTopography/Container/ScaleDependentStatistics.py @@ -116,8 +116,8 @@ def scale_dependent_statistical_property( able to accept one argument (for line scans) and two arguments (for topographies). - >>> s = c.scale_dependent_statistical_property(lambda x, y=None: np.var(x), n=1, distance=[0.1, 1.0, 10], unit='um') - """ + >>> s = c.scale_dependent_statistical_property(lambda x, y=None: np.var(x), n=1, distances=[0.1, 1.0, 10], unit='um') + """ # noqa: E501 results = defaultdict(list) empty = None for i, topography in enumerate(self): @@ -156,8 +156,9 @@ def scale_dependent_statistical_property( len(existing_distances) ) else: - existing_distances = np.array(distances) - unique_distance_index = np.arange(len(distances)) + # `distances` may be a scalar + existing_distances = np.atleast_1d(np.asarray(distances, dtype=float)) + unique_distance_index = np.arange(len(existing_distances)) # For the factor n see 10.1016/j.apsadv.2021.100190 m = np.logical_and(existing_distances > n * lower, existing_distances < upper) existing_distances = existing_distances[m] @@ -172,11 +173,12 @@ def scale_dependent_statistical_property( distance=existing_distances, **kwargs, ) - # Append results to our return values - for i, e, s in zip(unique_distance_index, existing_distances, stat): + # Append results to our return values. (Note: do not reuse the + # outer loop variable `i` here.) + for j, e, s in zip(unique_distance_index, existing_distances, stat): if empty is None: empty = np.zeros_like(s) * np.nan - results[i] += [(e, s)] + results[j] += [(e, s)] else: _log.warning(f"Topography {topography} contributes no data to average.") @@ -189,6 +191,7 @@ def scale_dependent_statistical_property( if distances is not None: # If distances are specified by the user, we return exactly those distances; whether data actually exists is # indicated through the mask of a masked array + distances = np.atleast_1d(np.asarray(distances, dtype=float)) data = np.array( [ ( diff --git a/SurfaceTopography/Generic/ScaleDependentStatistics.py b/SurfaceTopography/Generic/ScaleDependentStatistics.py index 10e0b198..29b6e05f 100644 --- a/SurfaceTopography/Generic/ScaleDependentStatistics.py +++ b/SurfaceTopography/Generic/ScaleDependentStatistics.py @@ -165,6 +165,7 @@ def scale_dependent_statistical_property(self, func, n=1, scale_factor=None, dis retvals = np.array([func(dx, dy) for dx, dy in zip(*d)]) except TypeError: # If there is a single distance, the reliability analysis is skipped + d = list(d) # may be a tuple, which does not support item assignment for i in range(0, len(d)): if len(d[i]) < threshold: d[i] = np.nan diff --git a/SurfaceTopography/Generic/Slope.py b/SurfaceTopography/Generic/Slope.py index 0f792a7b..46438e6d 100644 --- a/SurfaceTopography/Generic/Slope.py +++ b/SurfaceTopography/Generic/Slope.py @@ -100,8 +100,9 @@ def scale_dependent_slope_from_area(topography, **kwargs): return r[1:], np.sqrt(2 * A[1:]) / r[1:] -# Register analysis functions from this module +# Register analysis functions from this module. Note: the areal variant is +# not registered for nonuniform line scans, which have no +# `autocorrelation_from_area`. UniformTopographyInterface.register_function('scale_dependent_slope_from_profile', scale_dependent_slope_from_profile) NonuniformLineScanInterface.register_function('scale_dependent_slope_from_profile', scale_dependent_slope_from_profile) UniformTopographyInterface.register_function('scale_dependent_slope_from_area', scale_dependent_slope_from_area) -NonuniformLineScanInterface.register_function('scale_dependent_slope_from_area', scale_dependent_slope_from_area) diff --git a/SurfaceTopography/HeightContainer.py b/SurfaceTopography/HeightContainer.py index d8fc038e..e98911eb 100644 --- a/SurfaceTopography/HeightContainer.py +++ b/SurfaceTopography/HeightContainer.py @@ -283,6 +283,10 @@ def positions_and_heights(self, **kwargs): return p, h def __eq__(self, other): + if not isinstance(other, UniformTopographyInterface): + return NotImplemented + if self.nb_grid_pts != other.nb_grid_pts: + return False return Reduction(self._communicator).all( self.unit == other.unit and self.info == other.info @@ -291,6 +295,12 @@ def __eq__(self, other): and np.allclose(self.heights(), other.heights()) ) + # Height containers compare by value but are mutable in principle; + # identity-based hashing nevertheless allows them to be used in sets + # and as dictionary keys. (Defining `__eq__` without `__hash__` would + # make them unhashable.) + __hash__ = object.__hash__ + def __getitem__(self, i): return self.heights()[i] @@ -304,7 +314,11 @@ def is_uniform(self): @property def is_reentrant(self): - return np.min(np.diff(self.positions())) <= 0 + positions = self.positions() + if len(positions) < 2: + # A line scan with less than two points cannot be reentrant + return False + return np.min(np.diff(positions)) <= 0 @property @abc.abstractmethod @@ -346,6 +360,10 @@ def has_undefined_data(self): return False def __eq__(self, other): + if not isinstance(other, NonuniformLineScanInterface): + return NotImplemented + if self.nb_grid_pts != other.nb_grid_pts: + return False return Reduction(self._communicator).all( self.unit == other.unit and self.info == other.info @@ -353,5 +371,8 @@ def __eq__(self, other): and np.allclose(self.positions_and_heights(), other.positions_and_heights()) ) + # See note on `UniformTopographyInterface.__hash__` + __hash__ = object.__hash__ + def __getitem__(self, i): return self.positions()[i], self.heights()[i] diff --git a/SurfaceTopography/IO/DATX.py b/SurfaceTopography/IO/DATX.py index f15e6223..88814b3d 100644 --- a/SurfaceTopography/IO/DATX.py +++ b/SurfaceTopography/IO/DATX.py @@ -116,7 +116,7 @@ def recursive_replace(raw_metadata, context): category = x_converter[0] unit = x_converter[1] values = x_converter[-1] - if category != b'LateralCat' and unit != b'Pixels': + if category != b'LateralCat' or unit != b'Pixels': raise UnsupportedFormatFeature('DATX reader only supports `LateralCat` with `Pixels` unit for ' 'X converter.') physical_sizes_x = self._nb_grid_pts[0] * values[1] # in units of meters! @@ -124,7 +124,7 @@ def recursive_replace(raw_metadata, context): category = y_converter[0] unit = y_converter[1] values = y_converter[-1] - if category != b'LateralCat' and unit != b'Pixels': + if category != b'LateralCat' or unit != b'Pixels': raise UnsupportedFormatFeature('DATX reader only supports `LateralCat` with `Pixels` unit for ' 'Y converter.') physical_sizes_y = self._nb_grid_pts[1] * values[1] # in units of meters! @@ -133,7 +133,7 @@ def recursive_replace(raw_metadata, context): height_unit = z_converter[1] values = z_converter[-1] if category != b'HeightCat': - raise UnsupportedFormatFeature('DATX reader only supports `LateralCat` for Z converter.') + raise UnsupportedFormatFeature('DATX reader only supports `HeightCat` for Z converter.') height_unit = mangle_length_unit_utf8(height_unit.decode('ascii')) if height_unit != self._unit: diff --git a/SurfaceTopography/IO/FRT.py b/SurfaceTopography/IO/FRT.py index 12c79405..a3b6f67c 100644 --- a/SurfaceTopography/IO/FRT.py +++ b/SurfaceTopography/IO/FRT.py @@ -457,7 +457,7 @@ class FRTReader(ReaderBase): ('filter', 'I'), ('reference_type', 'I'), ('layer_stack_id', 'I'), - ('reference_material_id', 'gint32'), + ('reference_material_id', 'i'), ('reference_constant', 'd'), ('material_thickness', 'd'), ], diff --git a/SurfaceTopography/IO/GWY.py b/SurfaceTopography/IO/GWY.py index a96867fa..32cd0538 100644 --- a/SurfaceTopography/IO/GWY.py +++ b/SurfaceTopography/IO/GWY.py @@ -146,9 +146,9 @@ def _gwy_read_object(f, skip_arrays=False): return {name: data} -def _gwy_read_object_array(f): - nb_items = unpack(" 0: + _h_unit = _roughness_metrics_list[0]["unit"] + else: + _h_unit = _x_unit + # convert x unit to h unit self._x = _x * get_unit_conversion_factor(_x_unit, _h_unit) self._unit = _h_unit @@ -160,7 +165,10 @@ def __init__(self, fobj): self._physical_sizes = np.max(self._x) self._info = { - "acquisition_time": datetime.strptime(_date_string, "%d-%b-%Y"), + # Note: `dateutil` parses month names independent of the + # current locale (datetime.strptime with '%b' fails on + # non-English locales for the same file) + "acquisition_time": dateutil.parser.parse(_date_string, dayfirst=True), "instrument": {"vendor": "Mitutoyo"}, "raw_metadata": { "roughness_metrics": _roughness_metrics_list, @@ -182,6 +190,7 @@ def __init__(self, fobj): info=self._info, ) ] + wb.close() # Return list of channels (here only a single one) @property diff --git a/SurfaceTopography/IO/NC.py b/SurfaceTopography/IO/NC.py index 72106603..6794199c 100644 --- a/SurfaceTopography/IO/NC.py +++ b/SurfaceTopography/IO/NC.py @@ -285,14 +285,16 @@ def channels(self): ny = self._y_dim nb_grid_pts = (nx, ny) else: - # This is a nonuniform line scan + # This is a nonuniform line scan; the number of points is stored + # in the 'n' dimension (there is no 'x' dimension here, which is + # why we ended up in this branch) uniform = False try: # netCDF4 - nx = self._x_dim.size + nx = self._n_dim.size except AttributeError: # scipy.io.netcdf_file - nx = self._x_dim + nx = self._n_dim nb_grid_pts = (nx,) return [ ChannelInfo( @@ -449,7 +451,10 @@ def write_nc_uniform(topography, fobj, format="NETCDF3_64BIT_OFFSET"): Dataset = _SpecialNetCDFFile kwargs = dict(version=format_to_scipy_version[format], maskandscale=True) var_kwargs = {} - if not topography.is_domain_decomposed and topography.communicator.rank > 1: + if not topography.is_domain_decomposed and topography.communicator.rank > 0: + # Only the root rank writes the file if the topography is not + # decomposed; with `rank > 1` both ranks 0 and 1 would write the + # same file concurrently and corrupt it return with Dataset(fobj, "w", **kwargs) as nc: # Serialize info dictionary as JSON and write to NetCDF file diff --git a/SurfaceTopography/IO/PLUX.py b/SurfaceTopography/IO/PLUX.py index 55eb16cf..220234f0 100644 --- a/SurfaceTopography/IO/PLUX.py +++ b/SurfaceTopography/IO/PLUX.py @@ -174,9 +174,10 @@ def topography( if channel_index is None: channel_index = self._default_channel_index - if channel_index != self._default_channel_index: + if channel_index < 0 or channel_index >= len(self._channels): raise RuntimeError( - f"There is only a single channel. Channel index must be {self._default_channel_index}." + f"Channel index is {channel_index} but must be between 0 and " + f"{len(self._channels) - 1}." ) if physical_sizes is not None: diff --git a/SurfaceTopography/IO/__init__.py b/SurfaceTopography/IO/__init__.py index 64b8c87a..18a36623 100644 --- a/SurfaceTopography/IO/__init__.py +++ b/SurfaceTopography/IO/__init__.py @@ -320,7 +320,7 @@ def check_parallel_support(reader_class): if not hasattr(fobj, 'read') and not callable(fobj): # fobj is a path if not os.path.isfile(fobj): - raise FileExistsError("file {} not found".format(fobj)) + raise FileNotFoundError("file {} not found".format(fobj)) if format is None: # Read magic buffer once for fast pre-filtering diff --git a/SurfaceTopography/Support/UnitConversion.py b/SurfaceTopography/Support/UnitConversion.py index d48e6353..080df370 100644 --- a/SurfaceTopography/Support/UnitConversion.py +++ b/SurfaceTopography/Support/UnitConversion.py @@ -22,10 +22,12 @@ # SOFTWARE. # +import re + import numpy as np length_units = {'Gm': 1e9, 'Mm': 1e6, 'km': 1000.0, 'm': 1.0, 'mm': 1e-3, 'µm': 1e-6, 'um': 1e-6, 'nm': 1e-9, - 'Å': 1e-10, 'pm': 1e-12, 'fm': 1e-15} + 'Å': 1e-10, 'A': 1e-10, 'pm': 1e-12, 'fm': 1e-15} voltage_units = {'GV': 1e9, 'MV': 1e6, 'kV': 1000.0, 'V': 1.0, 'mV': 1e-3, 'µV': 1e-6, 'nV': 1e-9, 'pV': 1e-12, 'fV': 1e-15} @@ -178,8 +180,17 @@ def suggest_length_unit(scale, lower_in_meters, upper_in_meters): """ if scale == 'linear': v = max(abs(lower_in_meters), abs(upper_in_meters)) + if v == 0: + # All-zero data can be represented in any unit + return 'm' m10 = 3 * int(np.floor(np.log10(v) / 3)) elif scale == 'log': + if upper_in_meters <= 0: + # Nothing can be displayed on a log axis anyway + return 'm' + if lower_in_meters <= 0: + # Base the suggestion on the upper bound only + lower_in_meters = upper_in_meters u10 = int(np.ceil(np.log10(upper_in_meters))) l10 = int(np.floor(np.log10(lower_in_meters))) m10 = 3 * int(np.ceil((l10 + u10) / 6) - 1) @@ -241,7 +252,12 @@ def suggest_length_unit_for_data(scale, data, unit): def find_length_unit_in_string(s): """Check the string `s` contains any length information""" - for unit, normalized_unit in length_units_to_utf8.items(): - if s.find(unit) >= 0: - return normalized_unit + # Match whole tokens only. Substring matching would produce false + # positives, e.g. the alias 'A' (Angstrom) would match 'X Axis' and + # 'nm' embedded in a longer word; a false unit silently rescales data. + for token in re.split(r'[\s()\[\]{},;:=/-]+', s): + if token in length_units: + return mangle_length_unit_utf8(token) + if token in length_units_to_utf8: + return length_units_to_utf8[token] return None diff --git a/SurfaceTopography/Uniform/Filtering.py b/SurfaceTopography/Uniform/Filtering.py index 01e1d324..03284697 100644 --- a/SurfaceTopography/Uniform/Filtering.py +++ b/SurfaceTopography/Uniform/Filtering.py @@ -241,7 +241,7 @@ class FourierFilteredUniformTopography(DecoratedUniformTopography): name = 'filtered_topography' def __init__(self, topography, - filter_function=lambda qx, qy: (np.abs(qx) <= 1) * np.abs(qy) <= 1, + filter_function=lambda q: q <= 1, isotropic=True, info={}): @@ -286,9 +286,9 @@ def filter_function(self, *args): if self.dim == 2 and not self.is_filter_isotropic \ and len(args) != 2: - raise ("ValueError: qx, qy expected") + raise ValueError("qx, qy expected") elif self.dim == 1 and len(args) != 1: - raise ("ValueError: q expected") + raise ValueError("q expected") return self._filter_function(*args) diff --git a/SurfaceTopography/Uniform/Interpolation.py b/SurfaceTopography/Uniform/Interpolation.py index 51b2e926..654166b6 100644 --- a/SurfaceTopography/Uniform/Interpolation.py +++ b/SurfaceTopography/Uniform/Interpolation.py @@ -267,6 +267,16 @@ def physical_sizes(self): def nb_grid_pts(self): return [2 * s for s in self.parent_topography.nb_grid_pts] + @property + def nb_subdomain_grid_pts(self): + # This class is serial only (see constructor); the subdomain is the + # full (mirrored) domain, not the parent's subdomain + return self.nb_grid_pts + + @property + def subdomain_locations(self): + return (0, 0) + def heights(self): h = self.parent_topography.heights() return np.block([[h[:, :], h[:, ::-1]], @@ -274,12 +284,10 @@ def heights(self): def positions(self): nx, ny = self.nb_grid_pts - lnx, lny = self.nb_subdomain_grid_pts sx, sy = self.physical_sizes - return np.meshgrid( - (self.subdomain_locations[0] + np.arange(lnx)) * sx / nx, - (self.subdomain_locations[1] + np.arange(lny)) * sy / ny, - indexing='ij') + return np.meshgrid(np.arange(nx) * sx / nx, + np.arange(ny) * sy / ny, + indexing='ij') Topography.register_function("mirror_stitch", MirrorStichedTopography) diff --git a/SurfaceTopography/UniformLineScanAndTopography.py b/SurfaceTopography/UniformLineScanAndTopography.py index 2bc009c2..56bffb11 100644 --- a/SurfaceTopography/UniformLineScanAndTopography.py +++ b/SurfaceTopography/UniformLineScanAndTopography.py @@ -759,6 +759,12 @@ def offset(self, offset, offsety=None): def heights(self): """Computes the translated profile.""" + if self.dim == 1: + # Line scans have a single offset; accept scalars as well as + # (possibly longer, from the default value) tuples + offset = self.offset + offsetx = offset[0] if np.ndim(offset) > 0 else offset + return np.roll(self.parent_topography.heights(), offsetx, axis=0) offsetx, offsety = self.offset return np.roll( np.roll(self.parent_topography.heights(), offsetx, axis=0), offsety, axis=1 diff --git a/test/IO/test_datx.py b/test/IO/test_datx.py index ca8ec56d..8a52665b 100644 --- a/test/IO/test_datx.py +++ b/test/IO/test_datx.py @@ -80,4 +80,4 @@ def test_datx2_metadata(file_format_examples): np.testing.assert_allclose(t.max(), 11.037771, rtol=1e-6) np.testing.assert_allclose(t.min(), -116.920823, rtol=1e-6) - np.testing.assert_allclose(t.rms_height_from_area(), 1.905869, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_area(), 1.9089580434424194, rtol=1e-6) diff --git a/test/IO/test_frt.py b/test/IO/test_frt.py index 9527f09b..ea427166 100644 --- a/test/IO/test_frt.py +++ b/test/IO/test_frt.py @@ -72,12 +72,12 @@ def test_frt1_metadata(file_format_examples): assert t.unit == 'm' assert t.info['instrument']['vendor'] == 'FRT' - np.testing.assert_allclose(t.rms_height_from_area(), 2.047476e-05, rtol=1e-6) - np.testing.assert_allclose(t.rms_height_from_profile(), 1.23256e-05, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_area(), 4.915785774480653e-06, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_profile(), 1.951522762933369e-06, rtol=1e-6) t = t.detrend('curvature') - np.testing.assert_allclose(t.rms_height_from_area(), 3.463934e-06, rtol=1e-4) - np.testing.assert_allclose(t.rms_height_from_profile(), 1.248258e-06, rtol=1e-4) + np.testing.assert_allclose(t.rms_height_from_area(), 4.157523910393923e-06, rtol=1e-4) + np.testing.assert_allclose(t.rms_height_from_profile(), 1.0968828309450876e-06, rtol=1e-4) assert t.has_undefined_data @@ -103,11 +103,11 @@ def test_frt2_metadata(file_format_examples): assert t.unit == 'm' assert t.info['instrument']['vendor'] == 'FRT' - np.testing.assert_allclose(t.rms_height_from_area(), 1.853335e-05, rtol=1e-6) - np.testing.assert_allclose(t.rms_height_from_profile(), 1.439208e-05, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_area(), 8.826763181113768e-06, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_profile(), 7.663174319074244e-06, rtol=1e-6) t = t.detrend('curvature') - np.testing.assert_allclose(t.rms_height_from_area(), 7.405055e-06, rtol=1e-4) - np.testing.assert_allclose(t.rms_height_from_profile(), 7.332406e-06, rtol=1e-4) + np.testing.assert_allclose(t.rms_height_from_area(), 8.688677385181484e-06, rtol=1e-4) + np.testing.assert_allclose(t.rms_height_from_profile(), 7.627057775705951e-06, rtol=1e-4) assert t.has_undefined_data diff --git a/test/IO/test_gwy.py b/test/IO/test_gwy.py index e000c2fd..a7fb91ef 100644 --- a/test/IO/test_gwy.py +++ b/test/IO/test_gwy.py @@ -71,12 +71,14 @@ def test_gwyddion_metadata(file_format_examples): assert t.unit == "m" - np.testing.assert_allclose(t.rms_height_from_area(), 8.355506e-09, rtol=1e-6) - np.testing.assert_allclose(t.rms_height_from_profile(), 7.14371e-09, rtol=1e-6) + # Note: this file contains undefined data points; sums and means are + # normalized by the number of *defined* points + np.testing.assert_allclose(t.rms_height_from_area(), 8.356451162720974e-09, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_profile(), 7.115125208610971e-09, rtol=1e-6) t = t.detrend("curvature") - np.testing.assert_allclose(t.rms_height_from_area(), 6.499288e-09, rtol=1e-6) - np.testing.assert_allclose(t.rms_height_from_profile(), 6.429779e-09, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_area(), 6.500515512793928e-09, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_profile(), 6.43099193553545e-09, rtol=1e-6) def test_gwyddion_undefined(file_format_examples): diff --git a/test/IO/test_plux.py b/test/IO/test_plux.py index 43676a38..bf2fc236 100644 --- a/test/IO/test_plux.py +++ b/test/IO/test_plux.py @@ -71,9 +71,9 @@ def test_plux_metadata(file_format_examples): assert t.info['instrument']['vendor'] == 'Sensofar' assert t.info['instrument']['name'] == 'S neox' - np.testing.assert_allclose(t.rms_height_from_area(), 2.15209, rtol=1e-6) - np.testing.assert_allclose(t.rms_height_from_profile(), 1.582635, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_area(), 2.162500740959119, rtol=1e-6) + np.testing.assert_allclose(t.rms_height_from_profile(), 1.589988838291435, rtol=1e-6) t = t.detrend('curvature') - np.testing.assert_allclose(t.rms_height_from_area(), 1.435114, rtol=1e-4) - np.testing.assert_allclose(t.rms_height_from_profile(), 1.202886, rtol=1e-4) + np.testing.assert_allclose(t.rms_height_from_area(), 1.4420593851629364, rtol=1e-4) + np.testing.assert_allclose(t.rms_height_from_profile(), 1.2085860010079734, rtol=1e-4) From b2e3415224e829f2e3ac66bf2d8314d1138f58a0 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 14:17:27 +0000 Subject: [PATCH 14/23] BUG: Fix metadata, registration and infrastructure correctness issues Metadata: - InfoModel now preserves free-form info keys (extra='allow'); the docstrings promise a free-form dictionary for third-party codes, but pydantic's default silently discarded unknown keys. Fields are properly Optional, so explicitly passing None no longer raises; ValueAndUnitModel accepts a missing unit (data without unit information). - The base-class DecoratedTopography.info passed a BaseModel to model_copy(update=...), which requires a dict (AttributeError under pydantic 2); it now merges parent and decorator info once, and the two copy-pasted overrides in the uniform/nonuniform subclasses are gone. Function registration: - register_function uses copy-on-write per-class registries with an MRO-merged lookup: functions registered on a subclass no longer leak into the shared base-class dictionary. Functions previously registered on concrete classes (interpolate_linear/bicubic, mirror_stitch, fourier_derivative, scan_with_rigid_sphere) are registered on the interfaces with explicit dimension guards, so they remain available on decorated topographies and produce clear errors on data of the wrong dimension (scan_with_rigid_sphere now also works on decorated line scans and rejects 2D maps instead of producing garbage via its periodic branch). - The deprecated= flag is honored (DeprecationWarning on call); the inactive flags on the nonuniform rms_*_from_profile aliases were dropped since the same names are primary API for uniform data. - apply() returns the function's result in both dispatch bases. - The doi decorator unwinds its bookkeeping in a finally block (an exception inside an analysis function previously corrupted the class-level state permanently, silently dumping DOIs into the caller's set forever after) and marks wrappers with __has_doi__ (the name check was defeated by functools.wraps and double-wrapped every function). Infrastructure: - ExtendedJSONEncoder overrides iterencode (json.dump bypassed encode and emitted invalid JSON), converts Inf like NaN, and nan_to_none handles nomask and multidimensional masked arrays. - Pipeline.pipeline_function no longer delegates unknown attributes to the parent topography, which silently applied chained pipeline functions to the parent and discarded the wrapped transformation. - logging.getLogger instead of detached Logger instances (Regression, Averaging, Container SDS, XYZ reader). - CEFileOpener/ZAGFileOpener close the containing ZipFile together with the member stream (file-descriptor leak until GC). - DeclarativeReaderBase supports channel_id/height_channel_index selection and no longer calls scale(None) for formats without height-scale metadata. - make_topography_from_function no longer assigns _heights directly, so constructor validation (shape check, float conversion, NaN masking) applies. Readers: - JPK: per-channel raw_metadata no longer contains the last TIFF page's metadata (stale loop variable). - ZON: the mutable default info dictionary is no longer mutated (metadata leaked into all subsequent calls, including via ZAG containers), and user-provided info takes precedence. - MetroPro: metadata fields declared little/native endian in this big-endian format are now read big-endian (heights were unaffected, but raw_metadata values and the instrument serial were garbage); dead header-size constants removed. - OPD: metadata blocks advance by their directory-declared length instead of assuming fixed sizes (silent offset shift), and a missing Wavelength block raises CorruptFile instead of NameError. - VK: physical sizes follow the pixel convention (n * pixel size). Reference values in the Wyko ASC test updated for the masked-data normalization fix (the fixture is half undefined). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/Container/Averaging.py | 2 +- SurfaceTopography/Container/IO/CE.py | 13 +- SurfaceTopography/Container/IO/ZAG.py | 20 ++- .../Container/ScaleDependentStatistics.py | 2 +- .../Container/SurfaceContainer.py | 35 +++- SurfaceTopography/HeightContainer.py | 73 +++++++-- SurfaceTopography/IO/JPK.py | 7 +- SurfaceTopography/IO/MetroPro.py | 149 ++++++++---------- SurfaceTopography/IO/OPD.py | 23 ++- SurfaceTopography/IO/Reader.py | 22 +-- SurfaceTopography/IO/VK.py | 8 +- SurfaceTopography/IO/XYZ.py | 2 +- SurfaceTopography/IO/ZON.py | 8 +- SurfaceTopography/Metadata.py | 37 +++-- SurfaceTopography/Nonuniform/Converters.py | 2 +- .../Nonuniform/ScalarParameters.py | 11 +- SurfaceTopography/NonuniformLineScan.py | 7 +- SurfaceTopography/Pipeline.py | 17 +- SurfaceTopography/ScanningProbe/RigidScan.py | 20 ++- SurfaceTopography/Special.py | 33 ++-- SurfaceTopography/Support/Bibliography.py | 25 ++- SurfaceTopography/Support/JSON.py | 23 ++- SurfaceTopography/Support/Regression.py | 2 +- SurfaceTopography/Uniform/Converters.py | 2 +- SurfaceTopography/Uniform/Derivative.py | 6 +- SurfaceTopography/Uniform/Interpolation.py | 13 +- .../UniformLineScanAndTopography.py | 7 +- test/IO/test_asc.py | 4 +- test/IO/test_vk.py | 13 +- 29 files changed, 381 insertions(+), 205 deletions(-) diff --git a/SurfaceTopography/Container/Averaging.py b/SurfaceTopography/Container/Averaging.py index 8d96ad10..1a753d65 100644 --- a/SurfaceTopography/Container/Averaging.py +++ b/SurfaceTopography/Container/Averaging.py @@ -34,7 +34,7 @@ from ..Support.Regression import resample from .SurfaceContainer import SurfaceContainer -_log = logging.Logger(__name__) +_log = logging.getLogger(__name__) def log_average(self, function_name, unit, nb_points_per_decade=10, reliable=True, progress_callback=None, **kwargs): diff --git a/SurfaceTopography/Container/IO/CE.py b/SurfaceTopography/Container/IO/CE.py index 3546e15c..370e89f8 100644 --- a/SurfaceTopography/Container/IO/CE.py +++ b/SurfaceTopography/Container/IO/CE.py @@ -77,7 +77,18 @@ def __init__(self, zipname, filename): self._filename = filename def __call__(self): - return ZipFile(self._zipname, mode="r").open(self._filename, mode="r") + zipfile = ZipFile(self._zipname, mode="r") + stream = zipfile.open(self._filename, mode="r") + # Close the containing ZipFile together with the member stream; + # otherwise its file descriptor leaks until garbage collection + original_close = stream.close + + def close(): + original_close() + zipfile.close() + + stream.close = close + return stream class CEReader(ContainerReaderBase): diff --git a/SurfaceTopography/Container/IO/ZAG.py b/SurfaceTopography/Container/IO/ZAG.py index d00a60e8..b790aabf 100644 --- a/SurfaceTopography/Container/IO/ZAG.py +++ b/SurfaceTopography/Container/IO/ZAG.py @@ -78,9 +78,25 @@ def __call__(self): # thumbnail) preceding the ZIP archive, since ZIP archives are # located through their central directory at the end of the file. if hasattr(self._fobj, "read"): - return ZipFile(self._fobj, "r").open(self._filename, "r") + zipfile = ZipFile(self._fobj, "r") + close_files = [zipfile] else: - return ZipFile(open(self._fobj, "rb"), "r").open(self._filename, "r") + rawfile = open(self._fobj, "rb") + zipfile = ZipFile(rawfile, "r") + close_files = [zipfile, rawfile] + stream = zipfile.open(self._filename, "r") + # Close the containing ZipFile (and raw file) together with the + # member stream; otherwise file descriptors leak until garbage + # collection + original_close = stream.close + + def close(): + original_close() + for f in close_files: + f.close() + + stream.close = close + return stream class ZAGReader(ContainerReaderBase): diff --git a/SurfaceTopography/Container/ScaleDependentStatistics.py b/SurfaceTopography/Container/ScaleDependentStatistics.py index 6a7729b8..fa568981 100644 --- a/SurfaceTopography/Container/ScaleDependentStatistics.py +++ b/SurfaceTopography/Container/ScaleDependentStatistics.py @@ -32,7 +32,7 @@ from ..Exceptions import NoReliableDataError from .SurfaceContainer import SurfaceContainer -_log = logging.Logger(__name__) +_log = logging.getLogger(__name__) def scale_dependent_statistical_property( diff --git a/SurfaceTopography/Container/SurfaceContainer.py b/SurfaceTopography/Container/SurfaceContainer.py index fd6be761..db5dc5ad 100644 --- a/SurfaceTopography/Container/SurfaceContainer.py +++ b/SurfaceTopography/Container/SurfaceContainer.py @@ -26,6 +26,8 @@ import abc from functools import update_wrapper +from ..Support.Deprecation import deprecated as deprecation_warning + class SurfaceContainer(metaclass=abc.ABCMeta): """A list of topographies""" @@ -40,31 +42,48 @@ def __len__(self): def __getitem__(self, item): raise NotImplementedError + def _function_registry(self): + """ + Return the merged dictionary of functions registered on this class + and its bases. See `AbstractTopography._function_registry`. + """ + functions = {} + for klass in reversed(type(self).__mro__): + functions.update(klass.__dict__.get('_functions', {})) + return functions + def apply(self, name, *args, **kwargs): - self._functions[name](self, *args, **kwargs) + return self._function_registry()[name](self, *args, **kwargs) def __getattr__(self, name): - if name in self._functions: + functions = self._function_registry() + if name in functions: def func(*args, **kwargs): - return self._functions[name](self, *args, **kwargs) + return functions[name](self, *args, **kwargs) - update_wrapper(func, self._functions[name]) + update_wrapper(func, functions[name]) return func else: raise AttributeError( "Unkown attribute '{}' and no analysis or pipeline function of this name registered" "(class {}). Available functions: {}".format( - name, self.__class__.__name__, ", ".join(self._functions.keys()) + name, self.__class__.__name__, ", ".join(functions.keys()) ) ) def __dir__(self): - return sorted(super().__dir__() + [*self._functions]) + return sorted(super().__dir__() + [*self._function_registry()]) @classmethod - def register_function(cls, name, function): - cls._functions.update({name: function}) + def register_function(cls, name, function, deprecated=False): + if deprecated: + function = deprecation_warning()(function) + if '_functions' not in cls.__dict__: + # Copy on write: registering on a subclass must not leak into + # the shared base-class registry + cls._functions = {} + cls._functions[name] = function class InMemorySurfaceContainer(SurfaceContainer): diff --git a/SurfaceTopography/HeightContainer.py b/SurfaceTopography/HeightContainer.py index e98911eb..ff2262e1 100644 --- a/SurfaceTopography/HeightContainer.py +++ b/SurfaceTopography/HeightContainer.py @@ -37,6 +37,7 @@ from .Metadata import InfoModel from .Support import doi +from .Support.Deprecation import deprecated as deprecation_warning class AbstractTopography(object): @@ -64,27 +65,46 @@ def __init__(self, unit=None, info={}, communicator=MPI.COMM_WORLD): self._info = InfoModel(**info) self._communicator = communicator + def _function_registry(self): + """ + Return the dictionary of registered analysis and pipeline functions + for this object. Functions registered on any class in the MRO are + visible; functions registered on a subclass are confined to that + subclass (e.g. functions registered on `Topography` do not appear + on line scans). An instance-level `_functions` attribute overrides + the class registry (used by converter classes that redirect + dispatch). + """ + try: + return self.__dict__['_functions'] + except KeyError: + functions = {} + for klass in reversed(type(self).__mro__): + functions.update(klass.__dict__.get('_functions', {})) + return functions + def apply(self, name, *args, **kwargs): - self._functions[name](self, *args, **kwargs) + return self._function_registry()[name](self, *args, **kwargs) def __getattr__(self, name): - if name in self._functions: + functions = self._function_registry() + if name in functions: def func(*args, **kwargs): - return self._functions[name](self, *args, **kwargs) + return functions[name](self, *args, **kwargs) - update_wrapper(func, self._functions[name]) + update_wrapper(func, functions[name]) return func else: raise AttributeError( "Unkown attribute '{}' and no analysis or pipeline function of this name registered (class {}). " "Available functions: {}".format( - name, self.__class__.__name__, ", ".join(self._functions.keys()) + name, self.__class__.__name__, ", ".join(functions.keys()) ) ) def __dir__(self): - return sorted(super().__dir__() + [*self._functions]) + return sorted(super().__dir__() + [*self._function_registry()]) def __getstate__(self): """ @@ -183,10 +203,13 @@ def __setstate__(self, state): @property def info(self) -> dict: - """Return info dictionary""" - return self.parent_topography._info.model_copy(update=self._info).model_dump( - exclude_none=True - ) + """ + Return the info dictionary of the parent topography, updated with + the entries of this decorator. + """ + info = self.parent_topography.info + info.update(self._info.model_dump(exclude_none=True)) + return info @property def nb_subdomain_grid_pts(self): @@ -199,13 +222,33 @@ def pipeline(self): class TopographyInterface(object): @classmethod def register_function(cls, name, function, deprecated=False): # noqa: N805 - # FIXME! Wrap in warnings.deprecated decorator, will be introduced in Python 3.13 - if function.__name__ != "func_with_doi": + if deprecated: + function = deprecation_warning()(function) + if not getattr(function, '__has_doi__', False): # We want the `dois` argument for all pipeline functions. If no # doi has been specified, we simply wrap it in an empty decorator. - cls._functions.update({name: doi()(function)}) - else: - cls._functions.update({name: function}) + # (Note: the doi decorator marks its wrappers with `__has_doi__`; + # checking the function name would be defeated by + # functools.wraps.) + function = doi()(function) + if '_functions' not in cls.__dict__: + # Copy on write: registering a function on a subclass (e.g. a + # 2D-only analysis on `Topography`) must not leak into the + # shared registry of the base class, where it would become + # visible on line scans as well. + cls._functions = {} + cls._functions[name] = function + + @classmethod + def _all_functions(cls): # noqa: N805 + """ + Return the merged registry of analysis and pipeline functions + registered on this class and its bases. + """ + functions = {} + for klass in reversed(cls.__mro__): + functions.update(klass.__dict__.get('_functions', {})) + return functions class UniformTopographyInterface(TopographyInterface, metaclass=abc.ABCMeta): diff --git a/SurfaceTopography/IO/JPK.py b/SurfaceTopography/IO/JPK.py index c75c2e72..54a03d8e 100644 --- a/SurfaceTopography/IO/JPK.py +++ b/SurfaceTopography/IO/JPK.py @@ -275,9 +275,12 @@ def __init__(self, file_path): # Conversion from meters to reported unit fac = get_unit_conversion_factor("m", default_slot_unit) - # Construct raw metadata dictionary + # Construct raw metadata dictionary. Note: `channel` is the + # metadata of the present channel; `channel_metadata` is a + # stale loop variable from the parsing loop above that + # always refers to the last TIFF page. raw_metadata = global_metadata.copy() - raw_metadata.update(channel_metadata) + raw_metadata.update(channel) # Construct channel info self._channels += [ diff --git a/SurfaceTopography/IO/MetroPro.py b/SurfaceTopography/IO/MetroPro.py index dac2c081..f21f0521 100644 --- a/SurfaceTopography/IO/MetroPro.py +++ b/SurfaceTopography/IO/MetroPro.py @@ -51,15 +51,6 @@ class MetroProReader(DeclarativeReaderBase): _MAGIC2 = b"\x88\x1b\x03\x70" _MAGIC3 = b"\x88\x1b\x03\x71" - _HEADER_SIZE12 = 834 - _HEADER_SIZE3 = 4096 - - _HEADER_FORMATS = { - _MAGIC1: _HEADER_SIZE12, - _MAGIC2: _HEADER_SIZE12, - _MAGIC3: _HEADER_SIZE3, - } - @classmethod def can_read(cls, buffer: bytes) -> MagicMatch: if len(buffer) < 4: @@ -121,7 +112,7 @@ def can_read(cls, buffer: bytes) -> MagicMatch: ("part_thickness", ">f"), ("sw_llc", ">h"), ("target_range", ">f"), - ("rad_crv_veasure_eeq", "h"), ("min_mod", ">i"), ("min_mod_count", ">i"), ("phase_res", ">h"), @@ -159,84 +150,84 @@ def can_read(cls, buffer: bytes) -> MagicMatch: ("fda_res", ">h"), ("scan_descr", "20s"), ("n_fiducials_a", ">h"), - ("fiducials_a", "14f"), + ("fiducials_a", ">14f"), ("pixel_width", ">f"), ("pixel_height", ">f"), ("exit_pupil_diam", ">f"), ("light_level_pct", ">f"), - ("coords_state", "i"), + ("coords_x_pos", ">f"), + ("coords_y_pos", ">f"), + ("coords_z_pos", ">f"), + ("coords_x_rot", ">f"), + ("coords_y_rot", ">f"), + ("coords_z_rot", ">f"), + ("coherence_mode", ">h"), + ("surface_filter", ">h"), ("sys_err_file_name", "28s"), ("zoom_descr", "8s"), - ("alpha_part", "f"), + ("beta_part", ">f"), + ("dist_part", ">f"), + ("cam_split_loc_x", ">h"), + ("cam_split_loc_y", ">h"), + ("cam_split_trans_x", ">h"), + ("cam_split_trans_y", ">h"), ("material_a", "24s"), ("material_b", "24s"), - ("cam_split_unused", "h"), (None, "2b"), - ("dmi_ctr_x", "f"), + ("dmi_ctr_y", ">f"), + ("sph_dist_corr", ">h"), (None, "2b"), - ("sph_dist_part_na", "f"), + ("sph_dist_part_radius", ">f"), + ("sph_dist_cal_na", ">f"), + ("sph_dist_cal_radius", ">f"), + ("surface_type", ">h"), + ("ac_surface_type", ">h"), + ("z_position", ">f"), + ("power_multiplier", ">f"), + ("focus_multiplier", ">f"), + ("rad_crv_vocus_sal_lactor", ">f"), + ("rad_crv_vower_ral_lactor", ">f"), + ("ftp_left_pos", ">f"), + ("ftp_right_pos", ">f"), + ("ftp_pitch_pos", ">f"), + ("ftp_roll_pos", ">f"), + ("min_mod_pct", ">f"), + ("max_inten", ">i"), + ("ring_of_fire", ">h"), (None, "1b"), ("rc_orientation", "B"), - ("rc_distance", "f"), + ("rc_angle", ">f"), + ("rc_diameter", ">f"), ("rem_fringes_mode", ">h"), (None, "1b"), ("ftpsi_phase_res", "B"), - ("frames_acquired", "h"), + ("cavity_type", ">h"), + ("cam_frame_rate", ">f"), + ("tune_range", ">f"), + ("cal_pix_loc_x", ">h"), + ("cal_pix_loc_y", ">h"), + ("n_tst_cal_pts", ">h"), + ("n_ref_cal_pts", ">h"), + ("tst_cal_pts", ">4f"), + ("ref_cal_pts", ">4f"), + ("tst_cal_pix_opd", ">f"), + ("ref_cal_pix_opd", ">f"), + ("sys_serial2", ">i"), + ("flash_phase_dc_mask", ">f"), + ("flash_phase_alias_mask", ">f"), + ("flash_phase_filter", ">f"), ("scan_direction", "B"), (None, "1b"), ("pre_fda_filter", ">h"), (None, "4b"), - ("ftpsi_res_factor", "i"), (None, "8b"), ], name="header1", @@ -274,21 +265,21 @@ def can_read(cls, buffer: bytes) -> MagicMatch: ("asphere_att8", ">f"), ("asphere_aperture_pct", ">f"), ("asphere_optimized_r0", ">f"), - ("iff_state", "i"), ("iff_idr_filename", "42s"), ("iff_ise_filename", "42s"), (None, "2b"), ("asphere_eqn_r0", ">f"), ("asphere_eqn_k", ">f"), ("asphere_eqn_coef", ">21f"), - ("awm_enable", "i"), + ("awm_vacuum_wavelength_nm", ">f"), + ("awm_air_wavelength_nm", ">f"), + ("awm_air_temperature_degc", ">f"), + ("awm_air_pressure_mmhg", ">f"), + ("awm_air_rel_humidity_pct", ">f"), + ("awm_air_quality", ">f"), + ("awm_input_power_mw", ">f"), ("asphere_optimizations", ">i"), ("asphere_optimization_mode", ">i"), ("asphere_optimized_k", ">f"), @@ -301,7 +292,7 @@ def can_read(cls, buffer: bytes) -> MagicMatch: (None, "2b"), ("n_fiducials_d", ">h"), ("fiducials_d", ">14f"), - ("gpi_enc_zoom_mag", "f"), ("asphere_max_distortion", ">f"), ("asphere_distortion_uncert", ">f"), ("field_stop_name", "12s"), diff --git a/SurfaceTopography/IO/OPD.py b/SurfaceTopography/IO/OPD.py index c316cad2..6a40548b 100644 --- a/SurfaceTopography/IO/OPD.py +++ b/SurfaceTopography/IO/OPD.py @@ -26,7 +26,7 @@ import numpy as np -from ..Exceptions import MetadataAlreadyFixedByFile +from ..Exceptions import CorruptFile, MetadataAlreadyFixedByFile from ..UniformLineScanAndTopography import Topography from .common import OpenFromAny from .Reader import ChannelInfo, ReaderBase @@ -102,9 +102,16 @@ def read_block(f): pixel_size = 1.0 aspect = 1.0 mult = 1.0 + wavelength = None for n, t, L, a in blocks: if L <= 0: continue + # Remember the block start; each block occupies exactly the + # length L declared in the directory, independent of how + # many bytes we actually interpret. (Consuming fixed byte + # counts would silently shift all subsequent block offsets + # if L differs.) + block_start = f.tell() if n == "RAW DATA" or n == "RAW_DATA" or n == "OPD" or n == "Raw": nx, ny, elsize = unpack("= len(channels): - raise RuntimeError( - f"Channel index is {channel_index} but must be between 0 and {len(channels) - 1}." - ) - - # Get channel information - channel = channels[channel_index] + # Get channel information (this also supports the `channel_id` and + # `height_channel_index` selection methods of the base class) + channel, channel_index = self._resolve_channel( + channel_index, channel_id, height_channel_index + ) if physical_sizes is None: physical_sizes = channel.physical_sizes @@ -1355,4 +1351,8 @@ def topography( periodic=False if periodic is None else periodic, info=_info, ) + if height_scale_factor is None: + # A declarative reader is not required to provide height-scale + # metadata; without it, the heights are returned unscaled + return topo return topo.scale(height_scale_factor) diff --git a/SurfaceTopography/IO/VK.py b/SurfaceTopography/IO/VK.py index 792e4b59..77537067 100644 --- a/SurfaceTopography/IO/VK.py +++ b/SurfaceTopography/IO/VK.py @@ -255,9 +255,13 @@ def read_vk34_header(self, f): ) ) + # Note: the physical size is the number of pixels times the pixel + # size (pixel convention, like everywhere else in this library and + # in other implementations of this file format), not the distance + # between the first and last pixel centers self._physical_sizes = ( - float(self._data["width"] - 1) * self._header["x_length_per_pixel"], - float(self._data["height"] - 1) * self._header["y_length_per_pixel"], + float(self._data["width"]) * self._header["x_length_per_pixel"], + float(self._data["height"]) * self._header["y_length_per_pixel"], ) self._unit = "pm" diff --git a/SurfaceTopography/IO/XYZ.py b/SurfaceTopography/IO/XYZ.py index 18797846..777b7d0d 100644 --- a/SurfaceTopography/IO/XYZ.py +++ b/SurfaceTopography/IO/XYZ.py @@ -44,7 +44,7 @@ from .common import OpenFromAny from .Reader import ChannelInfo, ReaderBase -_log = logging.Logger(__name__) +_log = logging.getLogger(__name__) def read_text_header_hfm(fobj, unit, height_scale_factor): diff --git a/SurfaceTopography/IO/ZON.py b/SurfaceTopography/IO/ZON.py index 8fadba68..65d54ada 100644 --- a/SurfaceTopography/IO/ZON.py +++ b/SurfaceTopography/IO/ZON.py @@ -240,7 +240,13 @@ def topography( physical_sizes, channel_info.physical_sizes ) - info.update(channel_info.info) + # Merge file metadata with user-provided info; do not mutate the + # `info` argument (updating the mutable default dictionary would + # leak metadata into all subsequent calls), and let user-provided + # entries take precedence like in the other readers + _info = channel_info.info.copy() + _info.update(info) + info = _info if unit is not None: raise MetadataAlreadyFixedByFile("unit") diff --git a/SurfaceTopography/Metadata.py b/SurfaceTopography/Metadata.py index 06897972..e9349591 100644 --- a/SurfaceTopography/Metadata.py +++ b/SurfaceTopography/Metadata.py @@ -3,42 +3,49 @@ """ from datetime import datetime -from typing import Union +from typing import Optional, Union import pydantic class ValueAndUnitModel(pydantic.BaseModel): value: float - unit: str + # The unit may be None for data without unit information + unit: Optional[str] = None class InstrumentParametersModel(pydantic.BaseModel): # Name of the instrument - name: str = None + name: Optional[str] = None # Measurement resolution (as a simple cutoff of lateral scales) - resolution: ValueAndUnitModel = None + resolution: Optional[ValueAndUnitModel] = None # Tip radius (for scanning probe measurements) - tip_radius: ValueAndUnitModel = None + tip_radius: Optional[ValueAndUnitModel] = None class InstrumentModel(pydantic.BaseModel): - name: str = None - vendor: str = None - serial: str = None - software: str = None - parameters: InstrumentParametersModel = None + name: Optional[str] = None + vendor: Optional[str] = None + serial: Optional[str] = None + software: Optional[str] = None + parameters: Optional[InstrumentParametersModel] = None class InfoModel(pydantic.BaseModel): + # The `info` dictionary is documented as free form: it can carry + # auxiliary data that is never interpreted by this library but used by + # third-party code. Unknown keys must therefore be preserved. (pydantic's + # default `extra='ignore'` would silently discard them.) + model_config = pydantic.ConfigDict(extra='allow') + # Date and time of the measurement - acquisition_time: datetime = None + acquisition_time: Optional[datetime] = None # Instrument information - instrument: InstrumentModel = None + instrument: Optional[InstrumentModel] = None # Finally, allow attachment of raw metadata that will depend on the reader - raw_metadata: Union[dict, list] = None + raw_metadata: Optional[Union[dict, list]] = None # Name of channel - channel_name: str = None + channel_name: Optional[str] = None # Datafile info is attached by container readers - datafile: dict = None + datafile: Optional[dict] = None diff --git a/SurfaceTopography/Nonuniform/Converters.py b/SurfaceTopography/Nonuniform/Converters.py index 34268d9b..e792f521 100644 --- a/SurfaceTopography/Nonuniform/Converters.py +++ b/SurfaceTopography/Nonuniform/Converters.py @@ -73,7 +73,7 @@ def __init__(self, topography, nb_points=None, padding=0, nb_interpolate=None, p # This is populated with functions from the nonuniform topography, but # this is a uniform topography - self._functions = UniformLineScan._functions + self._functions = UniformLineScan._all_functions() def _update_nb_points_and_pixel_size(self): """Automatically compute `nb_points` and `pixel_size` if it is None""" diff --git a/SurfaceTopography/Nonuniform/ScalarParameters.py b/SurfaceTopography/Nonuniform/ScalarParameters.py index a16055b4..868b0da9 100644 --- a/SurfaceTopography/Nonuniform/ScalarParameters.py +++ b/SurfaceTopography/Nonuniform/ScalarParameters.py @@ -175,9 +175,14 @@ def rms_curvature(self): NonuniformLineScanInterface.register_function( 'mean', lambda self: _SurfaceTopography.nonuniform_mean(*self.positions_and_heights())) NonuniformLineScanInterface.register_function('moment', moment) -NonuniformLineScanInterface.register_function('rms_height_from_profile', rms_height, deprecated=True) +# Note: The `rms_*_from_profile` names are not marked as deprecated here +# (although they used to carry an inactive `deprecated` flag): they are the +# primary names of the corresponding uniform analysis functions, so +# deprecating only the nonuniform variants would make generic code warn +# depending on the data type it happens to operate on. +NonuniformLineScanInterface.register_function('rms_height_from_profile', rms_height) NonuniformLineScanInterface.register_function('Rq', rms_height) -NonuniformLineScanInterface.register_function('rms_slope_from_profile', rms_slope, deprecated=True) +NonuniformLineScanInterface.register_function('rms_slope_from_profile', rms_slope) NonuniformLineScanInterface.register_function('Rdq', rms_slope) -NonuniformLineScanInterface.register_function('rms_curvature_from_profile', rms_curvature, deprecated=True) +NonuniformLineScanInterface.register_function('rms_curvature_from_profile', rms_curvature) NonuniformLineScanInterface.register_function('Rddq', rms_curvature) diff --git a/SurfaceTopography/NonuniformLineScan.py b/SurfaceTopography/NonuniformLineScan.py index e3a2d3c5..d35451c9 100644 --- a/SurfaceTopography/NonuniformLineScan.py +++ b/SurfaceTopography/NonuniformLineScan.py @@ -139,11 +139,8 @@ def unit(self): else: return self._unit - @property - def info(self) -> dict: - info = self.parent_topography.info - info.update(self._info.model_dump(exclude_none=True)) - return info + # Note: `info` is merged with the parent topography's dictionary in the + # `DecoratedTopography` base class @property def physical_sizes(self): diff --git a/SurfaceTopography/Pipeline.py b/SurfaceTopography/Pipeline.py index 763fe7a7..b6a5a53e 100644 --- a/SurfaceTopography/Pipeline.py +++ b/SurfaceTopography/Pipeline.py @@ -78,10 +78,19 @@ def __setstate__(self, state): super().__setstate__(superstate) def __getattr__(self, name): - if name in self._kwargs: - return self._kwargs[name] - else: - return getattr(self.parent_topography, name) + # Expose keyword arguments as attributes; everything else + # goes through the regular dispatch of the parent class. + # (Delegating to `getattr(self.parent_topography, name)` + # here would silently apply chained pipeline functions to + # the *parent*, discarding this transformation.) + if name != '_kwargs': + try: + kwargs = object.__getattribute__(self, '_kwargs') + except AttributeError: + kwargs = {} + if name in kwargs: + return kwargs[name] + return super().__getattr__(name) def heights(self): return func(self.parent_topography, *self._args, **self._kwargs) diff --git a/SurfaceTopography/ScanningProbe/RigidScan.py b/SurfaceTopography/ScanningProbe/RigidScan.py index 40d3ae8b..4876c4f3 100644 --- a/SurfaceTopography/ScanningProbe/RigidScan.py +++ b/SurfaceTopography/ScanningProbe/RigidScan.py @@ -25,6 +25,7 @@ import numpy as np +from ..HeightContainer import NonuniformLineScanInterface, UniformTopographyInterface from ..NonuniformLineScan import NonuniformLineScan from ..UniformLineScanAndTopography import UniformLineScan @@ -90,6 +91,10 @@ def pipeline_scan_with_rigid_sphere(self, radius): topography : :obj:`SurfaceTopography.UniformLineScan` or :obj:`SurfaceTopography.NonuniformLineScan` Topography with scannned heights on the same grid as the topography. """ + if self.dim != 1: + raise ValueError( + "Scanning with a rigid sphere is only supported for line scans." + ) info_dict = dict( instrument=dict( name="Scanning rigid sphere simulation", @@ -109,7 +114,9 @@ def pipeline_scan_with_rigid_sphere(self, radius): unit=self.unit, info=info_dict, ) - elif isinstance(self, UniformLineScan): + elif self.is_uniform: + # Note: structural check rather than isinstance, so that decorated + # line scans (detrended, scaled, ...) can be scanned as well scanned_heights = scan_with_rigid_sphere(self, radius) return UniformLineScan( scanned_heights, @@ -118,18 +125,19 @@ def pipeline_scan_with_rigid_sphere(self, radius): unit=self.unit, info=info_dict, ) - elif isinstance(self, NonuniformLineScan): + else: scanned_heights = scan_with_rigid_sphere(self, radius) return NonuniformLineScan( self.positions(), scanned_heights, unit=self.unit, info=info_dict ) - else: - raise ValueError("Unexpected topography instance", type(self)) -UniformLineScan.register_function( +# Register on the interfaces so that decorated topographies (detrended, +# scaled, etc.) can also be scanned; the function itself checks that the +# data is one-dimensional +UniformTopographyInterface.register_function( "scan_with_rigid_sphere", pipeline_scan_with_rigid_sphere ) -NonuniformLineScan.register_function( +NonuniformLineScanInterface.register_function( "scan_with_rigid_sphere", pipeline_scan_with_rigid_sphere ) diff --git a/SurfaceTopography/Special.py b/SurfaceTopography/Special.py index 534d5783..380d1952 100644 --- a/SurfaceTopography/Special.py +++ b/SurfaceTopography/Special.py @@ -93,20 +93,29 @@ def make_topography_from_function(fun, physical_sizes, # serial code nb_subdomain_grid_pts = nb_grid_pts nb_grid_pts = None - topography = Topography(heights=np.zeros(nb_subdomain_grid_pts), - physical_sizes=physical_sizes, - subdomain_locations=subdomain_locations, - nb_grid_pts=nb_grid_pts, - decomposition="subdomain", - **kwargs, - ) + # We need a topography object to compute the positions, but the heights + # are only known afterwards; construct a second topography with the + # actual heights so that the constructor's validation (array shape, + # conversion to float, masking of NaNs as undefined data) is applied. + # (Assigning to `_heights` directly would bypass all of this.) + dummy = Topography(heights=np.zeros(nb_subdomain_grid_pts), + physical_sizes=physical_sizes, + subdomain_locations=subdomain_locations, + nb_grid_pts=nb_grid_pts, + decomposition="subdomain", + **kwargs, + ) cx, cy = centre - x, y = topography.positions() - - topography._heights = fun(x - cx, y - cy) - - return topography + x, y = dummy.positions() + + return Topography(heights=fun(x - cx, y - cy), + physical_sizes=physical_sizes, + subdomain_locations=subdomain_locations, + nb_grid_pts=nb_grid_pts, + decomposition="subdomain", + **kwargs, + ) def make_sphere(radius, nb_grid_pts, physical_sizes, centre=None, diff --git a/SurfaceTopography/Support/Bibliography.py b/SurfaceTopography/Support/Bibliography.py index 4f0d83c9..fd8d30d5 100644 --- a/SurfaceTopography/Support/Bibliography.py +++ b/SurfaceTopography/Support/Bibliography.py @@ -76,13 +76,22 @@ def func_with_doi(*args, **kwargs): doi._n = 0 doi.dois.update(self._add_these_dois) doi._n += 1 - retvals = func(*args, **kwargs) - doi._n -= 1 - if doi._n == 0: - # We have reached the point where the original `dois` argument - # was passed. Create a new set such that subsequent calls don't - # contaminate the bibliography. - doi.dois = set() - return retvals + try: + # The bookkeeping must be unwound even if the wrapped + # function raises; otherwise the class-level state stays + # permanently corrupted and all subsequent analysis calls + # silently dump DOIs into the caller's set. + return func(*args, **kwargs) + finally: + doi._n -= 1 + if doi._n == 0: + # We have reached the point where the original `dois` + # argument was passed. Create a new set such that + # subsequent calls don't contaminate the bibliography. + doi.dois = set() + # Mark the wrapper so that `register_function` can detect that a + # function already records DOIs (checking the function name does + # not work because functools.wraps restores the original name) + func_with_doi.__has_doi__ = True return func_with_doi diff --git a/SurfaceTopography/Support/JSON.py b/SurfaceTopography/Support/JSON.py index f237c256..676ab27f 100644 --- a/SurfaceTopography/Support/JSON.py +++ b/SurfaceTopography/Support/JSON.py @@ -18,13 +18,25 @@ def nan_to_none(obj): elif isinstance(obj, list) or isinstance(obj, set): return [nan_to_none(v) for v in obj] elif isinstance(obj, MaskedArray): - return [None if m else nan_to_none(v) for v, m in zip(obj.data, obj.mask)] + # Note: `getmaskarray` always returns a full boolean array, while + # `obj.mask` can be the scalar `nomask` (which cannot be iterated) + mask = np.ma.getmaskarray(obj) + if obj.ndim == 0: + return None if bool(mask) else nan_to_none(obj.item()) + return [ + # Recurse row by row for multidimensional arrays + nan_to_none(np.ma.masked_array(v, mask=m)) if np.ndim(v) > 0 + else (None if m else nan_to_none(v)) + for v, m in zip(obj.data, mask) + ] elif isinstance(obj, np.ndarray) or isinstance(obj, ArrayImpl): if obj.ndim == 0: return nan_to_none(obj.item()) else: return [nan_to_none(v) for v in obj] - elif isinstance(obj, float) and np.isnan(obj): + elif isinstance(obj, float) and not np.isfinite(obj): + # NaN as well as +/-Inf have no JSON representation ('NaN' and + # 'Infinity' produced by the stdlib encoder are not valid JSON) return None return obj @@ -123,3 +135,10 @@ def encode(self, obj, *args, **kwargs): # https://stackoverflow.com/questions/28639953/python-json-encoder-convert-nans-to-null-instead obj = nan_to_none(obj) return super().encode(obj, *args, **kwargs) + + def iterencode(self, obj, *args, **kwargs): + # Note: `json.dump` calls `iterencode` directly and never goes + # through `encode`; without this override, `json.dump` with this + # encoder would emit invalid JSON (bare NaN/Infinity tokens) + obj = nan_to_none(obj) + return super().iterencode(obj, *args, **kwargs) diff --git a/SurfaceTopography/Support/Regression.py b/SurfaceTopography/Support/Regression.py index 9efafbde..c13569cc 100644 --- a/SurfaceTopography/Support/Regression.py +++ b/SurfaceTopography/Support/Regression.py @@ -34,7 +34,7 @@ from ..Exceptions import NoReliableDataError -_log = logging.Logger(__name__) +_log = logging.getLogger(__name__) def make_grid(collocation, min_value, max_value, nb_points=None, nb_points_per_decade=10, dectol=0.01): diff --git a/SurfaceTopography/Uniform/Converters.py b/SurfaceTopography/Uniform/Converters.py index a013b153..a19073b1 100644 --- a/SurfaceTopography/Uniform/Converters.py +++ b/SurfaceTopography/Uniform/Converters.py @@ -57,7 +57,7 @@ def __init__(self, topography, info={}): # This is populated with functions from the nonuniform topography, but # this is a uniform topography - self._functions = NonuniformLineScan._functions + self._functions = NonuniformLineScan._all_functions() # Implement abstract methods of AbstractHeightContainer diff --git a/SurfaceTopography/Uniform/Derivative.py b/SurfaceTopography/Uniform/Derivative.py index a92e7a11..4ff6f50e 100644 --- a/SurfaceTopography/Uniform/Derivative.py +++ b/SurfaceTopography/Uniform/Derivative.py @@ -606,6 +606,8 @@ def fourier_derivative(self, scale_factor=None, distance=None, mask_function=Non ) -# Register analysis functions from this module +# Register analysis functions from this module. Note: `fourier_derivative` +# is registered on the interface (it is dimension-agnostic); registering on +# `Topography` would make it unavailable on decorated topographies. UniformTopographyInterface.register_function("derivative", derivative) -Topography.register_function("fourier_derivative", fourier_derivative) +UniformTopographyInterface.register_function("fourier_derivative", fourier_derivative) diff --git a/SurfaceTopography/Uniform/Interpolation.py b/SurfaceTopography/Uniform/Interpolation.py index 654166b6..285ac870 100644 --- a/SurfaceTopography/Uniform/Interpolation.py +++ b/SurfaceTopography/Uniform/Interpolation.py @@ -250,6 +250,9 @@ class MirrorStichedTopography(DecoratedUniformTopography): """ def __init__(self, parent_topography, info={}): + if parent_topography.dim != 2: + raise ValueError('Mirror stitching is only implemented for ' + 'topographies (not line scans).') if parent_topography.communicator.Get_size() > 1: raise (NotImplementedError("MirrorStichedTopography " "not domain decomposable")) @@ -290,7 +293,11 @@ def positions(self): indexing='ij') -Topography.register_function("mirror_stitch", MirrorStichedTopography) -Topography.register_function("interpolate_linear", interpolate_linear) -Topography.register_function("interpolate_bicubic", interpolate_bicubic) +# Note: these are registered on the interface (rather than on `Topography`) +# because decorated topographies do not derive from `Topography`; the +# 2D-only functions carry explicit dimension checks with clear error +# messages for line scans +UniformTopographyInterface.register_function("mirror_stitch", MirrorStichedTopography) +UniformTopographyInterface.register_function("interpolate_linear", interpolate_linear) +UniformTopographyInterface.register_function("interpolate_bicubic", interpolate_bicubic) UniformTopographyInterface.register_function('interpolate_fourier', interpolate_fourier) diff --git a/SurfaceTopography/UniformLineScanAndTopography.py b/SurfaceTopography/UniformLineScanAndTopography.py index 56bffb11..a0fc1088 100644 --- a/SurfaceTopography/UniformLineScanAndTopography.py +++ b/SurfaceTopography/UniformLineScanAndTopography.py @@ -494,11 +494,8 @@ def unit(self): else: return self._unit - @property - def info(self): - info = self.parent_topography.info - info.update(self._info.model_dump(exclude_none=True)) - return info + # Note: `info` is merged with the parent topography's dictionary in the + # `DecoratedTopography` base class @property def physical_sizes(self): diff --git a/test/IO/test_asc.py b/test/IO/test_asc.py index 4c43d692..44973f66 100644 --- a/test/IO/test_asc.py +++ b/test/IO/test_asc.py @@ -141,7 +141,9 @@ def test_wyko_matrix8(file_format_examples, filename="matrix-8.txt"): t = r.topography() assert t.unit == "nm" np.testing.assert_allclose(t.physical_sizes, (950400, 1267200)) - np.testing.assert_allclose(t.rms_height_from_area(), 74424.357775) + # Note: about half of this file's data points are undefined; sums and + # means are normalized by the number of *defined* points + np.testing.assert_allclose(t.rms_height_from_area(), 7804.797789741755) def test_single_column(file_format_examples, filename="single_column.txt"): diff --git a/test/IO/test_vk.py b/test/IO/test_vk.py index eb74979b..09c6f272 100644 --- a/test/IO/test_vk.py +++ b/test/IO/test_vk.py @@ -62,8 +62,9 @@ def test_vk3_metadata(file_format_examples): assert ny == 768 sx, sy = t.physical_sizes - np.testing.assert_allclose(sx, 704847000, rtol=1e-6) - np.testing.assert_allclose(sy, 528463000, rtol=1e-6) + # Physical size follows the pixel convention (nb_pixels * pixel_size) + np.testing.assert_allclose(sx, 705536000, rtol=1e-6) + np.testing.assert_allclose(sy, 529152000, rtol=1e-6) assert t.unit == 'pm' assert t.info['instrument']['vendor'] == 'Keyence' @@ -84,8 +85,8 @@ def test_vk4_metadata(file_format_examples): assert ny == 768 sx, sy = t.physical_sizes - np.testing.assert_allclose(sx, 1396330551, rtol=1e-6) - np.testing.assert_allclose(sy, 1046906679, rtol=1e-6) + np.testing.assert_allclose(sx, 1397695488, rtol=1e-6) + np.testing.assert_allclose(sy, 1048271616, rtol=1e-6) assert t.unit == 'pm' assert t.info['instrument']['vendor'] == 'Keyence' @@ -106,8 +107,8 @@ def test_vk6_metadata(file_format_examples): assert ny == 1536 sx, sy = t.physical_sizes - np.testing.assert_allclose(sx, 97169043, rtol=1e-6) - np.testing.assert_allclose(sy, 72864915, rtol=1e-6) + np.testing.assert_allclose(sx, 97216512, rtol=1e-6) + np.testing.assert_allclose(sy, 72912384, rtol=1e-6) assert t.unit == 'pm' assert t.info['instrument']['vendor'] == 'Keyence' From 56e0ec197701f44951412a86dd492cd7a2bbdf77 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 14:17:28 +0000 Subject: [PATCH 15/23] BUG: Harden C++ extension: dtypes, boundaries, overflow, GIL - eigen_helper.h: ArrayXl is a fixed-width int64 (long is 32-bit on Windows/LLP64, where every binding taking an ArrayXl rejected the int64 arrays produced by np.argsort, breaking bearing areas of nonuniform line scans in the Windows wheels). - All input arrays are taken as Eigen::Ref: read-only, integer-dtype and Fortran-ordered inputs are now converted instead of rejected with TypeError (a read-only heights array previously broke t.mean() and friends for nonuniform scans). - patchfinder: periodic wrap-around uses while loops; user stencils with offsets larger than the grid dimension previously indexed out of bounds (potential heap corruption). - moments/bearing area: 64-bit triangle counters and Eigen::Index loop variables (int overflows at 32768 x 32768 maps); corrected stale storage-order comments. - stack.h: allocation failures throw std::bad_alloc instead of printing and dereferencing a null pointer; the stdout printf on every stack expansion is gone; copy construction/assignment are deleted (raw buffer, rule of three). - nonuniform_autocorrelation validates that user-supplied distances are smaller than the physical size (division by physical_size - distance previously produced silent NaNs/garbage). - module.cpp: long-running pure-Eigen kernels release the GIL (autocorrelation, patch analysis, distance maps, bearing areas); bearing-area bindings gained py::arg names. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- cpp/autocorrelation.cpp | 13 ++++++++++--- cpp/autocorrelation.h | 6 +++--- cpp/bearing_area.cpp | 24 +++++++++++++----------- cpp/bearing_area.h | 12 ++++++------ cpp/eigen_helper.h | 8 +++++++- cpp/module.cpp | 28 +++++++++++++++++++--------- cpp/moments.h | 24 ++++++++++++++---------- cpp/patchfinder.cpp | 12 +++++++----- cpp/stack.h | 15 ++++++++++++--- 9 files changed, 91 insertions(+), 51 deletions(-) diff --git a/cpp/autocorrelation.cpp b/cpp/autocorrelation.cpp index f6ee1cbd..e3845851 100644 --- a/cpp/autocorrelation.cpp +++ b/cpp/autocorrelation.cpp @@ -38,10 +38,10 @@ SOFTWARE. std::tuple nonuniform_autocorrelation( - Eigen::Ref x, - Eigen::Ref h, + Eigen::Ref x, + Eigen::Ref h, double physical_size, - std::optional> distances_opt) + std::optional> distances_opt) { const auto nb_grid_pts = x.size(); @@ -53,6 +53,13 @@ std::tuple nonuniform_autocorrelation( Eigen::ArrayXd distances; if (distances_opt) { distances = *distances_opt; + // The normalization below divides by (physical_size - distance); + // distances at or beyond the physical size have no data and would + // silently produce NaNs or wrong-signed values + if ((distances >= physical_size).any()) { + throw std::invalid_argument( + "All distances must be smaller than the physical size of the line scan."); + } } else { distances = Eigen::ArrayXd::LinSpaced(nb_grid_pts, 0.0, physical_size * (nb_grid_pts - 1) / nb_grid_pts); } diff --git a/cpp/autocorrelation.h b/cpp/autocorrelation.h index 1effaf4d..0f97f689 100644 --- a/cpp/autocorrelation.h +++ b/cpp/autocorrelation.h @@ -39,9 +39,9 @@ SOFTWARE. #include std::tuple nonuniform_autocorrelation( - Eigen::Ref x, - Eigen::Ref h, + Eigen::Ref x, + Eigen::Ref h, double physical_size, - std::optional> distances = std::nullopt); + std::optional> distances = std::nullopt); #endif diff --git a/cpp/bearing_area.cpp b/cpp/bearing_area.cpp index 8e489b24..cae94e1a 100644 --- a/cpp/bearing_area.cpp +++ b/cpp/bearing_area.cpp @@ -26,8 +26,8 @@ SOFTWARE. #include "bearing_area.h" -Eigen::ArrayXd nonuniform_bearing_area(Eigen::Ref x, Eigen::Ref h, - Eigen::Ref el_sort_by_max, Eigen::Ref heights) { +Eigen::ArrayXd nonuniform_bearing_area(Eigen::Ref x, Eigen::Ref h, + Eigen::Ref el_sort_by_max, Eigen::Ref heights) { if (x.size() != h.size()) { throw std::runtime_error("`x` and `h` must have the same size"); } @@ -73,8 +73,8 @@ Eigen::ArrayXd nonuniform_bearing_area(Eigen::Ref x, Eigen::Ref< } -Eigen::ArrayXd uniform1d_bearing_area(Eigen::Ref topography_h, bool periodic, - Eigen::Ref heights) { +Eigen::ArrayXd uniform1d_bearing_area(Eigen::Ref topography_h, bool periodic, + Eigen::Ref heights) { /* Bearing area values for each input height */ Eigen::ArrayXd fractional_bearing_areas(heights.size()); @@ -125,8 +125,8 @@ double _triangle(double h1_in, double h2_in, double h3_in, double h) { } -Eigen::ArrayXd uniform2d_bearing_area(Eigen::Ref topography_h, bool periodic, - Eigen::Ref heights) { +Eigen::ArrayXd uniform2d_bearing_area(Eigen::Ref topography_h, bool periodic, + Eigen::Ref heights) { /* Number of grid points for looping */ const auto nx{periodic ? topography_h.rows() : topography_h.rows()-1}; const auto ny{periodic ? topography_h.cols() : topography_h.cols()-1}; @@ -135,14 +135,16 @@ Eigen::ArrayXd uniform2d_bearing_area(Eigen::Ref topography_h, bool Eigen::ArrayXd fractional_bearing_areas(heights.size()); /* Compute bearing areas */ - for (int j{0}; j < heights.size(); j++) { + for (Eigen::Index j{0}; j < heights.size(); j++) { double bearing_area{0}; - int projected_area{0}; + /* Note: 64-bit counter; an `int` would overflow at 2^31 triangles */ + std::int64_t projected_area{0}; - /* This is assuming column-major storage */ - for (int x{0}; x < nx; x++) { + /* The inner loop runs over the last (fast) index of the row-major + storage */ + for (Eigen::Index x{0}; x < nx; x++) { const auto x1{x < topography_h.rows()-1 ? x+1 : 0}; - for (int y{0}; y < ny; y++) { + for (Eigen::Index y{0}; y < ny; y++) { const auto y1{y < topography_h.cols()-1 ? y+1 : 0}; const double h00{topography_h(x, y)}; const double h10{topography_h(x1, y)}; diff --git a/cpp/bearing_area.h b/cpp/bearing_area.h index dd3579a5..14fd6433 100644 --- a/cpp/bearing_area.h +++ b/cpp/bearing_area.h @@ -22,9 +22,9 @@ SOFTWARE. #include "eigen_helper.h" -Eigen::ArrayXd nonuniform_bearing_area(Eigen::Ref x, Eigen::Ref h, - Eigen::Ref el_sort_by_max, Eigen::Ref heights); -Eigen::ArrayXd uniform1d_bearing_area(Eigen::Ref topography_h, bool periodic, - Eigen::Ref heights); -Eigen::ArrayXd uniform2d_bearing_area(Eigen::Ref topography_h, bool periodic, - Eigen::Ref heights); +Eigen::ArrayXd nonuniform_bearing_area(Eigen::Ref x, Eigen::Ref h, + Eigen::Ref el_sort_by_max, Eigen::Ref heights); +Eigen::ArrayXd uniform1d_bearing_area(Eigen::Ref topography_h, bool periodic, + Eigen::Ref heights); +Eigen::ArrayXd uniform2d_bearing_area(Eigen::Ref topography_h, bool periodic, + Eigen::Ref heights); diff --git a/cpp/eigen_helper.h b/cpp/eigen_helper.h index 9a7b9cc8..0309e1ee 100644 --- a/cpp/eigen_helper.h +++ b/cpp/eigen_helper.h @@ -25,9 +25,15 @@ SOFTWARE. #ifndef __EIGEN_HELPER_H #define __EIGEN_HELPER_H +#include + #include -using ArrayXl = Eigen::Array; +/* Note: This must be a fixed-width 64-bit integer to match the int64 arrays + (e.g. from np.argsort) passed from the Python side; `long` is 32 bits on + Windows (LLP64), where a plain-long array type would make every binding + taking an ArrayXl reject its arguments. */ +using ArrayXl = Eigen::Array; using RowMajorXXd = Eigen::Array; using RowMajorXXi = Eigen::Array; using RowMajorXXb = Eigen::Array; diff --git a/cpp/module.cpp b/cpp/module.cpp index 5c366434..18dbfbad 100644 --- a/cpp/module.cpp +++ b/cpp/module.cpp @@ -43,27 +43,31 @@ PYBIND11_MODULE(_SurfaceTopography, mod) { mod.def("nonuniform_autocorrelation", &nonuniform_autocorrelation, "Height-difference autocorrelation of nonuniform line scans", py::arg("x"), py::arg("h"), py::arg("physical_size"), - py::arg("distances") = std::nullopt); + py::arg("distances") = std::nullopt, + py::call_guard()); // === Patch/geometry analysis (from former C module) === mod.def("assign_patch_numbers", &assign_patch_numbers, "Assign unique numbers to connected patches", - py::arg("map"), py::arg("periodic"), py::arg("stencil") = std::nullopt); + py::arg("map"), py::arg("periodic"), py::arg("stencil") = std::nullopt, + py::call_guard()); mod.def("assign_segment_numbers", &assign_segment_numbers, "Assign unique numbers to connected 1D segments", py::arg("map")); mod.def("distance_map", &distance_map, "Compute distance from each point to nearest marked point", - py::arg("map")); + py::arg("map"), py::call_guard()); mod.def("closest_patch_map", &closest_patch_map, "Compute the tag of the closest patch for each point", - py::arg("map")); + py::arg("map"), py::call_guard()); mod.def("shortest_distance", &shortest_distance, "Compute shortest distance between patches", - py::arg("fromc"), py::arg("fromp"), py::arg("to"), py::arg("maxd") = -1); + py::arg("fromc"), py::arg("fromp"), py::arg("to"), py::arg("maxd") = -1, + py::call_guard()); mod.def("correlation_function", &correlation_function, "Compute real-space correlation function between two maps", - py::arg("map1"), py::arg("map2"), py::arg("max_dist")); + py::arg("map1"), py::arg("map2"), py::arg("max_dist"), + py::call_guard()); mod.def("perimeter_length", &perimeter_length, "Compute total perimeter length of marked regions", py::arg("map")); @@ -81,9 +85,15 @@ PYBIND11_MODULE(_SurfaceTopography, mod) { py::arg("x"), py::arg("y"), py::arg("derivative") = 0); // === Bearing area (from former C++ module) === - mod.def("nonuniform_bearing_area", &nonuniform_bearing_area, "Bearing area of a nonuniform line scan"); - mod.def("uniform1d_bearing_area", &uniform1d_bearing_area, "Bearing area of a uniform line scan"); - mod.def("uniform2d_bearing_area", &uniform2d_bearing_area, "Bearing area of a topography map"); + mod.def("nonuniform_bearing_area", &nonuniform_bearing_area, "Bearing area of a nonuniform line scan", + py::arg("x"), py::arg("h"), py::arg("el_sort_by_max"), py::arg("heights"), + py::call_guard()); + mod.def("uniform1d_bearing_area", &uniform1d_bearing_area, "Bearing area of a uniform line scan", + py::arg("h"), py::arg("periodic"), py::arg("heights"), + py::call_guard()); + mod.def("uniform2d_bearing_area", &uniform2d_bearing_area, "Bearing area of a topography map", + py::arg("h"), py::arg("periodic"), py::arg("heights"), + py::call_guard()); // === Moments (from former C++ module) === mod.def("nonuniform_mean", &nonuniform_moment<1>, "Mean of a nonuniform line scan", diff --git a/cpp/moments.h b/cpp/moments.h index ac8f5372..fb355240 100644 --- a/cpp/moments.h +++ b/cpp/moments.h @@ -74,7 +74,7 @@ class _LineScanMoment<3> { template -double nonuniform_moment(Eigen::Ref topography_x, Eigen::Ref topography_h, +double nonuniform_moment(Eigen::Ref topography_x, Eigen::Ref topography_h, double ref_h) { if (topography_x.size() != topography_h.size()) { throw std::runtime_error("`topography_x` and `topography_h` must have the same size"); @@ -87,7 +87,7 @@ double nonuniform_moment(Eigen::Ref topography_x, Eigen::Ref::eval(hi, hi1); @@ -98,14 +98,15 @@ double nonuniform_moment(Eigen::Ref topography_x, Eigen::Ref -double uniform1d_moment(Eigen::Ref topography_h, bool periodic, double ref_h) { +double uniform1d_moment(Eigen::Ref topography_h, bool periodic, double ref_h) { /* Accumulator for moment */ double moment{0}; - int physical_size{0}; + /* Note: 64-bit counter; an `int` would overflow for large grids */ + std::int64_t physical_size{0}; /* Compute moment */ const auto maxi{periodic ? topography_h.size() : topography_h.size()-1}; - for (int i{0}; i < maxi; i++) { + for (Eigen::Index i{0}; i < maxi; i++) { const auto i1{i < topography_h.size()-1 ? i+1 : 0}; const double hi{topography_h(i) - ref_h}, hi1{topography_h(i1) - ref_h}; /* Check for NaNs and only add if there are no NaNs */ @@ -145,19 +146,22 @@ class _TriangleMoment { template -double uniform2d_moment(Eigen::Ref topography_h, bool periodic, double ref_h) { +double uniform2d_moment(Eigen::Ref topography_h, bool periodic, double ref_h) { /* Number of grid points for looping */ const auto nx{periodic ? topography_h.rows() : topography_h.rows()-1}; const auto ny{periodic ? topography_h.cols() : topography_h.cols()-1}; /* Accumulator for moment */ double moment{0}; - int projected_area{0}; + /* Note: 64-bit counter; an `int` would overflow at 2^31 triangles, + i.e. maps larger than 32768 x 32768 pixels */ + std::int64_t projected_area{0}; - /* Compute moment. Loop assumes column-major storage */ - for (int x{0}; x < nx; x++) { + /* Compute moment. The inner loop runs over the last (fast) index of the + row-major storage. */ + for (Eigen::Index x{0}; x < nx; x++) { const auto x1{x < topography_h.rows()-1 ? x+1 : 0}; - for (int y{0}; y < ny; y++) { + for (Eigen::Index y{0}; y < ny; y++) { const auto y1{y < topography_h.cols()-1 ? y+1 : 0}; const double h00{topography_h(x, y)}; const double h10{topography_h(x1, y)}; diff --git a/cpp/patchfinder.cpp b/cpp/patchfinder.cpp index fcad4554..9b1c29aa 100644 --- a/cpp/patchfinder.cpp +++ b/cpp/patchfinder.cpp @@ -61,11 +61,13 @@ void fill_patch(Eigen::Index nx, Eigen::Index ny, const RowMajorXXb &map, stack.pop_bottom(i, j); for (const auto &[di, dj] : stencil) { - // Periodic boundary conditions + // Periodic boundary conditions. Note: user-provided stencils + // can contain offsets larger than the grid dimensions; a single + // `if` would wrap only one period and index out of bounds. std::ptrdiff_t jj = j + dj; if (periodic) { - if (jj < 0) jj += ny; - if (jj > ny - 1) jj -= ny; + while (jj < 0) jj += ny; + while (jj > ny - 1) jj -= ny; } else { if (jj < 0) continue; if (jj > ny - 1) continue; @@ -74,8 +76,8 @@ void fill_patch(Eigen::Index nx, Eigen::Index ny, const RowMajorXXb &map, // Periodic boundary conditions std::ptrdiff_t ii = i + di; if (periodic) { - if (ii < 0) ii += nx; - if (ii > nx - 1) ii -= nx; + while (ii < 0) ii += nx; + while (ii > nx - 1) ii -= nx; } else { if (ii < 0) continue; if (ii > nx - 1) continue; diff --git a/cpp/stack.h b/cpp/stack.h index 784c1a22..d5d19a3e 100644 --- a/cpp/stack.h +++ b/cpp/stack.h @@ -39,6 +39,7 @@ SOFTWARE. #include #include +#include #define DEBUG_STACK_MAGIC_START std::size_t(0xDEADBEEF) #define DEBUG_STACK_MAGIC_END std::size_t(0xBEEFDEAD) @@ -52,11 +53,18 @@ class Stack { bp_ = 0; is_empty_ = true; data_ = malloc(buffer_size_); + if (!data_) { + throw std::bad_alloc(); + } } ~Stack() { free(data_); } + /* The class manages a raw buffer; copying would lead to a double free */ + Stack(const Stack &) = delete; + Stack &operator=(const Stack &) = delete; + bool is_empty() { return is_empty_; } @@ -270,14 +278,15 @@ class Stack { void *data_; /* Buffer containing the actual data. */ void expand(size_t new_size) { - printf("Expanding stack size to %3.2f MB.\n", - ((double) new_size)/(1024*1024)); void *new_data = malloc(new_size); #ifdef DEBUG_STACK_PRINT std::cout << "tp_ = " << tp_ << ", bp_ = " << bp_ << ", top_ = " << top_ << ", buffer_size_ = " << buffer_size_ << ", is_empty = " << is_empty_ << std::endl; #endif if (!new_data) { - printf("Failed to allocate new stack!\n"); + /* Note: propagate the failure; dereferencing the null pointer in the + memcpy below would crash the interpreter instead of raising + MemoryError */ + throw std::bad_alloc(); } if (tp_ > bp_) { assert(top_ == 0); From 83b9fb9aa7570b406f6fd2255066170b8e6c9989 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 14:17:28 +0000 Subject: [PATCH 16/23] DOC: Mark audit sections 2.1-2.4 as fixed Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- AUDIT.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/AUDIT.md b/AUDIT.md index 2504763b..4d5da66a 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -13,17 +13,19 @@ Severity legend: - **LOW** — edge cases, performance, documentation drift, code health. > **Status update (2026-07-23):** All findings in section 1 (the -> wrong-results tier, §1.1–§1.17) have been **fixed** on this branch, with -> regression tests; see the commit history following the commit that added -> this report. Exceptions and adjacent items: the latent non-square -> axis-pairing in DATX/LEXT noted under §1.3 is *not* changed (unprovable -> without a non-square reference file); a handful of adjacent §2 items that -> shared code with §1 fixes were fixed along the way (EZD magic check, MI -> ASCII crash and `scanUp` flag, the dead `interpolation='disable'` guard -> in `Uniform/Derivative.py`, scalar bicubic derivative returns, the ZAG -> logger instantiation, and the 1D crash in -> `TransposedUniformTopography.positions`). Sections 2–3 otherwise remain -> open. +> wrong-results tier, §1.1–§1.17) and sections §2.1–§2.4 have been +> **fixed** on this branch, with regression tests; see the commit history +> following the commit that added this report. Exceptions: the latent +> non-square axis-pairing in DATX/LEXT noted under §1.3 is *not* changed +> (unprovable without a non-square reference file); of the packaging items +> (T8), the broken `pytest-flake8` plugin and the `tiffile` alias package +> were fixed because they broke CI, while the remaining build-system +> hardening (meson `python` alias, glob check for meson file lists) is +> still open. The performance tier (§2.5), section 3 (low severity) and +> the remaining architectural themes in section 4 remain open. Note that +> the masked-data normalization fix (§2.2) changed the reference values of +> several IO tests whose fixtures contain undefined data points; the old +> values were dominated by a mean-normalization artifact. --- From 4fba2cf69329ab419cb6b4d241e8069104d6be96 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 14:39:17 +0000 Subject: [PATCH 17/23] MAINT: Remove unused import left by registration change Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/Uniform/Derivative.py | 1 - 1 file changed, 1 deletion(-) diff --git a/SurfaceTopography/Uniform/Derivative.py b/SurfaceTopography/Uniform/Derivative.py index 4ff6f50e..5f1136dd 100644 --- a/SurfaceTopography/Uniform/Derivative.py +++ b/SurfaceTopography/Uniform/Derivative.py @@ -31,7 +31,6 @@ from ..Exceptions import UndefinedDataError from ..HeightContainer import UniformTopographyInterface from ..Support import toiter -from ..UniformLineScanAndTopography import Topography class FourierDerivative: From e5ff7fd6bb845b06661086e9b16701f4844d166d Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 17:35:02 +0000 Subject: [PATCH 18/23] Fix low-severity audit findings and add invariant tests (audit sections 3 and 4) Section 3 (low severity): - IO readers: correct AL3D row-stride read length and absolute-value mask tolerance; guard WSXM and DZI against flat scans (zero height range); fix ZON multi-entry stride computation and reject non-float32 entries with UnsupportedFormatFeature instead of an assert; replace defaultdict(None) and off-by-one channel bounds check in Text reader; catch IndexError (not KeyError) for out-of-range JPK channel indices; pass explicit little-endian byte order in FRT reader. - Numerics: solve the nonuniform polyfit normal equations in scan-centered coordinates (raw monomials are ill-conditioned for scans far from the origin) and transform coefficients back to the monomial basis; fix operator-direction inference for uniform derivative normalization with anisotropic pixels; correct dsinc tolerance handling and remove dead code in nonuniform power spectrum; correct Nyquist frequency for anisotropic pixels in power_spectrum_from_area; fix geometric-mean parenthesization in scanning-probe reliability analysis. - Misc: cache the communicator alongside the muFFT engine in FFTTricks; simplify TranslatedTopography offset setter; raise ValueError instead of assert in CompoundTopography; add stacklevel to deprecation warnings; numerous docstring corrections (two-sided integrals, polyfit2 coefficient order, curvature vs slope, moment prefactors, derivative trimming semantics, make_grid nb_points semantics). - C++: document the folded-in 1/2 convention in the nonuniform autocorrelation kernel (the old comment showed the product integral of a different function); remove unused iostream include; drop the never-returned nearest-point index array from distance_map; document always-periodic behavior of the patch analysis functions in their Python docstrings. Section 4 (architecture): - Add test/test_invariants.py with property-based invariant tests: transpose/translate/scale invariance of scalar parameters (with anisotropic pixels), decorator geometry consistency, bearing-area CDF properties, and origin invariance of nonuniform detrending. - meson.build: use python3 for version discovery; the bare python alias does not exist on many systems. Deliberately unchanged: the NMS height scale divisor (no reference available) and the latent DATX/LEXT non-square axis pairing (no fixture). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- AUDIT.md | 28 ++- SurfaceTopography/Container/Integration.py | 2 +- SurfaceTopography/FFTTricks.py | 14 +- SurfaceTopography/Generic/Moments.py | 23 ++- SurfaceTopography/Generic/ScanningProbe.py | 5 +- SurfaceTopography/IO/AL3D.py | 12 +- SurfaceTopography/IO/DZI.py | 7 +- SurfaceTopography/IO/FRT.py | 4 +- SurfaceTopography/IO/JPK.py | 2 +- SurfaceTopography/IO/Text.py | 6 +- SurfaceTopography/IO/WSXM.py | 8 +- SurfaceTopography/IO/ZON.py | 15 +- SurfaceTopography/Nonuniform/Converters.py | 4 +- SurfaceTopography/Nonuniform/Detrending.py | 27 ++- SurfaceTopography/Nonuniform/Interpolation.py | 2 +- SurfaceTopography/Nonuniform/PowerSpectrum.py | 11 +- .../Nonuniform/ScalarParameters.py | 6 +- SurfaceTopography/Nonuniform/__init__.py | 2 +- SurfaceTopography/Support/Deprecation.py | 5 +- SurfaceTopography/Support/Regression.py | 5 +- SurfaceTopography/Uniform/Derivative.py | 45 ++++- SurfaceTopography/Uniform/Detrending.py | 2 +- SurfaceTopography/Uniform/Integration.py | 17 +- SurfaceTopography/Uniform/PowerSpectrum.py | 5 +- .../Uniform/VariableBandwidth.py | 4 +- .../UniformLineScanAndTopography.py | 32 ++-- cpp/autocorrelation.cpp | 15 +- cpp/bearing_area.cpp | 1 - cpp/module.cpp | 18 +- cpp/patchfinder.cpp | 8 +- meson.build | 4 +- test/test_invariants.py | 172 ++++++++++++++++++ 32 files changed, 412 insertions(+), 99 deletions(-) create mode 100644 test/test_invariants.py diff --git a/AUDIT.md b/AUDIT.md index 4d5da66a..5b53563f 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -21,11 +21,29 @@ Severity legend: > (T8), the broken `pytest-flake8` plugin and the `tiffile` alias package > were fixed because they broke CI, while the remaining build-system > hardening (meson `python` alias, glob check for meson file lists) is -> still open. The performance tier (§2.5), section 3 (low severity) and -> the remaining architectural themes in section 4 remain open. Note that -> the masked-data normalization fix (§2.2) changed the reference values of -> several IO tests whose fixtures contain undefined data points; the old -> values were dominated by a mean-normalization artifact. +> still open. Section 3 (low severity) has also been **fixed**, with two +> deliberate exceptions: the NMS height scale divisor `2**16 - 2` (§3, +> IO) was left untouched because no reference implementation or fixture +> is available to decide between `2**16 - 2` and `2**16 - 1`, and the +> DATX/LEXT axis-pairing exception above applies here too. Of section 4, +> the actionable items have been addressed: property-based invariant +> tests (transpose/translate/scale/origin invariance, decorator geometry +> consistency, bearing-area CDF properties) were added in +> `test/test_invariants.py` (T1/T3/T6), and the meson version discovery +> now calls `python3` instead of the bare `python` alias (T8). The +> proposed dedup of the three `bandwidth` implementations and of the +> `compute_1d_moment`/`compute_iso_moment` pair was assessed and +> deliberately rejected: the `bandwidth` variants differ semantically +> (pixel size vs. mean point spacing vs. unit-converting container +> variant) and the moment helpers are seven lines each, so a shared +> helper would add indirection without reducing risk. The larger +> refactoring themes (shared row-major reader helper for IO, unifying +> the Uniform/Nonuniform/Container analysis-function triplication) +> remain proposals — see section 4. The performance tier (§2.5) remains +> open. Note that the masked-data normalization fix +> (§2.2) changed the reference values of several IO tests whose fixtures +> contain undefined data points; the old values were dominated by a +> mean-normalization artifact. --- diff --git a/SurfaceTopography/Container/Integration.py b/SurfaceTopography/Container/Integration.py index f01d6ab0..805b983b 100644 --- a/SurfaceTopography/Container/Integration.py +++ b/SurfaceTopography/Container/Integration.py @@ -84,7 +84,7 @@ def integrate_psd_from_profile(self, factor, unit, window=None, reliable=True): .. math:: - \frac{1}{2 \pi} \int_0^\infty dq_x factor(q_x) C^{1D}(q_x) + \frac{1}{2 \pi} \int_{-\infty}^\infty dq_x factor(q_x) C^{1D}(q_x) Discrete diff --git a/SurfaceTopography/FFTTricks.py b/SurfaceTopography/FFTTricks.py index f876b68b..cc8c63a7 100644 --- a/SurfaceTopography/FFTTricks.py +++ b/SurfaceTopography/FFTTricks.py @@ -57,13 +57,18 @@ def make_fft(topography, communicator=None): RuntimeError If the muGrid FFTEngine object's domain decomposition does not match the topography's domain decomposition. """ - # We only initialize this once and attach it to the topography object - if hasattr(topography, '_mufft'): + if communicator is None: + communicator = topography.communicator + + # We only initialize this once and attach it to the topography object. + # Note: The cache is only valid for the communicator it was created + # with; a subsequent call with a different communicator must not return + # the cached engine. + if hasattr(topography, '_mufft') and topography._mufft_communicator is communicator: return topography._mufft if topography.is_domain_decomposed: - fft = muGrid.FFTEngine(topography.nb_grid_pts, - communicator=topography.communicator if communicator is None else communicator) + fft = muGrid.FFTEngine(topography.nb_grid_pts, communicator=communicator) if fft.subdomain_locations != topography.subdomain_locations or \ fft.nb_subdomain_grid_pts != topography.nb_subdomain_grid_pts: raise RuntimeError('muGrid suggested a domain decomposition that ' @@ -71,6 +76,7 @@ def make_fft(topography, communicator=None): else: fft = muGrid.FFTEngine(topography.nb_grid_pts) topography._mufft = fft + topography._mufft_communicator = communicator return fft diff --git a/SurfaceTopography/Generic/Moments.py b/SurfaceTopography/Generic/Moments.py index f1b63a52..1a328532 100644 --- a/SurfaceTopography/Generic/Moments.py +++ b/SurfaceTopography/Generic/Moments.py @@ -27,11 +27,14 @@ The example below computes the PSD of a surface topography and integrates it to obtain the RMS height. +>>> import numpy as np >>> from SurfaceTopography.Generation import fourier_synthesis ->>> t = fourier_synthesis((256, 256), (256,256), hurst=0.8, rms_height=1, short_cutoff=4, long_cutoff=64) +>>> from SurfaceTopography.Generic.Moments import compute_1d_moment +>>> t = fourier_synthesis((256, 256), (256, 256), hurst=0.8, rms_height=1, short_cutoff=4, long_cutoff=64) >>> hrms = t.rms_height_from_profile() ->>> hrms_from_psd = np.sqrt(compute_1d_moment(,) ->>> assert abs(hrms_from_psd / hrms - 1) < 0.1 +>>> q, C = t.power_spectrum_from_profile(reliable=False) +>>> hrms_from_psd = np.sqrt(compute_1d_moment(q, C, order=0)) +>>> assert abs(hrms_from_psd / hrms - 1) < 0.1 However, because the averaging of the PSD before integration introduces errors, it is better to sum directly the raw spectum, @@ -49,9 +52,12 @@ def compute_1d_moment(x, y, order=1, cumulative=False): .. math:: - m_\alpha = \int dx y x^{\alpha} + m_\alpha = \frac{1}{\pi} \int dx\, y x^{\alpha} - using trapezoidal interpolation of the integrand + using trapezoidal interpolation of the integrand. (The prefactor + :math:`1/\pi` corresponds to the moment of a two-sided function + :math:`y(|x|)` with the :math:`1/(2\pi)` Fourier-transform convention + used for power spectra in this package.) Parameters: ----------- @@ -89,9 +95,12 @@ def compute_iso_moment(x, y, order=1, cumulative=False): .. math:: - m_\alpha = \int dx_1 dx_2 y_{2D}(x_1, x_2) |\vec x|^{\alpha} = 2\pi \int dx y(x) x^{\alpha + 1} + m_\alpha = \frac{1}{(2\pi)^2} \int dx_1 dx_2\, y_{2D}(x_1, x_2) |\vec x|^{\alpha} + = \frac{1}{2\pi} \int dx\, y(x) x^{\alpha + 1} - using trapezoidal interpolation of the integrand + using trapezoidal interpolation of the integrand. (The prefactor + corresponds to the :math:`1/(2\pi)^2` Fourier-transform convention used + for power spectra in this package.) Parameters: ----------- diff --git a/SurfaceTopography/Generic/ScanningProbe.py b/SurfaceTopography/Generic/ScanningProbe.py index d2a3b0e2..192686b1 100644 --- a/SurfaceTopography/Generic/ScanningProbe.py +++ b/SurfaceTopography/Generic/ScanningProbe.py @@ -64,8 +64,9 @@ def scanning_probe_reliability_cutoff(self, tip_radius, safety_factor=1 / 2, xto used to compute the reliability cutoff. """ lower, upper = self.bandwidth() - # We need to normalize the bracket search to avoid numerical issues - fac = np.exp((np.log(lower) + np.log(upper) / 2)) + # We need to normalize the bracket search to avoid numerical issues; + # this is the geometric mean of the two bandwidth limits + fac = np.exp((np.log(lower) + np.log(upper)) / 2) target_curvature = fac * safety_factor / tip_radius diff --git a/SurfaceTopography/IO/AL3D.py b/SurfaceTopography/IO/AL3D.py index 11417712..0a7b07c5 100644 --- a/SurfaceTopography/IO/AL3D.py +++ b/SurfaceTopography/IO/AL3D.py @@ -96,13 +96,21 @@ def read_height_data(self, f): invalid_pixel_value = float(self._header['InvalidPixelValue']) dtype = np.single nx, ny = int(self._header['Cols']), int(self._header['Rows']) + # The row stride is already in bytes (rows are padded to multiples + # of 8 bytes); do not multiply by the item size again, which would + # read four times too much data (into the texture image and beyond) rowstride = (nx * np.dtype(dtype).itemsize + 7) // 8 * 8 - buffer = f.read(rowstride * ny * np.dtype(dtype).itemsize) + buffer = f.read(rowstride * ny) data = as_strided(np.frombuffer(buffer, dtype=dtype), shape=(ny, nx), strides=(rowstride, np.dtype(dtype).itemsize)) mask = np.isnan(data) if not np.isnan(invalid_pixel_value): - mask = np.logical_or(mask, np.abs(data - invalid_pixel_value) < self._INVALID_RELTOL * invalid_pixel_value) + # Note: the tolerance must be scaled with the magnitude of the + # marker; without abs() a negative marker would make the mask + # unconditionally false + mask = np.logical_or( + mask, + np.abs(data - invalid_pixel_value) < self._INVALID_RELTOL * np.abs(invalid_pixel_value)) return np.ma.masked_array(data.T, mask=mask.T) @property diff --git a/SurfaceTopography/IO/DZI.py b/SurfaceTopography/IO/DZI.py index c9eb508c..f4e6fffc 100644 --- a/SurfaceTopography/IO/DZI.py +++ b/SurfaceTopography/IO/DZI.py @@ -151,7 +151,12 @@ def write_data(fn, subdata, pixel_physical_sizes, physical_offsets): # Get heights and rescale to interval 0, 1 mx, mn = data.max(), data.min() - data = (data - mn) / (mx - mn) + if mx > mn: + data = (data - mn) / (mx - mn) + else: + # A perfectly flat topography would otherwise divide by zero and + # produce an all-NaN image pyramid + data = np.zeros_like(data) # Write configuration file if meta_format == "xml": diff --git a/SurfaceTopography/IO/FRT.py b/SurfaceTopography/IO/FRT.py index a3b6f67c..9d0252ca 100644 --- a/SurfaceTopography/IO/FRT.py +++ b/SurfaceTopography/IO/FRT.py @@ -513,7 +513,7 @@ def __init__(self, file_path): block_id, block_size = unpack(' len(self._channel_names): + if channel_index < 0 or channel_index >= len(self._channel_names): raise RuntimeError( f"There are only {len(self._channel_names)} channels, but channel " f"index is {channel_index}." diff --git a/SurfaceTopography/IO/WSXM.py b/SurfaceTopography/IO/WSXM.py index 8ea77582..247b9b88 100644 --- a/SurfaceTopography/IO/WSXM.py +++ b/SurfaceTopography/IO/WSXM.py @@ -150,7 +150,12 @@ def __init__(self, file_path): z_amplitude = float(z_amplitude) min_value = float(metadata["Miscellaneous"]["Minimum"]) max_value = float(metadata["Miscellaneous"]["Maximum"]) - height_scale_factor = z_amplitude / (max_value - min_value) + if max_value > min_value: + height_scale_factor = z_amplitude / (max_value - min_value) + else: + # A perfectly flat scan has zero data range; any scale + # factor reproduces it + height_scale_factor = 1 self._channels = [ ChannelInfo( @@ -234,7 +239,6 @@ def topography( periodic=False if periodic is None else periodic, info=_info, ) - print(height_data.min(), height_data.max()) return topo.scale(channel.height_scale_factor) channels.__doc__ = ReaderBase.channels.__doc__ diff --git a/SurfaceTopography/IO/ZON.py b/SurfaceTopography/IO/ZON.py index 65d54ada..32fbd203 100644 --- a/SurfaceTopography/IO/ZON.py +++ b/SurfaceTopography/IO/ZON.py @@ -37,7 +37,7 @@ import zstandard from numpy.lib.stride_tricks import as_strided -from ..Exceptions import FileFormatMismatch, MetadataAlreadyFixedByFile +from ..Exceptions import FileFormatMismatch, MetadataAlreadyFixedByFile, UnsupportedFormatFeature from ..UniformLineScanAndTopography import Topography from .binary import decode from .common import OpenFromAny @@ -80,10 +80,13 @@ def _read_array(f, dtype=np.dtype(" 0: ret = np.zeros_like(x) @@ -208,8 +213,6 @@ def power_spectrum(self, reliable=True, algorithm='fft', wavevectors=None, nb_in y = apply_window(x, y, window=window) L = x[-1] - x[0] - if wavevectors is None: - wavevectors = 2 * np.pi * np.arange(int(L / np.diff(x).min())) / L y_q = np.zeros_like(wavevectors, dtype=complex) for x1, x2, y1, y2 in zip(x[:-1], x[1:], y[:-1], y[1:]): dx = x2 - x1 diff --git a/SurfaceTopography/Nonuniform/ScalarParameters.py b/SurfaceTopography/Nonuniform/ScalarParameters.py index 868b0da9..f0bd3c4c 100644 --- a/SurfaceTopography/Nonuniform/ScalarParameters.py +++ b/SurfaceTopography/Nonuniform/ScalarParameters.py @@ -151,7 +151,7 @@ def rms_slope(self): def rms_curvature(self): r""" - Computes root-mean square slope fluctuation of the line scan: + Computes root-mean square curvature fluctuation of the line scan: Parameters ---------- @@ -160,8 +160,8 @@ def rms_curvature(self): Returns ------- - rms_slope : float - Root-mean square slope. + rms_curvature : float + Root-mean square curvature. """ x = self.positions() d2 = self.derivative(n=2) diff --git a/SurfaceTopography/Nonuniform/__init__.py b/SurfaceTopography/Nonuniform/__init__.py index 4308ed94..429255cc 100644 --- a/SurfaceTopography/Nonuniform/__init__.py +++ b/SurfaceTopography/Nonuniform/__init__.py @@ -24,5 +24,5 @@ # """ -Module containing all functions operating on uniform topographies +Module containing all functions operating on nonuniform topographies """ diff --git a/SurfaceTopography/Support/Deprecation.py b/SurfaceTopography/Support/Deprecation.py index 58ce09e6..38af87a6 100644 --- a/SurfaceTopography/Support/Deprecation.py +++ b/SurfaceTopography/Support/Deprecation.py @@ -44,7 +44,10 @@ def _get_warn_str(version=version, alternative=alternative): @wraps(func) def deprecated_func(*args, **kwargs): - warnings.warn(_get_warn_str(version, alternative), DeprecationWarning) + # stacklevel=2 attributes the warning to the caller rather than + # to this wrapper + warnings.warn(_get_warn_str(version, alternative), DeprecationWarning, + stacklevel=2) return func(*args, **kwargs) docstring = deprecated_func.__doc__ or "" diff --git a/SurfaceTopography/Support/Regression.py b/SurfaceTopography/Support/Regression.py index c13569cc..3c03555d 100644 --- a/SurfaceTopography/Support/Regression.py +++ b/SurfaceTopography/Support/Regression.py @@ -57,7 +57,10 @@ def make_grid(collocation, min_value, max_value, nb_points=None, nb_points_per_d Maximum value. nb_points : int, optional Number of bins for averaging. Bins are automatically determined if set - to None. (Default: None) + to None. Caution: for 'log' collocation, this is the number of bin + *edges*, i.e. `nb_points` - 1 collocation points are returned, while + for 'linear' and 'quadratic' collocation it is the number of + collocation points (`nb_points` + 1 edges). (Default: None) nb_points_per_decade : int, optional Number of points per decade for log-spaced collocation points. (Default: None) diff --git a/SurfaceTopography/Uniform/Derivative.py b/SurfaceTopography/Uniform/Derivative.py index 5f1136dd..3f298bd8 100644 --- a/SurfaceTopography/Uniform/Derivative.py +++ b/SurfaceTopography/Uniform/Derivative.py @@ -136,6 +136,29 @@ def fourier(self, phase): return self._operator.fourier(phase) +def _operator_direction(op): + """ + Return the Cartesian axis an axis-aligned derivative operator acts + along, or None if the direction cannot be determined (e.g. for mixed + stencils). + """ + direction = getattr(op, 'direction', None) + if direction is not None: + return direction + try: + stencil = np.asarray(op.stencil) + except AttributeError: + return None + # An axis-aligned operator has nonzero coefficients that vary along a + # single axis only. (The stencil array itself may be zero-padded, so + # its shape is not a reliable indicator.) + nonzero = np.nonzero(stencil) + axes = [axis for axis, indices in enumerate(nonzero) if len(set(indices)) > 1] + if len(axes) == 1: + return axes[0] + return None + + # # Stencils for first and second derivatives # @@ -329,8 +352,9 @@ def derivative( unity (line scan), then an array of the same shape as the topography is returned. Otherwise, the first array index contains the direction of the derivative. If the topgography is nonperiodic, - then all returning array with have shape one less than the input - arrays. + then the returned arrays are trimmed at the boundary where the + derivative stencil sticks out of the data region; the number of + trimmed points is the stencil extent times the scale factor. """ if self.physical_sizes is None: raise ValueError( @@ -512,8 +536,16 @@ def derivative( if not is_periodic: _der = trim_nonperiodic(_der, s, op) - # We need to divide by the grid spacing to make this a derivative - _der /= scaled_pixel_size[i] ** n + # We need to divide by the grid spacing to make this a + # derivative. The grid spacing is that of the direction the + # operator acts along; the operator index only coincides with + # the direction for the default one-operator-per-direction case + # (e.g. a single y-direction operator must not be normalized by + # the x grid spacing). + direction = _operator_direction(op) + if direction is None: + direction = i + _der /= scaled_pixel_size[direction] ** n # Mask array if it has NaNs if np.sum(~np.isfinite(_der)) > 0: @@ -591,8 +623,9 @@ def fourier_derivative(self, scale_factor=None, distance=None, mask_function=Non unity (line scan), then an array of the same shape as the topography is returned. Otherwise, the first array index contains the direction of the derivative. If the topgography is nonperiodic, - then all returning array with have shape one less than the input - arrays. + then the returned arrays are trimmed at the boundary where the + derivative stencil sticks out of the data region; the number of + trimmed points is the stencil extent times the scale factor. """ dim = self.dim return self.derivative( diff --git a/SurfaceTopography/Uniform/Detrending.py b/SurfaceTopography/Uniform/Detrending.py index 0a1bd9b7..09662e7d 100644 --- a/SurfaceTopography/Uniform/Detrending.py +++ b/SurfaceTopography/Uniform/Detrending.py @@ -135,7 +135,7 @@ def polyfit2_topography(self, full_output=False): coeffs ordered as follows - {5} + {0} x + {1} y + {2} x^2 + {3} y^2 + {4} xy + {0} + {1} x + {2} y + {3} x^2 + {4} y^2 + {5} xy """ arr = self.heights() diff --git a/SurfaceTopography/Uniform/Integration.py b/SurfaceTopography/Uniform/Integration.py index 35e5daa6..1e88e7e2 100644 --- a/SurfaceTopography/Uniform/Integration.py +++ b/SurfaceTopography/Uniform/Integration.py @@ -21,6 +21,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # +import inspect + import numpy as np from ..Exceptions import NoReliableDataError, UndefinedDataError @@ -78,10 +80,17 @@ def integrate_psd(self, factor=lambda q: 1, window=None, reliable=True, ): raise NoReliableDataError('Dataset contains no reliable data.') C_raw = C_raw * mask - qvec = self.fftfreq() + # Dispatch on the number of arguments the factor accepts rather than + # catching TypeError, which would silently mask genuine TypeErrors + # raised inside a user-supplied factor function try: + nb_factor_args = len(inspect.signature(factor).parameters) + except (TypeError, ValueError): + nb_factor_args = 1 + if self.dim == 2 and nb_factor_args >= 2: + qvec = self.fftfreq() return np.sum(C_raw * factor(*qvec)) / np.prod(self.physical_sizes) - except TypeError: + else: return np.sum(C_raw * factor(q)) / np.prod(self.physical_sizes) @@ -94,7 +103,7 @@ def integrate_psd_from_profile(self, factor=lambda qx: 1, window=None, reliable= .. math:: - \frac{1}{2 \pi} \int_0^\infty dq_x factor(q_x) C^{1D}(q_x) + \frac{1}{2 \pi} \int_{-\infty}^\infty dq_x factor(q_x) C^{1D}(q_x) Discrete @@ -173,7 +182,7 @@ def moment_power_spectrum(self, order=0, window=None, reliable=True, ): .. math:: - \frac{1}{2 \pi} \int_0^\infty dq_x |q|^{\alpha} C^{1D}(q_x) + \frac{1}{2 \pi} \int_{-\infty}^\infty dq_x |q|^{\alpha} C^{1D}(q_x) Discrete diff --git a/SurfaceTopography/Uniform/PowerSpectrum.py b/SurfaceTopography/Uniform/PowerSpectrum.py index 41e35bb8..2e84e1dd 100644 --- a/SurfaceTopography/Uniform/PowerSpectrum.py +++ b/SurfaceTopography/Uniform/PowerSpectrum.py @@ -188,7 +188,10 @@ def power_spectrum_from_area(self, window=None, reliable=True, collocation='log' nx, ny = self.nb_grid_pts sx, sy = self.physical_sizes - qmax = 2 * np.pi * nx / (2 * sx) + # Radial averaging is meaningful up to the smaller of the two Nyquist + # frequencies; using only the x-Nyquist would make the result depend on + # the orientation of the map for anisotropic pixels + qmax = np.pi * min(nx / sx, ny / sy) if reliable: # Update qmax diff --git a/SurfaceTopography/Uniform/VariableBandwidth.py b/SurfaceTopography/Uniform/VariableBandwidth.py index 614fdbca..51d883e8 100644 --- a/SurfaceTopography/Uniform/VariableBandwidth.py +++ b/SurfaceTopography/Uniform/VariableBandwidth.py @@ -210,7 +210,7 @@ def variable_bandwidth_from_profile(self, quantities='bh', reliable=True, resamp - 'm': Magnification (Unit: dimensionless) - 'b': Bandwidth (Unit: length) - 'h': Statistical property (Unit: default length, see func) - - 's': RMS detrending slope (Unit: dimensionless) + - 'g': RMS detrending slope/gradient (Unit: dimensionless) For example, 'mbh' return a tuple with the three entries magnification, bandwidth, rms height. (Default: 'bh') @@ -331,7 +331,7 @@ def variable_bandwidth_from_area(self, quantities='bh', reliable=True, resamplin corresponding to the respective magnification. """ if resampling_method is not None: - raise ValueError('`variable_bandwidth_from_profile` does not support resampling.') + raise ValueError('`variable_bandwidth_from_area` does not support resampling.') magnification = 1 physical_sizes = np.array(self.physical_sizes) diff --git a/SurfaceTopography/UniformLineScanAndTopography.py b/SurfaceTopography/UniformLineScanAndTopography.py index a0fc1088..88875d4a 100644 --- a/SurfaceTopography/UniformLineScanAndTopography.py +++ b/SurfaceTopography/UniformLineScanAndTopography.py @@ -748,11 +748,10 @@ def offset(self): return self._offset @offset.setter - def offset(self, offset, offsety=None): - if offsety is None: - self._offset = offset - else: - self._offset = (offset, offsety) + def offset(self, offset): + # Note: property setters receive exactly one value; a second + # parameter would be unreachable + self._offset = offset def heights(self): """Computes the translated profile.""" @@ -782,7 +781,7 @@ def __init__(self, topography_a, topography_b, info={}): super().__init__(topography_a, info=info) - def combined_val(prop_a, prop_b, propname): + def check_combined_val(prop_a, prop_b, propname): """ topographies can have a fixed or dynamic, adaptive nb_grid_pts (or other attributes). This function assures that -- if this function @@ -793,20 +792,19 @@ def combined_val(prop_a, prop_b, propname): prop_b -- field of other topography propname -- field identifier (for error messages only) """ - if prop_a is None: - return prop_b - else: - if prop_b is not None: - assert prop_a == prop_b, "{} incompatible:{} <-> {}".format( - propname, prop_a, prop_b - ) - return prop_a + # Note: raise a proper exception; an `assert` would vanish under + # `python -O` and allow silent superposition of incompatible + # grids + if prop_a is not None and prop_b is not None and prop_a != prop_b: + raise ValueError( + "{} incompatible: {} <-> {}".format(propname, prop_a, prop_b) + ) - self._dim = combined_val(topography_a.dim, topography_b.dim, "dim") - self._nb_grid_pts = combined_val( + check_combined_val(topography_a.dim, topography_b.dim, "dim") + check_combined_val( topography_a.nb_grid_pts, topography_b.nb_grid_pts, "nb_grid_pts" ) - self._size = combined_val( + check_combined_val( topography_a.physical_sizes, topography_b.physical_sizes, "physical_sizes" ) self.parent_topography_a = topography_a diff --git a/cpp/autocorrelation.cpp b/cpp/autocorrelation.cpp index e3845851..706179fa 100644 --- a/cpp/autocorrelation.cpp +++ b/cpp/autocorrelation.cpp @@ -82,10 +82,17 @@ std::tuple nonuniform_autocorrelation( double b = (b1 + b2) / 2; double db = (b2 - b1) / 2; if (db > 0) { - // f1[x_] := (h1 + s1*(x - x1)) - // f2[x_] := (h2 + s2*(x - x2)) - // FullSimplify[Integrate[f1[x]*f2[x + d], {x, b - db, b + db}]] - // = 2 * f1[b] * f2[b + d] * db + 2 * s1 * s2 * db ** 3 / 3 + // This accumulates the height-difference autocorrelation + // A(d) = (1/2) < [h(x+d) - h(x)]^2 >, + // i.e. the conventional factor 1/2 is folded into the + // expression below. With + // f1[x_] := (h1 + s1*(x - x1)) + // f2[x_] := (h2 + s2*(x - x2)) + // the difference on the overlap is + // f2[x + d] - f1[x] = z - (s1 - s2)*(x - b) + // where z = f2[b + d] - f1[b], and + // (1/2) Integrate[(f2[x + d] - f1[x])^2, {x, b - db, b + db}] + // = db*z^2 + (s1 - s2)^2 * db^3 / 3 double z = h2 - s2 * x2 + (b + distances(k)) * s2 - h1 + s1 * x1 - b * s1; double ds = s1 - s2; acf(k) += (db * (3 * z * z + ds * ds * db * db)) / 3; diff --git a/cpp/bearing_area.cpp b/cpp/bearing_area.cpp index cae94e1a..e36a8588 100644 --- a/cpp/bearing_area.cpp +++ b/cpp/bearing_area.cpp @@ -21,7 +21,6 @@ SOFTWARE. */ #include -#include #include "bearing_area.h" diff --git a/cpp/module.cpp b/cpp/module.cpp index 18dbfbad..846ccacb 100644 --- a/cpp/module.cpp +++ b/cpp/module.cpp @@ -52,24 +52,30 @@ PYBIND11_MODULE(_SurfaceTopography, mod) { py::arg("map"), py::arg("periodic"), py::arg("stencil") = std::nullopt, py::call_guard()); mod.def("assign_segment_numbers", &assign_segment_numbers, - "Assign unique numbers to connected 1D segments", + "Assign unique numbers to connected 1D segments; the map is " + "always treated as periodic", py::arg("map")); mod.def("distance_map", &distance_map, - "Compute distance from each point to nearest marked point", + "Compute distance from each point to nearest marked point; " + "distances are always measured with periodic boundary conditions", py::arg("map"), py::call_guard()); mod.def("closest_patch_map", &closest_patch_map, - "Compute the tag of the closest patch for each point", + "Compute the tag of the closest patch for each point; distances " + "are always measured with periodic boundary conditions", py::arg("map"), py::call_guard()); mod.def("shortest_distance", &shortest_distance, - "Compute shortest distance between patches", + "Compute shortest distance between patches; distances are always " + "measured with periodic boundary conditions", py::arg("fromc"), py::arg("fromp"), py::arg("to"), py::arg("maxd") = -1, py::call_guard()); mod.def("correlation_function", &correlation_function, - "Compute real-space correlation function between two maps", + "Compute real-space correlation function between two maps; the " + "maps are always treated as periodic", py::arg("map1"), py::arg("map2"), py::arg("max_dist"), py::call_guard()); mod.def("perimeter_length", &perimeter_length, - "Compute total perimeter length of marked regions", + "Compute total perimeter length of marked regions; the map is " + "always treated as periodic", py::arg("map")); // === Bicubic interpolation (from former C module) === diff --git a/cpp/patchfinder.cpp b/cpp/patchfinder.cpp index 9b1c29aa..9f4896ec 100644 --- a/cpp/patchfinder.cpp +++ b/cpp/patchfinder.cpp @@ -179,7 +179,7 @@ std::tuple assign_segment_numbers(Eigen::Ref map) void track_distance(Eigen::Index nx, Eigen::Index ny, const RowMajorXXb &map, - RowMajorXXd &dist, RowMajorXXi &next) + RowMajorXXd &dist) { Stack stack(DEFAULT_STACK_SIZE); @@ -212,7 +212,6 @@ void track_distance(Eigen::Index nx, Eigen::Index ny, const RowMajorXXb &map, // Is i0, j0 closer than what is currently stored? if (d < dist(i, j)) { dist(i, j) = d; - next(i, j) = i0 * ny + j0; // Loop over all neighbors for (int joff = -1; joff <= 1; ++joff) { @@ -249,11 +248,8 @@ RowMajorXXd distance_map(Eigen::Ref map) // This stores the distance to the closest point on the contour RowMajorXXd dist = RowMajorXXd::Constant(nx, ny, nx * ny); - // This stores the index of the closest point - RowMajorXXi next = RowMajorXXi::Constant(nx, ny, nx * ny); - // Track distances from contact edge - track_distance(nx, ny, map, dist, next); + track_distance(nx, ny, map, dist); return dist; } diff --git a/meson.build b/meson.build index 69bded19..e25113be 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,9 @@ project( 'SurfaceTopography', # Project name 'cpp', # Project type. We need a C++ compiler. default_options : ['cpp_std=c++17'], # Yes, we need C++17, at least for constexpr - version: run_command('python', '-m', 'DiscoverVersion', check: true).stdout().strip(), + # Use 'python3': the bare 'python' alias does not exist on many systems + # (e.g. Debian/Ubuntu without python-is-python3) + version: run_command('python3', '-m', 'DiscoverVersion', check: true).stdout().strip(), ) # https://mesonbuild.com/Python-module.html diff --git a/test/test_invariants.py b/test/test_invariants.py new file mode 100644 index 00000000..a3525030 --- /dev/null +++ b/test/test_invariants.py @@ -0,0 +1,172 @@ +# +# Copyright 2026 Lars Pastewka +# +# ### MIT license +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +""" +Property-based invariant tests: analysis results must be unchanged (or +transform in a known way) under transposition, translation, scaling and +shifts of the coordinate origin, and pipeline decorators must report +consistent geometry. +""" + +import numpy as np +import pytest + +from SurfaceTopography import NonuniformLineScan, Topography, UniformLineScan + + +@pytest.fixture +def anisotropic_topography(): + """Periodic topography with anisotropic pixels (px = 4 py).""" + rng = np.random.RandomState(42) + nx, ny = 64, 32 + heights = rng.uniform(-1, 1, (nx, ny)) + return Topography(heights, (8.0, 1.0), periodic=True) + + +def test_transpose_geometry(anisotropic_topography): + t = anisotropic_topography + tt = t.transpose() + nx, ny = t.nb_grid_pts + sx, sy = t.physical_sizes + px, py = t.pixel_size + assert tt.nb_grid_pts == (ny, nx) + assert tt.physical_sizes == (sy, sx) + np.testing.assert_allclose(tt.pixel_size, (py, px)) + # Geometry consistency of the decorator itself + np.testing.assert_allclose( + tt.pixel_size, np.asarray(tt.physical_sizes) / np.asarray(tt.nb_grid_pts)) + np.testing.assert_allclose(tt.heights(), t.heights().T) + + +def test_transpose_invariance_of_scalar_parameters(anisotropic_topography): + """Scalar roughness parameters that do not single out a scan direction + must be invariant under transposition, also for anisotropic pixels.""" + t = anisotropic_topography + tt = t.transpose() + np.testing.assert_allclose(tt.rms_height_from_area(), t.rms_height_from_area()) + np.testing.assert_allclose(tt.rms_gradient(), t.rms_gradient()) + np.testing.assert_allclose(tt.rms_laplacian(), t.rms_laplacian()) + np.testing.assert_allclose(tt.bandwidth(), t.bandwidth()) + + +def test_translate_invariance(anisotropic_topography): + """Integer-pixel translations of a periodic topography change nothing + but the position of the heights.""" + t = anisotropic_topography + tt = t.translate(offset=(5, 7)) + np.testing.assert_allclose( + tt.heights(), np.roll(np.roll(t.heights(), 5, axis=0), 7, axis=1)) + assert tt.physical_sizes == t.physical_sizes + assert tt.nb_grid_pts == t.nb_grid_pts + np.testing.assert_allclose(tt.rms_height_from_area(), t.rms_height_from_area()) + np.testing.assert_allclose(tt.rms_gradient(), t.rms_gradient()) + + +def test_scale_invariants(anisotropic_topography): + """Linear analysis functions scale linearly with a static height scale.""" + t = anisotropic_topography + factor = 2.5 + ts = t.scale(factor) + np.testing.assert_allclose(ts.rms_height_from_area(), + factor * t.rms_height_from_area()) + np.testing.assert_allclose(ts.rms_gradient(), factor * t.rms_gradient()) + # The bearing area transforms with the height scale + c = 0.3 + np.testing.assert_allclose(ts.bearing_area(factor * c), t.bearing_area(c)) + + +def test_decorator_geometry_consistency(anisotropic_topography): + """All decorators must report pixel_size == physical_sizes / nb_grid_pts.""" + t = anisotropic_topography + for decorated in [t.scale(2.0), + t.detrend('center'), + t.transpose(), + t.translate(offset=(1, 2)), + t.transpose().detrend('center'), + t.scale(3.0).transpose()]: + np.testing.assert_allclose( + decorated.pixel_size, + np.asarray(decorated.physical_sizes) / np.asarray(decorated.nb_grid_pts), + err_msg=f'inconsistent geometry for {decorated}') + + +def test_bearing_area_bounds_and_complement(): + """The bearing area is a CDF: it is 1 below the minimum, 0 above the + maximum, and the bearing area of the inverted surface complements it.""" + rng = np.random.RandomState(0) + heights = rng.uniform(-1, 1, (32, 33)) + for periodic in [False, True]: + t = Topography(heights, (2.0, 1.0), periodic=periodic) + ti = Topography(-heights, (2.0, 1.0), periodic=periodic) + assert t.bearing_area(heights.min() - 0.1) == pytest.approx(1.0) + assert t.bearing_area(heights.max() + 0.1) == pytest.approx(0.0) + for c in [-0.5, -0.1, 0.0, 0.2, 0.7]: + np.testing.assert_allclose(ti.bearing_area(-c), + 1 - t.bearing_area(c), atol=1e-12) + + +def test_uniform_line_scan_scale_and_transpose_roundtrip(): + rng = np.random.RandomState(1) + h = rng.uniform(-1, 1, 128) + t = UniformLineScan(h, 4.0, periodic=True) + np.testing.assert_allclose(t.scale(3.0).rms_height_from_profile(), + 3.0 * t.rms_height_from_profile()) + tt = t.translate(offset=17) + np.testing.assert_allclose(tt.heights(), np.roll(h, 17)) + np.testing.assert_allclose(tt.rms_height_from_profile(), + t.rms_height_from_profile()) + + +def test_nonuniform_detrend_origin_invariance(): + """Detrending must not depend on where the scan sits on the x-axis. + + This is a regression test for the ill-conditioned normal equations in + the nonuniform `polyfit`, which are now solved in centered coordinates. + """ + rng = np.random.RandomState(2) + x = np.sort(rng.uniform(0, 1, 100)) + x[0] = 0 + h = 0.1 * rng.randn(100) + 0.5 * x - 0.8 * x * x + t = NonuniformLineScan(x, h) + for offset in [-1e3, 1e3, 1e5]: + t_shifted = NonuniformLineScan(x + offset, h) + # Evaluating the detrending polynomial a0 + a1 x + a2 x^2 at + # x ~ offset is limited by double precision to an absolute error + # of order eps * offset^2, even for exact coefficients + atol = max(1e-9, 100 * np.finfo(float).eps * offset ** 2) + for mode in ['mean', 'median', 'rms-tilt', 'slope', 'rms-curvature']: + np.testing.assert_allclose( + t_shifted.detrend(mode).heights(), + t.detrend(mode).heights(), atol=atol, + err_msg=f'detrend mode {mode} is not origin invariant ' + f'for offset {offset}') + + +def test_nonuniform_polyfit_recovers_exact_polynomial(): + rng = np.random.RandomState(3) + x = np.sort(rng.uniform(0, 1, 50)) + x[0] = 0 + h = 2.0 + 3.0 * x - 4.0 * x * x + t = NonuniformLineScan(x, h) + np.testing.assert_allclose(t.polyfit(2), [2.0, 3.0, -4.0], atol=1e-9) From 3f0fa50e13030685e336e093dda63bcc9bc02270 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 23 Jul 2026 17:38:02 +0000 Subject: [PATCH 19/23] Revert meson version discovery to 'python': 'python3' breaks Windows wheels pip's isolated build environment provides python.exe but no python3.exe on Windows, so 'python3' resolved to an interpreter outside the build environment that does not have the DiscoverVersion build requirement installed. All Windows wheel builds failed with "No module named DiscoverVersion". 'python' is the only interpreter name guaranteed to exist inside a virtual environment on all platforms; this is now documented in meson.build. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- AUDIT.md | 9 +++++++-- meson.build | 11 ++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/AUDIT.md b/AUDIT.md index 5b53563f..591d0508 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -29,8 +29,13 @@ Severity legend: > the actionable items have been addressed: property-based invariant > tests (transpose/translate/scale/origin invariance, decorator geometry > consistency, bearing-area CDF properties) were added in -> `test/test_invariants.py` (T1/T3/T6), and the meson version discovery -> now calls `python3` instead of the bare `python` alias (T8). The +> `test/test_invariants.py` (T1/T3/T6). The meson version-discovery +> interpreter (T8) must remain the bare `python`: switching it to +> `python3` broke all Windows wheel builds, because pip's isolated build +> environment provides no `python3.exe` on Windows and the name resolved +> to an interpreter without the DiscoverVersion build requirement. This +> is now documented in `meson.build`; building with bare meson outside a +> venv requires a `python` alias. The > proposed dedup of the three `bandwidth` implementations and of the > `compute_1d_moment`/`compute_iso_moment` pair was assessed and > deliberately rejected: the `bandwidth` variants differ semantically diff --git a/meson.build b/meson.build index e25113be..560392cb 100644 --- a/meson.build +++ b/meson.build @@ -3,9 +3,14 @@ project( 'SurfaceTopography', # Project name 'cpp', # Project type. We need a C++ compiler. default_options : ['cpp_std=c++17'], # Yes, we need C++17, at least for constexpr - # Use 'python3': the bare 'python' alias does not exist on many systems - # (e.g. Debian/Ubuntu without python-is-python3) - version: run_command('python3', '-m', 'DiscoverVersion', check: true).stdout().strip(), + # This must be 'python', not 'python3': builds run inside a virtual + # environment (pip/mesonpy build isolation), which provides 'python' on + # all platforms but no 'python3.exe' on Windows -- there, 'python3' + # resolves to some other interpreter on PATH that does not have the + # DiscoverVersion build requirement installed. When building with bare + # meson outside a venv (e.g. on Debian without python-is-python3), + # create a venv first. + version: run_command('python', '-m', 'DiscoverVersion', check: true).stdout().strip(), ) # https://mesonbuild.com/Python-module.html From 93f3f1d3c69a747d756e5b04b70e7291d3b7fdbb Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 25 Jul 2026 07:55:17 +0000 Subject: [PATCH 20/23] Fix performance findings under the library's memory constraints (audit section 2.5) The performance findings were re-assessed against the memory boundary conditions of the library: a container streams its topographies from disk and must never hold more than one of them in memory, and readers are long-lived metadata handles that must not pin file data. Several of the apparent performance penalties exist precisely because of those constraints, so the fixes here either reduce memory use or keep it unchanged; the two items whose speedup would cost memory are documented as trade-offs rather than changed. Fixed, with reduced memory use: - Bicubic: compute the 16 spline coefficients of a cell on demand with a single-cell cache instead of tabulating them for every pixel, which cost 128 bytes per pixel (more than 2 GB for a 4096 x 4096 map) before the first evaluation. - IBW, MI: keep only metadata (and, for MI, the byte offset of the data block) on the reader and load the data in `topography()`. - MNT: store block positions instead of all decompressed blocks and the raw file copy; decompress on demand. - patchfinder: allocate the flood-fill stack once per call instead of 16 MB per patch. - Gaussian process regression: factorize the observation covariance once with `cho_factor` and reuse it, and compute only the variance diagonal instead of the full predictive covariance matrix. Fixed, memory-neutral: - Container PSD integration: precompute the per-topography bandwidth intervals in a single streaming pass (two scalars each, heights are never cached) and answer counting queries with `searchsorted`. This turns N^2 file reads into 2N, as the pre-existing TODO proposed. Topographies whose reliability cutoff exceeds their scan length have an empty bandwidth interval and are excluded, so that the interval subtraction cannot count them as -1. - MNT zlib scan: measure candidate streams with a chunked `decompressobj` over a memoryview and skip past accepted streams, instead of slicing the remaining buffer and fully decompressing it at every candidate byte. - Nonuniform height-height autocorrelation: move the double segment loop into a C++ kernel that runs in constant additional memory rather than vectorizing it into an O(N*M) intermediate. - Rigid sphere scan: vectorize over blocks of scan positions sized so the temporary stays bounded irrespective of scan length and tip radius. - XYZ: accumulate columns into `array('d')` buffers during parsing. Deliberately unchanged: the correlation function's pixel sweep (its FFT alternative needs several full-map complex arrays) and the bearing area full-grid sweep per query height (a sorted cache adds another O(N) array and only pays off when many heights are queried). The XYZ file is still parsed twice, because caching the columns would pin the point cloud for the reader's lifetime. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- AUDIT.md | 49 ++++++- SurfaceTopography/Container/Integration.py | 88 +++++++++--- SurfaceTopography/IO/IBW.py | 26 ++-- SurfaceTopography/IO/MI.py | 42 ++++-- SurfaceTopography/IO/MNT.py | 130 ++++++++++++++---- SurfaceTopography/IO/XYZ.py | 9 +- .../Nonuniform/Autocorrelation.py | 31 +---- SurfaceTopography/ScanningProbe/RigidScan.py | 57 +++++--- SurfaceTopography/Support/Regression.py | 21 ++- cpp/autocorrelation.cpp | 50 +++++++ cpp/autocorrelation.h | 5 + cpp/bicubic.cpp | 12 +- cpp/bicubic.h | 20 ++- cpp/module.cpp | 5 + cpp/patchfinder.cpp | 14 +- test/IO/test_ibw.py | 4 +- 16 files changed, 413 insertions(+), 150 deletions(-) diff --git a/AUDIT.md b/AUDIT.md index 591d0508..ff7cf3d5 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -44,8 +44,11 @@ Severity legend: > helper would add indirection without reducing risk. The larger > refactoring themes (shared row-major reader helper for IO, unifying > the Uniform/Nonuniform/Container analysis-function triplication) -> remain proposals — see section 4. The performance tier (§2.5) remains -> open. Note that the masked-data normalization fix +> remain proposals — see section 4. The performance tier (§2.5) has been +> worked through under the library's memory boundary conditions; see the +> resolution note at the head of that section for what was fixed, what +> was intentionally left as a time/memory trade-off, and what remains. +> Note that the masked-data normalization fix > (§2.2) changed the reference values of several IO tests whose fixtures > contain undefined data points; the old values were dominated by a > mean-normalization artifact. @@ -533,6 +536,48 @@ inversion. **Fix:** transpose for `'x'` instead of `'y'`. ### 2.5 Performance +> **Resolution note.** These findings were re-assessed against the memory +> boundary conditions of the library — a container streams its topographies +> from disk and must never hold more than one of them in memory, and readers +> are long-lived metadata handles that must not pin file data. Under those +> constraints the items split three ways: +> +> - **Fixed, and memory use goes down**: bicubic coefficients are now +> computed per cell with a single-cell cache instead of a 128 byte/pixel +> table; the IBW, MI and MNT readers no longer retain wave data, the +> whole file, or all decompressed blocks past `__init__`; the flood-fill +> stack is allocated once per call instead of 16 MB per patch; the GP +> regression reuses one Cholesky factorization and computes only the +> variance diagonal instead of the full predictive covariance. +> - **Fixed, memory-neutral**: the container PSD integration precomputes +> the bandwidth intervals of the topographies in a single streaming pass +> (two scalars each — heights are never cached), turning N² file reads +> into 2N as the pre-existing TODO proposed; the MNT zlib block scan +> measures candidate streams through a chunked `decompressobj` over a +> memoryview and skips past accepted streams instead of slicing and +> fully decompressing the tail at every byte; the nonuniform +> height-height ACF moved into a constant-memory C++ kernel rather than +> being vectorized into an O(N·M) intermediate; the rigid-sphere scan is +> vectorized in fixed-size blocks so its temporary stays bounded +> (~32 MB) regardless of scan length and tip radius; the XYZ parser +> accumulates into `array('d')` buffers instead of Python float lists. +> - **Deliberately not changed, because the speedup would cost memory**: +> `correlation_function`'s O(nx·ny·max_dist²) sweep uses O(1) extra +> memory, while the FFT alternative needs several full-map complex +> arrays (~1 GB at 4096²); the bearing-area full-grid sweep per query +> height would need another sorted O(N) array on top of the existing +> contiguous copy, which only pays off when many heights are queried. +> Both are left as documented trade-offs, not oversights. The XYZ +> double parse is likewise still a double parse: caching the parsed +> columns on the reader would pin the point cloud for the reader's +> lifetime, which the lazy-reader rule forbids. +> +> Remaining items of this section that are neither memory-related nor +> addressed above: the `int × int` index overflow in `bicubic.cpp` for +> maps beyond 46341² (needs a wider index type throughout), the +> O(max_dist⁴) correlation integration prefix sum, and the log-space +> variance FIXME in the GP branch. + - `Container/Integration.py:51-68,119-136` — container PSD integration is O(N²) in topography reads: the per-topography `average(qx)` callback loops over all topographies again, and `LazySurfaceContainer.__getitem__` diff --git a/SurfaceTopography/Container/Integration.py b/SurfaceTopography/Container/Integration.py index 805b983b..8f8eaa7a 100644 --- a/SurfaceTopography/Container/Integration.py +++ b/SurfaceTopography/Container/Integration.py @@ -28,16 +28,18 @@ from ..Generic.Moments import compute_1d_moment, compute_iso_moment -def _bandwidth_count_from_profile(self, qx, unit, reliable=True): +def _bandwidth_intervals_from_profile(self, unit, reliable=True): r""" - Return number of topographies that include qx in their bandwidth. + Return the wavevector intervals covered by the topographies of this + container as a pair of sorted arrays (lower bounds, upper bounds). + This requires a single pass over the container; counting queries can + then be answered without touching the topographies again (lazy + containers read the data file on every element access). Parameters: ----------- self : SurfaceContainer Collection of Height containers - qx: np.ndarrau of floats - wavevector unit : str Unit of lengths in which the wavevector is defined. reliable : bool, optional @@ -45,11 +47,13 @@ def _bandwidth_count_from_profile(self, qx, unit, reliable=True): Returns ------- - number: np.ndarray - number of topographies having qx in their bandwidth + lower : np.ndarray + Sorted lower bandwidth bounds of the individual topographies. + upper : np.ndarray + Sorted upper bandwidth bounds of the individual topographies. """ - qx = np.abs(qx) - factor = np.zeros_like(qx) + lower = [] + upper = [] for t in self: t = t.to_unit(unit) @@ -58,14 +62,55 @@ def _bandwidth_count_from_profile(self, qx, unit, reliable=True): if short_cutoff is not None: qxmax = min(2 * np.pi / short_cutoff, qxmax) - factor += np.logical_and( - qx >= 2 * np.pi / t.physical_sizes[0], - qx <= qxmax, - ) + qxmin = 2 * np.pi / t.physical_sizes[0] + if qxmax >= qxmin: + lower += [qxmin] + upper += [qxmax] + # else: empty bandwidth interval (reliability cutoff longer than the + # scan); such a topography contains no wavevector and must not enter + # the counting arrays, where the subtraction in `_count_in_intervals` + # would tally it as -1 between its inverted bounds + return np.sort(lower), np.sort(upper) + + +def _count_in_intervals(intervals, nb_topographies, qx): + r""" + Return the number of bandwidth intervals (from + `_bandwidth_intervals_from_profile`) that contain each wavevector in + `qx`. + """ + lower, upper = intervals + qx = np.abs(qx) + # Number of intervals with lower <= qx minus number of intervals with + # upper < qx + count = np.searchsorted(lower, qx, side='right') - np.searchsorted(upper, qx, side='left') # All topographies have qx == 0 wavevector - factor = np.where(qx == 0, len(self), factor) - # TODO: This will be very slow on Topobank - return factor + return np.where(qx == 0, nb_topographies, count) + + +def _bandwidth_count_from_profile(self, qx, unit, reliable=True): + r""" + Return number of topographies that include qx in their bandwidth. + + Parameters: + ----------- + self : SurfaceContainer + Collection of Height containers + qx: np.ndarrau of floats + wavevector + unit : str + Unit of lengths in which the wavevector is defined. + reliable : bool, optional + Only incorporate data deemed reliable. (Default: True) + + Returns + ------- + number: np.ndarray + number of topographies having qx in their bandwidth + """ + return _count_in_intervals( + _bandwidth_intervals_from_profile(self, unit, reliable), len(self), qx + ) def integrate_psd_from_profile(self, factor, unit, window=None, reliable=True): @@ -118,13 +163,16 @@ def integrate_psd_from_profile(self, factor, unit, window=None, reliable=True): """ integ = 0 - # TODO: faster: precompute _bandwidth_count_from_profile (defining a piecewise constant function, ) - # a table with bins and number of topographies inside the bins - # this will make us only loop 2N times through the topographies instead of N^2 - # with N the total number of topographies + # Precompute the bandwidth intervals in a single pass over the + # container; the `average` callback below is invoked once per + # topography, and looping over the container inside it would read + # every data file N times (lazy containers construct topographies + # from the file on each element access). + intervals = _bandwidth_intervals_from_profile(self, unit, reliable) + nb_topographies = len(self) def average(qx): - count = _bandwidth_count_from_profile(self, qx, unit, reliable) + count = _count_in_intervals(intervals, nb_topographies, qx) return np.where(count > 0, factor(qx) / count, 0) for t in self: diff --git a/SurfaceTopography/IO/IBW.py b/SurfaceTopography/IO/IBW.py index 6b88af6f..7f1a3ff5 100644 --- a/SurfaceTopography/IO/IBW.py +++ b/SurfaceTopography/IO/IBW.py @@ -49,24 +49,30 @@ class IBWReader(ReaderBase): # Reads in the positions of all the data and metadata def __init__(self, file_path): + # Note: igor2 has no partial-read support, so the wave data is + # loaded here as well - but only the metadata is kept on the + # reader; the data itself is dropped when this method returns and + # loaded again in `topography()`. Readers are long-lived metadata + # handles and must not pin the full data in memory. + self._file_path = file_path with OpenFromAny(file_path, 'rb') as f: file = loadibw(f) if file['version'] != 5: raise RuntimeError('Only IBW version 5 is supported!') - self.data = file['wave'] + data = file['wave'] # the first two labels are of x and y axis. we cannot read those self._channel_names = [channel.decode() for channel in - self.data['labels'][2][1:]] + data['labels'][2][1:]] self._default_channel = 0 # # Read physical sizes from file, since all data # has already been loaded, we can calculate it here # - height_data = self.data['wData'] + height_data = data['wData'] # TODO is it always like this? assert len(height_data.shape) == 3, \ @@ -89,9 +95,9 @@ def __init__(self, file_path): def decode_unit_entry(u): return u.tobytes().partition(b'\0')[0].decode('latin-1') - data_unit = decode_unit_entry(self.data['wave_header']['dataUnits']) - x_unit = decode_unit_entry(self.data['wave_header']['dimUnits'][0]) - y_unit = decode_unit_entry(self.data['wave_header']['dimUnits'][1]) + data_unit = decode_unit_entry(data['wave_header']['dataUnits']) + x_unit = decode_unit_entry(data['wave_header']['dimUnits'][0]) + y_unit = decode_unit_entry(data['wave_header']['dimUnits'][1]) # the following is not necessary, we could handle different units by # rescaling, however I'll leave it like this for now, print some @@ -112,7 +118,7 @@ def decode_unit_entry(u): # # Decode sizes # - sfA = self.data['wave_header']['sfA'] + sfA = data['wave_header']['sfA'] self._physical_sizes = (nx * sfA[0], ny * sfA[1]) # Comment in C header file on these fields: Index value for element e # of dimension d = sfA[d]*e + sfB[d]. sfB is left out here, because we @@ -123,7 +129,7 @@ def decode_unit_entry(u): # instrument_info = {"vendor": "Asylum Research"} try: - note = self.data["note"].decode("latin-1") + note = data["note"].decode("latin-1") for line in note.splitlines(): if ":" in line: key, value = line.split(":", 1) @@ -190,7 +196,9 @@ def topography(self, channel_index=None, channel_id=None, raise RuntimeError( 'This reader does not support MPI parallelization.') - height_data = self.data['wData'] + # Load the data on demand; the reader itself only holds metadata + with OpenFromAny(self._file_path, 'rb') as f: + height_data = loadibw(f)['wave']['wData'] height_data = np.fliplr(height_data[:, :, channel_index].copy()) if physical_sizes is None: diff --git a/SurfaceTopography/IO/MI.py b/SurfaceTopography/IO/MI.py index 3b37dc1f..b5248b43 100644 --- a/SurfaceTopography/IO/MI.py +++ b/SurfaceTopography/IO/MI.py @@ -80,40 +80,48 @@ def __init__(self, file_path): def process_header(self): with OpenFromAny(self.file_path, 'rb') as f: - self.lines = f.readlines() + # Note: the header is delimited by a magic line, so its length is + # only known after scanning the lines. The lines are a local + # variable and are dropped when this method returns; only the byte + # offset of the data block is stored, so that the reader does not + # pin the whole file in memory for its lifetime. + lines = f.readlines() # Find out if image or spectroscopy - if self.lines[0] == image_head: + if lines[0] == image_head: self.is_image = True - elif self.lines[0] == spec_head: + elif lines[0] == spec_head: self.is_image = False else: raise CorruptFile # Find the start of the height data and denote data type - if magic_data in self.lines: - header_size = self.lines.index(magic_data) + if magic_data in lines: + header_size = lines.index(magic_data) self.data_type = 'text' - elif magic_data_binary in self.lines: - header_size = self.lines.index(magic_data_binary) + elif magic_data_binary in lines: + header_size = lines.index(magic_data_binary) self.data_type = 'binary' - elif magic_data_binary32 in self.lines: - header_size = self.lines.index(magic_data_binary32) + elif magic_data_binary32 in lines: + header_size = lines.index(magic_data_binary32) self.data_type = 'binary32' - elif magic_data_ascii in self.lines: - header_size = self.lines.index(magic_data_ascii) + elif magic_data_ascii in lines: + header_size = lines.index(magic_data_ascii) self.data_type = 'ascii' else: raise CorruptFile # Save start of data for later reading of the matrix self.data_start = header_size + 1 + # Byte offset of the data block, relative to the start of the file + self._data_start_offset = sum( + len(line) for line in lines[:self.data_start]) # Create mifile from header, reading out meta data and channel info if self.is_image: - self.mifile = read_header_image(self.lines[1:header_size]) + self.mifile = read_header_image(lines[1:header_size]) else: # TODO - self.mifile = read_header_spect(self.lines[1:header_size]) + self.mifile = read_header_spect(lines[1:header_size]) # Reformat the metadata for buf in self.mifile.channels: @@ -169,7 +177,13 @@ def topography(self, channel_index=None, physical_sizes=None, raise UnsupportedFormatFeature( 'MI files with text (ASCII) data are not supported.') - buffer = b''.join(self.lines[self.data_start:]) + # Read the data block on demand; the reader only stores its offset. + # (The seek is relative to the position the stream had when it was + # handed to this reader, which is where `process_header` started + # reading.) + with OpenFromAny(self.file_path, 'rb') as f: + f.seek(f.tell() + self._data_start_offset) + buffer = f.read() nx, ny = int(self.mifile.xres), int(self.mifile.yres) start = nx * ny * encode_length * channel_index diff --git a/SurfaceTopography/IO/MNT.py b/SurfaceTopography/IO/MNT.py index 76cc19a3..fb0e8638 100644 --- a/SurfaceTopography/IO/MNT.py +++ b/SurfaceTopography/IO/MNT.py @@ -73,6 +73,62 @@ from .common import OpenFromAny from .Reader import ChannelInfo, ReaderBase, Skip +# Chunk size for incremental decompression during the block scan +_ZLIB_SCAN_CHUNK = 1 << 16 + + +def _measure_zlib_stream(buf, start): + """ + Check whether a valid zlib stream starts at position `start` of the + buffer and measure it without keeping the decompressed data. + + Parameters + ---------- + buf : memoryview + Buffer to scan (a memoryview, so that chunking does not copy). + start : int + Candidate start position of the stream. + + Returns + ------- + decompressed_size : int + Size of the decompressed stream, 0 if there is no valid stream. + consumed : int + Number of compressed bytes belonging to the stream, 0 if there is + no valid stream. + """ + decompressor = zlib.decompressobj() + decompressed_size = 0 + pos = start + nb_bytes = len(buf) + try: + while pos < nb_bytes: + chunk = buf[pos:pos + _ZLIB_SCAN_CHUNK] + decompressed_size += len(decompressor.decompress(chunk)) + pos += len(chunk) + if decompressor.eof: + return decompressed_size, pos - start - len(decompressor.unused_data) + except zlib.error: + pass + # Ran out of data before the stream ended, or not a valid stream + return 0, 0 + + +def _decompress_zlib_stream(buf, start): + """Decompress the single zlib stream starting at `start`, ignoring any + data following it. (Chunked, so that the data trailing the stream is + not copied into the decompressor's `unused_data`.)""" + decompressor = zlib.decompressobj() + out = [] + pos = start + nb_bytes = len(buf) + view = memoryview(buf) + while pos < nb_bytes and not decompressor.eof: + chunk = view[pos:pos + _ZLIB_SCAN_CHUNK] + out.append(decompressor.decompress(chunk)) + pos += len(chunk) + return b"".join(out) + class MNTReader(ReaderBase): _format = "mnt" @@ -717,7 +773,16 @@ def __init__(self, fobj): # Bytes 12-15: uint32 LE - Compressed size # Note: MNT files may have multiple sections of zlib blocks separated # by TLV structure, so we scan all blocks rather than chaining. + # The scan feeds candidate streams chunk-wise through a decompress + # object over a memoryview: slicing the raw buffer at every + # candidate position (`compressed_blocks_raw[i:]`) would copy the + # remaining buffer for each attempt, and a full `zlib.decompress` + # would hold the decompressed data, which is only needed in + # `topography()`. Only the block positions and sizes are recorded + # here; nothing is decompressed twice on the happy path because the + # scan skips past each accepted stream. zlib_blocks = [] + raw_view = memoryview(compressed_blocks_raw) i = 0 while i < len(compressed_blocks_raw) - 2: # Check for zlib header bytes @@ -727,29 +792,31 @@ def __init__(self, fobj): 0x9C, 0xDA, ]: - try: - decompressed = zlib.decompress(compressed_blocks_raw[i:]) - if len(decompressed) >= 1000: # Only substantial blocks - # Extract block prefix information - element_offset = 0 - elements_per_block = 0 - if i >= 16: - prefix = compressed_blocks_raw[i - 16:i] - element_offset = struct.unpack("= 1000: # Only substantial blocks + # Extract block prefix information + element_offset = 0 + elements_per_block = 0 + if i >= 16: + prefix = compressed_blocks_raw[i - 16:i] + element_offset = struct.unpack(" 0 - if m.sum() > 0: - b = b[m] - db = db[m] - # f1[x_] := (h1 + s1*(x - x1)) - # f2[x_] := (h2 + s2*(x - x2)) - # FullSimplify[Integrate[f1[x]*f2[x + d], - # {x, b - db, b + db}]] - # = 2 * f1[b] * f2[b + d] * db + 2 * s1 * s2 * db ** 3 / 3 - A[m] += 2 * (h1 + s1 * (b - x1)) * ( - h2 + s2 * (b + distances[m] - x2)) * db + 2 * ( - s1 * s2 * db ** 3) / 3 + A = _SurfaceTopography.nonuniform_height_height_autocorrelation( + np.asarray(x, dtype=float), np.asarray(h, dtype=float), distances) return distances, A diff --git a/SurfaceTopography/ScanningProbe/RigidScan.py b/SurfaceTopography/ScanningProbe/RigidScan.py index 4876c4f3..6a85e78e 100644 --- a/SurfaceTopography/ScanningProbe/RigidScan.py +++ b/SurfaceTopography/ScanningProbe/RigidScan.py @@ -51,26 +51,43 @@ def scan_with_rigid_sphere(topography, radius): raise ValueError("Only one-dimensional scans are supported at present.") positions, heights = topography.positions_and_heights() - scanned_heights = [] - for x in positions: - left = np.searchsorted(positions, x - radius) - right = np.searchsorted(positions, x + radius) - - # import matplotlib.pyplot as plt - # plt.figure() - # plt.plot(positions[left:right], heights[left:right], 'k-') - # plt.plot(positions[left:right], - np.sqrt(radius ** 2 - (positions[left:right] - x) ** 2), 'k--') - # plt.plot(positions[left:right], - # - np.sqrt(radius ** 2 - (positions[left:right] - x) ** 2) - heights[left:right], 'r-') - # plt.show() - - scanned_heights += [ - np.max( - heights[left:right] - + np.sqrt(radius**2 - (positions[left:right] - x) ** 2) - - radius - ) - ] + nb_pts = len(positions) + + # For each scan position, the tip contacts the data points within + # [x - radius, x + radius]; the scanned height is the maximum over that + # window of the height plus the local tip profile. + lefts = np.searchsorted(positions, positions - radius) + rights = np.searchsorted(positions, positions + radius) + widths = rights - lefts + + # The windows are evaluated block-wise: a block of scan positions is + # padded to its widest window and reduced with a masked max. The block + # size is chosen such that the temporary array stays below a fixed + # element count, so memory use is bounded irrespective of scan size + # and tip radius (a single scan-sized block could otherwise allocate + # nb_pts * max_window elements). + target_nb_elements = 2 ** 22 # 32 MB of doubles + scanned_heights = np.empty(nb_pts) + start = 0 + while start < nb_pts: + nb_block = min(nb_pts - start, + max(1, target_nb_elements // max(1, widths[start]))) + max_width = widths[start:start + nb_block].max() + # Shrinking the block can only shrink its widest window, so after + # this step nb_block * max_width <= target_nb_elements holds + nb_block = min(nb_block, max(1, target_nb_elements // max_width)) + max_width = widths[start:start + nb_block].max() + + block = slice(start, start + nb_block) + col = lefts[block].reshape(-1, 1) + np.arange(max_width).reshape(1, -1) + valid = col < rights[block].reshape(-1, 1) + col = np.minimum(col, nb_pts - 1) + distance = positions[col] - positions[block].reshape(-1, 1) + tip_heights = heights[col] + np.sqrt( + np.maximum(radius ** 2 - distance * distance, 0)) - radius + scanned_heights[block] = np.max( + np.where(valid, tip_heights, -np.inf), axis=1) + start += nb_block return scanned_heights diff --git a/SurfaceTopography/Support/Regression.py b/SurfaceTopography/Support/Regression.py index 3c03555d..4212f2b7 100644 --- a/SurfaceTopography/Support/Regression.py +++ b/SurfaceTopography/Support/Regression.py @@ -31,6 +31,7 @@ import logging import numpy as np +from scipy.linalg import cho_factor, cho_solve from ..Exceptions import NoReliableDataError @@ -277,11 +278,13 @@ def gaussian_process_regression(output_x, x, values, kernel=gaussian_kernel, noi # Add noise to observation covariance matrix obs_cov += noise_variance * np.identity(len(x)) - # Compute kernel coefficients - coeff = np.linalg.solve(obs_cov, values) + # The observation covariance matrix is symmetric positive definite; + # factorize it once and reuse the factorization for both the predictive + # mean and the predictive variance below + obs_cov_factor = cho_factor(obs_cov) - # Covariance between test outputs - test_cov = kernel(output_x.reshape(-1, 1), output_x.reshape(1, -1)) + # Compute kernel coefficients + coeff = cho_solve(obs_cov_factor, values) # Covariance between observation and test outputs obs_test_cov = kernel(x.reshape(-1, 1), output_x.reshape(1, -1)) @@ -289,11 +292,15 @@ def gaussian_process_regression(output_x, x, values, kernel=gaussian_kernel, noi # Compute predictive mean pred_mean = coeff.dot(obs_test_cov) - # Compute predictive covariance - pred_cov = test_cov - obs_test_cov.T.dot(np.linalg.solve(obs_cov, obs_test_cov)) + # Compute predictive variance. Only the diagonal of the predictive + # covariance is returned; computing the full matrix would additionally + # cost O(nb_output_points^2) memory. The kernels are elementwise + # functions, so kernel(output_x, output_x) is that diagonal. + pred_var = kernel(output_x, output_x) - \ + np.sum(obs_test_cov * cho_solve(obs_cov_factor, obs_test_cov), axis=0) # Return mean and variance - return pred_mean, pred_cov.diagonal() + return pred_mean, pred_var def resample(x, values, collocation='log', nb_points=None, min_value=None, max_value=None, nb_points_per_decade=10, diff --git a/cpp/autocorrelation.cpp b/cpp/autocorrelation.cpp index 706179fa..cc7d59af 100644 --- a/cpp/autocorrelation.cpp +++ b/cpp/autocorrelation.cpp @@ -107,3 +107,53 @@ std::tuple nonuniform_autocorrelation( return {distances, acf}; } + + +Eigen::ArrayXd nonuniform_height_height_autocorrelation( + Eigen::Ref x, + Eigen::Ref h, + Eigen::Ref distances) +{ + const auto nb_grid_pts = x.size(); + + if (h.size() != nb_grid_pts) { + throw std::runtime_error("x- and h-arrays must contain identical number of data points."); + } + + const auto nb_distance_pts = distances.size(); + Eigen::ArrayXd acf = Eigen::ArrayXd::Zero(nb_distance_pts); + + /* This is the product (height-height) autocorrelation + * A(d) = Integrate[h(x) h(x + d)] + * over the overlap of the two piecewise-linear segments, without the + * factor 1/2 and without normalization by the overlap length. It mirrors + * the pure Python loop it replaces (Nonuniform/Autocorrelation.py) but + * runs in constant additional memory: + * f1[x_] := (h1 + s1*(x - x1)) + * f2[x_] := (h2 + s2*(x - x2)) + * Integrate[f1[x]*f2[x + d], {x, b - db, b + db}] + * = 2 * f1[b] * f2[b + d] * db + 2 * s1 * s2 * db^3 / 3 + */ + for (Eigen::Index i = 0; i < nb_grid_pts - 1; ++i) { + double x1 = x(i); + double h1 = h(i); + double s1 = (h(i + 1) - h1) / (x(i + 1) - x1); + for (Eigen::Index j = 0; j < nb_grid_pts - 1; ++j) { + double x2 = x(j); + double h2 = h(j); + double s2 = (h(j + 1) - h2) / (x(j + 1) - x2); + for (Eigen::Index k = 0; k < nb_distance_pts; ++k) { + double b1 = std::max(x1, x2 - distances(k)); + double b2 = std::min(x(i + 1), x(j + 1) - distances(k)); + double b = (b1 + b2) / 2; + double db = (b2 - b1) / 2; + if (db > 0) { + acf(k) += 2 * (h1 + s1 * (b - x1)) * (h2 + s2 * (b + distances(k) - x2)) * db + + 2 * s1 * s2 * db * db * db / 3; + } + } + } + } + + return acf; +} diff --git a/cpp/autocorrelation.h b/cpp/autocorrelation.h index 0f97f689..2d623998 100644 --- a/cpp/autocorrelation.h +++ b/cpp/autocorrelation.h @@ -44,4 +44,9 @@ std::tuple nonuniform_autocorrelation( double physical_size, std::optional> distances = std::nullopt); +Eigen::ArrayXd nonuniform_height_height_autocorrelation( + Eigen::Ref x, + Eigen::Ref h, + Eigen::Ref distances); + #endif diff --git a/cpp/bicubic.cpp b/cpp/bicubic.cpp index 85226ad3..f434e79f 100644 --- a/cpp/bicubic.cpp +++ b/cpp/bicubic.cpp @@ -49,7 +49,7 @@ Bicubic::Bicubic(const Eigen::Ref& values, has_derivativey_{derivativey_opt.has_value()}, derivativex_(has_derivativex_ ? n1_ * n2_ : 0), derivativey_(has_derivativey_ ? n1_ * n2_ : 0), - coeff_(NPARA, n1_ * n2_) + cached_cell_{-1} { // Copy values to internal storage (row-major to linear) for (int i = 0; i < n1_; ++i) { @@ -137,15 +137,9 @@ Bicubic::Bicubic(const Eigen::Ref& values, this->A_ = this->A_.inverse(); /* - * Compute all spline coefficients and store them. + * Spline coefficients are computed on demand in + * get_spline_coefficients(); see the comment on cached_cell_. */ - for (int i1 = 0; i1 < this->n1_; i1++) { - for (int i2 = 0; i2 < this->n2_; i2++) { - this->coeff_.col(_row_major(i1, i2, this->n1_, this->n2_)) = - compute_spline_coefficients(i1, i2, this->values_, this->has_derivativex_, this->derivativex_, - this->has_derivativey_, this->derivativey_); - } - } } diff --git a/cpp/bicubic.h b/cpp/bicubic.h index dfd11647..a225e5f3 100644 --- a/cpp/bicubic.h +++ b/cpp/bicubic.h @@ -95,15 +95,27 @@ class Bicubic { bool has_derivativex_, has_derivativey_; Eigen::ArrayXd derivativex_, derivativey_; - /* spline coefficients */ - Eigen::Array coeff_; + /* spline coefficients of the most recently used cell. Coefficients are + computed on demand: storing them for all cells requires 16 doubles + (128 bytes) per pixel, more than 2 GB for a 4096 x 4096 map. Query + points typically arrive ordered, so consecutive evaluations hit the + same cell and the single-cell cache amortizes the recomputation. */ + ptrdiff_t cached_cell_; + Eigen::Matrix cached_coeff_; /* lhs matrix */ Eigen::Matrix A_; - Eigen::Array + const Eigen::Matrix & get_spline_coefficients(int i1, int i2) { - return this->coeff_.col(_row_major(i1, i2, this->n1_, this->n2_)); + ptrdiff_t cell = _row_major(i1, i2, this->n1_, this->n2_); + if (cell != this->cached_cell_) { + this->cached_coeff_ = compute_spline_coefficients( + i1, i2, this->values_, this->has_derivativex_, this->derivativex_, + this->has_derivativey_, this->derivativey_); + this->cached_cell_ = cell; + } + return this->cached_coeff_; } Eigen::Matrix diff --git a/cpp/module.cpp b/cpp/module.cpp index 846ccacb..6be27d4f 100644 --- a/cpp/module.cpp +++ b/cpp/module.cpp @@ -45,6 +45,11 @@ PYBIND11_MODULE(_SurfaceTopography, mod) { py::arg("x"), py::arg("h"), py::arg("physical_size"), py::arg("distances") = std::nullopt, py::call_guard()); + mod.def("nonuniform_height_height_autocorrelation", &nonuniform_height_height_autocorrelation, + "Height-height (product) autocorrelation of nonuniform line scans; " + "returns the unnormalized integral for each distance", + py::arg("x"), py::arg("h"), py::arg("distances"), + py::call_guard()); // === Patch/geometry analysis (from former C module) === mod.def("assign_patch_numbers", &assign_patch_numbers, diff --git a/cpp/patchfinder.cpp b/cpp/patchfinder.cpp index 9f4896ec..1a54684e 100644 --- a/cpp/patchfinder.cpp +++ b/cpp/patchfinder.cpp @@ -49,10 +49,12 @@ static const std::vector> default_stencil = { void fill_patch(Eigen::Index nx, Eigen::Index ny, const RowMajorXXb &map, std::ptrdiff_t i0, std::ptrdiff_t j0, int p, bool periodic, - const std::vector> &stencil, RowMajorXXi &id) + const std::vector> &stencil, RowMajorXXi &id, + Stack &stack) { - Stack stack(DEFAULT_STACK_SIZE); - + /* The caller passes a shared stack that is reused across patches; + it is empty on entry and drained again before this function + returns, so no per-patch allocation is necessary. */ stack.push(i0, j0); id(i0, j0) = p; @@ -117,11 +119,15 @@ std::tuple assign_patch_numbers( RowMajorXXi id = RowMajorXXi::Zero(nx, ny); int p = 0; + /* Allocate the flood-fill stack once; allocating it inside fill_patch + would malloc/free the buffer for every individual patch. */ + Stack stack(DEFAULT_STACK_SIZE); + for (Eigen::Index i = 0; i < nx; ++i) { for (Eigen::Index j = 0; j < ny; ++j) { if (map(i, j) && id(i, j) == 0) { p++; - fill_patch(nx, ny, map, i, j, p, periodic, stencil, id); + fill_patch(nx, ny, map, i, j, p, periodic, stencil, id, stack); } } } diff --git a/test/IO/test_ibw.py b/test/IO/test_ibw.py index a4445239..0a3625ae 100644 --- a/test/IO/test_ibw.py +++ b/test/IO/test_ibw.py @@ -87,7 +87,9 @@ def test_init(self): ['HeightRetrace', 'AmplitudeRetrace', 'PhaseRetrace', 'ZSensorRetrace']) self.assertEqual(reader._default_channel, 0) - self.assertEqual(reader.data['wave_header']['next'], 114425520) + # The reader must not pin the wave data in memory; it is loaded on + # demand in `topography()` + self.assertFalse(hasattr(reader, 'data')) def test_channels(self): reader = IBWReader(self.file_path) From 8456ae77aa10001647c90c66f57188f145610619 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 25 Jul 2026 08:13:19 +0000 Subject: [PATCH 21/23] Remove test_der.png, a debug artifact committed by accident This plot was written while verifying the derivative normalization fix and should never have been added to the repository. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- test_der.png | Bin 18630 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test_der.png diff --git a/test_der.png b/test_der.png deleted file mode 100644 index 085c8b35ec8795e426e2cd006423ed006b0f14f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18630 zcmeJFWmuJ8^frnvx5>p>S(J1t64DaVAR^t;-Q8V# zKK$PIT>Jd@x4rlIc0PFFVm&eEm?Q3Sk1+^VQIaFTrND*3U<7b^X#@<0>I;LR%wl7L z-|+TNE`lFIPBL0fYPM!hF2)X~Fhyf0yLYxu?<`(FbT)Nxw6L||;duI#<0;$2w@yxW zjzXNA*8iU?IBXrvIUUB)PQg=f?Bul_VK5?N=pV{=@f-^nOr9GqEurq3yfx+Gs&O>e zws+Fa_yJvV6kS^7?%g-ijW|l`>Uvct?|w}E93R)2u(bY>FTOydp{hPf!q3VYg3J2w z#q-ai(a-<>I=Q~Cy8jhl3Uh_=u5^ZX(n!I75fLtYga#bTRYTS@d^&HqiD6Dps7nQM<;xAsCj{vN`3 zp!dd*QTiBPC?s2eoQ0D>NOG3V*Z#Zt+ed8-4YW@9x&4B{E^b1#v_3^5{=;vusO6CJ zub3&qW&H{JweEpUMMt+F@8$pPDQrkl9H@+z*SUn({ZLjw&xkF9C+y#OlqsFGgs}fR zgMA|QKr$me3m(GL+S=;$b}%tBGt+&_ho2FWMiz(iVtCDPHXCp2)^tj ze)W`JHv>yy)y*-h5nK_z^1*IT*lsuNks$SQJwYYWhZEbtVkWN_11>;hiE)eSqc{A! zgG9zTR~eRQwb$lV=FDuVR8B(h5InNya7DF^ZM$PUyLXS?lm~n@Y!=08%J&HfIg-eU z&VCMzi&sD6&Y>`xHy@6B8g@Unrz<5X;m0vs^b{o|stHQW&>^oa9@8{dPIzFlC$kPL zG8v|<58HSJeeW!Qm!AE*WW#uOFqrEUfz8kqZ<0|A`zC^`^ywkX2VkrWafi!XmqJyu z1aB*u-f5xrUZc|pk-hSw2CEx?1eQ;%mV;u~KVkQm_cIdZVETjb@rM%|KReUDHTql$ zusVi9u)Ur55*8C@8e9$2-DO_86E3Yo3+Q{u5?EZ!1rD_DyD>ep!sx6I@F4nNuPJ%< zD}4}-s4Igh5dZ!bHnyRDI>uDI@_jVsDT!^+1XfGIh@TP@{HOz{ns`hs7Skk}xd;Y( z&GUXq*F$>OeG#onkyR(8Iwx>OuY0|ASF<7!s;a72wO$v;__SiRvNIdq*A$1rq6nT+T`X>BV~i&Z1P{)QoAi+a_TEa9;sweV5jSouYA2O&AT34?c09rc zvSSgP)CT-GZa0I@gvZV)E^{l?Y)tTC^XDXa2Y9|?IJdOZx< zDHL0MJPpd%YHeXv4~~V{SKlBjqAzv?Xi*9Z3KpwZQWsju4d3*oOI$88iI2TY_-Qrb zFrx4B)aoDGFQ>KUKym~5wg~F{8K30@b7of7@y&~m_z#+GYPMcodCvb1E`Qsf`DaNP z;Rjdx;KkuT75S0e8^y7$jq$U=>0SIArff6x6cwZ;n+@LV<=KJYtS=ffGxKbIQGI4! zo@E)Tmb&`ybP4~rgWm|4(mc5r{)8_aPuQ+3M2dg28YzT%UhcKAX_vk!J960?e;gXs0 z5mMh5^AvD%a|@#pb&oc^J|AgtXrp%7JsL5LPDp?YP<`{cxyGjw_FygdGt|$?$z8!rseeN`>#OwB-tW|%IIQR9T)#bg!pWIaRplDZ3CAgD zYqHy`DVgYq{Shdq6p})B9|tStC9;CW2G2;bD@C~STxG}Qm-AM~{!*uQgSS`sNSSd9 zCP(!ml2(74_U05zP*8B#@a*htB1IcPGRRHa+uXN4-H)ZA8zJV5;Wk)QM2jz>PshMrPO$kDOz&z7d)DEyhV;T~^?l zM!q|s+O|a>tFbZ-9a`0QRr1E= zRkMn3r_e$g0xyDE+D@K(rdqPIeBfP2ty)R-;C{b8q-b!l-^n@lenh`=<24~XkAKU( zDbTiMyX|>4vB5RFh?nYS;bSBz6Iis!R{7w4ej6$t^B#1gwSli9$D=06&WR*t3b-n= z&hK=-v=j!aaC@GiPdaiHBvU(a!%^p5Den80^@=6g33Tb&*2&1qVqR>P5mi@LU#^JX zpgbfFw(AjG*=@$-EbbM%*j>v>D+TM?zdYz21iQlQT`^rmdJpl_HjX+PPa)*3Q0VY7 zMoJ`dki?0=WH@~z#mxaXW8a0enci}tzBt%z$S720{0 ztJOe7BZA2|Ij{Z{>CB9mPQUf`M@`FFk<^UZBZ`mwg&*5`eM>Xbqu~m7fLF(r)L{&( zMU$OGZMWcBkg4)uW=lCYnPGvyH$y21Y;KlxKU$ZOkdWw8rRO!vxPvc3-s5r4;aB5& zwcXAmF4LDlp?K{LF!ZntWax9JV+ud!a0Uq4{!S$l!1{PYg5W_7XW*6DZlFeq$v*v@ zfCs#Ph7U|~cg<(+y2ZGgUxF!m2pza*76W>QroNe$2g;IVuZrI&yvzGCRs>WZK>|WY zw(H=+ovKsO)n~Adf6a7EO{YH1H%G?<1B_ncVa;a>oz zpzy!+8)aV6Rx^;Yr8IQsXn-Ww>SKWo!N2baUWf&Gd~D*U1vZ4B zGX~rHlQ(f~H#gDet*q66N+UwSI7JRE#ur*l*(?3I+7YA3g+~Ys&MOLoQw((t=te4l zpd^irAJw@ZWu~V;TxCY0TO`=cU)lXN{9Yfq>ra>dM!T^I2tei8Iu+_q4L!Y=N=k&l zuHTrOLonp^34!;%Co`uX8TDLDe~E4fJa74W;x5>Sj3{rHVW=pO13_8Oor6b9Hq9;For`cme>m|aJfUE@;83W$#VZBlFNMvnhM z2g^JpayDJO`FqeKUcBWxG#8>k(?LHaMiwJTaO>{WXymnoKb-x3&NS8qH6O0{DKW4- z2VW_mZykS9q^LVk`L0K#oQz?6P4GAh$P^b64Y7?FZglnfP{+tj7)-3n+%d*cM2KeJt<-+P^S zsb(JT41`3mC!rMEy=S5A(U+ko{>n-BvV+OhrPeeHiDMbFTBO%OQyS5(+;eOf>7CQ1K#aV5aJSPVOg)Ng2!o^X`6 z$i2=q*4W0!gK#akJv)cq`ci?>dST&m@};{=2g>Uk_7yh6%DuYq&YV9qOiY0k4$)ET zHnVPhzpzBSF+DGyPI_=9i;<0Qk^ylYb)nwR`SVhz@u;Y4^!$RH&`kd1AFP)9J&upJ z%?8iKj8D&V!u2si-;zI%3=1eEU`W zRGFjFdlWrgo%W5vc*?HGUU1WG=+-DA92<`8 zWNoPxb==6J{E?KSA+KTS`ISEKet!;HW%2;g zr`T3H8?VU2p*N)i$o7{n9zF3|Xs~GCoPLx zC7IFT@JGlzxxCj|>MZRuJDa+1vilhLqqFanEJ@CA#*^YkB^+Pfbb;0PS2`*kUEEyQ z<`)dDn@*UUbG@tNqi14>LXti{^Qr$;(UWIT@xq3Yd~?LQ%oHj02pKJP*lDX#_wIyG zThC=OHJd(AUIEv-Vq1UW=XZk&T>~pfaS9<&7&xJ9XGJM{FEJc^sdp*|mH#;hK zBR(g^%DS0;+0Vn)h}u#9b~CrI6PHp_{w9B-F{5tW8Uf>UJLO?*)=e#UX`pcnt2a_P zI^fy4_+&@_OFOsgrE-Rq%`)RgxO67HpinMt#{|PGR9ayIGNpiirbbo%CSS!@I_mL1WpbsRmNkgT#m5Z_D4GW%2*Gng1POtS^3lhv<+2d zEM&eMEm7Y5_?{`3w4D5mtHFINdi&CMAcSk9qrtGEmh}}j(O4b(NvgieRdtQQ5$-(= zU5-$XotRFNc>G-N`kf=&yAjeBY0(lv$zkh06Q<^U?3|%uDY|@pKGdysc@D1Ih*O7m zn`iY6zWz7FHEqR1pQ>*vVE=+CKl{D97ono_fRQ+OfSbp8REQ#c|6kZrK@ql^j=_&9dN8J!pU`eJkEg~>&7 zn4)abu(Wg**R{Lr%K7L4faMF@AIrOd!+bw`Jt5VI$cjTIOFQp>%X*rj^2y)Dwla2S zRNVpbDOi)H3z^9sM;cpF{ub>;NT=4XJ-4)Q^2+B0Y)W71Ugw+It5oXI+(>9&UW5*| z+r)JM|239n!bk1EEuviV6gSXlG`8=T$Gc~{`Q+)V%mPPG->Q~vy+mA=z!Y%UNOAl5 zg#9bV9vpVh9G9xjrj}ur9%5lUJ>J2LBa7{S#FXVe)?pWLF`ZV~?%DiKdf6WRV?p&$x0}hyKXvZU21RQ&JEH8IeS1clHC=%ijYb&u3qy&#OGi3&q@op zyQX$}Ot15fUK;9kZ7ywK-x#ghEgDeg7kwm@%e>rbT{~R=tXLE=wmDviVZoAWLRJZK z%o>xwd4iw+p(>qoZaT>K&7f`E#*X((VONW~z_*%3MhFg* zBtL;^+}myDoIQ{;>BTa{4Z0#gBK^A=hJ7z=dr@LYi-999r0B={q~CP8l}PYXSFh`^ zRR;Rem{Ol6<g7JoD} z{caxp-QPBYw$|-)dBK3uako)umlNBf?flKPCCw?c-g{4dG}g>^485E$gXss67Silt@%9vH`! zgKac6Jj_0Qe_lu8=F`IpOZ>{{xVvrrpg)IB%Ed}bHqW$Jq9B1NGR!ZQ2Y?WzS|VrR z$6z&PlRmnzjo$?FA%<$?_x9$=U%0MywzBEfWt<-sl)w3SvfW6)bi7CNm%zA1=e`GD z7d35-K(N_I zmMV74&FYN`)EJfZwG|X6AJSxql(<1QK<6eZA79W2TCsH;<*Pu+_ zqA3ZL(z*WYh4mE^fWZGWd+<(#biy+qUQX|lFPimw9eGFhhIghs9SkEjMg$w36dN;@ zO*FBKbTPXpnsOs0a;_zE5U7qf)+hxe{10>2a&hHO-x?I)*YlbP7TugbFXdO_xEgK4 zJGF#Ar8{?i^F02Qfpn?pKaK!7<&R5)55GQ0wjT7ZFXOMn0&vBKR zbt|kA$Xj+ij#_18*cqK*+&!z5fjQX>hrI|on*EKEB5GLtts`Wv-O;#*@;NqP9p>>_ zwI;SzP#H|;_G}f{Y`eAogc`EV9a(fTvqb6-C#Fq=rO}q-wH<9NR{QbZE%dW*2!fyd zNj(v#jQE9vtmFLPO!dDdNvx)A`bADmr;&PLrPx7#)3a&e!e#!Oss{#TLCGiCxh!Gh z$=K(l&cfWzfp(T<>Cr3_RX5Hw&*9@X4|3a+8w~lU>pbsk()3497Ccj8Sw&oVg9pn0 zZun8jO6u1n{y~lA!=lrdGj0)2&v(QYaN&UeQ~~+$)v33uN3~Dw{=EhBf?41In&&*q znHB|Ybop<*?mObfkW1A}+x=1N%k=8Y9r}H1S;+OxprxWr*5dm5MLefkgjc=;RO*ncaU!!tl|hgD$^p6YL&O^h@@iI<`$ ze#@4dyL-ouS|ETeSByI9&Tm z@^C!9XbRqwnFx@p%>F9xS)5@yS_(I${rk60Xy7T6|CLL7zPI=sC)oq1r^$A-^j{l? za*Vp#Rq8ob)e%|C*hbW+GAq%uPHS_1@8**54^HoHAP+|E`m4r*Fl=tLQUiB<~dKk3da{TVSs zsK)wgwpNT0^!VKSU)iXg)~P*oYb&@l{JD+-aXjHh6J>+gXXBcm8QfG${zaMq-r@@B za5)II$)XCAKOfU^-M#C6?9+%9BZgl1|v*c%b zDakgjITwc)VlA)%CfBuv&sN|%%IL)RYm2F6Dj;LfS9IDI{!2S z&L%)8#z}lz0}_wv9sK+DPv~>rU0lT2{kK>}Nd)4P+R1ivQiI@U zl5-bEim&e5jUXmqP}{a)2O8ZNw)Ee8P$7OvL!g|D6H5v5@m6Xmk$>dYJy>n8KC@np z*2zle)Y*wE^e=*U_TBv>F8Z97uK2mR1>=@+kTTo1N;STpy;GX)`bzbl@t=X$=T0`- zSK|k1oXf=qTYu#h2{}e1xP4H=1n+f(0%l5Jf#q$#*s6L6+JA%);}doUi|GB6?Sgxk zo?UMUYtHniQ>#U)jD$OsE}8^6C0^-j@$ov3d>%dkj6f>}l!bqif2MG;iBDF*u{4Rr zxHl*#W@@3T-B&{KDoD)k+Uh^&bnQV}kV**-zz!l2?f?MLNeP62cf27B5N&*eUPlvu z#LD$IF&877%29o(edoY=ncYU!;`I%%tq%}KfNGJN+N?q6zSrD)oMjjv2e9|S2zid< zUP~G#^$+8pZ;8wsPOq-~Z@{aPNx-YPpjSPw6EZs(Vz{uIviCp^vc*PYIui;ZTCDmB zd))4h9|j;9C|}HOLhsmRofX<;eGFHWP_qcM)O2TUStXXo~;rJV4e6w!|-b~@T zuHM%YqfV?04act-<6TuB|M1_@;&3wY{QPyv&dIW{pHn|Od80IcqUk&O}<3Y<$F3ug!q!Q$r<+yttI8j^Ha{65OVRG`2UV>^pnc$*~e`c|O{1CB&nJ z`~`+IPd;>-12{Tv4E$ZTC5T>nyqV;YhR*^xsuS3BYCa6^TzwK3=Z_r-$xB}tE-Ls3 zZiHy7$FET16^Vpm%cY>oYSLJZE=SSjYoDI`lNi21VwWEw|8umYSb%P}+^pRzbs?tm zix@Cnaf*;X2Q@QfHhYJH^4t#H$>Q9>$u}t_%!{3Yj|GP@=_bPsU3!2xTkSi!Ag*$< z1iQgp(g1p=Aq^-Xdu;|5_#^JY*BEvHHoy8&WK?t+*Mym`O!==-iq5#5^lcoTxj3z` zNC9KpRV5vG55?ae`5zoUQSvb}5m(71+o!%h4MNc&d5jL^QD#40(|w@6X!$r?64l6H z2n1mXaijyzEJY!G9K!x~^c~i=y@2IoOqIBP$owQk|6%FsAhfdPeBX`6{7>|2 z9xp;Wv@{LikrnK)@3?YW2z6O+8?(mt_3yRlvT4|OOp@-$f1;W`fS^eYpbWYSQeAm` z<&Ap0xNpsLN@oUtLyJFc7Zb6?Zxezw_SrC|j7~8X1AHP{EIe_5C)AmM)DU%{vRR%Y zw!EgXcMH9}DRO2m?&4|2gS8zG=r*pIWNg#}W7sR6%>qmNX@(L*KU|~2{2OhBba%w$ zBwgDQR4?>fcXg*tyV~&HmYdUj<&TVQOgRn;A-?Y=!uAC?ScsMVsiLJNUt~}Rsz}&E zA@r?3va|1)6O09GdY6c!)l|IplKJu^?HcJw^JU1jh*YW5Z!p!@2J3n2uTl9~h=Wxa zw=qCRV5Lg4!g)y|q^o_JMQmKH8DX3^o(+mUt_^6Q;F0BGJ@>x2EsSP76c?90$JBeenzL<-OHkz&hQPuJ{P$OLFXB128 zE8n=S?Vq**sBz)=3X|I6;wzuO+MnlDIx(l0oZo9 zxR`KkNS=IOe}%FoX7WDvrh|ZbY%9l|5_HxGfD_>#I^-3Xzo~jv&wok{klbCB!xK2D zj|2e}UugUo4iAc^{iq+*rZ8)g(^5GtthLt;Elm$B4T)CcxTB2*JgcO0nR@8}!Y|_I z6=J}6NUHdN3oyKqspwD4p_PRVHV%D=k9vW)N-C=jI2P=Fn@aPXtn^Mkg1Qc&9 zI%H_}?{4(R?Y8Xe;Bef%%azav??-~dH^iC&Yt57T@$jA2E{ceoSU^4qRFI7Jwhkrq zA9yuA)G__G-&!d{kraU-xlcV`6Qe5i5PlrR zT&-;(AvZ2oLrWkxMe1=m-7uF`9q{|=2;VWt*@ieF#Yyh z$OBi70z(vAL%gC(n$mp$K%q3w0T}$ycc9BaQvs!H*Gx@YY@}h~n_JO>(%|oh_kmf& ztE4ha?IGm2Ww#=GUoMqlSP6c!L#6es<6adI=OFc?yT+-LmCPol5vSubE-y!ewirI{ zqqHSA(<4~G{$sJ=LTq_1cm|z%t&M@9WzR*b5-t5Tb(q*)sH)G(a0eVxuBughO49;4 z(cEaA5aM3&evWyL!*H1);z0yDwe|sB(DS;3z%}Wx zZ=fgU$uIfnzNkHl`Si(MU=scj71p3k0TL!CiDBd;)_O$>-UXG4a^WBZUpl=d+7@(t zsBO_Mo!Q66E4Zp9Ug$P4%DzxK-dxIQ+-0FM_G#NWQ3~%o&A!yX z7;v(o6%VSSIauu@SMnl74$kJ2&wib8?G)g>f4i=W!=&NKgK3d#UK_@d`a=!R_(s4P z@14LNogSjx_wnir9+HNnt2pjkSbe#)Y5!_Wn&nH}~DAji$j-^yM%9 zJ^{-_=*$>*lD%s7R_>M%yB<)MRh`sTqcEM{#UO9|p!u7o;ZXO>@w;^Up+iXVapnNW zxR)g5f-$?p>DBrrk{msGRSv%n6*Kw8W}H2FbFGWNQZ^&xtrYHy3xCHVr!D4z`FJkB zSpK0$YnN$_9XR`)(nJ$I=*er4be@TTJmWFKkMJRUAc7b-unIU4z@b5`-qe1nUqrbz zyxs1yj_Vx#)J*bS=IViA;AD!w(l^;2H$d^Y1<>bOe3H!y0KG6K@AS1*-$gW<8vfa) zaJaTA!O7NmvfUtx&IVVodomKsvtCGac9_H~Avg9bj7neu{&wu%zpl`5?6`Zt$K00s zV)|^ny~v`Mi{_HC#LUL$1?q`xLytj3|D1sJqQSRKIVf*GT`f1N^ncdcvW3nURBP0V z)t)GHi0!e6uv(hl{eBk7}aP3)Jl{cNXoI@2#u&+2|v*D611AeCVThF zc~*b_bUgMTtnLl=S#^R$+xV}dnU8Wxe)0^Ydf0N)cWNxPc>l{(kpQbKH60wA#aDD| z>*)PiJMsQqI$xS@Vy%B-Yu9Gh_pZRc8eRoe0mI97TT-~j+hen(%|ywvDDO9M6K zisSZ?7)r#c`R3k)PtaN~Mv`232-G+gK5lBxb$%&Fm21(wq^bx|a5lBmrZQ|VsDcd6g3=(RA_kA< zGN80Wpl+N`5Cc%9P`2kdoABZxF`x;X#-}&R+lf)C}2$(7Lj|=5mrb|uj zL{bhyU7io74>IpqC*5B8*CMVX#T@@3J45hD4(Ec4i8vE+@L)?*%6W?_{~wwLFX}FL z_EC`#D}XeR6~<{aZj<)zJ_w|wh_LBXO;LVc?_QiuA4Yr;qEF3(tx zZEqKjB1J`jel+rJT;$ngP^LxpSD%hX}jQU)1jn#Gj<##rKLgt~mX||5g&vc0RlGdQ_ zP^P^K1I09ap@C&YQd4^tl-Z}^b6))kl>~K7`rHa6QgYJnH7()Ba70KRHbk?ed6zM+ zY9(2XVJOv#J9Es&^zXKNfsoXAD=-NK2jUwS9r5EChDcBGq^-kaoR~Nkw+)n-iuR<-CfC(XgNMPg60tM=11f`S?umkOC)4!F8UE zS)0P?F$Uye5TbuyzL=|b#JxYn9`BPj6n_}Am`-O6!i@=DM)!8H4U339A5=O`C&soU6>b@zYdFZs-G!Msw1xM?_%Fu-i3f(JI{$b!ip)qZr=OQUIDI z_FUR%lz(A;6QOuVvjydlNQ%Y+Q--k92As?Nz4k6W9b%{C?kzs5j|LAsE}J<`)P6G? zL(b9?COZDid{(JCMnm>=EGtb_NA;dlb~m-1;HD5&^V05V0@Q;OT<-th#h{jFLopm* z!9I{s=Sl73=B?8g#TOrg-Zq6%J(cm+c+=T_PJk^h&*gRr@&*S^Hlkl?;g4MBqirEV z21I+kvbd5^Nko~^v@qytlVBPkG=k0zgLV^DcVc;!eWxz$W1p1So`VyR2YRn|B@y5FTI2Z0cV}TjhLih& zfhn-+D8~D8|Fiz-#NTO&wy|IS*Z9IjfgMM?r)$N=)*uo+ha|cM+bZQbU3yf5Or&b7 znO-CnnDhR-hMK?9%tH=1F(+1DUx8^{Ag)B#yvLKf>mZ$HB@pUZF4buPu0R2^ivnxs zk_UJ-7_@Qc;)aH2Db1A)%jPCxS(&Vaa-%}q7<4v3msZ@roGE;^7`i>jEu(m<(UiD^ zT+co0yEjz)bgKfo6(hODCo&~%z#BhVK~Ivq?bRC~{8wVibM5uo5VoDf6$$(ckj^VA zXLhFts7tLtoE-~xxRk@UeiBACkWam`GeY1CrHe9F{OHMV@el*E*;pBF9$HV)QZHDf zvjAoih4hW|^9<1rJgrBN)cX74iV36IgNT*`6y5SreNto$?qHh#i7kOp)cOa=3VpLd zRdgcv$|5SYIgFw8R;RMrJ7*{(MqPP#lSUdZahjG@Q=q_(s}lb&Vba;%$Kdkp`fxjj z#3}g)r7O+mdm(AM-N~;iC1R`6d1#P1p$OZJ@ZB;te<}hcxh~!RZsS`mwith~?r7Twc^7McqG?hU^RHn)UMsfmZ$zW!0h) zL8){P5g5H!q|LFw*7%o1+j4n5Y-mTMw?47&P1+mW> z($6960Le#%;u%CKy1XWH>jZjxL*#odrgovuT%HR~TsxN}aX$Cn(OAbqf|Grmqs>~G z@-HnW`wpj1bqpwg+yTDq=mACz72#aSD0=@~UOI^d9;6Dqk3E(u7enaWQFj4J#skQa z#^7r?u!b4bHNoOlwJ(4UeQbTJ_p-~ESHJA-dMnB;Qk67-Gf3_>bqQ!G3K#X>(9seU z9u*l6JAnQBaDWX*`ju9c``vluz^&#VQEJ-H943ZR?@h9g)l$tVg>dN0g`LdI-bxhF z*;RhZ?o+&{vik!RYC!`)$$EB@&*SFu57*%IwSAvGAOEc0sxu7a%qtxJt|I17QU1GdKQYI# z{lgSW)!cAGjAkI3(xJHIBZ1|chrA^939z(Da;L`-D$4DzF}g{yh)?OMwBp;{4Fai- zxg*FIrLKuRF3*RH83}n9A%qVP*DEW3K!I+UrQe8r%>vj3lNHx0`wVar@uLG{UVO9`UL8xC9H})Js7{ zs>egh?P={U9uWrCZQLcf3!u8EtFrUXoi>+Bd4-QAcu*I4En!+Dj*zM(WRpYE?0_Jw zs$H;3(l;KBEolSQ&3T5VWjNHy1@av$!^EBsH||M$Wv|ewO*=p8VNzd6Y2U3qv?9XT zff~WUH7d*yC^_QneMn_n`3X&4DVQ2pNg*(Svn5^`Gle*>;a)vT80 zP3e@(ZZ(2OSSxaT8avbUYYDva;eU@y?o#If83~NPUM!m6p1pHu)z0S0leY~}2RY{r z-|91*7RV=(ykGuY2$d5}TbCyJjcovIV-vg=QAdqL7@a$EZH)o3qTh;D-CcpZLD-WY zw(V)o0dfqiZ+T%zh~HO)eLUA?_Lgq94Hy7`HY^dl(cbP<0@!kCFS5i#6ZkLFmAEarPCBY zLxw?ZxqUINoNe#8pB2aY^@2FN(V8KNRUZ?@G28{o6=`ED4T zg~-!GYjB5f5lfT4vkH+;b`IBj)u)`EB?7Ag<0z0*WT^TF3Mp^iy1<~!-86R2mn1g> zGCJawt%-1u0YZd&koYCzs(|IK{!2q{z;Uz?HYw&Ek>#tHd;kuL9u~1PlfYTeK0j1f z^EoP!%882iA+#XWhk`7>XJn5Fg+4mNh)`Yt3SCDPLF0tZd%NCoh&tr#RW?c6m{|<9 z9l@lQBY@l?k`I_N$iu)nb-d^Fk$JYh*ryl{#6xer%pbI+0E%iPD}~Ej37!5CS?&-m z3r|{`WQ}$_8N>1QsTJ|hv!fq}ShLJ_x+2x&>r!t#5~{}+tQeV%`s zuIlc8R}0%eHwSC_QlI^$9S;)UPbedT^Zw)J3BT(lgj%BdoLA{~v-(Q3RKoa|faX&V zq(jM3wHCNr4m6PCYF~GMRK_1#3rM3R+Em#g|25!@6DWy4UH!iAsX7)7Y8*ZMCsaOj zgKPIaEl+{=ocn6}OMRGEp-;59xG?)F^Z4y+)Su|u zZ0)PFQ=6(eOq=Q@GRBu*?l^&AJBrxB<89EZNU~h;2HyWM zec?Oiy!+!-UaNn*v;IW;^P!yF??$<hz{8n|0UZyQD* zQ8S|B?SF}&O79nuMe%9kZsS;)`CyHU?Q(Zg+xl?+*?N8vpRU_A3ycS-7#Jv-nlc5bMTu)nakt&9Rl&%KSAmveg>Fg zf#w#(&mV03`;lcmQBh#nkP7M^$%2jo^PlLxhRaMER(ZLaqwW@x_P#Pw+56pAZ)V!7Nvo9yG_rR`VtUp_(6nej2 z-fop5^!{~sB5zDg%+Oovo!SFJI=KjXcJ}a@%VqvaFtDMkfBb)*IeFi~2}h_QQxkuK zP8;L-$>EoVn-Ae4R$xjdGtN|=DeQ?EawR{WdgL{Z6Tch6pU;6jt)IFX^U8zbnGP%NT7!Y zvykH2pQjhX!cwbz1ybJ8&$Vu8G{UfGJ-O!WzHru``V9@KeutP3gb`h5M}g@M;5H%aF$a)?_}A4VRFMqGu^QdOP6<_yywNW)oUr-1|@~4VcMGc`D#+{<)2j zJ)4^fM?uBgu?AOoX3e>-%X1nT$T)2A?273nOzxw3KJP9Xn_b z#Gqy}h6Fi42rZJ%-34ZJ_}dm$DZ1*vtIr|jQ`CNG4=EpUG_>|D6%65@uScA_$5b9H zuPHYW2q^)y{69uF=y`=e(=89C3j@1gu*L>Bf#}cB05gTtr$2dBRbRl66)=pyJv|_1 zfph`H&U=)s&E+?4>D8lgN)CWh z8Tf~GQ1i=1NkMV_eSx-fn~actALO5Yun2&HcGa(Ev(JK?ZXYlVnw+oP7w?A8w>}j9 z1c?A+JFH0`=4$oFp;k_&#Sv2$jwG#;a<-M5v$zs0*A$k_Q0cS3ov{FALO>tN9j)DQ z3JaKnPK;C&)U`G`^8F(Evu{;+()Il~g0O1N+U7nWc$gIvF^b7>@$lA$^T{zVFd&7? zg8!eB_PCU11Ncn4G1lo<6Sy)gWii?ZS(gPRa5gQZpIXareDeO7a zH~lyYJCvOB8;Fvi*h1l@EFpms&8V2SXFlX~mdJKu()r&^c5ibaUee^})8lIwTedWP z+Ks|ap~+PLyNkz@pVJHtH-2on`%R|$yc4WkIlmV!%fiBv0URnl1H!G z`Q^Eet@Q}W;;~**uPrO_(F!3rAdT+)%%PYn(R>zrk5^uf=qkft%(MD@Js++Nig+RF z<~F^S3X`cCGgOc%C~$$kJb>qNBq$D+-ps`^!DEPQRx?vEwCuvH*SN5iJx9jfd6Sr;AGT< zNJ(Vxw=d|5IGLEajw2E~^-Z#^PjKEE@2{|)NT-AUBqI!RJ73EY-2Y4WVN|+v;Kl*H zI9R9JfnlL7(i}`i>gq3V6g8NEaohs^8t0mkn<>LM&bmWle=H(KPR=4ii?7z8IfG5B z*cV{3ckdHAIuzpAv?Vn(hMj*1QxQ6@q`2%iq7fDE)L#r_$q}t+tNG`Fz4#M}&4TgO z(RFSx?Fl`-D^0xNRhm5*q3kQv7w!?-U;}KJRf4)=0!DFgf}kU#d8!*Dn07WDEjA9L zzIkfX?f%fJhKYx6xs0T7Wz6}J|iuQ}Ei<2B6 z=_IeZy+4#}I^~}L^g9@M!P%dqOe-5sp|O!tSkAt*w4~?Q%?mv$D?%uwle57SJnmxV z=9^lMlAcq)%;EM_(n5rA#Qy&N`pL-zmEr*r3jfnG^WNn?DWauRkL?VA!*unQiF{7c04RLDJz2fDwDi<@Q%gzg>6r7XZ(xKG$v$;@7UuW2WSU;+J-?RQGk3=DA(7nTZT3EY>GaSiqbM4^Q+{ zlRvwE=_2g_(tWoV$&||hH1w17Wv+T6T2RdS3qNj?c{tuxVe#(CL3*sL7#UhJ0AGy!;+CjSK$u z^2Jw!6MrD+K;QC_0B!b*NrdrgU&f?;8}%?ov2LZ!gkIZr%}$R57PT~J_8GNpxN^NZ z8rfLE`t1FXlQYt)u-YuCQv{$aXl}cOP#E7=DMiSByLtuEV|DVz#MHq`vu=v*UmG09 z0L}fv(2QPuG>gt-J1z3BP`}d`1&z^vc`geJ3)nkge9UcAVk$!Bpv;_4s}n-Blo7@X;9YgbQA zm@|`Rf?@TeIK{m1^73*>)wk;scU{UXo243YzP*U&c)rQ`n^vd%?OotY2p%KVt-u@U z`1xJR)*^t;Dopeis78;lg{gN+L^Ftl3hfI7<;Bb|zOa1b_n#cw>1tU%sldU?7> z<-VGM!WeC74o*K>Pqv_#y$ z%4KLhcTw)$yT_(m5tfz zSCyEo;`AaKC$~S5+Z49}I0$|ZuhZQ*$kv8?nO=TrOmUfR54rbb6gaUeaOC{LQ3kl< ziM&>MIgIBSVqWL(xI;v}FI|B;2|=0IFPEL3VNJts@HY{h->B!xLN@;jSU|fKI9ezH z9PW*0*ZtFQeZ=`qDMjJpc&qww;Ki87PMwRBI Date: Sat, 25 Jul 2026 08:25:37 +0000 Subject: [PATCH 22/23] DOC: Updated ChangeLog.md Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- SurfaceTopography/ChangeLog.md | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/SurfaceTopography/ChangeLog.md b/SurfaceTopography/ChangeLog.md index e6bda451..ee50f53a 100644 --- a/SurfaceTopography/ChangeLog.md +++ b/SurfaceTopography/ChangeLog.md @@ -1,6 +1,42 @@ Change log for SurfaceTopography ================================ +v1.23.0 (not yet released) +-------------------------- + +- BUG: Transposed and downsampled topographies report correct `pixel_size`; affected derivatives and PSDs for anisotropic pixels +- BUG: Masked data is normalized by the number of defined points; changes `rms_height` and moments of files with undefined data +- BUG: Power spectrum no longer halves the `q=0` entry when folding the +q and -q branches (#282) +- BUG: Fixed reshape order for non-square scans in the DI, EZD, MI and PS readers +- BUG: MI reader converts lateral sizes from meters to the requested unit +- BUG: BCR reader treats `voidpixels` as a count and masks against format markers +- BUG: Fixed channel selection in the NMM and OIR readers +- BUG: Fixed EZD magic check (bytes vs. str, inverted logic) +- BUG: ZAG container reader re-opens the ZIP file for each read +- BUG: Rewrote the C++ moment kernels in exact polynomial form (sign errors, missing prefactors, division by zero) +- BUG: `Bicubic.__call__` handles non-contiguous input arrays +- BUG: Fixed bounds of the periodic 2D bearing area +- BUG: `to_uniform()` interpolates at the correct positions for scans not starting at zero +- BUG: Slope detrending uses the length-weighted slope +- BUG: Hann window in the nonuniform power spectrum is origin invariant +- BUG: `fourier_synthesis` zeroes the DC mode instead of setting it to `C(q=1)` +- BUG: `make_sphere(..., periodic=True)` passes the periodic flag on +- BUG: Fixed `direction` semantics of `scan_line_align` +- BUG: Nonuniform `polyfit` solves in scan-centered coordinates; detrending no longer depends on the x origin +- BUG: Fixed Nyquist handling in Fourier interpolation and for anisotropic pixels in `power_spectrum_from_area` +- BUG: Registering an analysis function on a subclass no longer modifies the base class +- BUG: Fixed scale-dependent curvature on log-spaced and reliability-trimmed grids +- ENH: Bicubic interpolation computes spline coefficients on demand, instead of 128 bytes per pixel up front +- ENH: Container PSD integration precomputes bandwidth intervals in one pass, instead of re-reading every file per topography +- ENH: The IBW, MI and MNT readers no longer keep file data in memory after construction +- ENH: Nonuniform height-height autocorrelation moved to a C++ kernel +- ENH: Rigid-sphere scan vectorized over blocks of bounded memory +- ENH: Gaussian process regression reuses a single Cholesky factorization +- ENH: Flood-fill stack in the patch finder is allocated once per call, not once per patch +- TST: Added property-based invariant tests for transposition, translation, scaling and origin invariance +- DOC: Added `AUDIT.md` with the full audit report and the status of each finding +- MAINT: Removed broken `pytest-flake8` from the test dependencies; renamed `tiffile` to `tifffile` + v1.22.0 (08May26) ----------------- From f8087a9cef86b67ebaf65fe9db516e8a8b361cbb Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 25 Jul 2026 08:37:16 +0000 Subject: [PATCH 23/23] Remove AUDIT.md The audit report was a working document for this branch, not something the package should ship. The findings it recorded are captured in the commit history, the change log and the regression tests. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TPEpAGDASUXBVpV5BVDnUZ --- AUDIT.md | 778 --------------------------------- SurfaceTopography/ChangeLog.md | 1 - 2 files changed, 779 deletions(-) delete mode 100644 AUDIT.md diff --git a/AUDIT.md b/AUDIT.md deleted file mode 100644 index ff7cf3d5..00000000 --- a/AUDIT.md +++ /dev/null @@ -1,778 +0,0 @@ -# SurfaceTopography codebase audit - -Date: 2026-07-23. Scope: full repository at commit `119cb66` — core topography -classes, `Uniform/`, `Nonuniform/`, `Generic/`, `IO/`, `Container/`, -`Support/`, `Models/`, the C++ extensions in `cpp/`, and packaging. Findings -were verified by re-reading code, cross-checking against the test suite, and — -where marked *(verified by execution)* — by running the code against the -installed extension. Line numbers refer to this commit. - -Severity legend: -- **HIGH** — silently wrong scientific results or data corruption on realistic inputs. -- **MEDIUM** — crashes on valid inputs, wrong results under non-default but supported options, resource/metadata correctness. -- **LOW** — edge cases, performance, documentation drift, code health. - -> **Status update (2026-07-23):** All findings in section 1 (the -> wrong-results tier, §1.1–§1.17) and sections §2.1–§2.4 have been -> **fixed** on this branch, with regression tests; see the commit history -> following the commit that added this report. Exceptions: the latent -> non-square axis-pairing in DATX/LEXT noted under §1.3 is *not* changed -> (unprovable without a non-square reference file); of the packaging items -> (T8), the broken `pytest-flake8` plugin and the `tiffile` alias package -> were fixed because they broke CI, while the remaining build-system -> hardening (meson `python` alias, glob check for meson file lists) is -> still open. Section 3 (low severity) has also been **fixed**, with two -> deliberate exceptions: the NMS height scale divisor `2**16 - 2` (§3, -> IO) was left untouched because no reference implementation or fixture -> is available to decide between `2**16 - 2` and `2**16 - 1`, and the -> DATX/LEXT axis-pairing exception above applies here too. Of section 4, -> the actionable items have been addressed: property-based invariant -> tests (transpose/translate/scale/origin invariance, decorator geometry -> consistency, bearing-area CDF properties) were added in -> `test/test_invariants.py` (T1/T3/T6). The meson version-discovery -> interpreter (T8) must remain the bare `python`: switching it to -> `python3` broke all Windows wheel builds, because pip's isolated build -> environment provides no `python3.exe` on Windows and the name resolved -> to an interpreter without the DiscoverVersion build requirement. This -> is now documented in `meson.build`; building with bare meson outside a -> venv requires a `python` alias. The -> proposed dedup of the three `bandwidth` implementations and of the -> `compute_1d_moment`/`compute_iso_moment` pair was assessed and -> deliberately rejected: the `bandwidth` variants differ semantically -> (pixel size vs. mean point spacing vs. unit-converting container -> variant) and the moment helpers are seven lines each, so a shared -> helper would add indirection without reducing risk. The larger -> refactoring themes (shared row-major reader helper for IO, unifying -> the Uniform/Nonuniform/Container analysis-function triplication) -> remain proposals — see section 4. The performance tier (§2.5) has been -> worked through under the library's memory boundary conditions; see the -> resolution note at the head of that section for what was fixed, what -> was intentionally left as a time/memory trade-off, and what remains. -> Note that the masked-data normalization fix -> (§2.2) changed the reference values of several IO tests whose fixtures -> contain undefined data points; the old values were dominated by a -> mean-normalization artifact. - ---- - -## 1. High severity — silent data corruption / wrong results - -### 1.1 Lazy `transpose()` does not swap `pixel_size` → wrong derivatives and PSDs *(verified by execution)* - -`SurfaceTopography/UniformLineScanAndTopography.py:669` — `TransposedUniformTopography` -overrides `nb_grid_pts` and `physical_sizes` but inherits `pixel_size`, -`nb_subdomain_grid_pts` and `subdomain_locations` from -`DecoratedUniformTopography`, which delegates to the parent. For anisotropic -pixels every derivative-based quantity of a transposed topography is wrong, -with no error: - -``` -t = Topography(np.random.rand(64, 32), (2., 4.), periodic=True) -t.rms_gradient() -> 13.8586 -t.transpose().rms_gradient() -> 10.3769 (silently wrong) -t.transpose().squeeze().rms_gradient() -> 13.8586 (correct) -``` - -`Uniform/Derivative.py:349,374` divides FFT frequencies by `pixel_size`. The -un-swapped `nb_subdomain_grid_pts` additionally breaks shape checks under MPI. -**Fix:** override `pixel_size`, `nb_subdomain_grid_pts`, `subdomain_locations` -to swap components. - -### 1.2 `downsample()` reports parent pixel size → derivatives/PSD normalization wrong by the downsampling factor *(verified by execution)* - -`SurfaceTopography/Uniform/Filtering.py:80-93` — `DownsampledUniformTopography` -overrides `nb_grid_pts` but inherits `pixel_size`/`area_per_pt` from the -parent. A 64×64 map of size 1.0 downsampled by 2 reports `pixel_size = 1/64` -(should be 1/32) and `area_per_pt` wrong by 4×; `derivative()` on the result is -wrong by ~the same factor. For non-divisible factors, sample positions are also -inconsistent with `positions()`. **Fix:** override `pixel_size`/`area_per_pt`; -shrink `physical_sizes` to `nb_grid_pts*fx*px` or reject non-divisible factors. - -### 1.3 Non-square scans scrambled by wrong reshape order in four readers - -The raw buffer of these formats is stored scan-line-major, i.e. C-order shape -`(ny, nx)`, but the readers reshape to `(nx, ny)`. Whenever `nx != ny` (partial -/ aborted scans, rectangular acquisition settings) scan lines are interleaved -into garbage, silently. All test fixtures for these formats are square, so the -test suite cannot see it: - -- `SurfaceTopography/IO/DI.py:308-310` (Bruker Nanoscope) -- `SurfaceTopography/IO/EZD.py:221-223` (NanoSurf easyScan) -- `SurfaceTopography/IO/MI.py:156,181` (Molecular Imaging; additionally pairs the transposed shape with un-swapped sizes) -- `SurfaceTopography/IO/PS.py:211` (Park Systems TIFF) - -**Fix:** `reshape(ny, nx)` then `.T` (the pattern FRT.py:623 and GWY.py:290 -already use correctly). Add a non-square fixture per format. - -Related latent axis-pairing issues for non-square maps (untested, ambiguous -rather than provably wrong): `IO/DATX.py:101,122,130,243-248` pairs the HDF5 -row count with the X converter and hands data to `Topography` untransposed; -`IO/LEXT.py:114-117,231` same pattern (contrast JPK.py:350, which transposes -correctly and is verified by a non-square fixture). - -### 1.4 MI reader: lateral sizes in meters labeled with the height unit (µm) — mixed quantities off by ~10⁶ - -`SurfaceTopography/IO/MI.py:117,181` — `xLength`/`yLength` are meters per the -MI spec (2e-05 in the test file), but the topography is constructed with -`unit=bufferUnit` (µm, which correctly applies to the heights via -`bufferRange`). A 20 µm × 20 µm scan is reported as 2×10⁻⁵ µm wide; rms slope, -PSD, curvature are off by ~10⁶. `test/IO/test_mi.py:64` asserts the wrong -value. **Fix:** convert lengths from m into `bufferUnit`. - -### 1.5 BCR reader misinterprets `voidpixels` as the invalid-data marker value - -`SurfaceTopography/IO/BCR.py:217-219` — per the BCR-STM spec (and Gwyddion), -`voidpixels` is the *count* of void pixels; the void marker is 32767 (int16) -or ~3.4e38 (float). Consequences: a file with `voidpixels = 0` masks every -pixel whose value is 0 (mass corruption); real void pixels are never masked; -a missing key crashes `topography()` with `KeyError`. Only works for the -single test file because its writer non-conformantly stored the marker value -in that field. **Fix:** treat as count, mask against the format's marker -constant, set `undefined_data` on `ChannelInfo`. - -### 1.6 Channel selection returns the wrong channel's data in three readers - -- `SurfaceTopography/IO/NMM.py:256-258` — every `ChannelInfo` is created with - index 0 inside the scan loop, so `channels[i].topography()` always loads - scan 1. -- `SurfaceTopography/IO/OIR.py:523-528` — late-binding closure: the reader - lambda captures loop variables `uuid`/`nx`/`ny`/`dtype` by reference; with - ≥2 height channels every channel returns the last channel's data. **Fix:** - bind via default arguments. -- `SurfaceTopography/IO/OIR.py:563-597` — `POIRReader` concatenates - sub-readers' channels but keeps per-file `_index`; `channels[1].topography()` - on a two-file container returns file 0's data. **Fix:** renumber `_index`. - -### 1.7 C++ triangle moments are mathematically wrong — all `uniform2d_*` moment bindings return garbage *(verified by execution)* - -`cpp/moments.h:115-175` — `_TriangleMoment` has a sign error and a missing -`2/(h3−h1)` prefactor relative to the correct moment of the linearly -interpolated triangle distribution. Live results: `uniform2d_mean(const 5.0) = -0.0`; `uniform2d_variance` of a ±1 terraced surface = 0.0 (should be 1.0). The -generic order-4 path divides by `(h2−h1)`/`(h3−h2)` with no degeneracy guard → -NaN for any triangle with two equal corner heights (ubiquitous in quantized -data). `test/test_moments.py:140-166,354-358` *codifies* the broken behavior -("returns 0 due to triangle integration"). The bindings are exported but -currently unused inside the library. **Fix:** rederive the integral, add the -order-4 specialization, handle degenerate corners analytically, fix the tests. - -### 1.8 Order-4 line-scan moments return 0 for flat segments *(verified by execution)* - -`cpp/moments.h:34-40` — the `|h2−h1| < 1e-12` guard returns 0 where the -correct limit is `(order+1)·h^order`, and no order-4 specialization exists, so -`nonuniform_moment4`/`uniform1d_moment4` hit this path: `uniform1d_moment4(2.0 -· ones) = 0.0` (true 16). Kurtosis of surfaces with flat segments is -systematically underestimated; the absolute epsilon is also unit-dependent -(meters-scale heights zero out entirely). **Fix:** exact factored form -`h1⁴+h1³h2+h1²h2²+h1h2³+h2⁴`; drop the epsilon guard. - -The same removable-singularity bug exists in pure Python: -`SurfaceTopography/Nonuniform/ScalarParameters.py:74` — `moment()` evaluates -`(h₂^{α+1} − h₁^{α+1})/(h₂ − h₁)` directly; any two equal adjacent heights -(quantized instrument data) give 0/0 → NaN which propagates to the whole -result. **Fix:** `np.where(dh == 0, (alpha+1)*h**alpha, ...)`. - -### 1.9 `Bicubic.__call__` reads non-contiguous arrays as contiguous — wrong values and out-of-bounds reads *(verified by execution)* - -`cpp/bicubic.cpp:362-363,385-388,409-421` — `py::array_t::ensure` does -not force C-contiguity and strides are never consulted. A strided view -(`x[::2]`) gives values wrong by up to 0.31; a negative-stride view walks up -to `n−1` doubles past the allocation (heap OOB read / UB). **Fix:** -`py::array_t`. - -Related copy-paste bug on the Python side, `SurfaceTopography/Uniform/Interpolation.py:167`: - -```python -interp_derxy = interp_derxx / dx / dy # should be interp_derxy -``` - -Every `derivative=2` user of `interpolate_bicubic` gets the xx-derivative -(rescaled with the wrong units) in place of the cross-derivative. - -### 1.10 Periodic 2D bearing-area bounds built with flattened `np.roll` → corrupts `median()`, MAD statistics, robust detrending *(verified by execution)* - -`SurfaceTopography/Uniform/BearingArea.py:126-133` — `np.roll(h, (-1, 0))` -without `axis=` flattens the array and rolls by the *sum* of the shifts, so -the element min/max bounds pair wrong pixels. On periodic 8×8 maps, 252/3400 -tested heights fell outside `[lower, upper]`; `bisect()` in -`Generic/RobustStatistics.py` relies on these bounds and returned a "median" -with `bearing_area(median) = 0.626` instead of 0.5. Affects `median()`, -`mad_height()`, `mad_polyfit()` and `'median'`/`'mad-tilt'`/`'mad-curvature'` -detrending for periodic 2D topographies. **Fix:** `np.roll(h, -1, axis=0)`, -`np.roll(h, -1, axis=1)`, `np.roll(h, (-1, -1), axis=(0, 1))`. - -### 1.11 `to_uniform()` produces garbage for line scans whose x-axis does not start at 0 - -`SurfaceTopography/Nonuniform/Converters.py:158-165` — the uniform grid always -spans `[0, s]` while the parent's positions may start anywhere; `np.interp` -clamps outside the parent range, so a scan with `x[0] = 5` gets most of the -grid filled with the constant `h[0]`. This silently poisons the default -`'fft'` paths of `power_spectrum_from_profile`, `autocorrelation_from_profile`, -`derivative(distance=...)`, scale-dependent statistics, and the -scanning-probe reliability cutoff. Masked in practice only because the -XYZ/Mitutoyo readers shift `x -= min(x)`; the public `NonuniformLineScan(x, y)` -constructor does not. **Fix:** interpolate at `x + parent.positions()[0]`. - -Two more `x[0] == 0` assumptions in the same subsystem: - -- `SurfaceTopography/Nonuniform/Detrending.py:107` — `'slope'` detrend uses - `a0 = mean(h)` (missing the `−a1·⟨x⟩` correction) and an unweighted - `derivative(1).mean()` where the rms-minimizing constant is the - length-weighted mean `(h[-1]−h[0])/L`. Example: `x=[0,1,10], h=[0,1,1]` → - slope 0.5 instead of 0.1. -- `SurfaceTopography/Nonuniform/PowerSpectrum.py:107-109` — the Hann window is - evaluated at absolute `x`, not `x − x.min()`; for offset scans the window is - ≈1.5 at the endpoints instead of 0, defeating leakage suppression (and - nonperiodic scans get this window by default). - -### 1.12 Scale-dependent curvature stencil silently wrong with default arguments - -`SurfaceTopography/Generic/Curvature.py:64-72,104-112` — the pairing -`8·A[1+i] − 2·A[2+2i]` implements `8A(λ) − 2A(2λ)` only for a linearly spaced, -origin-anchored ACF grid, but `autocorrelation_from_profile` defaults to -`resampling_method='bin-average', collocation='log'` (log-spaced `r`), and -with `resampling_method=None` a reliability cutoff trims leading points and -shifts the origin. Both default and reliability paths therefore compute -curvatures from mismatched distance pairs. Existing tests only check -`np.max` loosely / "finishes without failing". **Fix:** compute the ACF on a -linear grid internally, apply the reliability mask after forming the stencil, -or interpolate `A(2λ)`. - -### 1.13 ZAG containers return topographies backed by an already-closed stream - -`SurfaceTopography/Container/IO/ZAG.py:156-175` + -`Container/IO/__init__.py:128-131` — `read_container()` does `with -open_container(fn) as reader:` and returns the lazy container after `__exit__` -closed the file stream; every subsequent element access reads from a closed -`ZipExtFile`. `CEReader` avoids this by re-opening the ZIP per read; ZAG does -not. Unnoticed because `test/IO/test_zag.py` is `@pytest.mark.skip` with a -hardcoded path `/home/pastewka/Downloads/zag-1.zag`. **Fix:** a re-opening -opener object like `CEFileOpener`; check in a fixture and unskip the test. - -### 1.14 `fourier_synthesis` populates the q=0 mode with a spurious, unit-dependent amplitude *(verified by execution)* - -`SurfaceTopography/Generation.py:283-292` — `q_sq[0] = 1.` (to avoid -`0**negative`) causes the DC amplitude to equal `C(q=1)`, which depends on the -arbitrary length unit. For 128×128, `rms_height=1.0`, realization means come -out at `4.4, −22.9, −13.7, 4.9, 19.4` — a mean offset that dwarfs the -requested roughness for any consumer that does not first subtract the mean. -**Fix:** zero the DC mode instead. - -### 1.15 `make_sphere(..., periodic=True)` silently returns a nonperiodic topography *(verified by execution)* - -`SurfaceTopography/Special.py:216-223` — neither constructor call passes -`periodic=periodic` (the wrapped radii are computed, but the flag is dropped). -The flag controls detrending defaults, PSD/ACF windowing and derivative -stencils. The existing test checks only height values. **Fix:** pass the flag -(and `communicator` in the 1D branch). - -### 1.16 `scale_dependent_statistical_property` reports wrong distances with `scale_factor` - -`SurfaceTopography/Generic/ScaleDependentStatistics.py:130-131` — `distance = -scale_factor * np.mean(physical_sizes)` contradicts the module's own -convention (`distance = scale_factor · n · pixel_size`); the returned abscissa -is too large by ~`nb_grid_pts/n` (e.g. 512×), and since this distance feeds -the reliability mask, unreliable scales are never filtered when `scale_factor` -is combined with reliability metadata. - -### 1.17 Scan-line alignment `direction` semantics inverted - -`SurfaceTopography/Uniform/ScanLineAlignment.py:66-68,171-181` — the docstring -says `'x'` means the fast scan runs along x, but the implementation iterates -`heights[i, :]`, and in this library the first index *is* x. Users with -standard fast-scan-x AFM maps (the default) get the per-line correction -applied across scan lines. The tests added with the feature encode the same -inversion. **Fix:** transpose for `'x'` instead of `'y'`. - ---- - -## 2. Medium severity - -### 2.1 Analysis correctness under non-default options - -- `Support/__init__.py:50-52` (`fold_fft_half`, callers - `Uniform/PowerSpectrum.py:105`, `Uniform/Autocorrelation.py:118`) — the - final `/= 2` also halves the q=0 row, which has no mirrored partner; - `power_spectrum_from_profile(resampling_method=None)` returns `C[0]` exactly - half the true DC power *(verified by execution)*. Fix: halve `result[1:]` - only. -- `Uniform/PowerSpectrum.py:129` — `min_value=q[1]` is applied after q=0 was - already stripped, discarding the fundamental mode from 1D log-collocation - resampling *(verified)*. Fix: `q[0]`. -- `Uniform/Derivative.py:449` — `"disabled"` vs accepted option `"disable"`: - the guard is dead; `interpolation='disable'` with a fractional scale factor - silently truncates the stencil step *and* divides by the fractional pixel - size — doubly wrong instead of raising *(verified)*. -- `Uniform/Interpolation.py:53-68` — linear interpolator truncates toward zero - instead of flooring; negative fractional positions on periodic topographies - extrapolate (`interp(-1.5) → 10.5` outside data range) and corrupt the first - pixels of scale-dependent slope/curvature with fractional scale factors - *(verified)*. Fix: `np.floor(...).astype(int)`. -- `Uniform/Interpolation.py:205-227` — `interpolate_fourier` halves Nyquist - rows/columns even when that dimension is not enlarged; interpolation onto - the same grid is not the identity (max error 0.49 on unit-variance 8×8) - *(verified)*. Fix: halve only when actually padding that dimension. -- `Uniform/Autocorrelation.py:227,242` — factor-2 inconsistency in the - reliability cutoff between profile (`short_cutoff / 2`) and area - (`short_cutoff`) ACF paths; the area path discards a factor-2 band of - reliable short-distance data (the `other_cutoff` defaults also differ). -- `Nonuniform/VariableBandwidth.py:158-166` — the loop condition tests the - *previous* magnification's minimum point count, so the last recorded level - can contain segments below `nb_grid_pts_cutoff` (down to 2 points, rms - exactly 0), biasing the smallest-bandwidth datum low. The uniform version - checks before recording. -- `Nonuniform/VariableBandwidth.py:39,85,94` — absolute tolerance `tol=1e-6` - compared against position differences is unit-dependent: in SI meters it - exceeds entire subdivisions; in nm-scale coordinates it is effectively zero. -- `Models/SelfAffine.py:246-266` — `generate_roughness` resolves - `longcut_wavelength` and then never uses it (always passes the model's - rolloff to `fourier_synthesis`); the `order == hurst_exponent` branch of - `variance_derivative` (line 218) also uses the wrong lower limit. -- `Generation.py:140-148` — `Hurst=1` with `rms_slope` (and `Hurst=0` with - `rms_height`) produce 0/0 → all-NaN surfaces with only a RuntimeWarning - *(verified)*. Fix: raise, or implement the logarithmic limits. - -### 2.2 Masked / undefined data handled inconsistently - -- `Uniform/Detrending.py:47-50` — `polyfit_line_scan` fits the raw buffer - under the mask (`np.polyfit` on a masked array); the 2D counterpart - correctly compresses. Verified: junk under 10 masked points shifts a - unit-slope fit to coefficients ~1e5. -- `Uniform/VariableBandwidth.py:88-92,169-173` — `np.bincount(region_index, - h * x**i)` strips masks; masked points contribute raw fill values with no - `has_undefined_data` guard *(verified: detrended heights of magnitude 3e6)*. -- `Uniform/ScalarParameters.py:60-68,91-95` — `Rq`/`Sq` normalize by the total - grid-point count including masked ones; a half-masked constant profile - returns `Rq = 0.354` instead of 0 *(verified)*. -- `Uniform/GeometryAnalysis.py:112-114` — periodic wrap merge in - `assign_patch_numbers_profile` uses `patch_ids[0]` (the *second* pixel's - id); a masked patch spanning the wrap boundary comes back from - `interpolate_undefined_data()` with one pixel still masked while - `has_undefined_data` reports `False` *(verified)*. -- `Uniform/Imputation.py:110-118` — the Laplace-matrix neighbor lookup uses - unconditional `np.roll`, wrapping across the boundary of *nonperiodic* - topographies and coupling edge pixels to per-patch unknown #0 *(verified: - wrong harmonic fill values for edge-touching patches)*. -- `IO/FromFile.py:196-215` (HGT) — SRTM voids (−32768) are not masked (they - enter statistics as −32768 m spikes), and fabricated - `physical_sizes=data.shape` makes it impossible to pass real sizes later - (`MetadataAlreadyFixedByFile`). -- `IO/SDF.py:105-115,304-308` — ASCII variant never maps integer invalid - markers (−32768/−2³¹) to NaN; only the literal `BAD` token. Binary path is - correct. Also uses deprecated `np.fromstring`. -- `IO/X3P.py` — ignores the ISO 5436-2 `ValidPointsLink` mask and the CZ - `Offset`; integer invalid points read as real heights. The writer casts NaN - through `astype(uint16)`. - -### 2.3 Crashes on valid inputs - -- `Special.py:205-228` — `make_sphere(kind='paraboloid', standoff=1.0)` → - `UnboundLocalError` (`standoff_val` only set in the sphere branch) - *(verified)*. -- `UniformLineScanAndTopography.py:745-750` — `translate()` crashes for 1D - line scans (`axis=1` roll), even with the default offset *(verified)*. -- `UniformLineScanAndTopography.py:707-709` — `transpose()` of a 1D line scan - crashes in `positions()` (`too many values to unpack`) although 1D transpose - is intended as identity *(verified)*. -- `HeightContainer.py:285-295,348-357` — `__eq__` raises (broadcast error / - `AttributeError`) instead of returning `False` for mismatched grids or - foreign types, and defining `__eq__` without `__hash__` makes all - topographies unhashable *(verified)*. -- `Uniform/Filtering.py:229,274-276` — the default `filter_function` of - `FourierFilteredUniformTopography` crashes with `isotropic=True` (wrong - arity), has an operator-precedence bug if called with two args, and error - paths `raise ("ValueError: ...")` raise a string (→ `TypeError`) - *(verified)*. -- `Uniform/Interpolation.py:265-272` — `MirrorStichedTopography.positions()` - is shape-inconsistent with `heights()` (10×10 vs 20×20), breaking - `positions_and_heights()` *(verified)*. -- `IO/GWY.py:149-158` — any GWY file containing an object array (graphs / - spectra) crashes twice over: the reader-dict entry doesn't accept - `skip_arrays` and a missing comma makes `range(nb_items)` receive a tuple. -- `IO/GWY.py:204,250` — channel-index regex `([0-9])` accepts one digit; - files with ≥11 channels crash with `TypeError`. -- `IO/FRT.py:460` — invalid struct format `'gint32'` (copied from Gwyddion C - source); any FRT file containing block 0x00ae fails to open. Should be `'i'`. -- `IO/EZD.py:70-72` — magic check compares `bytes` to `str` (always False) - *and* has inverted logic; net effect: no format validation at all. -- `IO/MI.py:146-152` — ASCII-data branch references undefined `encode_length` - → `NameError` for text-format MI files the header parser explicitly detects. -- `IO/MI.py:162` — `if meta['scanUp']:` tests the *string* `'FALSE'` (truthy): - scan-down images are also flipped. -- `IO/NC.py:287-296` — nonuniform line scans report `nb_grid_pts=(None,)` - (reads the wrong dimension attribute) *(verified by write/read round trip)*. -- `IO/NC.py:452` — MPI guard `rank > 1` should be `rank > 0`: ranks 0 and 1 - both write the same file concurrently in non-decomposed runs. -- `IO/PLUX.py:118-150,177-180` — multi-layer files advertise N channels but - `topography()` raises for any `channel_index != 0`. -- `IO/H5.py:64-65` — crashes with `AttributeError` on HDF5 files containing - groups (`Group` has no `.shape`). -- `IO/DATX.py:119,127,135` — `and` where `or` is needed in converter - validation (both conditions must fail to raise), plus a copy-paste error - message in the Z-converter check. -- `Nonuniform/ScaleDependentStatistics.py:162-164` — the 2D single-distance - fallback assigns `np.nan` into a *tuple* → `TypeError` when the threshold - trips; a Python-list `distances` argument crashes against the reliability - mask (`list > float`). -- `Generic/Slope.py:107` — `scale_dependent_slope_from_area` is registered on - `NonuniformLineScanInterface`, which has no `autocorrelation_from_area` → - guaranteed `AttributeError`. -- `HeightContainer.py:306-307` — `is_reentrant` crashes for scans with < 2 - points *(verified)*. -- `IO/Mitutoyo.py:101,139,163` — bare `IndexError` for spreadsheets without a - roughness-metric cell or 1-point scans; locale-dependent `%b` date parsing; - workbook handle never closed. -- `Support/UnitConversion.py:181` — `suggest_length_unit` crashes with - `OverflowError` on all-zero data (`log10(0)`); `mangle_length_unit_ascii('Å') - = 'A'` round-trips to an unconvertible unit. -- `Container/ScaleDependentStatistics.py:89-119,158-174` — the docstring - example (`distance=[...]`) crashes with `TypeError: multiple values for - 'distance'`; scalar `distances` unsupported despite docs; inner loop reuses - the outer loop variable. -- `Container/IO/__init__.py:130` — `read_container(**kwargs)` forwards kwargs - that neither `CEReader.container` nor `ZAGReader.container` accepts. - -### 2.4 Infrastructure and metadata correctness - -- `SurfaceTopography/Metadata.py:33-44` — `InfoModel` silently *discards* - arbitrary `info` keys (pydantic `extra='ignore'`) although docstrings - throughout promise a free-form dict for third-party codes; explicit `None` - values raise `ValidationError` (fields typed `str = None` instead of - `Optional[str]`) *(verified)*. Fix: `extra='allow'` (or `'forbid'` to fail - loudly) and `Optional[...]` annotations. -- `HeightContainer.py:184-189` — the base-class `DecoratedTopography.info` - passes a `BaseModel` to `model_copy(update=)` which requires a dict → - `AttributeError` under pydantic 2; currently shadowed by two copy-pasted - correct overrides in the uniform/nonuniform subclasses *(verified)*. Fix in - the base, delete both overrides. -- `HeightContainer.py:67-68`, `Container/SurfaceContainer.py:43-44` — - `apply()` discards the function's return value in both dispatch bases - *(verified)*. Add `return`. -- `Support/Bibliography.py:59-88` — `doi.dois`/`doi._n` are class-level - globals with no try/finally: any exception inside a wrapped analysis leaves - the decorator permanently "on", silently dumping DOIs into a user's set on - all later calls; thread-unsafe *(verified)*. Fix: try/finally, or a - `contextvars.ContextVar`. -- `Support/JSON.py:15-29,121-125` — `json.dump` bypasses the NaN handling - (only `encode()` is overridden, not `iterencode()`; `IO/DZI.py:197` uses - exactly `json.dump`); `nan_to_none` crashes on `nomask` and on 2-D masked - arrays; Inf passes through as invalid JSON *(all verified)*. -- `Support/UnitConversion.py:242-247` — `find_length_unit_in_string` matches - substrings of alias keys only: `'X Axis'` → `'Å'` (wrong unit, wrong - scaling), `'Height (nm)'` → `None`; result feeds the XYZ reader's - unit/height-scale *(verified)*. -- `IO/JPK.py:279-280` — every channel's `raw_metadata` contains the *last* - TIFF page's metadata (stale loop variable `channel_metadata`; should be - `channel`). -- `IO/ZON.py:227,243` — mutable default `info={}` is mutated - (`info.update(...)`) and permanently polluted across calls — including into - ZAG containers; the merge direction also lets file metadata overwrite - user-supplied info, opposite of every other reader *(verified)*. -- `IO/MetroPro.py:124,167-239` — little-endian and native-endian struct fields - in a big-endian format: heights are unaffected (offsets verified to line - up), but `raw_metadata` values and the reported instrument serial are - garbage. `_HEADER_FORMATS`/`_HEADER_SIZE*` are dead code. -- `IO/OPD.py:142-151,157` — named metadata blocks read fixed 2–4 bytes - regardless of the directory-declared length (silent offset shift if they - differ); missing `Wavelength` block → `NameError`. -- `IO/VK.py:258-261` — physical size uses `(n−1)·pixel` (interval convention) - where the library convention (and Gwyddion) is `n·pixel`. -- `Container/IO/__init__.py:134-158` — `read_published_container` has no - `raise_for_status()` (404 → confusing `KeyError`), no timeout, buffers the - whole download in memory, and applies `**request_args` to only one of the - two requests. -- `Container/IO/CE.py:74-80` — `CEFileOpener` never closes the `ZipFile` - (relies on refcount GC) and re-parses the central directory on every lazy - topography access. -- cpp — `eigen_helper.h:30`: `Eigen::Array` breaks Windows wheels - (LLP64 `long` is 32-bit; non-const `Ref` needs exact dtype match → - `TypeError` from every `NonuniformLineScan.bearing_area()` call). Fix: - `std::int64_t`. -- cpp — all bindings take non-const `Eigen::Ref`: read-only, int-dtype or - F-ordered inputs are rejected although nothing is written; a read-only - input array breaks `t.mean()`, `t.rms_height_from_profile()` etc. for - nonuniform scans *(verified)*. Fix: `Eigen::Ref`. -- cpp — `patchfinder.cpp:66-82`: single-`if` periodic wrap → OOB reads (and - potentially writes) for stencil offsets ≥ grid dimension *(verified)*; - `shortest_distance` correctly uses `while` loops. -- cpp — `moments.h:186`, `bearing_area.cpp:140`, `patchfinder.cpp:213,251`: - `int` accumulators / flat indices overflow at `nx·ny ≥ 2³¹` (32768²), within - the project's stated large-memory scope. -- cpp — `stack.h:272-298`: unchecked `malloc` → null `memcpy` (segfault - instead of `MemoryError`); diagnostic `printf` writes to stdout during - normal `distance_map` operation *(verified)*. -- cpp — `autocorrelation.cpp:90-92`: `nonuniform_autocorrelation` divides by - `physical_size − distance` with no validation → NaN/garbage for user-supplied - distances ≥ physical size *(verified)*; distances are mandatory user input - on this path. -- cpp — `module.cpp`: no `py::call_guard` on any - kernel; O(N²) autocorrelation and full-map flood fills hold the GIL for - seconds to minutes. -- `Pipeline.py:80-87` — the generated class's `__getattr__` shadows the - `_functions` dispatch and silently applies chained pipeline functions to the - *parent*, discarding the wrapped transformation *(verified: scale(3) of a - doubling wrapper returns 3×, not 6×)*; the module has zero callers and its - pickle support is dead code. Delete or fix. -- Registration system (`HeightContainer.py:199-208`, - `Container/SurfaceContainer.py:33,65-67`) — `register_function` mutates the - *shared* base-class `_functions` dict (2-D-only functions like - `interpolate_bicubic`/`mirror_stitch` appear on 1-D line scans and fail with - unrelated errors); the `deprecated=` flag is accepted and ignored at ~8 call - sites; the `func_with_doi` double-wrap check is defeated by - `functools.wraps` *(all verified)*. -- Loggers — `logging.Logger(__name__)` instead of `getLogger` in - `Support/Regression.py:37`, `Container/Averaging.py:37`, - `Container/ScaleDependentStatistics.py:35`, `Container/IO/ZAG.py:60`, - `IO/XYZ.py:47`: detached from the logging hierarchy, user configuration - never applies. -- `IO/__init__.py:323`, `Container/IO/__init__.py:90` — `raise - FileExistsError("file not found")`: wrong builtin (`FileNotFoundError`). -- `IO/Reader.py:1342-1349` — `DeclarativeReaderBase.topography` calls - `.scale(None)` when a format has no height-scale metadata, and its signature - lacks `channel_id`/`height_channel_index`. -- `Special.py:107` — `make_topography_from_function` assigns `_heights` - directly, bypassing NaN-masking/float conversion/shape validation - *(verified: NaNs with `has_undefined_data == False`)*. - -### 2.5 Performance - -> **Resolution note.** These findings were re-assessed against the memory -> boundary conditions of the library — a container streams its topographies -> from disk and must never hold more than one of them in memory, and readers -> are long-lived metadata handles that must not pin file data. Under those -> constraints the items split three ways: -> -> - **Fixed, and memory use goes down**: bicubic coefficients are now -> computed per cell with a single-cell cache instead of a 128 byte/pixel -> table; the IBW, MI and MNT readers no longer retain wave data, the -> whole file, or all decompressed blocks past `__init__`; the flood-fill -> stack is allocated once per call instead of 16 MB per patch; the GP -> regression reuses one Cholesky factorization and computes only the -> variance diagonal instead of the full predictive covariance. -> - **Fixed, memory-neutral**: the container PSD integration precomputes -> the bandwidth intervals of the topographies in a single streaming pass -> (two scalars each — heights are never cached), turning N² file reads -> into 2N as the pre-existing TODO proposed; the MNT zlib block scan -> measures candidate streams through a chunked `decompressobj` over a -> memoryview and skips past accepted streams instead of slicing and -> fully decompressing the tail at every byte; the nonuniform -> height-height ACF moved into a constant-memory C++ kernel rather than -> being vectorized into an O(N·M) intermediate; the rigid-sphere scan is -> vectorized in fixed-size blocks so its temporary stays bounded -> (~32 MB) regardless of scan length and tip radius; the XYZ parser -> accumulates into `array('d')` buffers instead of Python float lists. -> - **Deliberately not changed, because the speedup would cost memory**: -> `correlation_function`'s O(nx·ny·max_dist²) sweep uses O(1) extra -> memory, while the FFT alternative needs several full-map complex -> arrays (~1 GB at 4096²); the bearing-area full-grid sweep per query -> height would need another sorted O(N) array on top of the existing -> contiguous copy, which only pays off when many heights are queried. -> Both are left as documented trade-offs, not oversights. The XYZ -> double parse is likewise still a double parse: caching the parsed -> columns on the reader would pin the point cloud for the reader's -> lifetime, which the lazy-reader rule forbids. -> -> Remaining items of this section that are neither memory-related nor -> addressed above: the `int × int` index overflow in `bicubic.cpp` for -> maps beyond 46341² (needs a wider index type throughout), the -> O(max_dist⁴) correlation integration prefix sum, and the log-space -> variance FIXME in the GP branch. - -- `Container/Integration.py:51-68,119-136` — container PSD integration is - O(N²) in topography reads: the per-topography `average(qx)` callback loops - over all topographies again, and `LazySurfaceContainer.__getitem__` - re-reads the file from the ZIP each time (own TODO admits it). Precompute - the bandwidth-count table once and/or memoize container elements. -- `IO/binary.py:843,862-878` + `IO/MNT.py:720-753` — zlib block scanning reads - the whole file and walks it byte-by-byte in pure Python with speculative - `zlib.decompress` on every `0x78` false positive; MNT additionally - reimplements the scan inline (never advancing past decoded blocks) instead - of using the shared `ZlibBlockChain`, and retains the whole file plus all - decompressed blocks for the reader's lifetime. -- `IO/XYZ.py:199-320` — the file is fully parsed twice (once at `__init__` - for channel info, again in `topography()`), with a per-token pure-Python - accumulator loop (`data[key] += [float(value)]`) — orders of magnitude - slower than `numpy.loadtxt`/`pandas` for large point clouds. -- `IO/MI.py:133-155` — data block converted bytes → `[chr(_) for _ in - buffer]` → join → re-encode → `np.frombuffer`: an identity transform - creating ~64M temporary objects for a 4k×4k map; the whole file is retained - in `self.lines`. -- `IO/IBW.py:52-58` — `loadibw` reads the entire wave (all channels) at open - time and keeps it for the reader's lifetime, violating the documented lazy - design rule; `assert`-based file validation vanishes under `python -O` - (same anti-pattern in FRT, BCR, JPK, LEXT, ZON). -- `Nonuniform/Autocorrelation.py:74-105` — double Python loop over all segment - pairs (own `# FIXME!!! This is slow`) while the height-difference variant - already delegates to C++; the function is unregistered and used only by - tests. -- cpp — `patchfinder.cpp:42,54`: fresh 16 MB `malloc`/`free` per patch; - `patchfinder.cpp:499-520`: O(max_dist⁴) correlation integration where a - prefix sum is O(max_dist²); `bearing_area.cpp:138-163`: full-grid sweep per - query height with no pruning (the nonuniform variant prunes); the Python - wrapper already computes sorted bounds the C++ never uses. -- cpp — `bicubic.cpp:142-148`: eager precomputation of all 16 coefficients per - node costs ~128 bytes/pixel (~2.1 GB for a 4096² map) before the first - evaluation; `n1_*n2_` is `int × int` (overflow ≥ 46341²). -- `Support/Regression.py:278-293` — GP regression factorizes the covariance - twice per solve (no Cholesky reuse); log-space branch returns log-space - variance next to exponentiated values (FIXME acknowledges). -- `ScanningProbe/RigidScan.py:53-72` — per-pixel Python loop, vectorizable. - ---- - -## 3. Low severity (selected) - -- `IO/AL3D.py:100,104-105` — `rowstride` is already in bytes but is multiplied - by `itemsize` again (4× over-read into the texture image; works by luck); - invalid-pixel mask misses `abs()` on the marker. -- `IO/WSXM.py:153,237` — leftover debug `print(...)` on every load; - ZeroDivisionError for perfectly flat scans. -- `IO/DZI.py:153-154` — division by zero for flat topographies → all-NaN - image pyramid. -- `IO/ZON.py:83-87` — multi-entry `as_strided` strides scrambled (currently - unreachable; guarded only by an `assert`). -- `IO/NMS.py:166` — full-scale mapping divides by 65534 instead of 65535 (or - 0xFFFF is an unhandled invalid marker); no undefined-data handling. -- `IO/Text.py:124-141,270,467` — x/y regex mapping swaps instrument axes for - Wyko/SPIP flavors (Aspect factor lands on the wrong axis); `defaultdict(None)` - no-op; off-by-one channel bounds check. -- `IO/JPK.py:332-337` — `except KeyError` around list indexing (`IndexError`) - — friendly error is dead code. -- `IO/binary.py:45` + `IO/FRT.py:516` — `decode()` defaults to native byte - order; FRT relies on it for little-endian structures (breaks on big-endian - hosts). -- `IO/binary.py:626-633` — `TLVContainer._parse_entry` temporarily mutates a - shared class-level layout object (not reentrant/thread-safe). -- `FFTTricks.py:61-72` — `_mufft` cache ignores the `communicator` argument. -- `UniformLineScanAndTopography.py:738-743,782-795` — `CompoundTopography` - validates with `assert` and carries dead state; `offset` setter has an - unreachable `offsety` branch. -- `Generic/ScanningProbe.py:68` — misplaced parenthesis in the geometric-mean - normalization `exp((log l + log u / 2))` (root unaffected; intent defeated). -- `Nonuniform/PowerSpectrum.py:43-59` — `dsinc` branch threshold at 1e-6 sits - in the cancellation zone (~1e-3 relative error band); raise to ~1e-2. Integer - input inherits integer dtype → truncation. Line 209-210 dead code. -- `Uniform/PowerSpectrum.py:186` — radial-average `qmax` uses only the - x-Nyquist; result changes under transposition for anisotropic pixels. -- `Uniform/Derivative.py:517` — per-operator normalization assumes operator - index equals Cartesian direction (single y-operator divides by the x pixel - size). -- `Uniform/Integration.py:82-97` — docstring formula off by 2 vs the two-sided - sum; `try/except TypeError` dispatch can mask user errors. -- `Uniform/VariableBandwidth.py:199,267,320` — documented quantity `'s'` is - registered as `'g'` (`KeyError: 's'`); from_area error message says - from_profile. -- `Uniform/ScalarParameters.py:57-67` — dead NuMPI/MPI machinery behind an - unconditional `NotImplementedError`. -- `Support/Regression.py:85` — `make_grid('log')` treats `nb_points` as edge - count, linear/quadratic as point count; callers compensate (+1) — API trap. -- `Support/Deprecation.py:47` — warnings lack `stacklevel=2`, pointing at the - decorator instead of the caller. -- `Generic/Moments.py:33,81,92,120` — syntactically invalid doctest; docstring - formulas differ from the code by `(2π)^d` prefactors (code is right). -- `Nonuniform/` docstring drift: `Converters.py:59` (padding "zeros" is - actually edge-clamped), `Interpolation.py:43` ("linear" on the cubic - routine), `__init__.py:27` ("uniform"), `ScalarParameters.py:66,145` - (return descriptions wrong). -- cpp `stack.h` — rule-of-three violation (double free if copied); misnamed - (used exclusively as a FIFO); `get_size()` asserts a legitimately occurring - state. -- cpp `patchfinder.cpp:131-155` — `assign_segment_numbers`, `distance_map`, - `closest_patch_map`, `perimeter_length` are always periodic, with no - `periodic` flag, unlike `assign_patch_numbers` — silent contract gap. -- cpp misc — stale "column-major" comments on row-major loops; ACF ½ - convention undocumented; 3-way corner sort copy-pasted 5×; bearing-area - bindings lack `py::arg` names; `distance_map` fills a `next` map it never - returns. -- `cpp/bicubic.cpp:350-359` — scalar path ignores `derivative=1/2` and returns - a bare float where callers unpack a tuple *(verified)*. - ---- - -## 4. Cross-cutting themes and architectural recommendations - -**T1. The decorated-topography pattern has a systematic property-forwarding -hazard.** `transpose()` (1.1) and `downsample()` (1.2) both broke the same -way: a decorator overrides some geometry properties but inherits others that -are no longer consistent. Recommendation: give `DecoratedUniformTopography` a -single source of truth (derive `pixel_size`/`area_per_pt` from -`physical_sizes` and `nb_grid_pts` of *self*, not of the parent), and add a -generic invariant test run against every decorator class -(`pixel_size == physical_sizes / nb_grid_pts`, `positions().shape == -heights().shape`, etc.). - -**T2. Row-major files vs. the x-first array convention is re-decided in every -reader — and decided wrong in four of them.** DI, EZD, MI, PS scramble -non-square scans; DATX and LEXT are ambiguous; FRT, GWY, JPK are correct. The -per-reader copy-pasted `topography()` boilerplate (metadata-override checks, -masked-array wrap, reshape, scale) is what allows this. Recommendation: a -shared helper ("read row-major block → transpose → mask → scale") in -`IO/binary.py`, plus one non-square fixture per binary format (the square-only -fixtures are why none of this is caught). - -**T3. The nonuniform code path repeatedly assumes `x[0] == 0`.** `to_uniform` -(1.11), slope detrending, Hann windowing — all masked by IO readers that shift -the origin, all exposed by the public constructor. Recommendation: normalize -the origin in one place (or make analyses origin-invariant) and add tests with -offset x grids; `Nonuniform/Detrending.py:79-88` should also center x before -solving the normal equations (ill-conditioned for large offsets). - -**T4. Masked (undefined) data is a partially supported concept.** PSD/ACF -guard with `has_undefined_data`; detrending of line scans, variable bandwidth, -`Rq`/`Sq`, checkerboard detrend and several readers do not (2.2). -Recommendation: decide a contract per function (raise `UndefinedDataError` or -handle the mask), and enforce it with a shared parametrized test over the -registered-function table. - -**T5. The string-keyed registration system needs hardening.** -`register_function` writes into shared base-class dicts (functions leak across -classes), `deprecated=` is silently ignored, `__getattr__` dispatch swallows -internal `AttributeError`s and re-reports them as "no analysis function -registered" (masking real bugs like the broken base-class `info` property), -and nothing is visible to IDEs/type checkers or `dir()`. Recommendation: -per-class dicts via `__init_subclass__`, implement or remove `deprecated`, -re-raise internal `AttributeError`s with the original traceback, and consider -generating real methods with `setattr`. - -**T6. Tests validate "runs without error" more than correctness in exactly -the areas that broke.** Scale-dependent statistics, nonuniform detrending, -container IO (the only ZAG test is skipped with a hardcoded developer path), -`uniform2d_*` moments (tests assert the broken values), scan-line alignment -(tests encode the inverted axis). CLI has no tests. Recommendation: -property-based invariants (Parseval for PSD, `bearing_area(median()) == 0.5`, -transpose/flip invariance of scalar analyses, non-square and offset-origin -fixtures) would have caught most of the high-severity findings here. - -**T7. Analyses are implemented three times with drifting signatures.** -Uniform/Nonuniform/Container triplets of PSD, ACF, variable bandwidth, scalar -parameters; `bandwidth` exists in three `common.py` files; -`ciso_moment`/`c1d_moment` are copy-paste identical except one call. The -`Generic/` package shows the better pattern (one implementation registered on -both interfaces) but is applied inconsistently. Long-term: converge on -`Generic/`-style single implementations. - -**T8. Packaging risks.** `pyproject.toml:61` depends on the deprecated -misspelled alias package `tiffile` (and code imports `from tiffile import -TiffFile` in JPK/PS/LEXT) — switch to `tifffile`; `matplotlib>=1.0.0` is a -meaningless floor; `pytest-flake8` is unmaintained (with a `flake8<8` pin -papering over it); `meson.build:6` runs `run_command('python', ...)` which -fails on distros without a `python` alias; every `.py` must be hand-listed in -per-directory `meson.build` files with no completeness check (a forgotten -entry ships a silently broken wheel) — add a glob-based CI check. - ---- - -## 5. Suggested triage order - -1. **Wrong-results bugs users cannot detect** (§1.1–1.4, 1.7–1.12, 1.14, - 1.17): decorator geometry, non-square reshapes + MI units, triangle/flat - moments, bearing-area bounds, `to_uniform` origin, curvature stencil, - `fourier_synthesis` DC. -2. **Reader crashes and channel misdirection** (§1.5, 1.6, 2.3): cheap, - contained fixes; add fixtures while touching each format. -3. **Masked-data contract** (§2.2, T4) and the **registration system** (T5). -4. **Container IO** (§1.13, 2.4, 2.5): ZAG stream lifetime, caching layer to - kill the O(N²) reads, HTTP hardening. -5. **C++ hygiene** (§2.4 cpp items): const refs, int64 sizes/dtypes, GIL - release, contiguity — mostly mechanical. -6. Structural work per themes T1–T7, guarded by the new invariant tests. diff --git a/SurfaceTopography/ChangeLog.md b/SurfaceTopography/ChangeLog.md index ee50f53a..925c5a3f 100644 --- a/SurfaceTopography/ChangeLog.md +++ b/SurfaceTopography/ChangeLog.md @@ -34,7 +34,6 @@ v1.23.0 (not yet released) - ENH: Gaussian process regression reuses a single Cholesky factorization - ENH: Flood-fill stack in the patch finder is allocated once per call, not once per patch - TST: Added property-based invariant tests for transposition, translation, scaling and origin invariance -- DOC: Added `AUDIT.md` with the full audit report and the status of each finding - MAINT: Removed broken `pytest-flake8` from the test dependencies; renamed `tiffile` to `tifffile` v1.22.0 (08May26)