/** @internal */ interface Debug { /** Generated by debug object for later inspection */ elems: {}; timing: Timing; /** * These functions are meant to be used in the console, e.g. in the * console try typing d.fs.twoProng.traceConvergence(0); */ fs: {}; directives: Directives; } /** @internal */ interface Timing { holeClosers: number; oneAnd2Prongs: number; threeProngs: number; sats: number; simplifyMat: number; } /** @internal */ interface Directives { stopAfterHoleClosers: boolean, stopAfterHoleClosersNum: number, stopAfterTwoProngs: boolean, stopAfterTwoProngsNum: number, stopAfterThreeProngs: boolean, stopAfterThreeProngsNum: number, } function enableDebugForMat(debugOn: boolean) { if (!debugOn) { (window as any)._debug_ = undefined; return; } let debug: Debug = (window as any)._debug_; debug = { ...debug, elems: { ...debug?.elems }, timing: { ...debug?.timing, holeClosers: 0, oneAnd2Prongs: 0, threeProngs: 0, sats: 0, simplifyMat: 0 }, fs: { ...debug?.fs }, directives: { //...debug?.directives, ...debug?.directives, stopAfterHoleClosers: false, stopAfterHoleClosersNum: undefined!, stopAfterTwoProngs: false, stopAfterTwoProngsNum: undefined!, stopAfterThreeProngs: false, stopAfterThreeProngsNum: undefined!, } }; (window as any)._debug_ = debug; } export type { Debug, Timing, Directives } export { enableDebugForMat }