watermedia op• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.ocean_spectrum(wind_speed_mps, fetch_m=None, kind='pierson_moskowitz', omega=None, gamma=3.3) -> 'dict' (implementation को सीधे call करना हो तो import watermedia; watermedia.ocean_spectrum(wind_speed_mps, fetch_m=None, kind='pierson_moskowitz', omega=None, gamma=3.3) -> 'dict', registry से लेना हो तो opsoptics.get("ocean_spectrum"))
• GPU: नहीं (केवल CPU reference implementation)
पवन-जनित समुद्र का एक-आयामी तरंग स्पेक्ट्रम S(ω), उसकी significant ऊँचाई और peak period के साथ -> dict।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
pierson_moskowitz (Pierson & Moskowitz 1964, a fully developed sea): S = alpha g^2 omega^-5 exp(-1.25 (omega_p / omega)^4) with alpha = 0.0081 and omega_p = (4 beta / 5)^(1/4) g / U = 0.877 g / U (U is the wind speed at 10 m). Its zeroth moment is m0 = alpha U^4 / (4 beta g^2) so Hs = 4 sqrt(m0) = 0.2092 U^2 / g (the rule of thumb is 0.21 U^2 / g); hs_closed_form_m is that value (None where there is no closed form) and hs_m the numerical integral of the returned spectrum. jonswap (Hasselmann et al. 1973) multiplies the same shape by the peak enhancement gamma ** exp(-(omega - omega_p)^2 / (2 sigma^2 omega_p^2)) (gamma = 3.3, sigma = 0.07 below the peak and 0.09 above). With fetch_m the fetch-limited alpha = 0.076 (U^2 / (F g))^0.22 and omega_p = 22 (g^2 / (U F))^(1/3) are used, without it the fully developed Pierson-Moskowitz alpha and omega_p: JONSWAP with gamma = 1 is then exactly Pierson-Moskowitz. omega is an optional increasing grid (rad/s); the default is 6000 points on a logarithmic grid from 0.15 to 25 times omega_p. The table has omega, S, hs_m, tp_s (2 pi / omega_p), omega_peak (the parameter), omega_peak_numeric (the maximum of S) and m0. A negative or zero wind or fetch is refused; fetch_m with the fully developed kind is refused too.
optics के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):
• Unit argument के नाम में ही लिखी होती है — _mm / _um / _deg / _mrad। mm और µm की गड़बड़ी crash नहीं करती, बल्कि "सही दिखने वाला पर गलत उत्तर" देती है, इसलिए नाम से इसे रोका जाता है। मान के आकार से unit का अनुमान बिल्कुल नहीं लगाया जाता।
• String से ValueError — float('50') सफल हो जाता है, इसलिए बिना parse किया config value length के रूप में निकल जाता (मापा गया: thin_lens('50', '200') सही दिखने वाला 66.667 mm लौटा रहा था)। bool को भी True == 1 वाले implicit promotion के रूप में अस्वीकार किया जाता है।
• complex / masked array से ValueError (केवल real-valued slots; imaginary part को चुपचाप छोड़ना या mask हटाना अस्वीकार)। हर input पर NaN/Inf से ValueError।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: focal length 0, radius of curvature 0, refractive index <= 0, पूरी तरह opaque aperture (सब 0, इसलिए normalisation 0/0), ऐसा PSF जिसका योग <= 0 हो, S0 = 0 वाला Stokes vector, और front focal point पर रखा object (image अनंत पर)।
• केवल 2 ops non-finite value लौटाते हैं, और वह भी contract के रूप में लिखा हुआ: depth_of_field hyperfocal distance से आगे far_mm = inf (hyperfocal distance की परिभाषा यही है) और gaussian_beam waist पर wavefront_radius_mm = inf (plane wavefront की radius of curvature)। दोनों साथ में एक finite साथी (far_is_infinite / curvature_per_mm) भी लौटाते हैं। इसके अलावा कोई भी चुपचाप आया NaN/Inf अंदर ही पकड़ा जाता है और ValueError देता है — "float64 overflow हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता।
• Size की सीमा: generate होने वाले grid के लिए optics.MAX_GRID (4096), दिए गए field/PSF/aperture के लिए optics.MAX_FIELD_ELEMENTS (2^24), ABCD element chain के लिए optics.MAX_SYSTEM_ELEMENTS (1024), Zernike के लिए MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25)। छोटे argument से बहुत बड़ा internal allocation होने वाले रास्तों (मापा गया: n_max=40 × 4096² पर 108 GB) को fail-closed ढंग से बंद किया गया है।
• भौतिक रूप से असंभव states भी अस्वीकार: degree of polarisation > 1 वाला Stokes vector, ऋणात्मक transmittance, ऋणात्मक intensity, और n-|m| odd जैसे अमान्य Zernike indices।
• 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 में दिए गए हैं।
• poc_water_transparent_media — py -3.11 examples/poc_water_transparent_media.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
watermedia)ocean_height_field · fresnel_water_air · snell_window · refracted_view · water_attenuation · underwater_image · phase_function_hg · scattering_phase_petzold
*Provenance: watermedia.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.