wave_two_slit — MATH wave op

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

• Call: import fullseye as fs; fs.ledger.wave_two_slit(wavelength_nm=550.0, slit_sep_um=20.0, distance_mm=200.0, shape=(256, 512), pixel_um=5.0, slit_width_um=2.0) (implementation को सीधे call करना हो तो import mathops; mathops.wave_two_slit(wavelength_nm=550.0, slit_sep_um=20.0, distance_mm=200.0, shape=(256, 512), pixel_um=5.0, slit_width_um=2.0), registry से लेना हो तो opsmath.get("wave_two_slit"))

उपयोग

screen पर two-slit interference — physics से बनाया गया, fringe formula से नहीं।

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

Each slit is treated as a line source of the given width; the screen intensity is |sum over slit of exp(i k R) / sqrt(R)|**2 with R the true distance from each source point. The textbook spacing lambda D / d is nowhere in this computation — which is the point: it is then available as an independent prediction to check the picture against.

★Why this earns its place: wave_fringe_period measures the period of the produced image, and it must land on lambda D / d (in pixels, lambda D / (d * pixel)). Two ways to the same number, only one of which was used to draw.

Returns an image2d normalised to a peak of 1.

Raises ValueError: non-positive wavelength, separation, distance, pixel or width; a grid over the cap; a geometry so coarse that fewer than three fringes fit on the screen (reported, not silently aliased).

Limits: scalar, monochromatic, far-from-paraxial geometries are not modelled; the slits are lines, so there is no vertical structure.

पूरी 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_beats_fringes_and_screens — py -3.11 examples/poc_beats_fringes_and_screens.py

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

wave_fringe_period · abel_inverse_image · abel_revolve · hankel_image · dct_transform · dwt_transform · chebyshev_coeffs_nd · geodesic_heat_grid

इसी category के (wave)

wave_membrane_mode · wave_mode_frequencies · wave_nodal_lines · wave_fringe_period · wave_grating_orders


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