True if the tree carries a target head at 2+ DISTINCT arguments — the * signature of a desynchronized within-pair reflection (`csc[θ]·csc[θ+π/2]` * from `csc[θ]·sec[θ]`). A pure-source reflection lands every target on the SAME * `arg+π/2`, so this stays false; a genuine `csc·sec` mix trips it and
(e: Expression)
| 2527 | if (TO_INERT[e.operator] !== undefined) return true; |
| 2528 | return e.ops?.some(hasActiveTrig) ?? false; |
| 2529 | } |
| 2530 | |
| 2531 | /** True if any node carries an INERT trig head (`sin`/`cos`/…). Underlies |
| 2532 | * Rubi's `InertTrigFreeQ` (the working-form purity test that gates many |
| 2533 | * Chapter-4 dispatch rules). */ |
| 2534 | function hasInertTrig(e: Expression): boolean { |
| 2535 | if (TO_ACTIVE[e.operator] !== undefined) return true; |
| 2536 | return e.ops?.some(hasInertTrig) ?? false; |
no test coverage detected