complex opcimage → measurementimport fullseye as fs; fs.ledger.cplx_cr_residual(f, spacing=1.0) (実装を直接呼ぶなら import mathops; mathops.cplx_cr_residual(f, spacing=1.0)、台帳から引くなら opsmath.get("cplx_cr_residual"))Cauchy-Riemann residual of a sampled complex field — “is this field holomorphic?” as a number.
With f = u + i v sampled on a uniform grid, holomorphy means
u_x = v_y and u_y = -v_x (Cauchy-Riemann). This returns the
relative residual max(|u_x - v_y|, |u_y + v_x|) / max|grad|
(central differences, numpy.gradient): 0 = the samples satisfy CR to
the discretisation limit, 2 = the field is the conjugate of a
holomorphic one (conj(z) gives exactly 2), values in between = partly
analytic or noisy.
Grid convention (it decides the sign of the answer): f[i, j] is the
field at z = x0 + j*spacing + i*spacing*1j — rows index the increasing
imaginary axis, columns the real axis. Image arrays usually run rows
downward; feeding one directly measures the conjugate field, whose
residual is 2, not 0. Flip rows (f[::-1]) to use image data.
Discretisation, honestly: central differences are exact for polynomials of
degree <= 2, so f = z**2 returns exactly 0; for higher order the
residual floors at O(h^2 * |f'''|) (measured: f = z**3 on a
[-1,1]^2 grid returns 1.7e-3 at h and 4.2e-4 at
h/2 — a factor 4.00, the expected second order). Read a
small value as “consistent with holomorphic at this resolution”, never as
proof.
A constant field returns 0.0 (it is holomorphic; the 0/0 of the
normalisation is resolved by that limit, and stated here rather than left
to numpy).
Raises ValueError: not a 2-D array, either dimension below 3 (no
central difference exists), non-finite/masked input, over-cap size,
non-finite or non-positive spacing.
HALCON: no operator (derivate_gauss supplies the real-valued
derivatives one would build this from).
mathops の全 op は入力を検証してから計算する(黙って通さない):
ValueError — float64 への強制変換は虚部を黙って捨てる(numpy は ComplexWarning だけ出して「もっともらしく間違った」実数を返す)。.real/.imag/abs() を明示するか、複素対応の complexops を使う。ValueError — マスクを剥がして下の生値を使う暗黙変換を拒否。埋める/落とすを明示する。ValueError(件数を明示して拒否 — 結果全体に伝播するため)。ValueError。reshape を明示する)。stat_histogram の bins は mathops.MAX_ELEMENTS(2^26 ≈ 6700 万要素)超で ValueError。py -3.11 examples/math_complex.pymeasurement を入力に取れる)—
complex)cplx_contour_circle · cplx_poly_eval · cplx_contour_integral · cplx_winding_number · cplx_cauchy_value · cplx_argument_principle · cplx_laurent_coeffs · cplx_joukowski
Provenance: mathops.py — MATH operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.