1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//! Prakash — Optics and light simulation for AGNOS
//!
//! Sanskrit: प्रकाश (prakash) — light, illumination, to make visible
//!
//! Provides ray optics, wave optics, spectral math, lens geometry,
//! physically-based rendering, and atmospheric optics. Built on
//! [hisab](https://crates.io/crates/hisab) for math foundations.
//!
//! # Modules
//!
//! - [`ray`] — Geometric optics: reflection, refraction, Snell's law, Fresnel, dispersion, sequential/recursive ray tracing, ray fans, spot diagrams, OPD
//! - [`wave`] — Wave optics: interference, diffraction, polarization (Jones/Stokes/Mueller), coherence, Fabry-Pérot, anti-reflection coatings, 2D patterns, PSF
//! - [`spectral`] — Wavelength ↔ RGB, blackbody radiation, CIE 1931, SPD, illuminants, CRI, color temperature
//! - [`lens`] — Lens/mirror geometry: thin/thick lens, aberrations (Seidel), MTF, DoF, Petzval, multi-element systems
//! - [`pbr`] — PBR shading: Cook-Torrance, GGX, sheen, clearcoat, SSS, iridescence, volumetric, importance sampling, environment maps
//! - [`atmosphere`] — Atmospheric optics: Rayleigh/Mie scattering, sky color, air mass, optical depth, sunset model
//! - [`error`] — Error types
//!
//! # Wavelength parameter convention
//!
//! - **`_nm`** suffix — wavelength in nanometers (spectral, CIE, visible-range functions)
//! - **`_m`** suffix — wavelength in meters (Planck, atmospheric scattering, coherence)
//! - **`_um`** suffix — wavelength in micrometers (dispersion: Sellmeier, Cauchy)
//! - **unsuffixed** — unit-agnostic; caller provides consistent units (wave optics, lens)
//!
//! Within wave-optics functions, **wavelength is always the first parameter**,
//! followed by geometry (aperture, slit width), then observation angle/position.
pub use PrakashError;