@photivra/engine 0.5.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (753) hide show
  1. package/AGENTS.md +674 -0
  2. package/CHANGELOG.md +218 -0
  3. package/CITATION.cff +1 -1
  4. package/CONTRIBUTING.md +76 -0
  5. package/DCO +33 -0
  6. package/NODE_SUPPORT.md +37 -0
  7. package/NOTICE +2 -0
  8. package/README.md +157 -56
  9. package/SECURITY.md +55 -0
  10. package/THIRD_PARTY.md +63 -0
  11. package/dist/camera/equivalent-focal-length.d.ts +9 -0
  12. package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
  13. package/dist/camera/equivalent-focal-length.js +9 -0
  14. package/dist/camera/equivalent-focal-length.js.map +1 -1
  15. package/dist/camera/field-of-view.d.ts +13 -0
  16. package/dist/camera/field-of-view.d.ts.map +1 -1
  17. package/dist/camera/field-of-view.js +13 -0
  18. package/dist/camera/field-of-view.js.map +1 -1
  19. package/dist/camera/projected-object-size.d.ts +8 -0
  20. package/dist/camera/projected-object-size.d.ts.map +1 -1
  21. package/dist/camera/projected-object-size.js +8 -0
  22. package/dist/camera/projected-object-size.js.map +1 -1
  23. package/dist/capture/capture-export-metadata.d.ts +60 -0
  24. package/dist/capture/capture-export-metadata.d.ts.map +1 -0
  25. package/dist/capture/capture-export-metadata.js +62 -0
  26. package/dist/capture/capture-export-metadata.js.map +1 -0
  27. package/dist/capture/environment-raw-producer.d.ts +55 -0
  28. package/dist/capture/environment-raw-producer.d.ts.map +1 -0
  29. package/dist/capture/environment-raw-producer.js +88 -0
  30. package/dist/capture/environment-raw-producer.js.map +1 -0
  31. package/dist/capture/export-jpeg.d.ts +12 -0
  32. package/dist/capture/export-jpeg.d.ts.map +1 -0
  33. package/dist/capture/export-jpeg.js +126 -0
  34. package/dist/capture/export-jpeg.js.map +1 -0
  35. package/dist/capture/export-tiff.d.ts +45 -0
  36. package/dist/capture/export-tiff.d.ts.map +1 -0
  37. package/dist/capture/export-tiff.js +129 -0
  38. package/dist/capture/export-tiff.js.map +1 -0
  39. package/dist/capture/focus-control.d.ts +210 -0
  40. package/dist/capture/focus-control.d.ts.map +1 -0
  41. package/dist/capture/focus-control.js +664 -0
  42. package/dist/capture/focus-control.js.map +1 -0
  43. package/dist/capture/linear-encoding.d.ts +59 -0
  44. package/dist/capture/linear-encoding.d.ts.map +1 -0
  45. package/dist/capture/linear-encoding.js +98 -0
  46. package/dist/capture/linear-encoding.js.map +1 -0
  47. package/dist/capture/photographic-export.d.ts +135 -0
  48. package/dist/capture/photographic-export.d.ts.map +1 -0
  49. package/dist/capture/photographic-export.js +273 -0
  50. package/dist/capture/photographic-export.js.map +1 -0
  51. package/dist/capture/raw-frame-limits.d.ts +12 -0
  52. package/dist/capture/raw-frame-limits.d.ts.map +1 -0
  53. package/dist/capture/raw-frame-limits.js +13 -0
  54. package/dist/capture/raw-frame-limits.js.map +1 -0
  55. package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
  56. package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
  57. package/dist/capture/raw-frame-reconstruction.js +146 -0
  58. package/dist/capture/raw-frame-reconstruction.js.map +1 -0
  59. package/dist/capture/release-sequence.d.ts +120 -0
  60. package/dist/capture/release-sequence.d.ts.map +1 -0
  61. package/dist/capture/release-sequence.js +446 -0
  62. package/dist/capture/release-sequence.js.map +1 -0
  63. package/dist/capture/sensor-raw-frame.d.ts +34 -0
  64. package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
  65. package/dist/capture/sensor-raw-frame.js +106 -0
  66. package/dist/capture/sensor-raw-frame.js.map +1 -0
  67. package/dist/capture/sensor-raw-producer.d.ts +51 -0
  68. package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
  69. package/dist/capture/sensor-raw-producer.js +235 -0
  70. package/dist/capture/sensor-raw-producer.js.map +1 -0
  71. package/dist/capture/simulated-capture.d.ts +125 -0
  72. package/dist/capture/simulated-capture.d.ts.map +1 -0
  73. package/dist/capture/simulated-capture.js +248 -0
  74. package/dist/capture/simulated-capture.js.map +1 -0
  75. package/dist/color/capture-color.d.ts +73 -0
  76. package/dist/color/capture-color.d.ts.map +1 -0
  77. package/dist/color/capture-color.js +145 -0
  78. package/dist/color/capture-color.js.map +1 -0
  79. package/dist/color/sensor-color-development.d.ts +23 -0
  80. package/dist/color/sensor-color-development.d.ts.map +1 -0
  81. package/dist/color/sensor-color-development.js +56 -0
  82. package/dist/color/sensor-color-development.js.map +1 -0
  83. package/dist/color/white-balance.d.ts +175 -0
  84. package/dist/color/white-balance.d.ts.map +1 -0
  85. package/dist/color/white-balance.js +606 -0
  86. package/dist/color/white-balance.js.map +1 -0
  87. package/dist/composition/image-formation-plan.d.ts +481 -0
  88. package/dist/composition/image-formation-plan.d.ts.map +1 -0
  89. package/dist/composition/image-formation-plan.js +2499 -0
  90. package/dist/composition/image-formation-plan.js.map +1 -0
  91. package/dist/composition/plan-consumer.d.ts +53 -0
  92. package/dist/composition/plan-consumer.d.ts.map +1 -0
  93. package/dist/composition/plan-consumer.js +119 -0
  94. package/dist/composition/plan-consumer.js.map +1 -0
  95. package/dist/core/calculation-result.d.ts.map +1 -1
  96. package/dist/core/calculation-result.js +6 -0
  97. package/dist/core/calculation-result.js.map +1 -1
  98. package/dist/core/canonical-json.d.ts +18 -0
  99. package/dist/core/canonical-json.d.ts.map +1 -0
  100. package/dist/core/canonical-json.js +44 -0
  101. package/dist/core/canonical-json.js.map +1 -0
  102. package/dist/core/configuration-error.d.ts +6 -0
  103. package/dist/core/configuration-error.d.ts.map +1 -1
  104. package/dist/core/configuration-error.js +6 -0
  105. package/dist/core/configuration-error.js.map +1 -1
  106. package/dist/core/evidence-provenance.d.ts +6 -0
  107. package/dist/core/evidence-provenance.d.ts.map +1 -1
  108. package/dist/core/evidence-provenance.js +7 -0
  109. package/dist/core/evidence-provenance.js.map +1 -1
  110. package/dist/core/image-formation.d.ts +9 -3
  111. package/dist/core/image-formation.d.ts.map +1 -1
  112. package/dist/core/image-formation.js +29 -5
  113. package/dist/core/image-formation.js.map +1 -1
  114. package/dist/core/owned-data.d.ts +25 -0
  115. package/dist/core/owned-data.d.ts.map +1 -0
  116. package/dist/core/owned-data.js +34 -0
  117. package/dist/core/owned-data.js.map +1 -0
  118. package/dist/core/record-validation.d.ts +17 -0
  119. package/dist/core/record-validation.d.ts.map +1 -0
  120. package/dist/core/record-validation.js +44 -0
  121. package/dist/core/record-validation.js.map +1 -0
  122. package/dist/core/scientific-assurance.d.ts +101 -0
  123. package/dist/core/scientific-assurance.d.ts.map +1 -0
  124. package/dist/core/scientific-assurance.js +301 -0
  125. package/dist/core/scientific-assurance.js.map +1 -0
  126. package/dist/core/spectral-composition.d.ts +106 -0
  127. package/dist/core/spectral-composition.d.ts.map +1 -0
  128. package/dist/core/spectral-composition.js +334 -0
  129. package/dist/core/spectral-composition.js.map +1 -0
  130. package/dist/core/spectral.d.ts +34 -0
  131. package/dist/core/spectral.d.ts.map +1 -0
  132. package/dist/core/spectral.js +57 -0
  133. package/dist/core/spectral.js.map +1 -0
  134. package/dist/core/validation.d.ts +6 -0
  135. package/dist/core/validation.d.ts.map +1 -1
  136. package/dist/core/validation.js +6 -0
  137. package/dist/core/validation.js.map +1 -1
  138. package/dist/core/version.d.ts +14 -0
  139. package/dist/core/version.d.ts.map +1 -0
  140. package/dist/core/version.js +15 -0
  141. package/dist/core/version.js.map +1 -0
  142. package/dist/equipment/exposure-capabilities.d.ts +125 -0
  143. package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
  144. package/dist/equipment/exposure-capabilities.js +391 -0
  145. package/dist/equipment/exposure-capabilities.js.map +1 -0
  146. package/dist/equipment/generic-tier-assets.d.ts +82 -0
  147. package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
  148. package/dist/equipment/generic-tier-assets.js +119 -0
  149. package/dist/equipment/generic-tier-assets.js.map +1 -0
  150. package/dist/equipment/generic-tier-presets.d.ts +57 -0
  151. package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
  152. package/dist/equipment/generic-tier-presets.js +122 -0
  153. package/dist/equipment/generic-tier-presets.js.map +1 -0
  154. package/dist/equipment/iso-capabilities.d.ts +143 -0
  155. package/dist/equipment/iso-capabilities.d.ts.map +1 -0
  156. package/dist/equipment/iso-capabilities.js +578 -0
  157. package/dist/equipment/iso-capabilities.js.map +1 -0
  158. package/dist/equipment/metering-capabilities.d.ts +58 -0
  159. package/dist/equipment/metering-capabilities.d.ts.map +1 -0
  160. package/dist/equipment/metering-capabilities.js +151 -0
  161. package/dist/equipment/metering-capabilities.js.map +1 -0
  162. package/dist/equipment/release-capabilities.d.ts +33 -0
  163. package/dist/equipment/release-capabilities.d.ts.map +1 -0
  164. package/dist/equipment/release-capabilities.js +176 -0
  165. package/dist/equipment/release-capabilities.js.map +1 -0
  166. package/dist/exposure/exposure-duration-control.d.ts +72 -0
  167. package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
  168. package/dist/exposure/exposure-duration-control.js +161 -0
  169. package/dist/exposure/exposure-duration-control.js.map +1 -0
  170. package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
  171. package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
  172. package/dist/exposure/exposure-mode-resolver.js +1905 -0
  173. package/dist/exposure/exposure-mode-resolver.js.map +1 -0
  174. package/dist/exposure/exposure.d.ts +8 -0
  175. package/dist/exposure/exposure.d.ts.map +1 -1
  176. package/dist/exposure/exposure.js +8 -0
  177. package/dist/exposure/exposure.js.map +1 -1
  178. package/dist/exposure/flash.d.ts +179 -0
  179. package/dist/exposure/flash.d.ts.map +1 -0
  180. package/dist/exposure/flash.js +644 -0
  181. package/dist/exposure/flash.js.map +1 -0
  182. package/dist/exposure/metering-scene-radiance.d.ts +72 -0
  183. package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
  184. package/dist/exposure/metering-scene-radiance.js +222 -0
  185. package/dist/exposure/metering-scene-radiance.js.map +1 -0
  186. package/dist/exposure/metering-target.d.ts +67 -0
  187. package/dist/exposure/metering-target.d.ts.map +1 -0
  188. package/dist/exposure/metering-target.js +265 -0
  189. package/dist/exposure/metering-target.js.map +1 -0
  190. package/dist/exposure/metering-temporal.d.ts +76 -0
  191. package/dist/exposure/metering-temporal.d.ts.map +1 -0
  192. package/dist/exposure/metering-temporal.js +210 -0
  193. package/dist/exposure/metering-temporal.js.map +1 -0
  194. package/dist/exposure/metering.d.ts +124 -0
  195. package/dist/exposure/metering.d.ts.map +1 -0
  196. package/dist/exposure/metering.js +422 -0
  197. package/dist/exposure/metering.js.map +1 -0
  198. package/dist/exposure/program-line.d.ts +29 -0
  199. package/dist/exposure/program-line.d.ts.map +1 -0
  200. package/dist/exposure/program-line.js +126 -0
  201. package/dist/exposure/program-line.js.map +1 -0
  202. package/dist/index.d.ts +101 -7
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +99 -7
  205. package/dist/index.js.map +1 -1
  206. package/dist/motion/camera-rotation.d.ts +76 -0
  207. package/dist/motion/camera-rotation.d.ts.map +1 -1
  208. package/dist/motion/camera-rotation.js +111 -0
  209. package/dist/motion/camera-rotation.js.map +1 -1
  210. package/dist/motion/capture-rotation-inverse-mapping.d.ts +113 -0
  211. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -0
  212. package/dist/motion/capture-rotation-inverse-mapping.js +184 -0
  213. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -0
  214. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +104 -0
  215. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -0
  216. package/dist/motion/capture-rotation-temporal-quadrature.js +131 -0
  217. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -0
  218. package/dist/motion/capture-rotation-trajectory.d.ts +113 -0
  219. package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -0
  220. package/dist/motion/capture-rotation-trajectory.js +168 -0
  221. package/dist/motion/capture-rotation-trajectory.js.map +1 -0
  222. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
  223. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
  224. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
  225. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
  226. package/dist/motion/extended-object-projection.d.ts +175 -0
  227. package/dist/motion/extended-object-projection.d.ts.map +1 -0
  228. package/dist/motion/extended-object-projection.js +402 -0
  229. package/dist/motion/extended-object-projection.js.map +1 -0
  230. package/dist/motion/projected-motion.d.ts +11 -0
  231. package/dist/motion/projected-motion.d.ts.map +1 -1
  232. package/dist/motion/projected-motion.js +11 -0
  233. package/dist/motion/projected-motion.js.map +1 -1
  234. package/dist/optics/aperture.d.ts +9 -0
  235. package/dist/optics/aperture.d.ts.map +1 -1
  236. package/dist/optics/aperture.js +9 -0
  237. package/dist/optics/aperture.js.map +1 -1
  238. package/dist/optics/circle-of-confusion.d.ts +8 -0
  239. package/dist/optics/circle-of-confusion.d.ts.map +1 -1
  240. package/dist/optics/circle-of-confusion.js +8 -0
  241. package/dist/optics/circle-of-confusion.js.map +1 -1
  242. package/dist/optics/complex-pupil-psf.d.ts +128 -0
  243. package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
  244. package/dist/optics/complex-pupil-psf.js +462 -0
  245. package/dist/optics/complex-pupil-psf.js.map +1 -0
  246. package/dist/optics/depth-of-field.d.ts +18 -0
  247. package/dist/optics/depth-of-field.d.ts.map +1 -1
  248. package/dist/optics/depth-of-field.js +29 -4
  249. package/dist/optics/depth-of-field.js.map +1 -1
  250. package/dist/optics/diffraction.d.ts +8 -0
  251. package/dist/optics/diffraction.d.ts.map +1 -1
  252. package/dist/optics/diffraction.js +8 -0
  253. package/dist/optics/diffraction.js.map +1 -1
  254. package/dist/optics/focus-breathing.d.ts +13 -0
  255. package/dist/optics/focus-breathing.d.ts.map +1 -1
  256. package/dist/optics/focus-breathing.js +13 -0
  257. package/dist/optics/focus-breathing.js.map +1 -1
  258. package/dist/optics/focus-state.d.ts +47 -0
  259. package/dist/optics/focus-state.d.ts.map +1 -0
  260. package/dist/optics/focus-state.js +78 -0
  261. package/dist/optics/focus-state.js.map +1 -0
  262. package/dist/optics/front-of-lens-filter.d.ts +114 -0
  263. package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
  264. package/dist/optics/front-of-lens-filter.js +468 -0
  265. package/dist/optics/front-of-lens-filter.js.map +1 -0
  266. package/dist/optics/illumination-vignetting.d.ts +9 -0
  267. package/dist/optics/illumination-vignetting.d.ts.map +1 -1
  268. package/dist/optics/illumination-vignetting.js +9 -0
  269. package/dist/optics/illumination-vignetting.js.map +1 -1
  270. package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
  271. package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
  272. package/dist/optics/lateral-chromatic-aberration.js +23 -4
  273. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  274. package/dist/optics/lens-psf-profile.d.ts +217 -0
  275. package/dist/optics/lens-psf-profile.d.ts.map +1 -0
  276. package/dist/optics/lens-psf-profile.js +823 -0
  277. package/dist/optics/lens-psf-profile.js.map +1 -0
  278. package/dist/optics/polygon-diffraction.d.ts +67 -0
  279. package/dist/optics/polygon-diffraction.d.ts.map +1 -0
  280. package/dist/optics/polygon-diffraction.js +145 -0
  281. package/dist/optics/polygon-diffraction.js.map +1 -0
  282. package/dist/optics/profile-contract.d.ts +42 -0
  283. package/dist/optics/profile-contract.d.ts.map +1 -0
  284. package/dist/optics/profile-contract.js +92 -0
  285. package/dist/optics/profile-contract.js.map +1 -0
  286. package/dist/optics/psf-foundation.d.ts +16 -3
  287. package/dist/optics/psf-foundation.d.ts.map +1 -1
  288. package/dist/optics/psf-foundation.js +28 -15
  289. package/dist/optics/psf-foundation.js.map +1 -1
  290. package/dist/optics/radial-distortion.d.ts +22 -2
  291. package/dist/optics/radial-distortion.d.ts.map +1 -1
  292. package/dist/optics/radial-distortion.js +101 -23
  293. package/dist/optics/radial-distortion.js.map +1 -1
  294. package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
  295. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
  296. package/dist/optics/scene-to-sensor-irradiance.js +662 -0
  297. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
  298. package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
  299. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
  300. package/dist/optics/scene-to-sensor-quadrature.js +82 -0
  301. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
  302. package/dist/optics/sensor-environment-query.d.ts +60 -0
  303. package/dist/optics/sensor-environment-query.d.ts.map +1 -0
  304. package/dist/optics/sensor-environment-query.js +50 -0
  305. package/dist/optics/sensor-environment-query.js.map +1 -0
  306. package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
  307. package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
  308. package/dist/optics/sensor-psf-quadrature.js +101 -0
  309. package/dist/optics/sensor-psf-quadrature.js.map +1 -0
  310. package/dist/optics/sensor-psf-support.d.ts +20 -0
  311. package/dist/optics/sensor-psf-support.d.ts.map +1 -0
  312. package/dist/optics/sensor-psf-support.js +13 -0
  313. package/dist/optics/sensor-psf-support.js.map +1 -0
  314. package/dist/optics/stray-light.d.ts +91 -0
  315. package/dist/optics/stray-light.d.ts.map +1 -0
  316. package/dist/optics/stray-light.js +110 -0
  317. package/dist/optics/stray-light.js.map +1 -0
  318. package/dist/optics/thin-lens.d.ts +8 -0
  319. package/dist/optics/thin-lens.d.ts.map +1 -1
  320. package/dist/optics/thin-lens.js +8 -0
  321. package/dist/optics/thin-lens.js.map +1 -1
  322. package/dist/output/capture-corrected-sdr.d.ts +49 -0
  323. package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
  324. package/dist/output/capture-corrected-sdr.js +149 -0
  325. package/dist/output/capture-corrected-sdr.js.map +1 -0
  326. package/dist/output/capture-geometry.d.ts.map +1 -1
  327. package/dist/output/capture-geometry.js +32 -11
  328. package/dist/output/capture-geometry.js.map +1 -1
  329. package/dist/output/capture-sdr.d.ts +49 -0
  330. package/dist/output/capture-sdr.d.ts.map +1 -0
  331. package/dist/output/capture-sdr.js +90 -0
  332. package/dist/output/capture-sdr.js.map +1 -0
  333. package/dist/output/crop.d.ts +6 -0
  334. package/dist/output/crop.d.ts.map +1 -1
  335. package/dist/output/crop.js +6 -0
  336. package/dist/output/crop.js.map +1 -1
  337. package/dist/output/geometric-transforms.d.ts +137 -0
  338. package/dist/output/geometric-transforms.d.ts.map +1 -0
  339. package/dist/output/geometric-transforms.js +225 -0
  340. package/dist/output/geometric-transforms.js.map +1 -0
  341. package/dist/output/lens-corrections.d.ts +121 -0
  342. package/dist/output/lens-corrections.d.ts.map +1 -0
  343. package/dist/output/lens-corrections.js +210 -0
  344. package/dist/output/lens-corrections.js.map +1 -0
  345. package/dist/output/sdr-rendering.d.ts +81 -0
  346. package/dist/output/sdr-rendering.d.ts.map +1 -0
  347. package/dist/output/sdr-rendering.js +106 -0
  348. package/dist/output/sdr-rendering.js.map +1 -0
  349. package/dist/output/subject-framing-crop.d.ts +8 -0
  350. package/dist/output/subject-framing-crop.d.ts.map +1 -1
  351. package/dist/output/subject-framing-crop.js +8 -0
  352. package/dist/output/subject-framing-crop.js.map +1 -1
  353. package/dist/schema/camera.d.ts +6 -0
  354. package/dist/schema/camera.d.ts.map +1 -1
  355. package/dist/schema/illumination-spectral.d.ts +51 -0
  356. package/dist/schema/illumination-spectral.d.ts.map +1 -0
  357. package/dist/schema/illumination-spectral.js +132 -0
  358. package/dist/schema/illumination-spectral.js.map +1 -0
  359. package/dist/schema/illumination-temporal.d.ts +156 -0
  360. package/dist/schema/illumination-temporal.d.ts.map +1 -0
  361. package/dist/schema/illumination-temporal.js +554 -0
  362. package/dist/schema/illumination-temporal.js.map +1 -0
  363. package/dist/schema/illumination.d.ts +138 -0
  364. package/dist/schema/illumination.d.ts.map +1 -0
  365. package/dist/schema/illumination.js +483 -0
  366. package/dist/schema/illumination.js.map +1 -0
  367. package/dist/schema/scene-radiance-temporal.d.ts +107 -0
  368. package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
  369. package/dist/schema/scene-radiance-temporal.js +259 -0
  370. package/dist/schema/scene-radiance-temporal.js.map +1 -0
  371. package/dist/schema/scene-radiance.d.ts +185 -0
  372. package/dist/schema/scene-radiance.d.ts.map +1 -0
  373. package/dist/schema/scene-radiance.js +535 -0
  374. package/dist/schema/scene-radiance.js.map +1 -0
  375. package/dist/schema/scene.d.ts +7 -0
  376. package/dist/schema/scene.d.ts.map +1 -1
  377. package/dist/schema/validation.d.ts.map +1 -1
  378. package/dist/schema/validation.js +7 -0
  379. package/dist/schema/validation.js.map +1 -1
  380. package/dist/sensor/accumulated-charge.d.ts +199 -0
  381. package/dist/sensor/accumulated-charge.d.ts.map +1 -0
  382. package/dist/sensor/accumulated-charge.js +450 -0
  383. package/dist/sensor/accumulated-charge.js.map +1 -0
  384. package/dist/sensor/architecture.d.ts +48 -13
  385. package/dist/sensor/architecture.d.ts.map +1 -1
  386. package/dist/sensor/architecture.js +58 -16
  387. package/dist/sensor/architecture.js.map +1 -1
  388. package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
  389. package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
  390. package/dist/sensor/camera-saturation-capacity.js +356 -0
  391. package/dist/sensor/camera-saturation-capacity.js.map +1 -0
  392. package/dist/sensor/capture-color-sampling-binding.d.ts +212 -0
  393. package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -0
  394. package/dist/sensor/capture-color-sampling-binding.js +437 -0
  395. package/dist/sensor/capture-color-sampling-binding.js.map +1 -0
  396. package/dist/sensor/capture-mode-timing.d.ts +63 -0
  397. package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
  398. package/dist/sensor/capture-mode-timing.js +270 -0
  399. package/dist/sensor/capture-mode-timing.js.map +1 -0
  400. package/dist/sensor/capture-mode.d.ts +157 -0
  401. package/dist/sensor/capture-mode.d.ts.map +1 -0
  402. package/dist/sensor/capture-mode.js +447 -0
  403. package/dist/sensor/capture-mode.js.map +1 -0
  404. package/dist/sensor/color-sampling.d.ts +133 -0
  405. package/dist/sensor/color-sampling.d.ts.map +1 -0
  406. package/dist/sensor/color-sampling.js +245 -0
  407. package/dist/sensor/color-sampling.js.map +1 -0
  408. package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
  409. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
  410. package/dist/sensor/constant-rate-temporal-integration.js +382 -0
  411. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
  412. package/dist/sensor/dark-current.d.ts +169 -0
  413. package/dist/sensor/dark-current.d.ts.map +1 -0
  414. package/dist/sensor/dark-current.js +427 -0
  415. package/dist/sensor/dark-current.js.map +1 -0
  416. package/dist/sensor/environment-photo-signal.d.ts +123 -0
  417. package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
  418. package/dist/sensor/environment-photo-signal.js +186 -0
  419. package/dist/sensor/environment-photo-signal.js.map +1 -0
  420. package/dist/sensor/eqe-electron-rate.d.ts +107 -0
  421. package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
  422. package/dist/sensor/eqe-electron-rate.js +561 -0
  423. package/dist/sensor/eqe-electron-rate.js.map +1 -0
  424. package/dist/sensor/eqe-local-exposure.d.ts +65 -0
  425. package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
  426. package/dist/sensor/eqe-local-exposure.js +84 -0
  427. package/dist/sensor/eqe-local-exposure.js.map +1 -0
  428. package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
  429. package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
  430. package/dist/sensor/eqe-temporal-exposure.js +62 -0
  431. package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
  432. package/dist/sensor/exposure-window.d.ts +117 -0
  433. package/dist/sensor/exposure-window.d.ts.map +1 -0
  434. package/dist/sensor/exposure-window.js +305 -0
  435. package/dist/sensor/exposure-window.js.map +1 -0
  436. package/dist/sensor/iso-signal-chain.d.ts +148 -0
  437. package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
  438. package/dist/sensor/iso-signal-chain.js +411 -0
  439. package/dist/sensor/iso-signal-chain.js.map +1 -0
  440. package/dist/sensor/local-exposure-binding.d.ts +87 -0
  441. package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
  442. package/dist/sensor/local-exposure-binding.js +214 -0
  443. package/dist/sensor/local-exposure-binding.js.map +1 -0
  444. package/dist/sensor/optical-stack.d.ts +132 -0
  445. package/dist/sensor/optical-stack.d.ts.map +1 -0
  446. package/dist/sensor/optical-stack.js +303 -0
  447. package/dist/sensor/optical-stack.js.map +1 -0
  448. package/dist/sensor/photon-energy.d.ts +97 -0
  449. package/dist/sensor/photon-energy.d.ts.map +1 -0
  450. package/dist/sensor/photon-energy.js +390 -0
  451. package/dist/sensor/photon-energy.js.map +1 -0
  452. package/dist/sensor/physical-charge-capacity.d.ts +130 -0
  453. package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
  454. package/dist/sensor/physical-charge-capacity.js +345 -0
  455. package/dist/sensor/physical-charge-capacity.js.map +1 -0
  456. package/dist/sensor/pixel-pitch.d.ts +6 -0
  457. package/dist/sensor/pixel-pitch.d.ts.map +1 -1
  458. package/dist/sensor/pixel-pitch.js +6 -0
  459. package/dist/sensor/pixel-pitch.js.map +1 -1
  460. package/dist/sensor/radiometry-readiness.d.ts +10 -0
  461. package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
  462. package/dist/sensor/radiometry-readiness.js +10 -0
  463. package/dist/sensor/radiometry-readiness.js.map +1 -1
  464. package/dist/sensor/raw-readout.d.ts +314 -0
  465. package/dist/sensor/raw-readout.d.ts.map +1 -0
  466. package/dist/sensor/raw-readout.js +914 -0
  467. package/dist/sensor/raw-readout.js.map +1 -0
  468. package/dist/sensor/raw-reconstruction.d.ts +170 -0
  469. package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
  470. package/dist/sensor/raw-reconstruction.js +424 -0
  471. package/dist/sensor/raw-reconstruction.js.map +1 -0
  472. package/dist/sensor/readout-exposure-linkage.d.ts +123 -0
  473. package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -0
  474. package/dist/sensor/readout-exposure-linkage.js +222 -0
  475. package/dist/sensor/readout-exposure-linkage.js.map +1 -0
  476. package/dist/sensor/readout-timing.d.ts +137 -0
  477. package/dist/sensor/readout-timing.d.ts.map +1 -0
  478. package/dist/sensor/readout-timing.js +243 -0
  479. package/dist/sensor/readout-timing.js.map +1 -0
  480. package/dist/sensor/response-application-compatibility.d.ts +136 -0
  481. package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
  482. package/dist/sensor/response-application-compatibility.js +408 -0
  483. package/dist/sensor/response-application-compatibility.js.map +1 -0
  484. package/dist/sensor/response-operating-range.d.ts +173 -0
  485. package/dist/sensor/response-operating-range.d.ts.map +1 -0
  486. package/dist/sensor/response-operating-range.js +672 -0
  487. package/dist/sensor/response-operating-range.js.map +1 -0
  488. package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
  489. package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
  490. package/dist/sensor/responsivity-photocurrent.js +644 -0
  491. package/dist/sensor/responsivity-photocurrent.js.map +1 -0
  492. package/dist/sensor/sampling-aperture.d.ts +154 -0
  493. package/dist/sensor/sampling-aperture.d.ts.map +1 -0
  494. package/dist/sensor/sampling-aperture.js +388 -0
  495. package/dist/sensor/sampling-aperture.js.map +1 -0
  496. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
  497. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
  498. package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
  499. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
  500. package/dist/sensor/sensor-geometry.d.ts +12 -0
  501. package/dist/sensor/sensor-geometry.d.ts.map +1 -1
  502. package/dist/sensor/sensor-geometry.js +12 -0
  503. package/dist/sensor/sensor-geometry.js.map +1 -1
  504. package/dist/sensor/signal-noise.d.ts +10 -0
  505. package/dist/sensor/signal-noise.d.ts.map +1 -1
  506. package/dist/sensor/signal-noise.js +10 -0
  507. package/dist/sensor/signal-noise.js.map +1 -1
  508. package/dist/sensor/spatial-sample-reduction.d.ts +171 -0
  509. package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -0
  510. package/dist/sensor/spatial-sample-reduction.js +345 -0
  511. package/dist/sensor/spatial-sample-reduction.js.map +1 -0
  512. package/dist/sensor/spatial-sampling-quadrature.d.ts +179 -0
  513. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -0
  514. package/dist/sensor/spatial-sampling-quadrature.js +224 -0
  515. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -0
  516. package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
  517. package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
  518. package/dist/sensor/spatio-spectral-reduction.js +373 -0
  519. package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
  520. package/dist/sensor/spectral-coverage.d.ts +24 -0
  521. package/dist/sensor/spectral-coverage.d.ts.map +1 -0
  522. package/dist/sensor/spectral-coverage.js +86 -0
  523. package/dist/sensor/spectral-coverage.js.map +1 -0
  524. package/dist/sensor/spectral-quadrature.d.ts +169 -0
  525. package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
  526. package/dist/sensor/spectral-quadrature.js +542 -0
  527. package/dist/sensor/spectral-quadrature.js.map +1 -0
  528. package/dist/sensor/spectral-response.d.ts +192 -0
  529. package/dist/sensor/spectral-response.d.ts.map +1 -0
  530. package/dist/sensor/spectral-response.js +664 -0
  531. package/dist/sensor/spectral-response.js.map +1 -0
  532. package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
  533. package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
  534. package/dist/sensor/temporal-eqe-sum.js +30 -0
  535. package/dist/sensor/temporal-eqe-sum.js.map +1 -0
  536. package/dist/sensor/temporal-photo-signal.d.ts +38 -0
  537. package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
  538. package/dist/sensor/temporal-photo-signal.js +110 -0
  539. package/dist/sensor/temporal-photo-signal.js.map +1 -0
  540. package/dist/sensor/temporal-sample-binding.d.ts +6 -0
  541. package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
  542. package/dist/sensor/temporal-sample-binding.js +32 -0
  543. package/dist/sensor/temporal-sample-binding.js.map +1 -0
  544. package/dist/simulation/poc-simulation.d.ts.map +1 -1
  545. package/dist/simulation/poc-simulation.js +34 -11
  546. package/dist/simulation/poc-simulation.js.map +1 -1
  547. package/dist/stabilization/camera-shake.d.ts +11 -0
  548. package/dist/stabilization/camera-shake.d.ts.map +1 -1
  549. package/dist/stabilization/camera-shake.js +11 -0
  550. package/dist/stabilization/camera-shake.js.map +1 -1
  551. package/dist/stabilization/system.d.ts +218 -0
  552. package/dist/stabilization/system.d.ts.map +1 -0
  553. package/dist/stabilization/system.js +695 -0
  554. package/dist/stabilization/system.js.map +1 -0
  555. package/docs/API_REFERENCE.md +2017 -0
  556. package/docs/API_STYLE.md +132 -0
  557. package/docs/ARCHITECTURE.md +150 -23
  558. package/docs/AUTOMATION_COORDINATION.md +190 -0
  559. package/docs/CAPTURE_COLOR.md +25 -0
  560. package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
  561. package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
  562. package/docs/CAPTURE_SDR.md +20 -0
  563. package/docs/DEVELOPERS.md +60 -0
  564. package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
  565. package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
  566. package/docs/EXPORT_ACCEPTANCE.md +133 -0
  567. package/docs/GENERIC_TIER_PRESETS.md +269 -0
  568. package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
  569. package/docs/IMAGE_FORMATION.md +105 -9
  570. package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
  571. package/docs/MOTION_AND_SIGNAL.md +145 -1
  572. package/docs/NUMERICAL_CORRECTNESS.md +191 -0
  573. package/docs/PERFORMANCE_BASELINE.md +56 -0
  574. package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
  575. package/docs/PHYSICS_FOUNDATION.md +152 -5
  576. package/docs/POC_API.md +2 -0
  577. package/docs/POC_PROJECTION_REUSE.md +124 -0
  578. package/docs/PROCESSED_OUTPUT.md +157 -0
  579. package/docs/PRODUCTION_COMPOSITION.md +373 -0
  580. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
  581. package/docs/PROVENANCE.md +4 -0
  582. package/docs/PSF_FOUNDATION.md +110 -88
  583. package/docs/RAW_FRAME_ENVELOPE.md +56 -0
  584. package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
  585. package/docs/RELEASE_1_0.md +65 -0
  586. package/docs/RELEASE_AUDIT.md +38 -0
  587. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
  588. package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
  589. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
  590. package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
  591. package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
  592. package/docs/SDR_RENDERING.md +33 -0
  593. package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
  594. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
  595. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
  596. package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
  597. package/docs/SENSOR_RAW_FRAME.md +20 -0
  598. package/docs/SENSOR_RAW_PRODUCER.md +77 -0
  599. package/docs/SIGNAL_CONFORMANCE.md +23 -0
  600. package/docs/SIMULATED_CAPTURE.md +65 -0
  601. package/docs/STABILIZATION.md +160 -17
  602. package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
  603. package/docs/TIER_ACCEPTANCE.md +129 -0
  604. package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
  605. package/docs/USAGE.md +5604 -331
  606. package/docs/V1_COMPOSITION_MAP.md +123 -0
  607. package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
  608. package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
  609. package/docs/api/camera-equivalent-focal-length.md +53 -0
  610. package/docs/api/camera-field-of-view.md +119 -0
  611. package/docs/api/camera-projected-object-size.md +54 -0
  612. package/docs/api/capture-capture-export-metadata.md +107 -0
  613. package/docs/api/capture-environment-raw-producer.md +56 -0
  614. package/docs/api/capture-focus-control.md +419 -0
  615. package/docs/api/capture-linear-encoding.md +99 -0
  616. package/docs/api/capture-photographic-export.md +172 -0
  617. package/docs/api/capture-raw-frame-reconstruction.md +87 -0
  618. package/docs/api/capture-release-sequence.md +252 -0
  619. package/docs/api/capture-sensor-raw-frame.md +66 -0
  620. package/docs/api/capture-sensor-raw-producer.md +98 -0
  621. package/docs/api/capture-simulated-capture.md +179 -0
  622. package/docs/api/color-capture-color.md +122 -0
  623. package/docs/api/color-white-balance.md +386 -0
  624. package/docs/api/composition-image-formation-plan.md +825 -0
  625. package/docs/api/composition-plan-consumer.md +98 -0
  626. package/docs/api/core-calculation-result.md +220 -0
  627. package/docs/api/core-configuration-error.md +19 -0
  628. package/docs/api/core-image-formation.md +204 -0
  629. package/docs/api/core-scientific-assurance.md +214 -0
  630. package/docs/api/core-spectral-composition.md +268 -0
  631. package/docs/api/core-spectral.md +78 -0
  632. package/docs/api/core-validation.md +34 -0
  633. package/docs/api/core-version.md +14 -0
  634. package/docs/api/equipment-exposure-capabilities.md +270 -0
  635. package/docs/api/equipment-generic-tier-assets.md +82 -0
  636. package/docs/api/equipment-generic-tier-presets.md +103 -0
  637. package/docs/api/equipment-iso-capabilities.md +295 -0
  638. package/docs/api/equipment-metering-capabilities.md +126 -0
  639. package/docs/api/equipment-release-capabilities.md +91 -0
  640. package/docs/api/exports.json +5656 -0
  641. package/docs/api/exposure-exposure-duration-control.md +115 -0
  642. package/docs/api/exposure-exposure-mode-resolver.md +966 -0
  643. package/docs/api/exposure-exposure.md +150 -0
  644. package/docs/api/exposure-flash.md +327 -0
  645. package/docs/api/exposure-metering-scene-radiance.md +154 -0
  646. package/docs/api/exposure-metering-target.md +134 -0
  647. package/docs/api/exposure-metering-temporal.md +77 -0
  648. package/docs/api/exposure-metering.md +172 -0
  649. package/docs/api/exposure-program-line.md +64 -0
  650. package/docs/api/motion-camera-rotation.md +215 -0
  651. package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
  652. package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
  653. package/docs/api/motion-capture-rotation-trajectory.md +132 -0
  654. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
  655. package/docs/api/motion-extended-object-projection.md +312 -0
  656. package/docs/api/motion-projected-motion.md +60 -0
  657. package/docs/api/optics-aperture.md +69 -0
  658. package/docs/api/optics-circle-of-confusion.md +46 -0
  659. package/docs/api/optics-complex-pupil-psf.md +193 -0
  660. package/docs/api/optics-depth-of-field.md +92 -0
  661. package/docs/api/optics-diffraction.md +46 -0
  662. package/docs/api/optics-focus-breathing.md +119 -0
  663. package/docs/api/optics-focus-state.md +64 -0
  664. package/docs/api/optics-front-of-lens-filter.md +263 -0
  665. package/docs/api/optics-illumination-vignetting.md +95 -0
  666. package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
  667. package/docs/api/optics-lens-psf-profile.md +380 -0
  668. package/docs/api/optics-polygon-diffraction.md +68 -0
  669. package/docs/api/optics-profile-contract.md +47 -0
  670. package/docs/api/optics-psf-foundation.md +181 -0
  671. package/docs/api/optics-radial-distortion.md +194 -0
  672. package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
  673. package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
  674. package/docs/api/optics-sensor-environment-query.md +58 -0
  675. package/docs/api/optics-sensor-psf-quadrature.md +81 -0
  676. package/docs/api/optics-stray-light.md +109 -0
  677. package/docs/api/optics-thin-lens.md +53 -0
  678. package/docs/api/output-capture-corrected-sdr.md +71 -0
  679. package/docs/api/output-capture-geometry.md +500 -0
  680. package/docs/api/output-capture-sdr.md +69 -0
  681. package/docs/api/output-crop.md +47 -0
  682. package/docs/api/output-geometric-transforms.md +199 -0
  683. package/docs/api/output-lens-corrections.md +162 -0
  684. package/docs/api/output-sdr-rendering.md +122 -0
  685. package/docs/api/output-subject-framing-crop.md +59 -0
  686. package/docs/api/schema-camera.md +84 -0
  687. package/docs/api/schema-illumination-spectral.md +77 -0
  688. package/docs/api/schema-illumination-temporal.md +289 -0
  689. package/docs/api/schema-illumination.md +246 -0
  690. package/docs/api/schema-scene-radiance-temporal.md +215 -0
  691. package/docs/api/schema-scene-radiance.md +415 -0
  692. package/docs/api/schema-scene.md +105 -0
  693. package/docs/api/schema-validation.md +25 -0
  694. package/docs/api/sensor-accumulated-charge.md +273 -0
  695. package/docs/api/sensor-architecture.md +155 -0
  696. package/docs/api/sensor-camera-saturation-capacity.md +215 -0
  697. package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
  698. package/docs/api/sensor-capture-mode-timing.md +123 -0
  699. package/docs/api/sensor-capture-mode.md +321 -0
  700. package/docs/api/sensor-color-sampling.md +228 -0
  701. package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
  702. package/docs/api/sensor-dark-current.md +227 -0
  703. package/docs/api/sensor-environment-photo-signal.md +77 -0
  704. package/docs/api/sensor-eqe-electron-rate.md +166 -0
  705. package/docs/api/sensor-eqe-local-exposure.md +68 -0
  706. package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
  707. package/docs/api/sensor-exposure-window.md +183 -0
  708. package/docs/api/sensor-iso-signal-chain.md +264 -0
  709. package/docs/api/sensor-local-exposure-binding.md +126 -0
  710. package/docs/api/sensor-optical-stack.md +211 -0
  711. package/docs/api/sensor-photon-energy.md +149 -0
  712. package/docs/api/sensor-physical-charge-capacity.md +196 -0
  713. package/docs/api/sensor-pixel-pitch.md +41 -0
  714. package/docs/api/sensor-radiometry-readiness.md +240 -0
  715. package/docs/api/sensor-raw-readout.md +499 -0
  716. package/docs/api/sensor-raw-reconstruction.md +260 -0
  717. package/docs/api/sensor-readout-exposure-linkage.md +172 -0
  718. package/docs/api/sensor-readout-timing.md +209 -0
  719. package/docs/api/sensor-response-application-compatibility.md +256 -0
  720. package/docs/api/sensor-response-operating-range.md +293 -0
  721. package/docs/api/sensor-responsivity-photocurrent.md +245 -0
  722. package/docs/api/sensor-sampling-aperture.md +221 -0
  723. package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
  724. package/docs/api/sensor-sensor-geometry.md +143 -0
  725. package/docs/api/sensor-signal-noise.md +75 -0
  726. package/docs/api/sensor-spatial-sample-reduction.md +186 -0
  727. package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
  728. package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
  729. package/docs/api/sensor-spectral-coverage.md +33 -0
  730. package/docs/api/sensor-spectral-quadrature.md +183 -0
  731. package/docs/api/sensor-spectral-response.md +291 -0
  732. package/docs/api/sensor-temporal-photo-signal.md +62 -0
  733. package/docs/api/simulation-poc-simulation.md +364 -0
  734. package/docs/api/stabilization-camera-shake.md +71 -0
  735. package/docs/api/stabilization-system.md +442 -0
  736. package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
  737. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
  738. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
  739. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
  740. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
  741. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
  742. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
  743. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
  744. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
  745. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
  746. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
  747. package/docs/examples/production-capture.mjs +34 -0
  748. package/docs/examples/production-request.json +4613 -0
  749. package/docs/examples/quick-start.mjs +12 -0
  750. package/docs/validation/documentation-fragments.json +212 -0
  751. package/docs/validation/release-audit-inventory.json +1306 -0
  752. package/docs/validation/tier-acceptance-report-v1.json +2538 -0
  753. package/package.json +18 -4
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Module boundary and integration notes.
3
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
4
+ * missing required fields and incompatible scientific data fail at this boundary. Complex pupil
5
+ * evaluation sums declared amplitude and phase on a bounded regular pupil grid. PSF shape is
6
+ * normalized separately from pupil throughput; coherent phase, pupil energy and spectral/field
7
+ * applicability cannot be replaced by a scalar blur radius. Numeric profiles require owned or
8
+ * reusable-data provenance.
9
+ * Evaluate a declared complex pupil with explicit amplitude/phase and sampling support; normalize PSF
10
+ * shape and retain pupil throughput as a separate quantity. Complex pupil evaluation sums declared
11
+ * amplitude and phase on a bounded regular pupil grid. PSF shape is normalized separately from pupil
12
+ * throughput; coherent phase, pupil energy and spectral/field applicability cannot be replaced by a
13
+ * scalar blur radius. Numeric profiles require owned or reusable-data provenance.
14
+ * @see docs/PSF_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support limits.
15
+ */
16
+ import { type CalculationResult } from "../core/calculation-result.js";
17
+ import { type EvidenceProvenance } from "../core/evidence-provenance.js";
18
+ import { type FocusPlane } from "./focus-state.js";
19
+ import type { LensPsfKernel, LensPsfScientificStatus, LensPsfUncertainty } from "./lens-psf-profile.js";
20
+ export declare const LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION: "0.1.0";
21
+ export interface LensComplexPupilGrid {
22
+ widthSamples: number;
23
+ heightSamples: number;
24
+ pupilSamplePitchMmX: number;
25
+ pupilSamplePitchMmY: number;
26
+ centerSampleX: number;
27
+ centerSampleY: number;
28
+ relativeAmplitude: readonly number[];
29
+ opticalPathDifferenceMicrometers: readonly number[];
30
+ }
31
+ export interface LensComplexPupilProfile {
32
+ schemaVersion: typeof LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION;
33
+ profileId: string;
34
+ profileVersion: string;
35
+ scientificStatus: LensPsfScientificStatus;
36
+ opticalDomain: "lens-primary-optical-path-only";
37
+ representation: "complex-pupil-amplitude-plus-opd";
38
+ pupilCoordinateSystem: "pupil-plane-metric-aligned-to-image-plane";
39
+ imageFieldAxes: "+X right, +Y up";
40
+ amplitudeMeaning: "relative-complex-pupil-amplitude-shape";
41
+ wavefrontMeaning: "optical-path-difference-micrometers";
42
+ throughputOwnership: "separate-relative-pupil-throughput-factor";
43
+ kernelEnergyNormalization: "unit-energy-shape";
44
+ propagationModel: "scalar-fraunhofer-discrete-reference";
45
+ context: {
46
+ focalLengthMm: number;
47
+ focus: FocusPlane;
48
+ apertureFNumber: number;
49
+ fieldPointMm: {
50
+ x: number;
51
+ y: number;
52
+ };
53
+ wavelengthNm: number;
54
+ signedDefocusImagePlaneMicrometers: number;
55
+ };
56
+ responseIncludes: {
57
+ diffraction: true;
58
+ aberration: boolean;
59
+ defocus: boolean;
60
+ pupilClippingShape: boolean;
61
+ };
62
+ relativePupilThroughputFactor: number;
63
+ grid: LensComplexPupilGrid;
64
+ sensorOpticalStackIncluded: false;
65
+ sensorSamplingIncluded: false;
66
+ reconstructionIncluded: false;
67
+ strayLightIncluded: false;
68
+ evidence: readonly EvidenceProvenance[];
69
+ uncertainty: LensPsfUncertainty;
70
+ limitations: readonly string[];
71
+ }
72
+ export interface CalculateLensComplexPupilPsfInput {
73
+ profile: LensComplexPupilProfile;
74
+ }
75
+ export interface LensComplexPupilPsf {
76
+ profileId: string;
77
+ profileVersion: string;
78
+ scientificStatus: LensPsfScientificStatus;
79
+ context: LensComplexPupilProfile["context"];
80
+ kernel: LensPsfKernel;
81
+ relativePupilThroughputFactor: number;
82
+ throughputOwnership: "separate-relative-pupil-throughput-factor";
83
+ diffractionAndAberrationJointlyEvaluated: true;
84
+ pupilClippingShapeIncluded: boolean;
85
+ pupilClippingThroughputAppliedToKernel: false;
86
+ scalarFraunhoferReference: true;
87
+ full2dOrientationPreserved: true;
88
+ geometricDistortionModified: false;
89
+ lateralChromaticPositionShiftApplied: false;
90
+ sensorOpticalStackIncluded: false;
91
+ sensorSamplingIncluded: false;
92
+ reconstructionIncluded: false;
93
+ strayLightIncluded: false;
94
+ scalarSharpnessScoreProduced: false;
95
+ componentEvidence: {
96
+ pupilProfile: readonly EvidenceProvenance[];
97
+ };
98
+ uncertainty: LensPsfUncertainty;
99
+ }
100
+ /**
101
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
102
+ * missing required fields and incompatible scientific data fail at this boundary.
103
+ *
104
+ * Complex pupil evaluation sums declared amplitude and phase on a bounded regular pupil grid. PSF
105
+ * shape is normalized separately from pupil throughput; coherent phase, pupil energy and
106
+ * spectral/field applicability cannot be replaced by a scalar blur radius. Numeric profiles require
107
+ * owned or reusable-data provenance.
108
+ * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
109
+ * @returns LensComplexPupilProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
110
+ *
111
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
112
+ */
113
+ export declare function parseLensComplexPupilProfile(value: unknown): LensComplexPupilProfile;
114
+ /**
115
+ * Evaluate a declared complex pupil with explicit amplitude/phase and sampling support; normalize PSF
116
+ * shape and retain pupil throughput as a separate quantity.
117
+ *
118
+ * Complex pupil evaluation sums declared amplitude and phase on a bounded regular pupil grid. PSF
119
+ * shape is normalized separately from pupil throughput; coherent phase, pupil energy and
120
+ * spectral/field applicability cannot be replaced by a scalar blur radius. Numeric profiles require
121
+ * owned or reusable-data provenance.
122
+ * @param input - CalculateLensComplexPupilPsfInput. See the linked contract for coordinate, unit and profile binding semantics.
123
+ * @returns CalculationResult<LensComplexPupilPsf>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
124
+ *
125
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
126
+ */
127
+ export declare function calculateLensComplexPupilPsf(input: CalculateLensComplexPupilPsfInput): CalculationResult<LensComplexPupilPsf>;
128
+ //# sourceMappingURL=complex-pupil-psf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complex-pupil-psf.d.ts","sourceRoot":"","sources":["../../src/optics/complex-pupil-psf.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,yCAAyC,EACpD,OAAgB,CAAC;AAEnB,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EACf,SAAS,MAAM,EAAE,CAAC;IACpB,gCAAgC,EAC9B,SAAS,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EACX,OAAO,yCAAyC,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EACd,uBAAuB,CAAC;IAC1B,aAAa,EACX,gCAAgC,CAAC;IACnC,cAAc,EACZ,kCAAkC,CAAC;IACrC,qBAAqB,EACnB,2CAA2C,CAAC;IAC9C,cAAc,EACZ,iBAAiB,CAAC;IACpB,gBAAgB,EACd,wCAAwC,CAAC;IAC3C,gBAAgB,EACd,qCAAqC,CAAC;IACxC,mBAAmB,EACjB,2CAA2C,CAAC;IAC9C,yBAAyB,EACvB,mBAAmB,CAAC;IACtB,gBAAgB,EACd,sCAAsC,CAAC;IACzC,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,UAAU,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE;YACZ,CAAC,EAAE,MAAM,CAAC;YACV,CAAC,EAAE,MAAM,CAAC;SACX,CAAC;QACF,YAAY,EAAE,MAAM,CAAC;QACrB,kCAAkC,EAChC,MAAM,CAAC;KACV,CAAC;IACF,gBAAgB,EAAE;QAChB,WAAW,EAAE,IAAI,CAAC;QAClB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,kBAAkB,EAChB,OAAO,CAAC;KACX,CAAC;IACF,6BAA6B,EAC3B,MAAM,CAAC;IACT,IAAI,EAAE,oBAAoB,CAAC;IAC3B,0BAA0B,EACxB,KAAK,CAAC;IACR,sBAAsB,EACpB,KAAK,CAAC;IACR,sBAAsB,EACpB,KAAK,CAAC;IACR,kBAAkB,EAAE,KAAK,CAAC;IAC1B,QAAQ,EACN,SAAS,kBAAkB,EAAE,CAAC;IAChC,WAAW,EACT,kBAAkB,CAAC;IACrB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,EACL,uBAAuB,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EACd,uBAAuB,CAAC;IAC1B,OAAO,EACL,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,EAAE,aAAa,CAAC;IACtB,6BAA6B,EAC3B,MAAM,CAAC;IACT,mBAAmB,EACjB,2CAA2C,CAAC;IAC9C,wCAAwC,EACtC,IAAI,CAAC;IACP,0BAA0B,EACxB,OAAO,CAAC;IACV,sCAAsC,EACpC,KAAK,CAAC;IACR,yBAAyB,EACvB,IAAI,CAAC;IACP,0BAA0B,EACxB,IAAI,CAAC;IACP,2BAA2B,EACzB,KAAK,CAAC;IACR,oCAAoC,EAClC,KAAK,CAAC;IACR,0BAA0B,EACxB,KAAK,CAAC;IACR,sBAAsB,EAAE,KAAK,CAAC;IAC9B,sBAAsB,EAAE,KAAK,CAAC;IAC9B,kBAAkB,EAAE,KAAK,CAAC;IAC1B,4BAA4B,EAC1B,KAAK,CAAC;IACR,iBAAiB,EAAE;QACjB,YAAY,EACV,SAAS,kBAAkB,EAAE,CAAC;KACjC,CAAC;IACF,WAAW,EACT,kBAAkB,CAAC;CACtB;AAoVD;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,uBAAuB,CAqNzB;AAqND;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EACH,iCAAiC,GAClC,iBAAiB,CAAC,mBAAmB,CAAC,CA+ExC"}
@@ -0,0 +1,462 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Module boundary and integration notes.
4
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
5
+ * missing required fields and incompatible scientific data fail at this boundary. Complex pupil
6
+ * evaluation sums declared amplitude and phase on a bounded regular pupil grid. PSF shape is
7
+ * normalized separately from pupil throughput; coherent phase, pupil energy and spectral/field
8
+ * applicability cannot be replaced by a scalar blur radius. Numeric profiles require owned or
9
+ * reusable-data provenance.
10
+ * Evaluate a declared complex pupil with explicit amplitude/phase and sampling support; normalize PSF
11
+ * shape and retain pupil throughput as a separate quantity. Complex pupil evaluation sums declared
12
+ * amplitude and phase on a bounded regular pupil grid. PSF shape is normalized separately from pupil
13
+ * throughput; coherent phase, pupil energy and spectral/field applicability cannot be replaced by a
14
+ * scalar blur radius. Numeric profiles require owned or reusable-data provenance.
15
+ * @see docs/PSF_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support limits.
16
+ */
17
+ import { approximationResult } from "../core/calculation-result.js";
18
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
19
+ import { parseEvidenceList } from "../core/evidence-provenance.js";
20
+ import { InvalidScientificInputError } from "../core/validation.js";
21
+ import { parseFocusPlane } from "./focus-state.js";
22
+ export const LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION = "0.1.0";
23
+ function requireRecord(value, path) {
24
+ if (typeof value !== "object" ||
25
+ value === null ||
26
+ Array.isArray(value)) {
27
+ throw new InvalidConfigurationError(path + " must be an object.");
28
+ }
29
+ return value;
30
+ }
31
+ function requireNonEmptyString(value, path) {
32
+ if (typeof value !== "string" ||
33
+ value.trim().length === 0) {
34
+ throw new InvalidConfigurationError(path +
35
+ " must be a non-empty string.");
36
+ }
37
+ return value.trim();
38
+ }
39
+ function requireFinite(value, path) {
40
+ if (typeof value !== "number" ||
41
+ !Number.isFinite(value)) {
42
+ throw new InvalidConfigurationError(path + " must be finite.");
43
+ }
44
+ return value;
45
+ }
46
+ function requirePositiveFinite(value, path) {
47
+ const parsed = requireFinite(value, path);
48
+ if (parsed <= 0) {
49
+ throw new InvalidConfigurationError(path +
50
+ " must be greater than zero.");
51
+ }
52
+ return parsed;
53
+ }
54
+ function requireUnitInterval(value, path) {
55
+ const parsed = requireFinite(value, path);
56
+ if (parsed < 0 ||
57
+ parsed > 1) {
58
+ throw new InvalidConfigurationError(path +
59
+ " must lie from zero through one.");
60
+ }
61
+ return parsed;
62
+ }
63
+ function requirePositiveSafeInteger(value, path) {
64
+ if (typeof value !== "number" ||
65
+ !Number.isSafeInteger(value) ||
66
+ value <= 0) {
67
+ throw new InvalidConfigurationError(path +
68
+ " must be a positive safe integer.");
69
+ }
70
+ return value;
71
+ }
72
+ function requireNonNegativeSafeInteger(value, path) {
73
+ if (typeof value !== "number" ||
74
+ !Number.isSafeInteger(value) ||
75
+ value < 0) {
76
+ throw new InvalidConfigurationError(path +
77
+ " must be a non-negative safe integer.");
78
+ }
79
+ return value;
80
+ }
81
+ function parseStatus(value, path) {
82
+ if (value !== "calibrated" &&
83
+ value !== "approximation") {
84
+ throw new InvalidConfigurationError(path + " is invalid.");
85
+ }
86
+ return value;
87
+ }
88
+ function parseUncertainty(value, path) {
89
+ const record = requireRecord(value, path);
90
+ if (record.kind === "relative") {
91
+ const fraction = requireFinite(record.fraction, path + ".fraction");
92
+ if (fraction < 0) {
93
+ throw new InvalidConfigurationError(path +
94
+ ".fraction must be nonnegative.");
95
+ }
96
+ return {
97
+ kind: "relative",
98
+ fraction,
99
+ basis: requireNonEmptyString(record.basis, path + ".basis")
100
+ };
101
+ }
102
+ if (record.kind ===
103
+ "not-quantified") {
104
+ return {
105
+ kind: "not-quantified",
106
+ limitation: requireNonEmptyString(record.limitation, path +
107
+ ".limitation")
108
+ };
109
+ }
110
+ throw new InvalidConfigurationError(path + ".kind is invalid.");
111
+ }
112
+ function parseLimitations(value, path) {
113
+ if (!Array.isArray(value)) {
114
+ throw new InvalidConfigurationError(path + " must be an array.");
115
+ }
116
+ const parsed = value.map((entry, index) => requireNonEmptyString(entry, path +
117
+ "[" +
118
+ index +
119
+ "]"));
120
+ if (new Set(parsed).size !==
121
+ parsed.length) {
122
+ throw new InvalidConfigurationError(path +
123
+ " must not contain duplicates.");
124
+ }
125
+ return parsed;
126
+ }
127
+ function parseGrid(value) {
128
+ const record = requireRecord(value, "lensComplexPupil.grid");
129
+ const widthSamples = requirePositiveSafeInteger(record.widthSamples, "lensComplexPupil.grid.widthSamples");
130
+ const heightSamples = requirePositiveSafeInteger(record.heightSamples, "lensComplexPupil.grid.heightSamples");
131
+ const total = widthSamples *
132
+ heightSamples;
133
+ if (!Number.isSafeInteger(total) ||
134
+ total > 4096) {
135
+ throw new InvalidConfigurationError("lensComplexPupil grid must contain at most 4096 samples.");
136
+ }
137
+ const centerSampleX = requireNonNegativeSafeInteger(record.centerSampleX, "lensComplexPupil.grid.centerSampleX");
138
+ const centerSampleY = requireNonNegativeSafeInteger(record.centerSampleY, "lensComplexPupil.grid.centerSampleY");
139
+ if (centerSampleX >=
140
+ widthSamples ||
141
+ centerSampleY >=
142
+ heightSamples) {
143
+ throw new InvalidConfigurationError("lensComplexPupil grid center must lie within the pupil array.");
144
+ }
145
+ if (!Array.isArray(record.relativeAmplitude) ||
146
+ record.relativeAmplitude
147
+ .length !== total) {
148
+ throw new InvalidConfigurationError("lensComplexPupil.grid.relativeAmplitude length must equal widthSamples × heightSamples.");
149
+ }
150
+ if (!Array.isArray(record
151
+ .opticalPathDifferenceMicrometers) ||
152
+ record
153
+ .opticalPathDifferenceMicrometers
154
+ .length !== total) {
155
+ throw new InvalidConfigurationError("lensComplexPupil.grid.opticalPathDifferenceMicrometers length must equal widthSamples × heightSamples.");
156
+ }
157
+ const relativeAmplitude = record.relativeAmplitude.map((entry, index) => requireUnitInterval(entry, "lensComplexPupil.grid.relativeAmplitude[" +
158
+ index +
159
+ "]"));
160
+ if (!relativeAmplitude.some((value) => value > 0)) {
161
+ throw new InvalidConfigurationError("lensComplexPupil must contain at least one non-zero pupil-amplitude sample.");
162
+ }
163
+ const opd = record
164
+ .opticalPathDifferenceMicrometers
165
+ .map((entry, index) => requireFinite(entry, "lensComplexPupil.grid.opticalPathDifferenceMicrometers[" +
166
+ index +
167
+ "]"));
168
+ return {
169
+ widthSamples,
170
+ heightSamples,
171
+ pupilSamplePitchMmX: requirePositiveFinite(record
172
+ .pupilSamplePitchMmX, "lensComplexPupil.grid.pupilSamplePitchMmX"),
173
+ pupilSamplePitchMmY: requirePositiveFinite(record
174
+ .pupilSamplePitchMmY, "lensComplexPupil.grid.pupilSamplePitchMmY"),
175
+ centerSampleX,
176
+ centerSampleY,
177
+ relativeAmplitude,
178
+ opticalPathDifferenceMicrometers: opd
179
+ };
180
+ }
181
+ /**
182
+ * Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
183
+ * missing required fields and incompatible scientific data fail at this boundary.
184
+ *
185
+ * Complex pupil evaluation sums declared amplitude and phase on a bounded regular pupil grid. PSF
186
+ * shape is normalized separately from pupil throughput; coherent phase, pupil energy and
187
+ * spectral/field applicability cannot be replaced by a scalar blur radius. Numeric profiles require
188
+ * owned or reusable-data provenance.
189
+ * @param value - unknown. Treated as untrusted data; static typing alone is not validation.
190
+ * @returns LensComplexPupilProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
191
+ *
192
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
193
+ */
194
+ export function parseLensComplexPupilProfile(value) {
195
+ const record = requireRecord(value, "lensComplexPupil");
196
+ if (record.schemaVersion !==
197
+ LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION) {
198
+ throw new InvalidConfigurationError('lensComplexPupil.schemaVersion must be "' +
199
+ LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION +
200
+ '".');
201
+ }
202
+ if (record.opticalDomain !==
203
+ "lens-primary-optical-path-only" ||
204
+ record.representation !==
205
+ "complex-pupil-amplitude-plus-opd" ||
206
+ record.pupilCoordinateSystem !==
207
+ "pupil-plane-metric-aligned-to-image-plane" ||
208
+ record.imageFieldAxes !==
209
+ "+X right, +Y up" ||
210
+ record.amplitudeMeaning !==
211
+ "relative-complex-pupil-amplitude-shape" ||
212
+ record.wavefrontMeaning !==
213
+ "optical-path-difference-micrometers" ||
214
+ record.throughputOwnership !==
215
+ "separate-relative-pupil-throughput-factor" ||
216
+ record.kernelEnergyNormalization !==
217
+ "unit-energy-shape" ||
218
+ record.propagationModel !==
219
+ "scalar-fraunhofer-discrete-reference") {
220
+ throw new InvalidConfigurationError("lensComplexPupil representation/coordinate/energy semantics are invalid.");
221
+ }
222
+ if (record.sensorOpticalStackIncluded !==
223
+ false ||
224
+ record.sensorSamplingIncluded !==
225
+ false ||
226
+ record.reconstructionIncluded !==
227
+ false ||
228
+ record.strayLightIncluded !==
229
+ false) {
230
+ throw new InvalidConfigurationError("V1 complex pupil profiles must exclude sensor/reconstruction/stray-light effects.");
231
+ }
232
+ const status = parseStatus(record.scientificStatus, "lensComplexPupil.scientificStatus");
233
+ const uncertainty = parseUncertainty(record.uncertainty, "lensComplexPupil.uncertainty");
234
+ if (status === "calibrated" &&
235
+ uncertainty.kind ===
236
+ "not-quantified") {
237
+ throw new InvalidConfigurationError("Calibrated complex-pupil profiles must declare quantified relative uncertainty.");
238
+ }
239
+ const context = requireRecord(record.context, "lensComplexPupil.context");
240
+ const field = requireRecord(context.fieldPointMm, "lensComplexPupil.context.fieldPointMm");
241
+ const response = requireRecord(record.responseIncludes, "lensComplexPupil.responseIncludes");
242
+ if (response.diffraction !==
243
+ true ||
244
+ typeof response.aberration !==
245
+ "boolean" ||
246
+ typeof response.defocus !==
247
+ "boolean" ||
248
+ typeof response.pupilClippingShape !==
249
+ "boolean") {
250
+ throw new InvalidConfigurationError("lensComplexPupil.responseIncludes is invalid; diffraction must be included in this pupil propagation path.");
251
+ }
252
+ return {
253
+ schemaVersion: LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION,
254
+ profileId: requireNonEmptyString(record.profileId, "lensComplexPupil.profileId"),
255
+ profileVersion: requireNonEmptyString(record.profileVersion, "lensComplexPupil.profileVersion"),
256
+ scientificStatus: status,
257
+ opticalDomain: "lens-primary-optical-path-only",
258
+ representation: "complex-pupil-amplitude-plus-opd",
259
+ pupilCoordinateSystem: "pupil-plane-metric-aligned-to-image-plane",
260
+ imageFieldAxes: "+X right, +Y up",
261
+ amplitudeMeaning: "relative-complex-pupil-amplitude-shape",
262
+ wavefrontMeaning: "optical-path-difference-micrometers",
263
+ throughputOwnership: "separate-relative-pupil-throughput-factor",
264
+ kernelEnergyNormalization: "unit-energy-shape",
265
+ propagationModel: "scalar-fraunhofer-discrete-reference",
266
+ context: {
267
+ focalLengthMm: requirePositiveFinite(context.focalLengthMm, "lensComplexPupil.context.focalLengthMm"),
268
+ focus: parseFocusPlane(context.focus),
269
+ apertureFNumber: requirePositiveFinite(context.apertureFNumber, "lensComplexPupil.context.apertureFNumber"),
270
+ fieldPointMm: {
271
+ x: requireFinite(field.x, "lensComplexPupil.context.fieldPointMm.x"),
272
+ y: requireFinite(field.y, "lensComplexPupil.context.fieldPointMm.y")
273
+ },
274
+ wavelengthNm: requirePositiveFinite(context.wavelengthNm, "lensComplexPupil.context.wavelengthNm"),
275
+ signedDefocusImagePlaneMicrometers: requireFinite(context
276
+ .signedDefocusImagePlaneMicrometers, "lensComplexPupil.context.signedDefocusImagePlaneMicrometers")
277
+ },
278
+ responseIncludes: {
279
+ diffraction: true,
280
+ aberration: response.aberration,
281
+ defocus: response.defocus,
282
+ pupilClippingShape: response
283
+ .pupilClippingShape
284
+ },
285
+ relativePupilThroughputFactor: requireUnitInterval(record
286
+ .relativePupilThroughputFactor, "lensComplexPupil.relativePupilThroughputFactor"),
287
+ grid: parseGrid(record.grid),
288
+ sensorOpticalStackIncluded: false,
289
+ sensorSamplingIncluded: false,
290
+ reconstructionIncluded: false,
291
+ strayLightIncluded: false,
292
+ evidence: parseEvidenceList(record.evidence, "lensComplexPupil.evidence"),
293
+ uncertainty,
294
+ limitations: parseLimitations(record.limitations, "lensComplexPupil.limitations")
295
+ };
296
+ }
297
+ function pupilComplexValue(amplitude, opdMicrometers, wavelengthMicrometers) {
298
+ const phase = 2 *
299
+ Math.PI *
300
+ opdMicrometers /
301
+ wavelengthMicrometers;
302
+ return {
303
+ re: amplitude *
304
+ Math.cos(phase),
305
+ im: amplitude *
306
+ Math.sin(phase)
307
+ };
308
+ }
309
+ function calculateDiscreteFraunhoferKernel(profile) {
310
+ const grid = profile.grid;
311
+ const width = grid.widthSamples;
312
+ const height = grid.heightSamples;
313
+ const wavelengthMicrometers = profile.context
314
+ .wavelengthNm /
315
+ 1000;
316
+ const wavelengthMm = profile.context
317
+ .wavelengthNm /
318
+ 1_000_000;
319
+ const pupil = grid.relativeAmplitude.map((amplitude, index) => pupilComplexValue(amplitude, grid
320
+ .opticalPathDifferenceMicrometers[index], wavelengthMicrometers));
321
+ const intensity = new Array(width * height).fill(0);
322
+ for (let outY = 0; outY < height; outY += 1) {
323
+ const ky = outY -
324
+ grid.centerSampleY;
325
+ for (let outX = 0; outX < width; outX += 1) {
326
+ const kx = outX -
327
+ grid.centerSampleX;
328
+ let re = 0;
329
+ let im = 0;
330
+ for (let y = 0; y < height; y += 1) {
331
+ const py = y -
332
+ grid.centerSampleY;
333
+ for (let x = 0; x < width; x += 1) {
334
+ const px = x -
335
+ grid.centerSampleX;
336
+ const source = pupil[y * width +
337
+ x];
338
+ const angle = -2 *
339
+ Math.PI *
340
+ (kx * px /
341
+ width +
342
+ ky * py /
343
+ height);
344
+ const cos = Math.cos(angle);
345
+ const sin = Math.sin(angle);
346
+ re +=
347
+ source.re *
348
+ cos -
349
+ source.im *
350
+ sin;
351
+ im +=
352
+ source.re *
353
+ sin +
354
+ source.im *
355
+ cos;
356
+ }
357
+ }
358
+ intensity[outY * width +
359
+ outX] =
360
+ re * re +
361
+ im * im;
362
+ }
363
+ }
364
+ const sum = intensity.reduce((acc, value) => acc + value, 0);
365
+ if (!Number.isFinite(sum) ||
366
+ sum <= 0) {
367
+ throw new InvalidScientificInputError("Complex-pupil propagation must produce finite positive PSF energy.");
368
+ }
369
+ const normalized = intensity.map((value) => value / sum);
370
+ const samplePitchMmX = wavelengthMm *
371
+ profile.context
372
+ .focalLengthMm /
373
+ (width *
374
+ grid
375
+ .pupilSamplePitchMmX);
376
+ const samplePitchMmY = wavelengthMm *
377
+ profile.context
378
+ .focalLengthMm /
379
+ (height *
380
+ grid
381
+ .pupilSamplePitchMmY);
382
+ if (!Number.isFinite(samplePitchMmX) ||
383
+ !Number.isFinite(samplePitchMmY) ||
384
+ samplePitchMmX <= 0 ||
385
+ samplePitchMmY <= 0) {
386
+ throw new InvalidScientificInputError("Complex-pupil PSF sample pitch must remain finite and positive.");
387
+ }
388
+ return {
389
+ widthSamples: width,
390
+ heightSamples: height,
391
+ samplePitchMicrometersX: samplePitchMmX *
392
+ 1000,
393
+ samplePitchMicrometersY: samplePitchMmY *
394
+ 1000,
395
+ centerSampleX: grid.centerSampleX,
396
+ centerSampleY: grid.centerSampleY,
397
+ normalizedIntensity: normalized
398
+ };
399
+ }
400
+ /**
401
+ * Evaluate a declared complex pupil with explicit amplitude/phase and sampling support; normalize PSF
402
+ * shape and retain pupil throughput as a separate quantity.
403
+ *
404
+ * Complex pupil evaluation sums declared amplitude and phase on a bounded regular pupil grid. PSF
405
+ * shape is normalized separately from pupil throughput; coherent phase, pupil energy and
406
+ * spectral/field applicability cannot be replaced by a scalar blur radius. Numeric profiles require
407
+ * owned or reusable-data provenance.
408
+ * @param input - CalculateLensComplexPupilPsfInput. See the linked contract for coordinate, unit and profile binding semantics.
409
+ * @returns CalculationResult<LensComplexPupilPsf>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
410
+ *
411
+ * @see docs/API_REFERENCE.md for the root export and exact type graph.
412
+ */
413
+ export function calculateLensComplexPupilPsf(input) {
414
+ const profile = parseLensComplexPupilProfile(input.profile);
415
+ const kernel = calculateDiscreteFraunhoferKernel(profile);
416
+ return approximationResult({
417
+ profileId: profile.profileId,
418
+ profileVersion: profile.profileVersion,
419
+ scientificStatus: profile.scientificStatus,
420
+ context: {
421
+ ...profile.context,
422
+ focus: {
423
+ ...profile.context.focus
424
+ },
425
+ fieldPointMm: {
426
+ ...profile.context
427
+ .fieldPointMm
428
+ }
429
+ },
430
+ kernel,
431
+ relativePupilThroughputFactor: profile
432
+ .relativePupilThroughputFactor,
433
+ throughputOwnership: "separate-relative-pupil-throughput-factor",
434
+ diffractionAndAberrationJointlyEvaluated: true,
435
+ pupilClippingShapeIncluded: profile
436
+ .responseIncludes
437
+ .pupilClippingShape,
438
+ pupilClippingThroughputAppliedToKernel: false,
439
+ scalarFraunhoferReference: true,
440
+ full2dOrientationPreserved: true,
441
+ geometricDistortionModified: false,
442
+ lateralChromaticPositionShiftApplied: false,
443
+ sensorOpticalStackIncluded: false,
444
+ sensorSamplingIncluded: false,
445
+ reconstructionIncluded: false,
446
+ strayLightIncluded: false,
447
+ scalarSharpnessScoreProduced: false,
448
+ componentEvidence: {
449
+ pupilProfile: profile.evidence
450
+ },
451
+ uncertainty: profile.uncertainty
452
+ }, "lens-complex-pupil-fraunhofer-psf", "1.0.0", [
453
+ "The reference evaluator performs deterministic scalar Fraunhofer propagation of one explicit complex pupil amplitude plus optical-path-difference grid.",
454
+ "Diffraction and aberration phase are evaluated together in the same pupil propagation; callers must not stack an independent diffraction blur over this result.",
455
+ "The output PSF is unit-energy normalized. The explicit relativePupilThroughputFactor is not multiplied into the kernel and remains owned by the separate optical-throughput path.",
456
+ "Pupil amplitude shape can represent mechanical clipping/cat-eye geometry without silently encoding unknown transmission loss.",
457
+ "The pupil and image-plane axes preserve full 2D orientation; no radial or sagittal/tangential averaging is imposed.",
458
+ "This scalar Fraunhofer grid is a bounded reference approximation, not a full vector electromagnetic, polarization, stray-light or sensor-system model.",
459
+ "Sensor OLPF, microlens, CFA, sampling and reconstruction are downstream and excluded."
460
+ ]);
461
+ }
462
+ //# sourceMappingURL=complex-pupil-psf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complex-pupil-psf.js","sourceRoot":"","sources":["../../src/optics/complex-pupil-psf.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Module boundary and integration notes.
3
+ * Calculates thin-lens depth-of-field limits using the conventional hyperfocal-distance formulation.
4
+ * The model is geometric and does not include diffraction, aberrations, focus breathing, pupil
5
+ * magnification, or macro/high-magnification effects.
6
+ * Calculates the geometric defocus-circle diameter at the sensor plane for a subject plane away from
7
+ * the selected focus plane.
8
+ * @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
9
+ * limits.
10
+ */
1
11
  import { type CalculationResult } from "../core/calculation-result.js";
