ford_circles — MATH construct op

• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)

• Call: import fullseye as fs; fs.ledger.ford_circles(max_denominator=12, lo=0, hi=1) (implementation को सीधे call करना हो तो import mathops; mathops.ford_circles(max_denominator=12, lo=0, hi=1), registry से लेना हो तो opsmath.get("ford_circles"))

उपयोग

Farey fractions के लिए Ford circles — tangency *ही* एक integer identity है।

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

For a fraction p/q in lowest terms the Ford circle sits at (p/q, 1/(2q**2)) with radius 1/(2q**2). Two such circles are tangent if and only if |p*s - q*r| == 1 — the Farey-neighbour condition — and otherwise strictly disjoint. They never overlap.

★Why this earns its place: the picture's correctness is an identity between integers, not a tolerance. |p*s - q*r| is computed in exact integer arithmetic and compared with the *geometric* tangency |c_i - c_j| == r_i + r_j measured from the coordinates; the two must agree on every pair. The number of fractions is the Farey length 1 + sum(phi(q) for q in 1..n), another exact integer.

Returns a table: x, y, radius, p, q.

Raises ValueError: max_denominator < 1; lo >= hi; the interval or denominator would exceed the cap.

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 · phyllotaxis_pattern · neighbour_index_gaps · 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.