abel_inverse — MATH transform op

• Data kinds: signal → signal

• Call: import fullseye as fs; fs.ledger.abel_inverse(A, dr: 'float' = 1.0, *, method: 'str' = 'derivative', n_quad: 'int' = 64) -> 'np.ndarray' (implementation को सीधे call करना हो तो import mathtransforms; mathtransforms.abel_inverse(A, dr: 'float' = 1.0, *, method: 'str' = 'derivative', n_quad: 'int' = 64) -> 'np.ndarray', registry से लेना हो तो opsmath.get("abel_inverse"))

उपयोग

projection A(y) से axisymmetric distribution f(r) वापस निकालता है (inverse Abel transform = axisymmetric object की tomography)।

• "derivative" —— f(r) = −(1/π) ∫_r^R A'(y) / √(y² − r²) dy। y = √(r² + u²) रखने से singularity हट जाती है, और A को cubic spline से differentiate किया जाता है। smooth projections के लिए सटीक, पर differentiation noise को बढ़ाता है:

noise error, sample spacing dr के व्युत्क्रम अनुपात में बढ़ती है (2026-10-03 को मापा गया, 1% noise: 80 → 640 samples पर

mean error 0.027 → 0.237, log-log slope ≈ 1)। मोटे grids पर यही बेहतर है।

• "onion" —— onion peeling: f को radius dr के हर shell में स्थिर माना जाता है, और chord लंबाइयों के upper-triangular matrix को बाहर से अंदर की ओर हल किया जाता है। Resolution, shell की चौड़ाई से तय होता है; derivative नहीं लिया जाता, इसलिए noise धीरे बढ़ता है (उसी माप में: 0.036 → 0.100, slope ≈ 1/2)। बारीक grids पर मापों में यही जीतता है (n=640 पर derivative की error का 1/2.4); मोटे grids (n≈80) पर स्थिति उलट जाती है।

ये 2 स्वतंत्र discretizations हैं, इसलिए दोनों को एक ही projection पर लगाकर अंतर जाँचना cross-check का काम करता है।

Gate: A(y) = √π σ exp(−y²/σ²) से, f(r) = exp(−r²/σ²)।

पूरी 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 करते हैं)

• transforms_tour — py -3.11 examples/transforms_tour.py

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

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

इसी category के (transform)

abel_transform · abel_inverse_image · abel_revolve · hankel_transform · tf_poles_zeros · tf_freq_response · tf_impulse_response · tf_step_response


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

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