Why an accelerated call did not return a result.
These two failures look identical to callers today -- both surface as a bare
None -- but they mean opposite things:
NOT_HANDLED the accelerator has no implementation for this config (wrong
injector type, film/regen cooling, a non-3D CEA cache). Python
is the ONLY implementation, so falling back is mandatory and
the fallback does real work.
NO_SOLUTION the physics ran and did not converge. Measured over 102 such
candidates, the Python path then failed on every one -- it
re-derives "infeasible" at full cost and also gives up. So this
fallback is (almost always) wasted work.
Conflating them is what made that impossible to see or measure. The public
evaluate/solve/chamber_solve keep returning None exactly as before -- every
caller keys on `is None` and none of them change -- while the *_ex variants
expose the reason for instrumentation and for any future short-circuit.
Definition at line 24 of file __init__.py.