lumenairy 5.32.0 @ D:\Metacept\Neurophos\Python_Test_Scripts\Free_Space_Optics\Lumenairy\lumenairy\__init__.py
  _lens_traced.py 8b13259592233b52
  carrier.py 5a1b0d1021969df1
D:\Metacept\Neurophos\Python_Test_Scripts\Free_Space_Optics\Lumenairy\validation\repro_traced_carrier_121\_d121_common.py:78: UserWarning: D:\Metacept\Neurophos\Python_Test_Scripts\Free_Space_Optics\Reverse_Symmetric_ASM\tx4designstudy121\20260707 dll Tx02-MSOP16.zmx: Zemax surface 9 is a DGRATING.  Its GEOMETRY is imported as the flat/conic surface it is, and its grating data (period 113.7656 um, design order -4, azimuth 0.0 deg) is attached at prescription['diffractives'] -- but NO diffraction is applied by apply_real_lens / apply_real_lens_traced, which propagate the surface as flat.  Run the orders explicitly: put {'doe': rx['diffractives'][k]} in propagate_traced_carrier_chain's groups list (its gap_before 51.5393 mm / gap_after 0.0000 mm are then bookkept for you -- give the group that FOLLOWS the last DOE entry gap_before=0, since gap_after already carries that leg), one order per congruence via propagate_traced_carrier_chain_multi.
  rx = la.load_zemax_zmx(ZMX)
D:\Metacept\Neurophos\Python_Test_Scripts\Free_Space_Optics\Lumenairy\validation\repro_traced_carrier_121\_d121_common.py:78: UserWarning: D:\Metacept\Neurophos\Python_Test_Scripts\Free_Space_Optics\Reverse_Symmetric_ASM\tx4designstudy121\20260707 dll Tx02-MSOP16.zmx: Zemax surface 11 is a DGRATING.  Its GEOMETRY is imported as the flat/conic surface it is, and its grating data (period 113.7656 um, design order -2, azimuth 270.0 deg) is attached at prescription['diffractives'] -- but NO diffraction is applied by apply_real_lens / apply_real_lens_traced, which propagate the surface as flat.  Run the orders explicitly: put {'doe': rx['diffractives'][k]} in propagate_traced_carrier_chain's groups list (its gap_before 0.0000 mm / gap_after 7.0000 mm are then bookkept for you -- give the group that FOLLOWS the last DOE entry gap_before=0, since gap_after already carries that leg), one order per congruence via propagate_traced_carrier_chain_multi.
  rx = la.load_zemax_zmx(ZMX)

   order    oracle     default         C11        v532 res default     res C11    res v532
     0,0   90.5324     90.5801     90.5801     90.5801     -0.0477     -0.0477     -0.0477   shas 4e9effd4/4e9effd4/4e9effd4  [139s]
    -1,0   90.5768     90.5477     90.5215     90.5477      0.0290      0.0552      0.0290   shas b2a8b150/098aa4a2/b2a8b150  [146s]
    -2,0   90.6650     90.6016     90.6186     90.6016      0.0634      0.0464      0.0634   shas 88f726eb/340d7b32/88f726eb  [146s]
    -3,0   90.6961     90.6062     90.6586     90.6062      0.0898      0.0375      0.0898   shas cf0bc1f3/71af633a/cf0bc1f3  [147s]
    -4,0   90.5035     90.3625     90.4727     90.3625      0.1410      0.0308      0.1410   shas 7845b7a8/fe6b14c8/7845b7a8  [148s]
   -4,-2   90.1071     89.9554     90.0378     89.9554      0.1517      0.0693      0.1517   shas c4b850ea/be68c661/c4b850ea  [216s]

NULL: on axis all three arms must be BYTE-IDENTICAL (zero decentre -> no branch to choose).
