curve_locality — MATH construct op

• Data kinds: pairs → table

• Call: import fullseye as fs; fs.ledger.curve_locality(points, gaps=(1, 2, 4, 8, 16, 32)) (implementation को सीधे call करना हो तो import mathops; mathops.curve_locality(points, gaps=(1, 2, 4, 8, 16, 32)), registry से लेना हो तो opsmath.get("curve_locality"))

उपयोग

curve के साथ k दूरी वाले points — plane पर वे कितनी दूर हैं?

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

The reason a space-filling curve is used for storage layout, texture tiling or rendering order is locality: neighbours in the ordering should stay neighbours in space. This op measures that directly — for each gap k it returns the mean Euclidean distance between points i and i + k.

★Why this earns its place: the claim "Hilbert has better locality than scanning row by row" is usually asserted and never measured. Here it is a table you can read: a Hilbert curve grows roughly as sqrt(k) (measured 1.00 / 1.53 / 2.12 / 3.17 / 4.29 / 6.38 at k = 1 .. 32), while a boustrophedon scan grows nearly linearly (1.00 / 1.96 / 3.79 / 7.07 / 12.12 / 16.07) — an honest, reproducible gap rather than a slogan.

Parameters

points : (N, 2) array

The curve's points in visiting order.

gaps : ints

Index gaps to report. Gaps at or beyond N are dropped (not an error;

a short curve simply has nothing to say about a long gap).

Returns a table: gap (int), mean_distance, and ratio = mean_distance / mean_distance[gap == 1] so curves of different scales can be compared directly.

Raises ValueError: not an (N, 2) array; fewer than 2 points; non-finite coordinates; every requested gap out of range.

HALCON: no operator.

पूरी family का input contract (fail-closed)

mathops के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):

• complex input से ValueError — float64 में ज़बरदस्ती बदलने पर imaginary part चुपचाप छूट जाता है (numpy केवल ComplexWarning देता है और "सही दिखने वाला पर गलत" real number लौटाता है)। .real/.imag/abs() स्पष्ट रूप से लिखें, या complex data संभालने वाले complexops का उपयोग करें।

• masked array (masked elements वाला) से ValueError — mask हटाकर नीचे के raw values इस्तेमाल करने वाला implicit conversion अस्वीकार है। भरना है या हटाना है, यह स्पष्ट रूप से बताएँ।

• हर input पर NaN/Inf से ValueError (गिनती बताकर अस्वीकार — क्योंकि यह पूरे परिणाम में फैल जाता है)।

• Shape सख़्त है: 1-D और 2-D को implicit रूप से promote या broadcast नहीं किया जाता (vector slot में matrix या matrix slot में vector देने पर ValueError; reshape स्पष्ट रूप से करें)।

• Size की सीमा: matrix लेने वाले ops और stat_histogram के bins, mathops.MAX_ELEMENTS (2^26 ≈ 6.7 करोड़ elements) से अधिक होने पर ValueError देते हैं।

उपयोग की विस्तृत guide

• math_metrology family guide

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_theorems_as_pictures — py -3.11 examples/poc_theorems_as_pictures.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

dynsys_poincare_section · dwt_inverse · chebyshev_eval_nd

इसी category के (construct)

circle_packing_apollonian · ford_circles · phyllotaxis_pattern · neighbour_index_gaps · ifs_fractal · ifs_similarity_dimension · space_filling_curve


*Provenance: mathops.py — MATH operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.