2
12
  export interface CalculateDepthOfFieldInput {
3
13
  /** Lens focal length in millimetres. */
@@ -50,4 +60,12 @@ export interface DefocusCircle {
50
60
  * @returns Geometric blur-circle diameter.
51
61
  */
52
62
  export declare function calculateDefocusCircle(input: CalculateDefocusCircleInput): CalculationResult<DefocusCircle>;
63
+ /** @internal Immutable request-local identity; never a root public cache/API. */
64
+ export interface ResolvedDefocusFocusProjection {
65
+ readonly focalLengthMm: number;
66
+ readonly focusDistanceM: number;
67
+ readonly imageDistanceMm: number;
68
+ }
69
+ /** @internal Reuses a projection already calculated for this exact POC request. */
70
+ export declare function calculateDefocusCircleUsingFocusProjection(input: CalculateDefocusCircleInput, projection?: ResolvedDefocusFocusProjection): CalculationResult<DefocusCircle>;
53
71
  //# sourceMappingURL=depth-of-field.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"depth-of-field.d.ts","sourceRoot":"","sources":["../../src/optics/depth-of-field.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAOvC,MAAM,WAAW,0BAA0B;IACzC,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,iBAAiB,CAAC,YAAY,CAAC,CA6CjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,2BAA2B,GACjC,iBAAiB,CAAC,aAAa,CAAC,CAsClC"}
1
+ {"version":3,"file":"depth-of-field.d.ts","sourceRoot":"","sources":["../../src/optics/depth-of-field.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAOvC,MAAM,WAAW,0BAA0B;IACzC,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,iBAAiB,CAAC,YAAY,CAAC,CA6CjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,2BAA2B,GACjC,iBAAiB,CAAC,aAAa,CAAC,CAElC;AAED,iFAAiF;AACjF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,mFAAmF;AACnF,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,2BAA2B,EAClC,UAAU,CAAC,EAAE,8BAA8B,GAC1C,iBAAiB,CAAC,aAAa,CAAC,CAgDlC"}