bokeh_shape — OPTICS lensrender op

• Data kinds: table → table

• Call: import fullseye as fs; fs.ledger.bokeh_shape(system, field_xy_mm=None, defocus_mm=0.5, pupil_samples=512, object_mm=None, wavelength_um=None, grid=64) -> 'dict' (implementation को सीधे call करना हो तो import lensrender; lensrender.bokeh_shape(system, field_xy_mm=None, defocus_mm=0.5, pupil_samples=512, object_mm=None, wavelength_um=None, grid=64) -> 'dict', registry से लेना हो तो opsoptics.get("bokeh_shape"))

उपयोग

बिंदु स्रोत का out-of-focus footprint — pupil images का प्रतिच्छेदन, यानी cat's eye -> dict।

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

The point sits at *field_xy_mm* in the object plane at *object_mm* (a height in mm; for an object at infinity a pair of angles in degrees;

default: (0, 8) degrees for an object at infinity, a height of 5 % of the object distance otherwise), the sensor is *defocus_mm* behind the system's image plane. A hexapolar pupil bundle of about *pupil_samples* rays is traced forward (raytrace.ray_bundle, which stops a ray at every semi-diameter); the rays that get through land on the shifted sensor and their convex hull is the footprint. The table has polygon_xy_mm (the hull, counter-clockwise, relative to its centroid, on the sensor axes), mask (a grid x grid boolean image of the footprint, extent_mm wide), area_mm2, the same for the on-axis point (axis_area_mm2), area_ratio (cat's eye / on-axis disc), vignetting_factor (the share of the pupil area that gets through relative to the axis, from the ray bundle), n_valid, centroid_xy_mm, symmetry_error_mm (how far the footprint is from its mirror image about the meridional plane, 0 in exact arithmetic) and the footprint points points_xy_mm. The geometric defocus disc of a point on axis has the diameter 2 |defocus| NA' (tested). The system must be axisymmetric (the field is traced along +y and rotated).

पूरी family का input contract (fail-closed)

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।

उपयोग की विस्तृत guide

• optics_imaging 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_photograph_through_prescription — py -3.11 examples/poc_photograph_through_prescription.py

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

abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd

इसी category के (lensrender)

lens_scene · exit_pupil_samples · trace_sensor_rays · scene_radiance · render_scene_through_lens · render_ghost_overlay · render_compare_prescriptions


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

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