neighbour_index_gaps — MATH construct op

• Data kinds: pairs → signal

• Call: import fullseye as fs; fs.ledger.neighbour_index_gaps(points, k=6) (implementation को सीधे call करना हो तो import mathops; mathops.neighbour_index_gaps(points, k=6), registry से लेना हो तो opsmath.get("neighbour_index_gaps"))

उपयोग

किसी point के nearest neighbours *index में* कितनी दूर हैं — parastichy एक संख्या के रूप में।

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

In a phyllotactic pattern the visible spirals (parastichies) are not drawn by anything; they are an illusion of which florets happen to sit next to each other. This op replaces the illusion with a count: for every point, take its *k* nearest neighbours in space and record the difference of their ordering indices. The histogram of those differences is returned, index g holding how many neighbour pairs were g apart.

★Why this earns its place: with the golden angle the peaks land on Fibonacci numbers (8, 13, 21, 34, 55 ...), and with any other angle they do not. That is a statement about the arrangement which can be checked without looking at the picture — which is the whole point, because the spirals look convincing at every angle.

Parameters

points : (N, 2) array

Ordered points — the order is the data here, not a convenience.

k : int >= 1

Neighbours per point (6 is the natural choice: a well-packed planar

arrangement is locally hexagonal).

Returns a signal: counts[g] = number of neighbour pairs whose index difference is g (counts[0] is always 0 — a point is not its own neighbour).

Raises ValueError: not an (N, 2) array; fewer than k + 1 points; k below 1; non-finite coordinates.

Limits: the first points of a spiral sit near the centre where the packing is degenerate, so the histogram has a low-index tail that carries no parastichy information. Compare *peaks*, not the raw tail.

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 जुड़ता है (signal को input के रूप में लेते हैं)

mat_solve · mat_lstsq · stat_describe · stat_histogram · stat_zscore · interp_linear · interp_cubic · interp_scattered

इसी category के (construct)

circle_packing_apollonian · ford_circles · phyllotaxis_pattern · ifs_fractal · ifs_similarity_dimension · space_filling_curve · curve_locality


*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.