@fluidframework/matrix 2.0.0-internal.3.0.1 → 2.0.0-internal.3.1.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.
- package/.eslintrc.js +20 -21
- package/.mocharc.js +2 -2
- package/README.md +21 -21
- package/api-extractor.json +2 -2
- package/bench/bsp-set-optimizations.md +5 -5
- package/bench/src/index.ts +38 -20
- package/bench/src/read/map.ts +16 -10
- package/bench/src/read/nativearray.ts +16 -10
- package/bench/src/read/test.ts +17 -19
- package/bench/src/read/tiled.ts +240 -181
- package/bench/src/util.ts +19 -18
- package/bench/tsconfig.json +8 -13
- package/dist/bspSet.d.ts.map +1 -1
- package/dist/bspSet.js.map +1 -1
- package/dist/handlecache.d.ts.map +1 -1
- package/dist/handlecache.js +1 -3
- package/dist/handlecache.js.map +1 -1
- package/dist/handletable.d.ts.map +1 -1
- package/dist/handletable.js +7 -3
- package/dist/handletable.js.map +1 -1
- package/dist/matrix.d.ts +1 -1
- package/dist/matrix.d.ts.map +1 -1
- package/dist/matrix.js +28 -19
- package/dist/matrix.js.map +1 -1
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/permutationvector.d.ts.map +1 -1
- package/dist/permutationvector.js +15 -8
- package/dist/permutationvector.js.map +1 -1
- package/dist/productSet.d.ts.map +1 -1
- package/dist/productSet.js +6 -3
- package/dist/productSet.js.map +1 -1
- package/dist/range.d.ts.map +1 -1
- package/dist/range.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js.map +1 -1
- package/dist/sparsearray2d.d.ts.map +1 -1
- package/dist/sparsearray2d.js +12 -12
- package/dist/sparsearray2d.js.map +1 -1
- package/dist/split.d.ts.map +1 -1
- package/dist/split.js +5 -3
- package/dist/split.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/undoprovider.d.ts.map +1 -1
- package/dist/undoprovider.js.map +1 -1
- package/lib/bspSet.d.ts.map +1 -1
- package/lib/bspSet.js.map +1 -1
- package/lib/handlecache.d.ts.map +1 -1
- package/lib/handlecache.js +1 -3
- package/lib/handlecache.js.map +1 -1
- package/lib/handletable.d.ts.map +1 -1
- package/lib/handletable.js +7 -3
- package/lib/handletable.js.map +1 -1
- package/lib/matrix.d.ts +1 -1
- package/lib/matrix.d.ts.map +1 -1
- package/lib/matrix.js +29 -20
- package/lib/matrix.js.map +1 -1
- package/lib/ops.d.ts.map +1 -1
- package/lib/ops.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/permutationvector.d.ts.map +1 -1
- package/lib/permutationvector.js +15 -8
- package/lib/permutationvector.js.map +1 -1
- package/lib/productSet.d.ts.map +1 -1
- package/lib/productSet.js +6 -3
- package/lib/productSet.js.map +1 -1
- package/lib/range.d.ts.map +1 -1
- package/lib/range.js.map +1 -1
- package/lib/runtime.d.ts.map +1 -1
- package/lib/runtime.js.map +1 -1
- package/lib/serialization.d.ts.map +1 -1
- package/lib/serialization.js.map +1 -1
- package/lib/sparsearray2d.d.ts.map +1 -1
- package/lib/sparsearray2d.js +12 -12
- package/lib/sparsearray2d.js.map +1 -1
- package/lib/split.d.ts.map +1 -1
- package/lib/split.js +5 -3
- package/lib/split.js.map +1 -1
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js.map +1 -1
- package/lib/undoprovider.d.ts.map +1 -1
- package/lib/undoprovider.js +1 -1
- package/lib/undoprovider.js.map +1 -1
- package/package.json +117 -116
- package/prettier.config.cjs +1 -1
- package/src/bspSet.ts +507 -434
- package/src/handlecache.ts +114 -112
- package/src/handletable.ts +66 -62
- package/src/matrix.ts +781 -710
- package/src/ops.ts +11 -11
- package/src/packageVersion.ts +1 -1
- package/src/permutationvector.ts +425 -368
- package/src/productSet.ts +852 -788
- package/src/range.ts +8 -8
- package/src/runtime.ts +35 -35
- package/src/serialization.ts +13 -9
- package/src/sparsearray2d.ts +196 -192
- package/src/split.ts +111 -90
- package/src/types.ts +3 -3
- package/src/undoprovider.ts +161 -144
- package/tsconfig.esnext.json +6 -6
- package/tsconfig.json +8 -12
package/dist/productSet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"productSet.js","sourceRoot":"","sources":["../src/productSet.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;AAEH,qCAmBkB;AA6DlB,MAAM,IAAI,GAAyC,EAAE,CAAC;AACtD,MAAM,GAAG,GAAG,CAAI,iBAAuC,EAAU,EAAE;IAC/D,MAAM,IAAI,GAAqD,EAAE,CAAC;IAClE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;QACjD,MAAM,GAAG,GAAG,MAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC/C;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,OAAO,KAAK,SAAS,EAAE;QACvB,OAAO,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;KACzB;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,SAAS,QAAQ,CAAI,MAAyB;IAC1C,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACnC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;YACnD,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM;SACT;KACJ;IACD,IAAI,OAAO,EAAE;QACT,OAAO,cAAK,CAAC;KAChB;IACD,OAAO,EAAE,UAAU,EAAE,IAAa,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,uBAAuB,CAAI,GAA4B;IAC5D,IAAI,GAAG,CAAC,UAAU,EAAE;QAChB,OAAO,CAAC,CAAC;KACZ;IACD,OAAO,GAAG,CAAC,aAAa,CAAC;AAC7B,CAAC;AAED,MAAM,KAAK,GAAG,CACV,IAA6B,EAC7B,KAA8B,EAC9B,MAAyB,EACjB,EAAE,CAAC,CAAC;IACZ,UAAU,EAAE,KAAc;IAC1B,IAAI;IACJ,KAAK;IACL,MAAM;IACN,aAAa,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC;CAChF,CAAC,CAAC;AAEH,SAAS,aAAa,CAClB,iBAAuC,EACvC,IAAqC;IAErC,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,mBAAmB,GAAG,KAAK,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACxC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;gBAC9D,mBAAmB,GAAG,IAAI,CAAC;gBAC3B,MAAM;aACT;SACJ;QACD,IAAI,CAAC,mBAAmB,EAAE;YACtB,OAAO,cAAK,CAAC;SAChB;KACJ;IACD,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAKD,SAAS,QAAQ,CAAI,GAAiC;IAClD,IAAI,GAAG,KAAK,SAAS,EAAE;QACnB,OAAO,cAAK,CAAC;KAChB;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;kBAGkB;AAClB,MAAM,MAAM,GAAG;IACX,KAAK,CAAI,OAAmB;QACxB,MAAM,iBAAiB,GAA2D,EAAE,CAAC;QACrF,MAAM,IAAI,GAAkD,EAAE,CAAC;QAC/D,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACvC,MAAM,GAAG,GAAG,MAAiB,CAAC;YAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACpD,MAAM,GAAG,GAA6B,OAAO,CAAC,GAAG,CAAC,CAAC;gBACnD,IAAI,GAAG,KAAK,cAAK,EAAE;oBACf,OAAO,cAAK,CAAC;iBAChB;gBACD,IAAI,GAAG,KAAK,cAAK,EAAE;oBACf,SAAS;iBACZ;gBAED,iBAAiB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;aACxB;SACJ;QAED,OAAO,aAAa,CAAC,iBAAyC,EAAE,QAAQ,CAAC,IAAyB,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,cAAc,CACV,iBAAuC,EACvC,IAAuB,EACvB,KAAwB,EACxB,WAIuB;QAEvB,MAAM,GAAG,GAAkD,EAAE,CAAC;QAC9D,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;YACjD,MAAM,GAAG,GAAG,MAAiB,CAAC;YAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;gBAC9D,MAAM,QAAQ,GAAG,WAAW,CACxB,iBAAiB,CAAC,GAAG,CAAC,EACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACnB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CACvB,CAAC;gBACF,IAAI,QAAQ,KAAK,cAAK,EAAE;oBACpB,OAAO,QAAQ,CAAC;iBACnB;gBACD,IAAI,QAAQ,KAAK,cAAK,EAAE;oBACpB,SAAS;iBACZ;gBACD,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;aACvB;SACJ;QAED,OAAO,GAAwB,CAAC;IACpC,CAAC;IAED,wDAAwD;IACxD,QAAQ,CAA8C,MAAS,EAAE,GAAG,KAAY;QAC5E,MAAM,GAAG,GAAgC,EAAE,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;YACrB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;gBACnD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBACzB,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;aACnB;SACJ;QAED,OAAO,GAAyB,CAAC;IACrC,CAAC;IAED,kBAAkB,CACd,iBAAwD,EACxD,MAA0C,EAC1C,IAAW;QAEX,MAAM,OAAO,GAA0D,EAAE,CAAC;QAC1E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACpB,MAAM,KAAK,GAAuC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,GAAG,IAAA,oBAAW,EAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAK,CAAC,CAAC;SAC3F;QACD,OAAO,OAAsC,CAAC;IAClD,CAAC;IAED,YAAY,CAA+B,IAAW;QAClD,MAAM,SAAS,GAAuC,EAAE,CAAC;QACzD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACpB,SAAS,CAAC,GAAG,CAAC,GAAG,cAAK,CAAC;SAC1B;QACD,OAAO,SAAwC,CAAC;IACpD,CAAC;CACJ,CAAC;AAEW,QAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAI3D,SAAS,UAAU,CAAI,iBAAuC,EAAE,IAAuB,EAAE,KAAwB;IAC7G,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAY,CAAC,CAAC;IACjF,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;KAC5F;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACpB,iBAAuC,EACvC,IAAuB,EACvB,KAAwB;IAExB,IAAI,GAAG,GAAkC,CAAC,CAAC;IAC3C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;QACjD,MAAM,GAAG,GAAG,MAAiB,CAAC;QAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;YAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAE7C,GAAG,GAAG,IAAA,mBAAU,EAAC,GAAG,EAAE,IAAA,uBAAc,EAAmB,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAErF,IAAI,GAAG,KAAK,SAAS,EAAE;gBACnB,OAAO,SAAS,CAAC;aACpB;SACJ;KACJ;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE;IAC5B,MAAM,KAAK,GAAwD,EAAE,CAAC;IACtE,OAAO,CACH,iBAAuC,EACvC,IAAiB,EACjB,KAAkB,EACqB,EAAE;QACzC,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE;YAC9C,OAAO,KAAK,CAAC,GAA2C,CAAC;SAC5D;QACD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAEpB,MAAM,GAAG,GAAG,eAAe,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1E,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAChD;QACD,IAAI,kBAAuC,CAAC;QAE5C,iEAAiE;QACjE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAgB,CAAC;QAC9D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;YACvB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;gBAC9D,MAAM,SAAS,GAAG,IAAA,uBAAc,EAC5B,iBAAiB,CAAC,GAAG,CAAC,EACtB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC1B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC9B,CAAC;gBACF,IAAI,SAAS,KAAK,CAAC,EAAE;oBACjB,IAAI,kBAAkB,KAAK,SAAS,EAAE;wBAClC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;qBAClC;oBAED,kBAAkB,GAAG,GAAG,CAAC;iBAC5B;aACJ;SACJ;QAED,IAAI,kBAAkB,KAAK,SAAS,EAAE;YAClC,MAAM,MAAM,GAAG,IAAA,qBAAY,EACvB,iBAAiB,CAAC,kBAAkB,CAAC,EACrC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,EACzC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAC7C,CAAC;YACF,IAAI,MAAM,KAAK,cAAK,EAAE;gBAClB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,cAAK,CAAC,CAAC;aAC9B;YACD,IAAI,MAAM,KAAK,cAAK,EAAE;gBAClB,qEAAqE;gBACrE,0DAA0D;gBAC1D,MAAkF,KAAA,IAAI,CAAC,MAAM,EAArF,KAAC,kBAAmB,EAAE,OAAO,SAAA,EAAK,mCAAmC,cAAvE,uCAAyE,CAAc,CAAC;gBAC9F,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAU,mCAAmC,CAAC,CAAC,CAAC;aAC/E;YAED,MAAM,SAAS,mCACR,IAAI,CAAC,MAAM,KACd,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAC/B,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;SAC5C;QAED,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACnC,CAAC,CAAC;AACN,CAAC,CAAC,EAAE,CAAC;AAEL,SAAS,eAAe,CACpB,iBAAuC,EACvC,IAA0B,EAC1B,KAA2B;IAE3B,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IAED,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACvC,OAAO,KAAK,CAAI,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;KAC1F;IAED,MAAM,gBAAgB,GAAG,iBAAiB,CAAI,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAE9E,IAAI,gBAAgB,KAAK,SAAS,EAAE;QAChC,OAAO,gBAAgB,CAAC;KAC3B;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,cAAc,CACnB,iBAAuC,EACvC,GAA4B,EAC5B,GAAG,IAAW;IAEd,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IACpD,IAAI,GAAG,CAAC,UAAU,EAAE;QAChB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC3B;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IACpE,IAAI,MAAM,KAAK,cAAK,EAAE;QAClB,OAAO,cAAK,CAAC;KAChB;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACrE,OAAO,eAAe,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,OAAO,CACnB,GAAkB,EAClB,GAAG,IAAW;IAEd,IAAI,GAAG,KAAK,cAAK,IAAI,GAAG,KAAK,cAAK,EAAE;QAChC,OAAO,GAAG,CAAC;KACd;IACD,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IAClE,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IACD,OAAO,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAbD,0BAaC;AAED,SAAS,QAAQ,CAAI,iBAAuC,EAAE,UAAkB;IAC5E,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC;KAAE;IACtE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC;IAC1C,IAAI,UAA+B,CAAC;IACpC,IAAI,aAAa,CAAC;IAClB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,iEAAiE;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAgB,CAAC;IAC9D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAuB,aAAa,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,IAAI,KAAK,SAAS,EAAE;gBACpB,UAAU,GAAG,GAAG,CAAC;gBACjB,aAAa,GAAG,mBAAmB,CAAC,GAAG,CAAC;gBACxC,MAAM;aACT;YAED,IAAI,IAAI,GAAG,WAAW,EAAE;gBACpB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxC,IAAI,YAAY,KAAK,cAAK,EAAE;oBACxB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;iBAC3D;gBACD,IAAI,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC;gBAClC,IAAI,YAAY,KAAK,cAAK,EAAE;oBACxB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;wBACvB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;qBAChE;oBAED,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;iBAC1B;gBACD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACpC,SAAS;iBACZ;gBACD,UAAU,GAAG,GAAG,CAAC;gBACjB,WAAW,GAAG,IAAI,CAAC;gBACnB,aAAa,GAAG,GAAG,CAAC;aACvB;SACJ;KACJ;IAED,IAAI,UAAU,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE;QACzD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC7D;IAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEpD,MAAM,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxF,MAAM,GAAG,GAAgC;QACrC;YACI,GAAG,kCAAO,GAAG,KAAE,CAAC,UAAU,CAAC,EAAE,IAAA,aAAI,EAAmB,aAAa,EAAE,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,GAAE;YAChG,aAAa,kCAAO,aAAa,KAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,GAAE;YAC3D,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,CAAC;SAC9B;QACD;YACI,GAAG,kCAAO,GAAG,KAAE,CAAC,UAAU,CAAC,EAAE,IAAA,aAAI,EAAmB,aAAa,EAAE,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAE;YACjG,aAAa,kCAAO,aAAa,KAAE,CAAC,UAAU,CAAC,EAAE,SAAS,GAAE;YAC5D,KAAK,EAAE,UAAU,CAAC,KAAK,GAAG,CAAC;SAC9B;KACJ,CAAC;IACF,IAAI,UAAU,CAAC,KAAK,GAAG,EAAE,EAAE;QACvB,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC;KAC7B;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CACrB,iBAAuC,EACvC,GAAyB,EACzB,UAA6B,EAC7B,WAA8B;IAE9B,IAAI,GAAG,KAAK,cAAK,EAAE;QACf,OAAO,CAAC,cAAK,EAAE,cAAK,CAAC,CAAC;KACzB;IACD,IAAI,GAAG,KAAK,cAAK,EAAE;QACf,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;KACxD;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEvE,sEAAsE;IACtE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,IAAI,CAAC,EAAE;QAC/B,OAAO,CAAC,GAAG,EAAE,cAAK,CAAC,CAAC;KACvB;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,yBAAgB,CAAC,CAAC;IAEzG,gGAAgG;IAChG,IAAI,aAAa,KAAK,cAAK,EAAE;QACzB,OAAO,CAAC,cAAK,EAAE,GAAG,CAAC,CAAC;KACvB;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,yBAAgB,CAAC,CAAC;IAC3G,IAAI,GAAG,CAAC,UAAU,EAAE;QAChB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,KAAK,cAAK,CAAC,CAAC,CAAC,cAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;KACjG;IAED,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACxF,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,EAAE,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACzF,OAAO,CAAC,eAAe,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,eAAe,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,GAAG,CACf,iBAAuC,EACvC,GAAyB,EACzB,EAAE,GAAG,EAAE,UAAU,EAAU,EAC3B,EAAE,GAAG,EAAE,WAAW,EAAU,EACoB,EAAE;IAClD,OAAO,gBAAgB,CAAC,iBAAiB,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,SAAS,OAAO,CACZ,iBAAuC,EACvC,IAA0B,EAC1B,KAA2B,EAC3B,UAAkB,EAClB,SAKyB;IAEzB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG,SAAS,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,MAAM,KAAK,cAAK,EAAE;QAClB,OAAO,cAAK,CAAC;KAChB;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9D,OAAO,eAAe,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,mBAAmB,CACxB,iBAAuC,EACvC,IAA0B,EAC1B,KAA2B,EAC3B,UAAkB;IAElB,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE;QACrC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3E,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAChC,OAAO,gBAAgB,CAAC;SAC3B;KACJ;IAED,OAAO,OAAO,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;AACpF,CAAC;AAED,SAAgB,YAAY,CACxB,IAAmB,EACnB,KAAoB;IAEpB,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IACD,MAAM,iBAAiB,mCAAQ,IAAI,CAAC,iBAAiB,GAAK,KAAK,CAAC,iBAAiB,CAAE,CAAC;IACpF,MAAM,GAAG,GAAG,mBAAmB,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAClG,IAAI,GAAG,KAAK,cAAK,EAAE;QACf,OAAO,GAAG,CAAC;KACd;IACD,OAAO,aAAa,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAtBD,oCAsBC;AAED,SAAS,uBAAuB,CAC5B,iBAAuC,EACvC,IAA0B,EAC1B,KAA2B,EAC3B,UAAkB;IAElB,IAAI,IAAI,KAAK,cAAK,IAAI,KAAK,KAAK,cAAK,EAAE;QACnC,OAAO,cAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,yBAAgB,CAAC,CAAC;QAClG,IAAI,GAAG,KAAK,cAAK,EAAE;YACf,OAAO,cAAK,CAAC;SAChB;QACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;KACxB;IAED,OAAO,OAAO,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,uBAAuB,CAAC,CAAC;AACxF,CAAC;AAED,SAAgB,gBAAgB,CAC5B,IAAmB,EACnB,KAAoB;IAEpB,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,IAAI,CAAC;KACf;IAED,MAAM,iBAAiB,mCAAQ,IAAI,CAAC,iBAAiB,GAAK,KAAK,CAAC,iBAAiB,CAAE,CAAC;IACpF,MAAM,GAAG,GAAG,uBAAuB,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACtG,IAAI,GAAG,KAAK,cAAK,EAAE;QACf,OAAO,GAAG,CAAC;KACd;IACD,OAAO,aAAa,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAvBD,4CAuBC;AAED,SAAS,kBAAkB,CACvB,iBAAuC,EACvC,IAAiB,EACjB,KAAkB;IAElB,MAAM,GAAG,GAAG,eAAe,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1E,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;QACzB,OAAO,cAAK,CAAC;KAChB;IACD,IAAI,qBAA0C,CAAC;IAC/C,iEAAiE;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAgB,CAAC;IAC9D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;YAC9D,MAAM,SAAS,GAAG,IAAA,uBAAc,EAC5B,iBAAiB,CAAC,GAAG,CAAC,EACtB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC1B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC9B,CAAC;YACF,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,CAAC,EAAE;gBAC1C,IAAI,qBAAqB,KAAK,SAAS,EAAE;oBACrC,OAAO,SAAS,CAAC;iBACpB;gBAED,qBAAqB,GAAG,GAAG,CAAC;aAC/B;SACJ;KACJ;IAED,IAAI,qBAAqB,KAAK,SAAS,EAAE;QACrC,MAAM,MAAM,GAAG,IAAA,sBAAa,EACxB,iBAAiB,CAAC,qBAAqB,CAAC,EACxC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,EAC5C,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAChD,CAAC;QAEF,IAAI,MAAM,KAAK,cAAK,EAAE;YAClB,OAAO,cAAK,CAAC;SAChB;QACD,IAAI,MAAM,KAAK,cAAK,EAAE;YAClB,qEAAqE;YACrE,0DAA0D;YAC1D,MAAqF,KAAA,IAAI,CAAC,MAAM,EAAxF,KAAC,qBAAsB,EAAE,OAAO,SAAA,EAAK,mCAAmC,cAA1E,uCAA4E,CAAc,CAAC;YACjG,OAAO,QAAQ,CAAU,mCAAmC,CAAC,CAAC;SACjE;QACD,MAAM,SAAS,mCACR,IAAI,CAAC,MAAM,KACd,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAClC,CAAC;QACF,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;KAC9B;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,oBAAoB,CACzB,iBAAuC,EACvC,IAA0B,EAC1B,KAA2B,EAC3B,UAAkB;IAElB,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,cAAK,CAAC;KAChB;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,IAAI,CAAC;KACf;IAED,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,OAAO,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;KACpF;IAED,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE;QACrC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAChC,OAAO,gBAAgB,CAAC;SAC3B;KACJ;IAED,OAAO,OAAO,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;AACrF,CAAC;AAED,SAAgB,aAAa,CACzB,IAAmB,EACnB,KAAoB;IAEpB,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,cAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,MAAM,SAAS,GACX,oBAAoB,CAAC,KAAK,CAAC,iBAAiB,EAAE,cAAK,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnG,IAAI,SAAS,KAAK,cAAK,EAAE;YACrB,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,aAAa,CAAC,KAAK,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;KAC5D;IAED,MAAM,iBAAiB,mCAAQ,IAAI,CAAC,iBAAiB,GAAK,KAAK,CAAC,iBAAiB,CAAE,CAAC;IACpF,MAAM,GAAG,GAAG,oBAAoB,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnG,IAAI,GAAG,KAAK,cAAK,EAAE;QACf,OAAO,GAAG,CAAC;KACd;IACD,OAAO,aAAa,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AA5BD,sCA4BC;AAED,SAAS,qBAAqB,CAC1B,iBAAuC,EACvC,IAA0B,EAC1B,KAA2B,EAC3B,WAAmB;IAEnB,IAAI,IAAI,KAAK,KAAK,EAAE;QAChB,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,CAAC,CAAC,CAAC;KACb;IAED,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,IAAI,KAAK,KAAK,cAAK,EAAE;YACjB,OAAO,CAAC,CAAC;SACZ;QAED,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,CAAC,CAAC,CAAC;KACb;IAED,IAAI,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,KAAK,CAAC,UAAU,EAAE;YAClB,OAAO,eAAe,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;SACxE;KACJ;IAED,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEzE,MAAM,OAAO,GAAG,qBAAqB,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1E,IAAI,OAAO,KAAK,SAAS,EAAE;QACvB,OAAO,SAAS,CAAC;KACpB;IACD,OAAO,IAAA,mBAAU,EAAC,OAAO,EAAE,qBAAqB,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,SAAgB,cAAc,CAC1B,IAAmB,EACnB,KAAoB;IAEpB,IAAI,IAAI,KAAK,KAAK,EAAE;QAChB,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,OAAO,CAAC,CAAC,CAAC;KACb;IAED,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,IAAI,KAAK,cAAK,EAAE;QAChB,IAAI,KAAK,KAAK,cAAK,EAAE;YACjB,OAAO,CAAC,CAAC;SACZ;QAED,OAAO,CAAC,CAAC;KACZ;IAED,IAAI,KAAK,KAAK,cAAK,EAAE;QACjB,OAAO,CAAC,CAAC,CAAC;KACb;IAED,MAAM,iBAAiB,mCAAQ,IAAI,CAAC,iBAAiB,GAAK,KAAK,CAAC,iBAAiB,CAAE,CAAC;IACpF,OAAO,qBAAqB,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACnG,CAAC;AA9BD,wCA8BC;AAED,SAAS,aAAa,CAAI,iBAAuC,EAAE,IAAuB,EAAE,KAAwB;IAChH,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;QACjD,MAAM,GAAG,GAAG,MAAiB,CAAC;QAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;YAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAA,qBAAY,EAAmB,aAAa,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;gBAC9D,OAAO,KAAK,CAAC;aAChB;SACJ;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CACxB,iBAAuC,EACvC,IAA0B,EAC1B,KAA2B,EAC3B,WAAmB;IAEnB,IAAI,IAAI,KAAK,cAAK,IAAI,KAAK,KAAK,cAAK,EAAE;QACnC,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,IAAI,KAAK,KAAK,cAAK,EAAE;QACnC,OAAO,IAAI,CAAC;KACf;IACD,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;QAC9D,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE;QACrC,OAAO,IAAI,CAAC;KACf;IAED,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEzE,OAAO,CACH,mBAAmB,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC;WACpD,mBAAmB,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAC9D,CAAC;AACN,CAAC;AAED,SAAgB,YAAY,CACxB,IAAmB,EACnB,KAAoB;IAEpB,IAAI,IAAI,KAAK,cAAK,IAAI,KAAK,KAAK,cAAK,EAAE;QACnC,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,IAAI,KAAK,cAAK,IAAI,KAAK,KAAK,cAAK,EAAE;QACnC,OAAO,IAAI,CAAC;KACf;IAED,MAAM,iBAAiB,mCAAQ,IAAI,CAAC,iBAAiB,GAAK,KAAK,CAAC,iBAAiB,CAAE,CAAC;IACpF,OAAO,mBAAmB,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACjG,CAAC;AAbD,oCAaC;AAEM,MAAM,iBAAiB,GAAG,CAAI,GAAkB,EAAE,EAAE,CAAC,aAAa,CAAC,cAAK,EAAE,GAAG,CAAC,CAAC;AAAzE,QAAA,iBAAiB,qBAAwD;AAE/E,MAAM,oBAAoB,GAAG,CAAI,IAAmB,EAAE,KAAoB,EAAE,EAAE,CACjF,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAD5D,QAAA,oBAAoB,wBACwC;AAEzE,SAAgB,YAAY,CAAI,GAAkB;IAC9C,IAAI,GAAG,KAAK,cAAK,IAAI,GAAG,KAAK,cAAK,EAAE;QAChC,OAAO,EAAE,CAAC;KACb;IACD,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,SAAS,IAAI,CAAC,IAA6B;QACvC,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACf,OAAO,GAAG,CAAC;AACf,CAAC;AAjBD,oCAiBC;AAED,SAAgB,cAAc,CAC1B,GAAkB,EAClB,CAAoD,EACpD,GAAG,IAAW;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,cAAK,EAAE;QAClB,OAAO,IAAI,CAAC;KACf;IACD,IAAI,MAAM,KAAK,cAAK,EAAE;QAClB,OAAO,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;KACvC;IAED,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAE3C,SAAS,IAAI,CAAC,UAAmC;QAC7C,IAAI,UAAU,CAAC,UAAU,EAAE;YACvB,OAAO,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;SACnF;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAvBD,wCAuBC;AAED,SAAgB,gBAAgB,CAAI,GAAkB;IAClD,IAAI,GAAG,KAAK,cAAK,IAAI,GAAG,KAAK,cAAK,EAAE;QAChC,OAAO,CAAC,CAAC;KACZ;IACD,OAAO,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AALD,4CAKC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n BspSet,\n empty,\n dense,\n Empty,\n Dense,\n combineCmp,\n SetOperations,\n intersectUntyped,\n compareUntyped,\n Cachable,\n UntypedBspSet,\n unionUntyped,\n exceptUntyped,\n lazy,\n UntypedSparse,\n fromUntyped,\n meetsUntyped,\n Pair,\n} from \"./bspSet\";\n\ntype Restrict<T, Props extends (keyof T)[]> = { [Prop in Props[number]]: T[Prop] };\n\nexport type Product<T> = { readonly [dim in keyof T]: T[dim] extends BspSet<infer _TKey, infer _TId> ? T[dim] : never };\n\ntype UntypedProduct<T> = {\n readonly [dim in keyof T]?: T[dim] extends BspSet<infer TKey, infer _TId> ? UntypedSparse<TKey> : never;\n};\n\ntype Probabilities<T> = { readonly [dim in keyof T]?: number };\n\ntype ProductOperations<T> = {\n readonly [dim in keyof T]: T[dim] extends BspSet<infer TKey, infer TId> ? SetOperations<TKey, TId> : never;\n};\n\n/** Given a cartesian product, a subspace is a subset of said space, such that it is also a cartesian product\n * and all the dimensions form subsets of the original cartesian product.\n *\n * This is a generalized notion of something like hyper-rectangles. Examples include:\n * - Rectangles\n * - Individual cells in a grid\n * - Rectangular ranges with missing rows and/or columns\n *\n * For the actual definition and properties, please read the document about *Operations on Cartesian Products*.\n */\ninterface Subspace<T> {\n readonly isSubspace: true;\n // isCoSubspace: boolean;\n readonly bounds: UntypedProduct<T>;\n}\n\n// type CoSubspace<T> = {\n// isSubspace: boolean;\n// isCoSubspace: true;\n// subspace: Product<T>;\n// };\n\ninterface Union<T> {\n readonly isSubspace: false;\n // readonly isCoSubspace: false;\n readonly left: UntypedSparseProduct<T>;\n readonly right: UntypedSparseProduct<T>;\n readonly bounds: UntypedProduct<T>;\n readonly subspaceCount: number;\n}\n\ntype UntypedSparseProduct<T> = Subspace<T> | Union<T>; // | CoSubspace<T>;\n\ninterface SparseProduct<T> {\n readonly productOperations: ProductOperations<T>;\n readonly root: UntypedSparseProduct<T>;\n}\n\ninterface Box<T> {\n box: UntypedProduct<T>;\n probabilities: Probabilities<T>;\n children?: Pair<Box<T>>;\n depth: number;\n}\n\nconst tops: { [poKey in string]?: Box<unknown> } = {};\nconst top = <T>(productOperations: ProductOperations<T>): Box<T> => {\n const dims: [keyof T, ProductOperations<T>[keyof T][\"id\"]][] = [];\n for (const dimStr of Object.keys(productOperations)) {\n const dim = dimStr as keyof T;\n dims.push([dim, productOperations[dim].id]);\n }\n\n const poKey = JSON.stringify(dims.sort());\n let currTop = tops[poKey];\n if (currTop === undefined) {\n currTop = { box: {}, probabilities: {}, depth: 1 };\n tops[poKey] = currTop;\n }\n\n return currTop;\n};\n\nfunction subspace<T>(bounds: UntypedProduct<T>): Subspace<T> | Dense {\n let isDense = true;\n for (const dim of Object.keys(bounds)) {\n if (Object.prototype.hasOwnProperty.call(bounds, dim)) {\n isDense = false;\n break;\n }\n }\n if (isDense) {\n return dense;\n }\n return { isSubspace: true as const, bounds };\n}\n\nfunction getUntypedSubspaceCount<T>(set: UntypedSparseProduct<T>) {\n if (set.isSubspace) {\n return 1;\n }\n return set.subspaceCount;\n}\n\nconst union = <T>(\n left: UntypedSparseProduct<T>,\n right: UntypedSparseProduct<T>,\n bounds: UntypedProduct<T>,\n): Union<T> => ({\n isSubspace: false as const,\n left,\n right,\n bounds,\n subspaceCount: getUntypedSubspaceCount(left) + getUntypedSubspaceCount(right),\n});\n\nfunction sparseProduct<T>(\n productOperations: ProductOperations<T>,\n root: UntypedSparseProduct<T> | Dense,\n): SparseProduct<T> | Dense {\n if (root === dense) {\n return root;\n }\n if (root.isSubspace) {\n let hasSparseDimensions = false;\n for (const dim of Object.keys(root.bounds)) {\n if (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n hasSparseDimensions = true;\n break;\n }\n }\n if (!hasSparseDimensions) {\n return dense;\n }\n }\n return { productOperations, root };\n}\n\ntype UntypedProductSet<T> = Empty | Dense | UntypedSparseProduct<T>;\nexport type ProductSet<T> = Empty | Dense | SparseProduct<T>;\n\nfunction toBspSet<T>(set: UntypedBspSet<T> | undefined) {\n if (set === undefined) {\n return dense;\n }\n return set;\n}\n\n/** An object that contains all downcasts. The operations in here are generally of the kind that need dynamic\n * features, i.e. iterate over the object properties somehow. Their *usage* can be considered safe, but they warrant\n * more careful review whenever a change occurs, because we get less support from the type system and we are\n * downcasting. */\nconst unsafe = {\n unzip<T>(product: Product<T>): ProductSet<T> {\n const productOperations: { [dim in keyof T]?: SetOperations<unknown, unknown> } = {};\n const root: { [dim in keyof T]?: UntypedSparse<unknown> } = {};\n for (const dimStr of Object.keys(product)) {\n const dim = dimStr as keyof T;\n if (Object.prototype.hasOwnProperty.call(product, dim)) {\n const set: BspSet<unknown, unknown> = product[dim];\n if (set === empty) {\n return empty;\n }\n if (set === dense) {\n continue;\n }\n\n productOperations[dim] = set.setOperations;\n root[dim] = set.root;\n }\n }\n\n return sparseProduct(productOperations as ProductOperations<T>, subspace(root as UntypedProduct<T>));\n },\n\n combineProduct<T>(\n productOperations: ProductOperations<T>,\n left: UntypedProduct<T>,\n right: UntypedProduct<T>,\n combineFunc: <Key extends Cachable<Key>, Id>(\n setOperations: SetOperations<Key, Id>,\n left: UntypedBspSet<Key>,\n right: UntypedBspSet<Key>\n ) => UntypedBspSet<Key>,\n ) {\n const res: { [dim in keyof T]?: UntypedSparse<unknown> } = {};\n for (const dimStr of Object.keys(productOperations)) {\n const dim = dimStr as keyof T;\n if (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n const combined = combineFunc<unknown, unknown>(\n productOperations[dim],\n toBspSet(left[dim]),\n toBspSet(right[dim]),\n );\n if (combined === empty) {\n return combined;\n }\n if (combined === dense) {\n continue;\n }\n res[dim] = combined;\n }\n }\n\n return res as UntypedProduct<T>;\n },\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n restrict<T extends object, Props extends (keyof T)[]>(object: T, ...props: Props) {\n const res: Partial<Restrict<T, Props>> = {};\n for (const key of props) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n const prop = object[key];\n res[key] = prop;\n }\n }\n\n return res as Restrict<T, Props>;\n },\n\n fromUntypedProduct<T, Props extends (keyof T)[]>(\n productOperations: ProductOperations<Restrict<T, Props>>,\n bounds: UntypedProduct<Restrict<T, Props>>,\n dims: Props,\n ) {\n const product: { [dim in Props[number]]?: BspSet<unknown, unknown> } = {};\n for (const dim of dims) {\n const bound: UntypedSparse<unknown> | undefined = bounds[dim];\n product[dim] = fromUntyped(productOperations[dim], bound !== undefined ? bound : dense);\n }\n return product as Product<Restrict<T, Props>>;\n },\n\n denseProduct<T, Props extends (keyof T)[]>(dims: Props): Product<Restrict<T, Props>> {\n const top_inner: { [dim in Props[number]]?: Dense } = {};\n for (const dim of dims) {\n top_inner[dim] = dense;\n }\n return top_inner as Product<Restrict<T, Props>>;\n },\n};\n\nexport const createFromProduct = unsafe.unzip.bind(unsafe);\n\ntype Compatible<T, U> = { [dim in keyof T & keyof U]: T[dim] };\n\nfunction joinBounds<T>(productOperations: ProductOperations<T>, left: UntypedProduct<T>, right: UntypedProduct<T>) {\n const join = unsafe.combineProduct(productOperations, left, right, unionUntyped);\n if (join === empty) {\n throw new Error(\"broken invariant: the union of two non-empty products cannot be empty\");\n }\n\n return join;\n}\n\nfunction compareSubspace<T>(\n productOperations: ProductOperations<T>,\n left: UntypedProduct<T>,\n right: UntypedProduct<T>,\n) {\n let cmp: ReturnType<typeof combineCmp> = 0;\n for (const dimStr of Object.keys(productOperations)) {\n const dim = dimStr as keyof T;\n if (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n const lProj = toBspSet(left[dim]);\n const rProj = toBspSet(right[dim]);\n const setOperations = productOperations[dim];\n\n cmp = combineCmp(cmp, compareUntyped<unknown, unknown>(setOperations, lProj, rProj));\n\n if (cmp === undefined) {\n return undefined;\n }\n }\n }\n\n return cmp;\n}\n\nconst tryUnionSubspaces = (() => {\n const cache: { left?: unknown; right?: unknown; res?: unknown; } = {};\n return <T>(\n productOperations: ProductOperations<T>,\n left: Subspace<T>,\n right: Subspace<T>,\n ): Subspace<T> | Dense | Empty | undefined => {\n if (left === cache.left && right === cache.right) {\n return cache.res as ReturnType<typeof tryUnionSubspaces>;\n }\n cache.left = left;\n cache.right = right;\n\n const cmp = compareSubspace(productOperations, left.bounds, right.bounds);\n if (cmp !== undefined) {\n return (cache.res = cmp <= 0 ? right : left);\n }\n let differentDimension: keyof T | undefined;\n\n // because Object.keys only returns string[], we need to downcast\n const po_keys = Object.keys(productOperations) as (keyof T)[];\n for (const dim of po_keys) {\n if (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n const cmp_inner = compareUntyped<unknown, unknown>(\n productOperations[dim],\n toBspSet(left.bounds[dim]),\n toBspSet(right.bounds[dim]),\n );\n if (cmp_inner !== 0) {\n if (differentDimension !== undefined) {\n return (cache.res = undefined);\n }\n\n differentDimension = dim;\n }\n }\n }\n\n if (differentDimension !== undefined) {\n const newDim = unionUntyped<unknown, unknown>(\n productOperations[differentDimension],\n toBspSet(left.bounds[differentDimension]),\n toBspSet(right.bounds[differentDimension]),\n );\n if (newDim === empty) {\n return (cache.res = empty);\n }\n if (newDim === dense) {\n // we are actually deleting the `differentDimension`, so the variable\n // `deleted` must be there. Hence disabling the rule here.\n const { [differentDimension]: deleted, ...leftBoundsWithoutDifferentDimension } = left.bounds;\n return (cache.res = subspace<unknown>(leftBoundsWithoutDifferentDimension));\n }\n\n const newBounds: UntypedProduct<T> = {\n ...left.bounds,\n [differentDimension]: newDim,\n };\n return (cache.res = subspace(newBounds));\n }\n\n return (cache.res = undefined);\n };\n})();\n\nfunction combineChildren<T>(\n productOperations: ProductOperations<T>,\n left: UntypedProductSet<T>,\n right: UntypedProductSet<T>,\n): UntypedProductSet<T> {\n if (right === empty) {\n return left;\n }\n if (right === dense) {\n return right;\n }\n if (left === empty) {\n return right;\n }\n if (left === dense) {\n return left;\n }\n\n if (!left.isSubspace || !right.isSubspace) {\n return union<T>(left, right, joinBounds(productOperations, left.bounds, right.bounds));\n }\n\n const combinedSubspace = tryUnionSubspaces<T>(productOperations, left, right);\n\n if (combinedSubspace !== undefined) {\n return combinedSubspace;\n }\n return union(left, right, joinBounds(productOperations, left.bounds, right.bounds));\n}\n\nfunction projectUntyped<T, Props extends (keyof T)[]>(\n productOperations: ProductOperations<T>,\n set: UntypedSparseProduct<T>,\n ...dims: Props\n): UntypedProductSet<Restrict<T, Props>> {\n const bounds = unsafe.restrict(set.bounds, ...dims);\n if (set.isSubspace) {\n return subspace(bounds);\n }\n\n const lChild = projectUntyped(productOperations, set.left, ...dims);\n if (lChild === dense) {\n return dense;\n }\n const rChild = projectUntyped(productOperations, set.right, ...dims);\n return combineChildren(productOperations, lChild, rChild);\n}\n\nexport function project<T, Props extends (keyof T)[]>(\n set: ProductSet<T>,\n ...dims: Props\n): ProductSet<Restrict<T, Props>> {\n if (set === dense || set === empty) {\n return set;\n }\n const productOperations = unsafe.restrict(set.productOperations, ...dims);\n const root = projectUntyped(productOperations, set.root, ...dims);\n if (root === empty) {\n return root;\n }\n return sparseProduct(productOperations, root);\n}\n\nfunction splitBox<T>(productOperations: ProductOperations<T>, currentBox: Box<T>): Pair<Box<T>> {\n if (currentBox.children !== undefined) { return currentBox.children; }\n const { box, probabilities } = currentBox;\n let biggestDim: keyof T | undefined;\n let biggestDimKey;\n let currentProb = 0;\n // because Object.keys only returns string[], we need to downcast\n const po_keys = Object.keys(productOperations) as (keyof T)[];\n for (const dim of po_keys) {\n if (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n const prob: number | undefined = probabilities[dim];\n const setOperations_inner = productOperations[dim];\n if (prob === undefined) {\n biggestDim = dim;\n biggestDimKey = setOperations_inner.top;\n break;\n }\n\n if (prob > currentProb) {\n const dimensionSet = toBspSet(box[dim]);\n if (dimensionSet === empty) {\n throw new Error(\"the key split can never return empty\");\n }\n let key = setOperations_inner.top;\n if (dimensionSet !== dense) {\n if (!dimensionSet.isExact) {\n throw new Error(\"the key can always be represented exactly\");\n }\n\n key = dimensionSet.key;\n }\n if (!setOperations_inner.canSplit(key)) {\n continue;\n }\n biggestDim = dim;\n currentProb = prob;\n biggestDimKey = key;\n }\n }\n }\n\n if (biggestDim === undefined || biggestDimKey === undefined) {\n throw new Error(\"there has to be at least one dimension\");\n }\n\n const setOperations = productOperations[biggestDim];\n\n const [[leftDim, leftProb], [rightDim, rightProb]] = setOperations.split(biggestDimKey);\n const res: ReturnType<typeof splitBox> = [\n {\n box: { ...box, [biggestDim]: lazy<unknown, unknown>(setOperations, setOperations.top, leftDim) },\n probabilities: { ...probabilities, [biggestDim]: leftProb },\n depth: currentBox.depth + 1,\n },\n {\n box: { ...box, [biggestDim]: lazy<unknown, unknown>(setOperations, setOperations.top, rightDim) },\n probabilities: { ...probabilities, [biggestDim]: rightProb },\n depth: currentBox.depth + 1,\n },\n ];\n if (currentBox.depth < 10) {\n currentBox.children = res;\n }\n return res;\n}\n\nfunction restrictByBounds<T>(\n productOperations: ProductOperations<T>,\n set: UntypedProductSet<T>,\n leftBounds: UntypedProduct<T>,\n rightBounds: UntypedProduct<T>,\n): Pair<UntypedProductSet<T>> {\n if (set === empty) {\n return [empty, empty];\n }\n if (set === dense) {\n return [subspace(leftBounds), subspace(rightBounds)];\n }\n const cmp = compareSubspace(productOperations, set.bounds, leftBounds);\n\n // the set is fully contained in the left half, i.e. we know the pair.\n if (cmp !== undefined && cmp <= 0) {\n return [set, empty];\n }\n\n const newLeftBounds = unsafe.combineProduct(productOperations, set.bounds, leftBounds, intersectUntyped);\n\n // if we know, that the left set is completely empty, then the whole set is in the right bounds.\n if (newLeftBounds === empty) {\n return [empty, set];\n }\n\n const newRightBounds = unsafe.combineProduct(productOperations, set.bounds, rightBounds, intersectUntyped);\n if (set.isSubspace) {\n return [subspace(newLeftBounds), newRightBounds === empty ? empty : subspace(newRightBounds)];\n }\n\n const [ll, lr] = restrictByBounds(productOperations, set.left, leftBounds, rightBounds);\n const [rl, rr] = restrictByBounds(productOperations, set.right, leftBounds, rightBounds);\n return [combineChildren(productOperations, ll, rl), combineChildren(productOperations, lr, rr)];\n}\n\nconst splitByBox = <T>(\n productOperations: ProductOperations<T>,\n set: UntypedProductSet<T>,\n { box: leftBounds }: Box<T>,\n { box: rightBounds }: Box<T>,\n): Pair<UntypedProductSet<T>, UntypedProductSet<T>> => {\n return restrictByBounds(productOperations, set, leftBounds, rightBounds);\n};\n\nfunction recurse<T>(\n productOperations: ProductOperations<T>,\n left: UntypedProductSet<T>,\n right: UntypedProductSet<T>,\n currentBox: Box<T>,\n visitFunc: (\n productOperations: ProductOperations<T>,\n left: UntypedProductSet<T>,\n right: UntypedProductSet<T>,\n box: Box<T>\n ) => UntypedProductSet<T>,\n) {\n const [leftBox, rightBox] = splitBox(productOperations, currentBox);\n const [ll, lr] = splitByBox(productOperations, left, leftBox, rightBox);\n const [rl, rr] = splitByBox(productOperations, right, leftBox, rightBox);\n\n const lChild = visitFunc(productOperations, ll, rl, leftBox);\n if (lChild === dense) {\n return dense;\n }\n const rChild = visitFunc(productOperations, lr, rr, rightBox);\n return combineChildren(productOperations, lChild, rChild);\n}\n\nfunction unionUntypedProduct<T>(\n productOperations: ProductOperations<T>,\n left: UntypedProductSet<T>,\n right: UntypedProductSet<T>,\n currentBox: Box<T>,\n): UntypedProductSet<T> {\n if (right === empty) {\n return left;\n }\n if (left === empty) {\n return right;\n }\n if (left === dense) {\n return left;\n }\n if (right === dense) {\n return right;\n }\n if (left.isSubspace && right.isSubspace) {\n const combinedSubspace = tryUnionSubspaces(productOperations, left, right);\n if (combinedSubspace !== undefined) {\n return combinedSubspace;\n }\n }\n\n return recurse(productOperations, left, right, currentBox, unionUntypedProduct);\n}\n\nexport function unionProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n left: ProductSet<T>,\n right: ProductSet<U>,\n): ProductSet<T & U> {\n if (right === empty) {\n return left;\n }\n if (right === dense) {\n return right;\n }\n if (left === empty) {\n return right;\n }\n if (left === dense) {\n return left;\n }\n const productOperations = { ...left.productOperations, ...right.productOperations };\n const res = unionUntypedProduct(productOperations, left.root, right.root, top(productOperations));\n if (res === empty) {\n return res;\n }\n return sparseProduct(productOperations, res);\n}\n\nfunction intersectUntypedProduct<T>(\n productOperations: ProductOperations<T>,\n left: UntypedProductSet<T>,\n right: UntypedProductSet<T>,\n currentBox: Box<T>,\n): UntypedProductSet<T> {\n if (left === empty || right === empty) {\n return empty;\n }\n if (left === dense) {\n return right;\n }\n if (right === dense) {\n return left;\n }\n if (left.isSubspace && right.isSubspace) {\n const res = unsafe.combineProduct(productOperations, left.bounds, right.bounds, intersectUntyped);\n if (res === empty) {\n return empty;\n }\n return subspace(res);\n }\n\n return recurse(productOperations, left, right, currentBox, intersectUntypedProduct);\n}\n\nexport function intersectProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n left: ProductSet<T>,\n right: ProductSet<U>,\n): ProductSet<T & U> {\n if (left === empty) {\n return left;\n }\n if (right === empty) {\n return right;\n }\n if (left === dense) {\n return right;\n }\n if (right === dense) {\n return left;\n }\n\n const productOperations = { ...left.productOperations, ...right.productOperations };\n const res = intersectUntypedProduct(productOperations, left.root, right.root, top(productOperations));\n if (res === empty) {\n return res;\n }\n return sparseProduct(productOperations, res);\n}\n\nfunction tryExceptSubspaces<T>(\n productOperations: ProductOperations<T>,\n left: Subspace<T>,\n right: Subspace<T>,\n): Subspace<T> | Dense | Empty | undefined {\n const cmp = compareSubspace(productOperations, left.bounds, right.bounds);\n if (cmp === 0 || cmp === -1) {\n return empty;\n }\n let notContainedDimension: keyof T | undefined;\n // because Object.keys only returns string[], we need to downcast\n const po_keys = Object.keys(productOperations) as (keyof T)[];\n for (const dim of po_keys) {\n if (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n const cmp_inner = compareUntyped<unknown, unknown>(\n productOperations[dim],\n toBspSet(left.bounds[dim]),\n toBspSet(right.bounds[dim]),\n );\n if (cmp_inner === undefined || cmp_inner > 0) {\n if (notContainedDimension !== undefined) {\n return undefined;\n }\n\n notContainedDimension = dim;\n }\n }\n }\n\n if (notContainedDimension !== undefined) {\n const newDim = exceptUntyped<unknown, unknown>(\n productOperations[notContainedDimension],\n toBspSet(left.bounds[notContainedDimension]),\n toBspSet(right.bounds[notContainedDimension]),\n );\n\n if (newDim === empty) {\n return empty;\n }\n if (newDim === dense) {\n // we are actually deleting the `differentDimension`, so the variable\n // `deleted` must be there. Hence disabling the rule here.\n const { [notContainedDimension]: deleted, ...leftBoundsWithoutDifferentDimension } = left.bounds;\n return subspace<unknown>(leftBoundsWithoutDifferentDimension);\n }\n const newBounds: UntypedProduct<T> = {\n ...left.bounds,\n [notContainedDimension]: newDim,\n };\n return subspace(newBounds);\n }\n\n return undefined;\n}\n\nfunction exceptUntypedProduct<T>(\n productOperations: ProductOperations<T>,\n left: UntypedProductSet<T>,\n right: UntypedProductSet<T>,\n currentBox: Box<T>,\n): UntypedProductSet<T> {\n if (left === empty) {\n return left;\n }\n if (right === dense) {\n return empty;\n }\n if (right === empty) {\n return left;\n }\n\n if (left === dense) {\n return recurse(productOperations, left, right, currentBox, exceptUntypedProduct);\n }\n\n if (left.isSubspace && right.isSubspace) {\n const combinedSubspace = tryExceptSubspaces(productOperations, left, right);\n if (combinedSubspace !== undefined) {\n return combinedSubspace;\n }\n }\n\n return recurse(productOperations, left, right, currentBox, exceptUntypedProduct);\n}\n\nexport function exceptProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n left: ProductSet<T>,\n right: ProductSet<U>,\n): ProductSet<T & U> {\n if (left === empty) {\n return left;\n }\n if (right === empty) {\n return left;\n }\n if (right === dense) {\n return empty;\n }\n if (left === dense) {\n const res_inner =\n exceptUntypedProduct(right.productOperations, dense, right.root, top(right.productOperations));\n if (res_inner === empty) {\n return res_inner;\n }\n return sparseProduct(right.productOperations, res_inner);\n }\n\n const productOperations = { ...left.productOperations, ...right.productOperations };\n const res = exceptUntypedProduct(productOperations, left.root, right.root, top(productOperations));\n if (res === empty) {\n return res;\n }\n return sparseProduct(productOperations, res);\n}\n\nfunction compareUntypedProduct<T>(\n productOperations: ProductOperations<T>,\n left: UntypedProductSet<T>,\n right: UntypedProductSet<T>,\n boundingBox: Box<T>,\n): -1 | 0 | 1 | undefined {\n if (left === right) {\n return 0;\n }\n\n if (left === empty) {\n return -1;\n }\n\n if (right === empty) {\n return 1;\n }\n\n if (left === dense) {\n if (right === dense) {\n return 0;\n }\n\n return 1;\n }\n\n if (right === dense) {\n return -1;\n }\n\n if (left.isSubspace) {\n if (right.isSubspace) {\n return compareSubspace(productOperations, left.bounds, right.bounds);\n }\n }\n\n const [leftBox, rightBox] = splitBox(productOperations, boundingBox);\n const [ll, lr] = splitByBox(productOperations, left, leftBox, rightBox);\n const [rl, rr] = splitByBox(productOperations, right, leftBox, rightBox);\n\n const leftCmp = compareUntypedProduct(productOperations, ll, rl, leftBox);\n if (leftCmp === undefined) {\n return undefined;\n }\n return combineCmp(leftCmp, compareUntypedProduct(productOperations, lr, rr, rightBox));\n}\n\nexport function compareProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n left: ProductSet<T>,\n right: ProductSet<U>,\n) {\n if (left === right) {\n return 0;\n }\n\n if (left === empty) {\n return -1;\n }\n\n if (right === empty) {\n return 1;\n }\n\n if (left === dense) {\n if (right === dense) {\n return 0;\n }\n\n return 1;\n }\n\n if (right === dense) {\n return -1;\n }\n\n const productOperations = { ...left.productOperations, ...right.productOperations };\n return compareUntypedProduct(productOperations, left.root, right.root, top(productOperations));\n}\n\nfunction meetsSubspace<T>(productOperations: ProductOperations<T>, left: UntypedProduct<T>, right: UntypedProduct<T>) {\n for (const dimStr of Object.keys(productOperations)) {\n const dim = dimStr as keyof T;\n if (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n const lProj = toBspSet(left[dim]);\n const rProj = toBspSet(right[dim]);\n const setOperations = productOperations[dim];\n if (!meetsUntyped<unknown, unknown>(setOperations, lProj, rProj)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nfunction meetsUntypedProduct<T>(\n productOperations: ProductOperations<T>,\n left: UntypedProductSet<T>,\n right: UntypedProductSet<T>,\n boundingBox: Box<T>,\n): boolean {\n if (left === empty || right === empty) {\n return false;\n }\n if (left === dense || right === dense) {\n return true;\n }\n if (!meetsSubspace(productOperations, left.bounds, right.bounds)) {\n return false;\n }\n if (left.isSubspace && right.isSubspace) {\n return true;\n }\n\n const [leftBox, rightBox] = splitBox(productOperations, boundingBox);\n const [ll, lr] = splitByBox(productOperations, left, leftBox, rightBox);\n const [rl, rr] = splitByBox(productOperations, right, leftBox, rightBox);\n\n return (\n meetsUntypedProduct(productOperations, ll, rl, leftBox)\n || meetsUntypedProduct(productOperations, lr, rr, rightBox)\n );\n}\n\nexport function meetsProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n left: ProductSet<T>,\n right: ProductSet<U>,\n) {\n if (left === empty || right === empty) {\n return false;\n }\n if (left === dense || right === dense) {\n return true;\n }\n\n const productOperations = { ...left.productOperations, ...right.productOperations };\n return meetsUntypedProduct(productOperations, left.root, right.root, top(productOperations));\n}\n\nexport const complementProduct = <T>(set: ProductSet<T>) => exceptProduct(dense, set);\n\nexport const symmetricDiffProduct = <T>(left: ProductSet<T>, right: ProductSet<T>) =>\n unionProduct(exceptProduct(left, right), exceptProduct(right, left));\n\nexport function getSubspaces<T>(set: ProductSet<T>) {\n if (set === empty || set === dense) {\n return [];\n }\n const res: UntypedProduct<T>[] = [];\n function loop(root: UntypedSparseProduct<T>) {\n if (root.isSubspace) {\n res.push(root.bounds);\n return;\n }\n\n loop(root.left);\n loop(root.right);\n }\n\n loop(set.root);\n return res;\n}\n\nexport function forEachProduct<T, Props extends (keyof T)[]>(\n set: ProductSet<T>,\n f: (product: Product<Restrict<T, Props>>) => boolean,\n ...dims: Props\n): boolean {\n const newSet = project(set, ...dims);\n if (newSet === empty) {\n return true;\n }\n if (newSet === dense) {\n return f(unsafe.denseProduct(dims));\n }\n\n const { productOperations, root } = newSet;\n\n function loop(root_inner: UntypedSparseProduct<T>): boolean {\n if (root_inner.isSubspace) {\n return f(unsafe.fromUntypedProduct(productOperations, root_inner.bounds, dims));\n }\n return loop(root_inner.left) && loop(root_inner.right);\n }\n\n return loop(root);\n}\n\nexport function getSubspaceCount<T>(set: ProductSet<T>) {\n if (set === empty || set === dense) {\n return 0;\n }\n return getUntypedSubspaceCount(set.root);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"productSet.js","sourceRoot":"","sources":["../src/productSet.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tBspSet,\n\tempty,\n\tdense,\n\tEmpty,\n\tDense,\n\tcombineCmp,\n\tSetOperations,\n\tintersectUntyped,\n\tcompareUntyped,\n\tCachable,\n\tUntypedBspSet,\n\tunionUntyped,\n\texceptUntyped,\n\tlazy,\n\tUntypedSparse,\n\tfromUntyped,\n\tmeetsUntyped,\n\tPair,\n} from \"./bspSet\";\n\ntype Restrict<T, Props extends (keyof T)[]> = { [Prop in Props[number]]: T[Prop] };\n\nexport type Product<T> = {\n\treadonly [dim in keyof T]: T[dim] extends BspSet<infer _TKey, infer _TId> ? T[dim] : never;\n};\n\ntype UntypedProduct<T> = {\n\treadonly [dim in keyof T]?: T[dim] extends BspSet<infer TKey, infer _TId>\n\t\t? UntypedSparse<TKey>\n\t\t: never;\n};\n\ntype Probabilities<T> = { readonly [dim in keyof T]?: number };\n\ntype ProductOperations<T> = {\n\treadonly [dim in keyof T]: T[dim] extends BspSet<infer TKey, infer TId>\n\t\t? SetOperations<TKey, TId>\n\t\t: never;\n};\n\n/** Given a cartesian product, a subspace is a subset of said space, such that it is also a cartesian product\n * and all the dimensions form subsets of the original cartesian product.\n *\n * This is a generalized notion of something like hyper-rectangles. Examples include:\n * - Rectangles\n * - Individual cells in a grid\n * - Rectangular ranges with missing rows and/or columns\n *\n * For the actual definition and properties, please read the document about *Operations on Cartesian Products*.\n */\ninterface Subspace<T> {\n\treadonly isSubspace: true;\n\t// isCoSubspace: boolean;\n\treadonly bounds: UntypedProduct<T>;\n}\n\n// type CoSubspace<T> = {\n// isSubspace: boolean;\n// isCoSubspace: true;\n// subspace: Product<T>;\n// };\n\ninterface Union<T> {\n\treadonly isSubspace: false;\n\t// readonly isCoSubspace: false;\n\treadonly left: UntypedSparseProduct<T>;\n\treadonly right: UntypedSparseProduct<T>;\n\treadonly bounds: UntypedProduct<T>;\n\treadonly subspaceCount: number;\n}\n\ntype UntypedSparseProduct<T> = Subspace<T> | Union<T>; // | CoSubspace<T>;\n\ninterface SparseProduct<T> {\n\treadonly productOperations: ProductOperations<T>;\n\treadonly root: UntypedSparseProduct<T>;\n}\n\ninterface Box<T> {\n\tbox: UntypedProduct<T>;\n\tprobabilities: Probabilities<T>;\n\tchildren?: Pair<Box<T>>;\n\tdepth: number;\n}\n\nconst tops: { [poKey in string]?: Box<unknown> } = {};\nconst top = <T>(productOperations: ProductOperations<T>): Box<T> => {\n\tconst dims: [keyof T, ProductOperations<T>[keyof T][\"id\"]][] = [];\n\tfor (const dimStr of Object.keys(productOperations)) {\n\t\tconst dim = dimStr as keyof T;\n\t\tdims.push([dim, productOperations[dim].id]);\n\t}\n\n\tconst poKey = JSON.stringify(dims.sort());\n\tlet currTop = tops[poKey];\n\tif (currTop === undefined) {\n\t\tcurrTop = { box: {}, probabilities: {}, depth: 1 };\n\t\ttops[poKey] = currTop;\n\t}\n\n\treturn currTop;\n};\n\nfunction subspace<T>(bounds: UntypedProduct<T>): Subspace<T> | Dense {\n\tlet isDense = true;\n\tfor (const dim of Object.keys(bounds)) {\n\t\tif (Object.prototype.hasOwnProperty.call(bounds, dim)) {\n\t\t\tisDense = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (isDense) {\n\t\treturn dense;\n\t}\n\treturn { isSubspace: true as const, bounds };\n}\n\nfunction getUntypedSubspaceCount<T>(set: UntypedSparseProduct<T>) {\n\tif (set.isSubspace) {\n\t\treturn 1;\n\t}\n\treturn set.subspaceCount;\n}\n\nconst union = <T>(\n\tleft: UntypedSparseProduct<T>,\n\tright: UntypedSparseProduct<T>,\n\tbounds: UntypedProduct<T>,\n): Union<T> => ({\n\tisSubspace: false as const,\n\tleft,\n\tright,\n\tbounds,\n\tsubspaceCount: getUntypedSubspaceCount(left) + getUntypedSubspaceCount(right),\n});\n\nfunction sparseProduct<T>(\n\tproductOperations: ProductOperations<T>,\n\troot: UntypedSparseProduct<T> | Dense,\n): SparseProduct<T> | Dense {\n\tif (root === dense) {\n\t\treturn root;\n\t}\n\tif (root.isSubspace) {\n\t\tlet hasSparseDimensions = false;\n\t\tfor (const dim of Object.keys(root.bounds)) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n\t\t\t\thasSparseDimensions = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!hasSparseDimensions) {\n\t\t\treturn dense;\n\t\t}\n\t}\n\treturn { productOperations, root };\n}\n\ntype UntypedProductSet<T> = Empty | Dense | UntypedSparseProduct<T>;\nexport type ProductSet<T> = Empty | Dense | SparseProduct<T>;\n\nfunction toBspSet<T>(set: UntypedBspSet<T> | undefined) {\n\tif (set === undefined) {\n\t\treturn dense;\n\t}\n\treturn set;\n}\n\n/** An object that contains all downcasts. The operations in here are generally of the kind that need dynamic\n * features, i.e. iterate over the object properties somehow. Their *usage* can be considered safe, but they warrant\n * more careful review whenever a change occurs, because we get less support from the type system and we are\n * downcasting. */\nconst unsafe = {\n\tunzip<T>(product: Product<T>): ProductSet<T> {\n\t\tconst productOperations: { [dim in keyof T]?: SetOperations<unknown, unknown> } = {};\n\t\tconst root: { [dim in keyof T]?: UntypedSparse<unknown> } = {};\n\t\tfor (const dimStr of Object.keys(product)) {\n\t\t\tconst dim = dimStr as keyof T;\n\t\t\tif (Object.prototype.hasOwnProperty.call(product, dim)) {\n\t\t\t\tconst set: BspSet<unknown, unknown> = product[dim];\n\t\t\t\tif (set === empty) {\n\t\t\t\t\treturn empty;\n\t\t\t\t}\n\t\t\t\tif (set === dense) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tproductOperations[dim] = set.setOperations;\n\t\t\t\troot[dim] = set.root;\n\t\t\t}\n\t\t}\n\n\t\treturn sparseProduct(\n\t\t\tproductOperations as ProductOperations<T>,\n\t\t\tsubspace(root as UntypedProduct<T>),\n\t\t);\n\t},\n\n\tcombineProduct<T>(\n\t\tproductOperations: ProductOperations<T>,\n\t\tleft: UntypedProduct<T>,\n\t\tright: UntypedProduct<T>,\n\t\tcombineFunc: <Key extends Cachable<Key>, Id>(\n\t\t\tsetOperations: SetOperations<Key, Id>,\n\t\t\tleft: UntypedBspSet<Key>,\n\t\t\tright: UntypedBspSet<Key>,\n\t\t) => UntypedBspSet<Key>,\n\t) {\n\t\tconst res: { [dim in keyof T]?: UntypedSparse<unknown> } = {};\n\t\tfor (const dimStr of Object.keys(productOperations)) {\n\t\t\tconst dim = dimStr as keyof T;\n\t\t\tif (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n\t\t\t\tconst combined = combineFunc<unknown, unknown>(\n\t\t\t\t\tproductOperations[dim],\n\t\t\t\t\ttoBspSet(left[dim]),\n\t\t\t\t\ttoBspSet(right[dim]),\n\t\t\t\t);\n\t\t\t\tif (combined === empty) {\n\t\t\t\t\treturn combined;\n\t\t\t\t}\n\t\t\t\tif (combined === dense) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tres[dim] = combined;\n\t\t\t}\n\t\t}\n\n\t\treturn res as UntypedProduct<T>;\n\t},\n\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\trestrict<T extends object, Props extends (keyof T)[]>(object: T, ...props: Props) {\n\t\tconst res: Partial<Restrict<T, Props>> = {};\n\t\tfor (const key of props) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(object, key)) {\n\t\t\t\tconst prop = object[key];\n\t\t\t\tres[key] = prop;\n\t\t\t}\n\t\t}\n\n\t\treturn res as Restrict<T, Props>;\n\t},\n\n\tfromUntypedProduct<T, Props extends (keyof T)[]>(\n\t\tproductOperations: ProductOperations<Restrict<T, Props>>,\n\t\tbounds: UntypedProduct<Restrict<T, Props>>,\n\t\tdims: Props,\n\t) {\n\t\tconst product: { [dim in Props[number]]?: BspSet<unknown, unknown> } = {};\n\t\tfor (const dim of dims) {\n\t\t\tconst bound: UntypedSparse<unknown> | undefined = bounds[dim];\n\t\t\tproduct[dim] = fromUntyped(productOperations[dim], bound !== undefined ? bound : dense);\n\t\t}\n\t\treturn product as Product<Restrict<T, Props>>;\n\t},\n\n\tdenseProduct<T, Props extends (keyof T)[]>(dims: Props): Product<Restrict<T, Props>> {\n\t\tconst top_inner: { [dim in Props[number]]?: Dense } = {};\n\t\tfor (const dim of dims) {\n\t\t\ttop_inner[dim] = dense;\n\t\t}\n\t\treturn top_inner as Product<Restrict<T, Props>>;\n\t},\n};\n\nexport const createFromProduct = unsafe.unzip.bind(unsafe);\n\ntype Compatible<T, U> = { [dim in keyof T & keyof U]: T[dim] };\n\nfunction joinBounds<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProduct<T>,\n\tright: UntypedProduct<T>,\n) {\n\tconst join = unsafe.combineProduct(productOperations, left, right, unionUntyped);\n\tif (join === empty) {\n\t\tthrow new Error(\"broken invariant: the union of two non-empty products cannot be empty\");\n\t}\n\n\treturn join;\n}\n\nfunction compareSubspace<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProduct<T>,\n\tright: UntypedProduct<T>,\n) {\n\tlet cmp: ReturnType<typeof combineCmp> = 0;\n\tfor (const dimStr of Object.keys(productOperations)) {\n\t\tconst dim = dimStr as keyof T;\n\t\tif (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n\t\t\tconst lProj = toBspSet(left[dim]);\n\t\t\tconst rProj = toBspSet(right[dim]);\n\t\t\tconst setOperations = productOperations[dim];\n\n\t\t\tcmp = combineCmp(cmp, compareUntyped<unknown, unknown>(setOperations, lProj, rProj));\n\n\t\t\tif (cmp === undefined) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn cmp;\n}\n\nconst tryUnionSubspaces = (() => {\n\tconst cache: { left?: unknown; right?: unknown; res?: unknown } = {};\n\treturn <T>(\n\t\tproductOperations: ProductOperations<T>,\n\t\tleft: Subspace<T>,\n\t\tright: Subspace<T>,\n\t): Subspace<T> | Dense | Empty | undefined => {\n\t\tif (left === cache.left && right === cache.right) {\n\t\t\treturn cache.res as ReturnType<typeof tryUnionSubspaces>;\n\t\t}\n\t\tcache.left = left;\n\t\tcache.right = right;\n\n\t\tconst cmp = compareSubspace(productOperations, left.bounds, right.bounds);\n\t\tif (cmp !== undefined) {\n\t\t\treturn (cache.res = cmp <= 0 ? right : left);\n\t\t}\n\t\tlet differentDimension: keyof T | undefined;\n\n\t\t// because Object.keys only returns string[], we need to downcast\n\t\tconst po_keys = Object.keys(productOperations) as (keyof T)[];\n\t\tfor (const dim of po_keys) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n\t\t\t\tconst cmp_inner = compareUntyped<unknown, unknown>(\n\t\t\t\t\tproductOperations[dim],\n\t\t\t\t\ttoBspSet(left.bounds[dim]),\n\t\t\t\t\ttoBspSet(right.bounds[dim]),\n\t\t\t\t);\n\t\t\t\tif (cmp_inner !== 0) {\n\t\t\t\t\tif (differentDimension !== undefined) {\n\t\t\t\t\t\treturn (cache.res = undefined);\n\t\t\t\t\t}\n\n\t\t\t\t\tdifferentDimension = dim;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (differentDimension !== undefined) {\n\t\t\tconst newDim = unionUntyped<unknown, unknown>(\n\t\t\t\tproductOperations[differentDimension],\n\t\t\t\ttoBspSet(left.bounds[differentDimension]),\n\t\t\t\ttoBspSet(right.bounds[differentDimension]),\n\t\t\t);\n\t\t\tif (newDim === empty) {\n\t\t\t\treturn (cache.res = empty);\n\t\t\t}\n\t\t\tif (newDim === dense) {\n\t\t\t\t// we are actually deleting the `differentDimension`, so the variable\n\t\t\t\t// `deleted` must be there. Hence disabling the rule here.\n\t\t\t\tconst { [differentDimension]: deleted, ...leftBoundsWithoutDifferentDimension } =\n\t\t\t\t\tleft.bounds;\n\t\t\t\treturn (cache.res = subspace<unknown>(leftBoundsWithoutDifferentDimension));\n\t\t\t}\n\n\t\t\tconst newBounds: UntypedProduct<T> = {\n\t\t\t\t...left.bounds,\n\t\t\t\t[differentDimension]: newDim,\n\t\t\t};\n\t\t\treturn (cache.res = subspace(newBounds));\n\t\t}\n\n\t\treturn (cache.res = undefined);\n\t};\n})();\n\nfunction combineChildren<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProductSet<T>,\n\tright: UntypedProductSet<T>,\n): UntypedProductSet<T> {\n\tif (right === empty) {\n\t\treturn left;\n\t}\n\tif (right === dense) {\n\t\treturn right;\n\t}\n\tif (left === empty) {\n\t\treturn right;\n\t}\n\tif (left === dense) {\n\t\treturn left;\n\t}\n\n\tif (!left.isSubspace || !right.isSubspace) {\n\t\treturn union<T>(left, right, joinBounds(productOperations, left.bounds, right.bounds));\n\t}\n\n\tconst combinedSubspace = tryUnionSubspaces<T>(productOperations, left, right);\n\n\tif (combinedSubspace !== undefined) {\n\t\treturn combinedSubspace;\n\t}\n\treturn union(left, right, joinBounds(productOperations, left.bounds, right.bounds));\n}\n\nfunction projectUntyped<T, Props extends (keyof T)[]>(\n\tproductOperations: ProductOperations<T>,\n\tset: UntypedSparseProduct<T>,\n\t...dims: Props\n): UntypedProductSet<Restrict<T, Props>> {\n\tconst bounds = unsafe.restrict(set.bounds, ...dims);\n\tif (set.isSubspace) {\n\t\treturn subspace(bounds);\n\t}\n\n\tconst lChild = projectUntyped(productOperations, set.left, ...dims);\n\tif (lChild === dense) {\n\t\treturn dense;\n\t}\n\tconst rChild = projectUntyped(productOperations, set.right, ...dims);\n\treturn combineChildren(productOperations, lChild, rChild);\n}\n\nexport function project<T, Props extends (keyof T)[]>(\n\tset: ProductSet<T>,\n\t...dims: Props\n): ProductSet<Restrict<T, Props>> {\n\tif (set === dense || set === empty) {\n\t\treturn set;\n\t}\n\tconst productOperations = unsafe.restrict(set.productOperations, ...dims);\n\tconst root = projectUntyped(productOperations, set.root, ...dims);\n\tif (root === empty) {\n\t\treturn root;\n\t}\n\treturn sparseProduct(productOperations, root);\n}\n\nfunction splitBox<T>(productOperations: ProductOperations<T>, currentBox: Box<T>): Pair<Box<T>> {\n\tif (currentBox.children !== undefined) {\n\t\treturn currentBox.children;\n\t}\n\tconst { box, probabilities } = currentBox;\n\tlet biggestDim: keyof T | undefined;\n\tlet biggestDimKey;\n\tlet currentProb = 0;\n\t// because Object.keys only returns string[], we need to downcast\n\tconst po_keys = Object.keys(productOperations) as (keyof T)[];\n\tfor (const dim of po_keys) {\n\t\tif (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n\t\t\tconst prob: number | undefined = probabilities[dim];\n\t\t\tconst setOperations_inner = productOperations[dim];\n\t\t\tif (prob === undefined) {\n\t\t\t\tbiggestDim = dim;\n\t\t\t\tbiggestDimKey = setOperations_inner.top;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (prob > currentProb) {\n\t\t\t\tconst dimensionSet = toBspSet(box[dim]);\n\t\t\t\tif (dimensionSet === empty) {\n\t\t\t\t\tthrow new Error(\"the key split can never return empty\");\n\t\t\t\t}\n\t\t\t\tlet key = setOperations_inner.top;\n\t\t\t\tif (dimensionSet !== dense) {\n\t\t\t\t\tif (!dimensionSet.isExact) {\n\t\t\t\t\t\tthrow new Error(\"the key can always be represented exactly\");\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = dimensionSet.key;\n\t\t\t\t}\n\t\t\t\tif (!setOperations_inner.canSplit(key)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbiggestDim = dim;\n\t\t\t\tcurrentProb = prob;\n\t\t\t\tbiggestDimKey = key;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (biggestDim === undefined || biggestDimKey === undefined) {\n\t\tthrow new Error(\"there has to be at least one dimension\");\n\t}\n\n\tconst setOperations = productOperations[biggestDim];\n\n\tconst [[leftDim, leftProb], [rightDim, rightProb]] = setOperations.split(biggestDimKey);\n\tconst res: ReturnType<typeof splitBox> = [\n\t\t{\n\t\t\tbox: {\n\t\t\t\t...box,\n\t\t\t\t[biggestDim]: lazy<unknown, unknown>(setOperations, setOperations.top, leftDim),\n\t\t\t},\n\t\t\tprobabilities: { ...probabilities, [biggestDim]: leftProb },\n\t\t\tdepth: currentBox.depth + 1,\n\t\t},\n\t\t{\n\t\t\tbox: {\n\t\t\t\t...box,\n\t\t\t\t[biggestDim]: lazy<unknown, unknown>(setOperations, setOperations.top, rightDim),\n\t\t\t},\n\t\t\tprobabilities: { ...probabilities, [biggestDim]: rightProb },\n\t\t\tdepth: currentBox.depth + 1,\n\t\t},\n\t];\n\tif (currentBox.depth < 10) {\n\t\tcurrentBox.children = res;\n\t}\n\treturn res;\n}\n\nfunction restrictByBounds<T>(\n\tproductOperations: ProductOperations<T>,\n\tset: UntypedProductSet<T>,\n\tleftBounds: UntypedProduct<T>,\n\trightBounds: UntypedProduct<T>,\n): Pair<UntypedProductSet<T>> {\n\tif (set === empty) {\n\t\treturn [empty, empty];\n\t}\n\tif (set === dense) {\n\t\treturn [subspace(leftBounds), subspace(rightBounds)];\n\t}\n\tconst cmp = compareSubspace(productOperations, set.bounds, leftBounds);\n\n\t// the set is fully contained in the left half, i.e. we know the pair.\n\tif (cmp !== undefined && cmp <= 0) {\n\t\treturn [set, empty];\n\t}\n\n\tconst newLeftBounds = unsafe.combineProduct(\n\t\tproductOperations,\n\t\tset.bounds,\n\t\tleftBounds,\n\t\tintersectUntyped,\n\t);\n\n\t// if we know, that the left set is completely empty, then the whole set is in the right bounds.\n\tif (newLeftBounds === empty) {\n\t\treturn [empty, set];\n\t}\n\n\tconst newRightBounds = unsafe.combineProduct(\n\t\tproductOperations,\n\t\tset.bounds,\n\t\trightBounds,\n\t\tintersectUntyped,\n\t);\n\tif (set.isSubspace) {\n\t\treturn [\n\t\t\tsubspace(newLeftBounds),\n\t\t\tnewRightBounds === empty ? empty : subspace(newRightBounds),\n\t\t];\n\t}\n\n\tconst [ll, lr] = restrictByBounds(productOperations, set.left, leftBounds, rightBounds);\n\tconst [rl, rr] = restrictByBounds(productOperations, set.right, leftBounds, rightBounds);\n\treturn [combineChildren(productOperations, ll, rl), combineChildren(productOperations, lr, rr)];\n}\n\nconst splitByBox = <T>(\n\tproductOperations: ProductOperations<T>,\n\tset: UntypedProductSet<T>,\n\t{ box: leftBounds }: Box<T>,\n\t{ box: rightBounds }: Box<T>,\n): Pair<UntypedProductSet<T>, UntypedProductSet<T>> => {\n\treturn restrictByBounds(productOperations, set, leftBounds, rightBounds);\n};\n\nfunction recurse<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProductSet<T>,\n\tright: UntypedProductSet<T>,\n\tcurrentBox: Box<T>,\n\tvisitFunc: (\n\t\tproductOperations: ProductOperations<T>,\n\t\tleft: UntypedProductSet<T>,\n\t\tright: UntypedProductSet<T>,\n\t\tbox: Box<T>,\n\t) => UntypedProductSet<T>,\n) {\n\tconst [leftBox, rightBox] = splitBox(productOperations, currentBox);\n\tconst [ll, lr] = splitByBox(productOperations, left, leftBox, rightBox);\n\tconst [rl, rr] = splitByBox(productOperations, right, leftBox, rightBox);\n\n\tconst lChild = visitFunc(productOperations, ll, rl, leftBox);\n\tif (lChild === dense) {\n\t\treturn dense;\n\t}\n\tconst rChild = visitFunc(productOperations, lr, rr, rightBox);\n\treturn combineChildren(productOperations, lChild, rChild);\n}\n\nfunction unionUntypedProduct<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProductSet<T>,\n\tright: UntypedProductSet<T>,\n\tcurrentBox: Box<T>,\n): UntypedProductSet<T> {\n\tif (right === empty) {\n\t\treturn left;\n\t}\n\tif (left === empty) {\n\t\treturn right;\n\t}\n\tif (left === dense) {\n\t\treturn left;\n\t}\n\tif (right === dense) {\n\t\treturn right;\n\t}\n\tif (left.isSubspace && right.isSubspace) {\n\t\tconst combinedSubspace = tryUnionSubspaces(productOperations, left, right);\n\t\tif (combinedSubspace !== undefined) {\n\t\t\treturn combinedSubspace;\n\t\t}\n\t}\n\n\treturn recurse(productOperations, left, right, currentBox, unionUntypedProduct);\n}\n\nexport function unionProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n\tleft: ProductSet<T>,\n\tright: ProductSet<U>,\n): ProductSet<T & U> {\n\tif (right === empty) {\n\t\treturn left;\n\t}\n\tif (right === dense) {\n\t\treturn right;\n\t}\n\tif (left === empty) {\n\t\treturn right;\n\t}\n\tif (left === dense) {\n\t\treturn left;\n\t}\n\tconst productOperations = { ...left.productOperations, ...right.productOperations };\n\tconst res = unionUntypedProduct(\n\t\tproductOperations,\n\t\tleft.root,\n\t\tright.root,\n\t\ttop(productOperations),\n\t);\n\tif (res === empty) {\n\t\treturn res;\n\t}\n\treturn sparseProduct(productOperations, res);\n}\n\nfunction intersectUntypedProduct<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProductSet<T>,\n\tright: UntypedProductSet<T>,\n\tcurrentBox: Box<T>,\n): UntypedProductSet<T> {\n\tif (left === empty || right === empty) {\n\t\treturn empty;\n\t}\n\tif (left === dense) {\n\t\treturn right;\n\t}\n\tif (right === dense) {\n\t\treturn left;\n\t}\n\tif (left.isSubspace && right.isSubspace) {\n\t\tconst res = unsafe.combineProduct(\n\t\t\tproductOperations,\n\t\t\tleft.bounds,\n\t\t\tright.bounds,\n\t\t\tintersectUntyped,\n\t\t);\n\t\tif (res === empty) {\n\t\t\treturn empty;\n\t\t}\n\t\treturn subspace(res);\n\t}\n\n\treturn recurse(productOperations, left, right, currentBox, intersectUntypedProduct);\n}\n\nexport function intersectProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n\tleft: ProductSet<T>,\n\tright: ProductSet<U>,\n): ProductSet<T & U> {\n\tif (left === empty) {\n\t\treturn left;\n\t}\n\tif (right === empty) {\n\t\treturn right;\n\t}\n\tif (left === dense) {\n\t\treturn right;\n\t}\n\tif (right === dense) {\n\t\treturn left;\n\t}\n\n\tconst productOperations = { ...left.productOperations, ...right.productOperations };\n\tconst res = intersectUntypedProduct(\n\t\tproductOperations,\n\t\tleft.root,\n\t\tright.root,\n\t\ttop(productOperations),\n\t);\n\tif (res === empty) {\n\t\treturn res;\n\t}\n\treturn sparseProduct(productOperations, res);\n}\n\nfunction tryExceptSubspaces<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: Subspace<T>,\n\tright: Subspace<T>,\n): Subspace<T> | Dense | Empty | undefined {\n\tconst cmp = compareSubspace(productOperations, left.bounds, right.bounds);\n\tif (cmp === 0 || cmp === -1) {\n\t\treturn empty;\n\t}\n\tlet notContainedDimension: keyof T | undefined;\n\t// because Object.keys only returns string[], we need to downcast\n\tconst po_keys = Object.keys(productOperations) as (keyof T)[];\n\tfor (const dim of po_keys) {\n\t\tif (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n\t\t\tconst cmp_inner = compareUntyped<unknown, unknown>(\n\t\t\t\tproductOperations[dim],\n\t\t\t\ttoBspSet(left.bounds[dim]),\n\t\t\t\ttoBspSet(right.bounds[dim]),\n\t\t\t);\n\t\t\tif (cmp_inner === undefined || cmp_inner > 0) {\n\t\t\t\tif (notContainedDimension !== undefined) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tnotContainedDimension = dim;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (notContainedDimension !== undefined) {\n\t\tconst newDim = exceptUntyped<unknown, unknown>(\n\t\t\tproductOperations[notContainedDimension],\n\t\t\ttoBspSet(left.bounds[notContainedDimension]),\n\t\t\ttoBspSet(right.bounds[notContainedDimension]),\n\t\t);\n\n\t\tif (newDim === empty) {\n\t\t\treturn empty;\n\t\t}\n\t\tif (newDim === dense) {\n\t\t\t// we are actually deleting the `differentDimension`, so the variable\n\t\t\t// `deleted` must be there. Hence disabling the rule here.\n\t\t\tconst { [notContainedDimension]: deleted, ...leftBoundsWithoutDifferentDimension } =\n\t\t\t\tleft.bounds;\n\t\t\treturn subspace<unknown>(leftBoundsWithoutDifferentDimension);\n\t\t}\n\t\tconst newBounds: UntypedProduct<T> = {\n\t\t\t...left.bounds,\n\t\t\t[notContainedDimension]: newDim,\n\t\t};\n\t\treturn subspace(newBounds);\n\t}\n\n\treturn undefined;\n}\n\nfunction exceptUntypedProduct<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProductSet<T>,\n\tright: UntypedProductSet<T>,\n\tcurrentBox: Box<T>,\n): UntypedProductSet<T> {\n\tif (left === empty) {\n\t\treturn left;\n\t}\n\tif (right === dense) {\n\t\treturn empty;\n\t}\n\tif (right === empty) {\n\t\treturn left;\n\t}\n\n\tif (left === dense) {\n\t\treturn recurse(productOperations, left, right, currentBox, exceptUntypedProduct);\n\t}\n\n\tif (left.isSubspace && right.isSubspace) {\n\t\tconst combinedSubspace = tryExceptSubspaces(productOperations, left, right);\n\t\tif (combinedSubspace !== undefined) {\n\t\t\treturn combinedSubspace;\n\t\t}\n\t}\n\n\treturn recurse(productOperations, left, right, currentBox, exceptUntypedProduct);\n}\n\nexport function exceptProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n\tleft: ProductSet<T>,\n\tright: ProductSet<U>,\n): ProductSet<T & U> {\n\tif (left === empty) {\n\t\treturn left;\n\t}\n\tif (right === empty) {\n\t\treturn left;\n\t}\n\tif (right === dense) {\n\t\treturn empty;\n\t}\n\tif (left === dense) {\n\t\tconst res_inner = exceptUntypedProduct(\n\t\t\tright.productOperations,\n\t\t\tdense,\n\t\t\tright.root,\n\t\t\ttop(right.productOperations),\n\t\t);\n\t\tif (res_inner === empty) {\n\t\t\treturn res_inner;\n\t\t}\n\t\treturn sparseProduct(right.productOperations, res_inner);\n\t}\n\n\tconst productOperations = { ...left.productOperations, ...right.productOperations };\n\tconst res = exceptUntypedProduct(\n\t\tproductOperations,\n\t\tleft.root,\n\t\tright.root,\n\t\ttop(productOperations),\n\t);\n\tif (res === empty) {\n\t\treturn res;\n\t}\n\treturn sparseProduct(productOperations, res);\n}\n\nfunction compareUntypedProduct<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProductSet<T>,\n\tright: UntypedProductSet<T>,\n\tboundingBox: Box<T>,\n): -1 | 0 | 1 | undefined {\n\tif (left === right) {\n\t\treturn 0;\n\t}\n\n\tif (left === empty) {\n\t\treturn -1;\n\t}\n\n\tif (right === empty) {\n\t\treturn 1;\n\t}\n\n\tif (left === dense) {\n\t\tif (right === dense) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif (right === dense) {\n\t\treturn -1;\n\t}\n\n\tif (left.isSubspace) {\n\t\tif (right.isSubspace) {\n\t\t\treturn compareSubspace(productOperations, left.bounds, right.bounds);\n\t\t}\n\t}\n\n\tconst [leftBox, rightBox] = splitBox(productOperations, boundingBox);\n\tconst [ll, lr] = splitByBox(productOperations, left, leftBox, rightBox);\n\tconst [rl, rr] = splitByBox(productOperations, right, leftBox, rightBox);\n\n\tconst leftCmp = compareUntypedProduct(productOperations, ll, rl, leftBox);\n\tif (leftCmp === undefined) {\n\t\treturn undefined;\n\t}\n\treturn combineCmp(leftCmp, compareUntypedProduct(productOperations, lr, rr, rightBox));\n}\n\nexport function compareProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n\tleft: ProductSet<T>,\n\tright: ProductSet<U>,\n) {\n\tif (left === right) {\n\t\treturn 0;\n\t}\n\n\tif (left === empty) {\n\t\treturn -1;\n\t}\n\n\tif (right === empty) {\n\t\treturn 1;\n\t}\n\n\tif (left === dense) {\n\t\tif (right === dense) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif (right === dense) {\n\t\treturn -1;\n\t}\n\n\tconst productOperations = { ...left.productOperations, ...right.productOperations };\n\treturn compareUntypedProduct(productOperations, left.root, right.root, top(productOperations));\n}\n\nfunction meetsSubspace<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProduct<T>,\n\tright: UntypedProduct<T>,\n) {\n\tfor (const dimStr of Object.keys(productOperations)) {\n\t\tconst dim = dimStr as keyof T;\n\t\tif (Object.prototype.hasOwnProperty.call(productOperations, dim)) {\n\t\t\tconst lProj = toBspSet(left[dim]);\n\t\t\tconst rProj = toBspSet(right[dim]);\n\t\t\tconst setOperations = productOperations[dim];\n\t\t\tif (!meetsUntyped<unknown, unknown>(setOperations, lProj, rProj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction meetsUntypedProduct<T>(\n\tproductOperations: ProductOperations<T>,\n\tleft: UntypedProductSet<T>,\n\tright: UntypedProductSet<T>,\n\tboundingBox: Box<T>,\n): boolean {\n\tif (left === empty || right === empty) {\n\t\treturn false;\n\t}\n\tif (left === dense || right === dense) {\n\t\treturn true;\n\t}\n\tif (!meetsSubspace(productOperations, left.bounds, right.bounds)) {\n\t\treturn false;\n\t}\n\tif (left.isSubspace && right.isSubspace) {\n\t\treturn true;\n\t}\n\n\tconst [leftBox, rightBox] = splitBox(productOperations, boundingBox);\n\tconst [ll, lr] = splitByBox(productOperations, left, leftBox, rightBox);\n\tconst [rl, rr] = splitByBox(productOperations, right, leftBox, rightBox);\n\n\treturn (\n\t\tmeetsUntypedProduct(productOperations, ll, rl, leftBox) ||\n\t\tmeetsUntypedProduct(productOperations, lr, rr, rightBox)\n\t);\n}\n\nexport function meetsProduct<T extends Compatible<U, T>, U extends Compatible<T, U>>(\n\tleft: ProductSet<T>,\n\tright: ProductSet<U>,\n) {\n\tif (left === empty || right === empty) {\n\t\treturn false;\n\t}\n\tif (left === dense || right === dense) {\n\t\treturn true;\n\t}\n\n\tconst productOperations = { ...left.productOperations, ...right.productOperations };\n\treturn meetsUntypedProduct(productOperations, left.root, right.root, top(productOperations));\n}\n\nexport const complementProduct = <T>(set: ProductSet<T>) => exceptProduct(dense, set);\n\nexport const symmetricDiffProduct = <T>(left: ProductSet<T>, right: ProductSet<T>) =>\n\tunionProduct(exceptProduct(left, right), exceptProduct(right, left));\n\nexport function getSubspaces<T>(set: ProductSet<T>) {\n\tif (set === empty || set === dense) {\n\t\treturn [];\n\t}\n\tconst res: UntypedProduct<T>[] = [];\n\tfunction loop(root: UntypedSparseProduct<T>) {\n\t\tif (root.isSubspace) {\n\t\t\tres.push(root.bounds);\n\t\t\treturn;\n\t\t}\n\n\t\tloop(root.left);\n\t\tloop(root.right);\n\t}\n\n\tloop(set.root);\n\treturn res;\n}\n\nexport function forEachProduct<T, Props extends (keyof T)[]>(\n\tset: ProductSet<T>,\n\tf: (product: Product<Restrict<T, Props>>) => boolean,\n\t...dims: Props\n): boolean {\n\tconst newSet = project(set, ...dims);\n\tif (newSet === empty) {\n\t\treturn true;\n\t}\n\tif (newSet === dense) {\n\t\treturn f(unsafe.denseProduct(dims));\n\t}\n\n\tconst { productOperations, root } = newSet;\n\n\tfunction loop(root_inner: UntypedSparseProduct<T>): boolean {\n\t\tif (root_inner.isSubspace) {\n\t\t\treturn f(unsafe.fromUntypedProduct(productOperations, root_inner.bounds, dims));\n\t\t}\n\t\treturn loop(root_inner.left) && loop(root_inner.right);\n\t}\n\n\treturn loop(root);\n}\n\nexport function getSubspaceCount<T>(set: ProductSet<T>) {\n\tif (set === empty || set === dense) {\n\t\treturn 0;\n\t}\n\treturn getUntypedSubspaceCount(set.root);\n}\n"]}
|
package/dist/range.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAOvD"}
|
package/dist/range.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range.js","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"range.js","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;GAEG;AACH,SAAgB,WAAW,CAAC,KAAa,EAAE,KAAa;IACvD,4EAA4E;IAC5E,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,iCAAiC;IAE7D,IAAI,MAAM,IAAI,KAAK,EAAE;QACpB,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;KACvD;AACF,CAAC;AAPD,kCAOC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Ensures that 0 \\<= 'value' \\< 'limit'. Throws a RangeError otherwise.\n */\nexport function ensureRange(value: number, limit: number) {\n\t// Coerce 'value' to Uint32 so that we can range check with a single branch.\n\tconst _value = value >>> 0; // eslint-disable-line no-bitwise\n\n\tif (_value >= limit) {\n\t\tthrow new RangeError(\"Invalid (row, col) coordinate.\");\n\t}\n}\n"]}
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,MAAM,uCAAuC,CAAC;AAI/C,qBAAa,mBAAoB,YAAW,eAAe;IAC1D,OAAc,IAAI,SAAoD;IAEtE,gBAAuB,UAAU,EAAE,kBAAkB,CAInD;IAEF,IAAW,IAAI,WAEd;IAED,IAAW,UAAU,uBAEpB;IAED;;OAEG;IACU,IAAI,CAChB,OAAO,EAAE,sBAAsB,EAC/B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,kBAAkB,GAC5B,OAAO,CAAC,QAAQ,CAAC;IAMb,MAAM,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ;CAKrE"}
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AASH,qDAA8C;AAC9C,qCAAwC;AAExC,MAAa,mBAAmB;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AASH,qDAA8C;AAC9C,qCAAwC;AAExC,MAAa,mBAAmB;IAS/B,IAAW,IAAI;QACd,OAAO,mBAAmB,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,IAAW,UAAU;QACpB,OAAO,mBAAmB,CAAC,UAAU,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI,CAChB,OAA+B,EAC/B,EAAU,EACV,QAA0B,EAC1B,UAA8B;QAE9B,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QACzD,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC;IACf,CAAC;IAEM,MAAM,CAAC,QAAgC,EAAE,EAAU;QACzD,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,CAAC,eAAe,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IACf,CAAC;;AAnCF,kDAoCC;AAnCc,wBAAI,GAAG,gDAAgD,CAAC;AAE/C,8BAAU,GAAuB;IACvD,IAAI,EAAE,mBAAmB,CAAC,IAAI;IAC9B,qBAAqB,EAAE,KAAK;IAC5B,cAAc,EAAE,2BAAU;CAC1B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tIChannelAttributes,\n\tIFluidDataStoreRuntime,\n\tIChannelServices,\n\tIChannel,\n\tIChannelFactory,\n} from \"@fluidframework/datastore-definitions\";\nimport { pkgVersion } from \"./packageVersion\";\nimport { SharedMatrix } from \"./matrix\";\n\nexport class SharedMatrixFactory implements IChannelFactory {\n\tpublic static Type = \"https://graph.microsoft.com/types/sharedmatrix\";\n\n\tpublic static readonly Attributes: IChannelAttributes = {\n\t\ttype: SharedMatrixFactory.Type,\n\t\tsnapshotFormatVersion: \"0.1\",\n\t\tpackageVersion: pkgVersion,\n\t};\n\n\tpublic get type() {\n\t\treturn SharedMatrixFactory.Type;\n\t}\n\n\tpublic get attributes() {\n\t\treturn SharedMatrixFactory.Attributes;\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/datastore-definitions#IChannelFactory.load}\n\t */\n\tpublic async load(\n\t\truntime: IFluidDataStoreRuntime,\n\t\tid: string,\n\t\tservices: IChannelServices,\n\t\tattributes: IChannelAttributes,\n\t): Promise<IChannel> {\n\t\tconst matrix = new SharedMatrix(runtime, id, attributes);\n\t\tawait matrix.load(services);\n\t\treturn matrix;\n\t}\n\n\tpublic create(document: IFluidDataStoreRuntime, id: string): IChannel {\n\t\tconst matrix = new SharedMatrix(document, id, this.attributes);\n\t\tmatrix.initializeLocal();\n\t\treturn matrix;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAGtE,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAGtE,eAAO,MAAM,aAAa,WACjB,YAAY,QACd,MAAM,YACF,YAAY,cACV,gBAAgB,kBACuC,CAAC;AAErE,wBAAsB,eAAe,CACpC,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,gBAAgB,gBAM5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iEAA8D;AAG9D,+DAA8D;AAEvD,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iEAA8D;AAG9D,+DAA8D;AAEvD,MAAM,aAAa,GAAG,CAC5B,MAAoB,EACpB,IAAY,EACZ,QAAsB,EACtB,UAA4B,EAC3B,EAAE,CAAC,IAAI,6BAAa,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AALxD,QAAA,aAAa,iBAK2C;AAE9D,KAAK,UAAU,eAAe,CACpC,OAA+B,EAC/B,IAAY,EACZ,UAA4B;IAE5B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAA,6BAAc,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AATD,0CASC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { Serializable, IChannelStorageService } from \"@fluidframework/datastore-definitions\";\nimport { BlobTreeEntry } from \"@fluidframework/protocol-base\";\nimport { IFluidHandle } from \"@fluidframework/core-interfaces\";\nimport { IFluidSerializer } from \"@fluidframework/shared-object-base\";\nimport { bufferToString } from \"@fluidframework/common-utils\";\n\nexport const serializeBlob = (\n\thandle: IFluidHandle,\n\tpath: string,\n\tsnapshot: Serializable,\n\tserializer: IFluidSerializer,\n) => new BlobTreeEntry(path, serializer.stringify(snapshot, handle));\n\nexport async function deserializeBlob(\n\tstorage: IChannelStorageService,\n\tpath: string,\n\tserializer: IFluidSerializer,\n) {\n\tconst blob = await storage.readBlob(path);\n\tconst utf8 = bufferToString(blob, \"utf8\");\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\treturn serializer.parse(utf8);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sparsearray2d.d.ts","sourceRoot":"","sources":["../src/sparsearray2d.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"sparsearray2d.d.ts","sourceRoot":"","sources":["../src/sparsearray2d.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAmC/D,aAAK,gBAAgB,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7C,aAAK,UAAU,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;AAQ3C,aAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;AAE/B;;GAEG;AACH,qBAAa,aAAa,CAAC,CAAC,CAC3B,YAAW,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC;IAEzD,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAe;IAEtE,IAAW,QAAQ,WAElB;IACD,IAAW,QAAQ,WAElB;IAEM,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAoBvD,IAAW,cAAc,QAGxB;IAEM,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS;IAW7D;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAapB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAapB,wEAAwE;IACjE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IA0BnD,uEAAuE;IAChE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IA0BnD,OAAO,CAAC,QAAQ;IAMT,QAAQ;WAID,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;CAGzC"}
|
package/dist/sparsearray2d.js
CHANGED
|
@@ -33,11 +33,7 @@ const c0ToMorton16 = (col) => interlaceBitsX16(col) >>> 0;
|
|
|
33
33
|
const r0c0ToMorton2x16 = (row, col) => (r0ToMorton16(row) | c0ToMorton16(col)) >>> 0;
|
|
34
34
|
/** Undo JSON serialization's coercion of 'undefined' to null. */
|
|
35
35
|
const nullToUndefined = (array) => array.map((value) => {
|
|
36
|
-
return value === null
|
|
37
|
-
? undefined
|
|
38
|
-
: Array.isArray(value)
|
|
39
|
-
? nullToUndefined(value)
|
|
40
|
-
: value;
|
|
36
|
+
return value === null ? undefined : Array.isArray(value) ? nullToUndefined(value) : value;
|
|
41
37
|
});
|
|
42
38
|
/**
|
|
43
39
|
* A sparse 4 billion x 4 billion array stored as 16x16 tiles.
|
|
@@ -46,8 +42,12 @@ class SparseArray2D {
|
|
|
46
42
|
constructor(root = [undefined]) {
|
|
47
43
|
this.root = root;
|
|
48
44
|
}
|
|
49
|
-
get rowCount() {
|
|
50
|
-
|
|
45
|
+
get rowCount() {
|
|
46
|
+
return 0xffffffff;
|
|
47
|
+
}
|
|
48
|
+
get colCount() {
|
|
49
|
+
return 0xffffffff;
|
|
50
|
+
}
|
|
51
51
|
getCell(row, col) {
|
|
52
52
|
const keyHi = r0c0ToMorton2x16(row >>> 16, col >>> 16);
|
|
53
53
|
const level0 = this.root[keyHi];
|
|
@@ -66,8 +66,10 @@ class SparseArray2D {
|
|
|
66
66
|
}
|
|
67
67
|
return undefined;
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
get matrixProducer() {
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
71
73
|
setCell(row, col, value) {
|
|
72
74
|
const keyHi = r0c0ToMorton2x16(row >>> 16, col >>> 16);
|
|
73
75
|
const keyLo = r0c0ToMorton2x16(row, col);
|
|
@@ -184,9 +186,7 @@ class SparseArray2D {
|
|
|
184
186
|
getLevel(parent, subKey) {
|
|
185
187
|
const level = parent[subKey];
|
|
186
188
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
187
|
-
return level === undefined
|
|
188
|
-
? (parent[subKey] = new Array(256).fill(undefined))
|
|
189
|
-
: level;
|
|
189
|
+
return level === undefined ? (parent[subKey] = new Array(256).fill(undefined)) : level;
|
|
190
190
|
}
|
|
191
191
|
snapshot() {
|
|
192
192
|
return this.root;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sparsearray2d.js","sourceRoot":"","sources":["../src/sparsearray2d.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport { IMatrixReader, IMatrixWriter } from \"@tiny-calc/nano\";\n\n// Build a lookup table that maps a uint8 to the corresponding uint16 where 0s\n// are interleaved between the original bits. (e.g., 1111... -> 01010101...).\n//\n// (Lookup table ~17% faster than inlining the bit-twiddling on Node v12 x64)\n// (Array<T> ~2% faster than typed array on Node v12 x64)\nconst x8ToInterlacedX16 =\n new Array(256).fill(0).map((value, i) => {\n let j = i;\n j = (j | (j << 4)) & 0x0f0f; // .... 7654 .... 3210\n j = (j | (j << 2)) & 0x3333; // ..76 ..54 ..32 ..10\n j = (j | (j << 1)) & 0x5555; // .7.6 .5.4 .3.2 .1.0\n return j;\n });\n\n// Selects individual bytes from a given 32b integer. The left shift are used to\n// clear upper bits (faster than using masks on Node 10 x64).\nconst byte0 = (x32: number) => x32 >>> 24;\nconst byte1 = (x32: number) => (x32 << 8) >>> 24;\nconst byte2 = (x32: number) => (x32 << 16) >>> 24;\nconst byte3 = (x32: number) => (x32 << 24) >>> 24;\n\n// Given a uint16 returns the corresponding uint32 integer where 0s are\n// interleaved between the original bits. (e.g., 1111... -> 01010101...).\nconst interlaceBitsX16 = (x16: number) => (x8ToInterlacedX16[byte2(x16)] << 16) | x8ToInterlacedX16[byte3(x16)];\n\nconst r0ToMorton16 = (row: number) => (interlaceBitsX16(row) << 1) >>> 0;\nconst c0ToMorton16 = (col: number) => interlaceBitsX16(col) >>> 0;\n\n// Given a 2D uint16 coordinate returns the corresponding unt32 Morton coded\n// coordinate. (See https://en.wikipedia.org/wiki/Z-order_curve)\nconst r0c0ToMorton2x16 = (row: number, col: number) => (r0ToMorton16(row) | c0ToMorton16(col)) >>> 0;\n\ntype RecurArrayHelper<T> = RecurArray<T> | T;\ntype RecurArray<T> = RecurArrayHelper<T>[];\n\n/** Undo JSON serialization's coercion of 'undefined' to null. */\nconst nullToUndefined = <T>(array: RecurArray<T | null>): RecurArray<T | undefined> => array.map((value) => {\n return value === null\n ? undefined\n : Array.isArray(value)\n ? nullToUndefined(value)\n : value;\n});\n\ntype UA<T> = (T | undefined)[];\n\n/**\n * A sparse 4 billion x 4 billion array stored as 16x16 tiles.\n */\nexport class SparseArray2D<T> implements IMatrixReader<T | undefined>, IMatrixWriter<T | undefined> {\n constructor(private readonly root: UA<UA<UA<UA<UA<T>>>>> = [undefined]) { }\n\n public get rowCount() { return 0xFFFFFFFF; }\n public get colCount() { return 0xFFFFFFFF; }\n\n public getCell(row: number, col: number): T | undefined {\n const keyHi = r0c0ToMorton2x16(row >>> 16, col >>> 16);\n const level0 = this.root[keyHi];\n if (level0 !== undefined) {\n const keyLo = r0c0ToMorton2x16(row, col);\n const level1 = level0[byte0(keyLo)];\n if (level1 !== undefined) {\n const level2 = level1[byte1(keyLo)];\n if (level2 !== undefined) {\n const level3 = level2[byte2(keyLo)];\n if (level3 !== undefined) {\n return level3[byte3(keyLo)];\n }\n }\n }\n }\n\n return undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n public get matrixProducer() { return undefined as any; }\n\n public setCell(row: number, col: number, value: T | undefined) {\n const keyHi = r0c0ToMorton2x16(row >>> 16, col >>> 16);\n const keyLo = r0c0ToMorton2x16(row, col);\n\n const level0 = this.getLevel(this.root, keyHi);\n const level1 = this.getLevel(level0, byte0(keyLo));\n const level2 = this.getLevel(level1, byte1(keyLo));\n const level3 = this.getLevel(level2, byte2(keyLo));\n level3[byte3(keyLo)] = value;\n }\n\n /**\n * Invokes the given 'callback' for each key in a 16 x 16 tile at the indicated row.\n *\n * (Note that 'rowBits' is the appropriate byte from 'r0ToMorton16' for the current\n * level being traversed.)\n */\n private forEachKeyInRow(rowBits: number, callback: (key: number) => void) {\n for (let col = 0; col < 16; col++) {\n // Perf: Potentially faster to replace 'c0ToMorton16()' with a short look up table?\n callback((rowBits | c0ToMorton16(col)) >>> 0);\n }\n }\n\n /**\n * Invokes the given 'callback' for each key in a 16 x 16 tile at the indicated col.\n *\n * (Note that 'colBits' is the appropriate byte from 'c0ToMorton16' for the current\n * level being traversed.)\n */\n private forEachKeyInCol(col: number, callback: (key: number) => void) {\n for (let row = 0; row < 16; row++) {\n // Perf: Potentially faster to replace 'r0ToMorton16()' with a short look up table?\n callback((r0ToMorton16(row) | col) >>> 0);\n }\n }\n\n /**\n * Invokes the give 'callback' with the next 'level' array for each populated region\n * of the given row in the 'currentLevel'.\n *\n * (Note that 'rowBits' is the appropriate byte from 'r0ToMorton16' for the current\n * level being traversed.)\n */\n private forEachInRow<V extends UA<any>, U extends UA<V>>(\n currentLevel: U,\n rowBits: number,\n callback: (level: V) => void,\n ) {\n this.forEachKeyInRow(rowBits, (key) => {\n const nextLevel = currentLevel[key];\n if (nextLevel !== undefined) {\n callback(nextLevel);\n }\n });\n }\n\n /**\n * Invokes the give 'callback' with the next 'level' array for each populated region\n * of the given col in the 'currentLevel'.\n *\n * (Note that 'colBits' is the appropriate byte from 'c0ToMorton16' for the current\n * level being traversed.)\n */\n private forEachInCol<V extends UA<any>, U extends UA<V>>(\n currentLevel: U,\n colBits: number,\n callback: (level: V) => void,\n ) {\n this.forEachKeyInCol(colBits, (key) => {\n const nextLevel = currentLevel[key];\n if (nextLevel !== undefined) {\n callback(nextLevel);\n }\n });\n }\n\n /** Clears the all cells contained within the specified span of rows. */\n public clearRows(rowStart: number, rowCount: number) {\n const rowEnd = rowStart + rowCount;\n for (let row = rowStart; row < rowEnd; row++) {\n const rowHi = r0ToMorton16(row >>> 16);\n\n // The top level of tree is a 64k x 64k tile. We need to scan all 64k entries.\n for (let colHi = 0; colHi < 0x10000; colHi++) {\n const keyHi = (rowHi | c0ToMorton16(colHi)) >>> 0;\n const level0 = this.root[keyHi];\n if (level0 !== undefined) {\n // The remainder of the tree is divided in 16 x 16 tiles.\n const rowLo = r0ToMorton16(row);\n this.forEachInRow(level0, byte0(rowLo), (level1) => {\n this.forEachInRow(level1, byte1(rowLo), (level2) => {\n this.forEachInRow(level2, byte2(rowLo), (level3) => {\n this.forEachKeyInRow(byte3(rowLo), (key) => {\n level3[key] = undefined;\n });\n });\n });\n });\n }\n }\n }\n }\n\n /** Clears the all cells contained within the specifed span of cols. */\n public clearCols(colStart: number, colCount: number) {\n const colEnd = colStart + colCount;\n for (let col = colStart; col < colEnd; col++) {\n const colHi = c0ToMorton16(col >>> 16);\n\n // The top level of tree is a 64k x 64k tile. We need to scan all 64k entries.\n for (let rowHi = 0; rowHi < 0x10000; rowHi++) {\n const keyHi = (colHi | r0ToMorton16(rowHi)) >>> 0;\n const level0 = this.root[keyHi];\n if (level0 !== undefined) {\n // The remainder of the tree is divided in 16 x 16 tiles.\n const colLo = c0ToMorton16(col);\n this.forEachInCol(level0, byte0(colLo), (level1) => {\n this.forEachInCol(level1, byte1(colLo), (level2) => {\n this.forEachInCol(level2, byte2(colLo), (level3) => {\n this.forEachKeyInCol(byte3(colLo), (key) => {\n level3[key] = undefined;\n });\n });\n });\n });\n }\n }\n }\n }\n\n private getLevel<T>(parent: UA<UA<T>>, subKey: number) {\n const level = parent[subKey];\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return level === undefined\n ? (parent[subKey] = new Array(256).fill(undefined))\n : level;\n }\n\n public snapshot() {\n return this.root;\n }\n\n public static load<T>(data: RecurArray<T>) {\n return new SparseArray2D<T>(nullToUndefined<T>(data) as SparseArray2D<T>[\"root\"]);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sparsearray2d.js","sourceRoot":"","sources":["../src/sparsearray2d.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable no-bitwise */\n\nimport { IMatrixReader, IMatrixWriter } from \"@tiny-calc/nano\";\n\n// Build a lookup table that maps a uint8 to the corresponding uint16 where 0s\n// are interleaved between the original bits. (e.g., 1111... -> 01010101...).\n//\n// (Lookup table ~17% faster than inlining the bit-twiddling on Node v12 x64)\n// (Array<T> ~2% faster than typed array on Node v12 x64)\nconst x8ToInterlacedX16 = new Array(256).fill(0).map((value, i) => {\n\tlet j = i;\n\tj = (j | (j << 4)) & 0x0f0f; // .... 7654 .... 3210\n\tj = (j | (j << 2)) & 0x3333; // ..76 ..54 ..32 ..10\n\tj = (j | (j << 1)) & 0x5555; // .7.6 .5.4 .3.2 .1.0\n\treturn j;\n});\n\n// Selects individual bytes from a given 32b integer. The left shift are used to\n// clear upper bits (faster than using masks on Node 10 x64).\nconst byte0 = (x32: number) => x32 >>> 24;\nconst byte1 = (x32: number) => (x32 << 8) >>> 24;\nconst byte2 = (x32: number) => (x32 << 16) >>> 24;\nconst byte3 = (x32: number) => (x32 << 24) >>> 24;\n\n// Given a uint16 returns the corresponding uint32 integer where 0s are\n// interleaved between the original bits. (e.g., 1111... -> 01010101...).\nconst interlaceBitsX16 = (x16: number) =>\n\t(x8ToInterlacedX16[byte2(x16)] << 16) | x8ToInterlacedX16[byte3(x16)];\n\nconst r0ToMorton16 = (row: number) => (interlaceBitsX16(row) << 1) >>> 0;\nconst c0ToMorton16 = (col: number) => interlaceBitsX16(col) >>> 0;\n\n// Given a 2D uint16 coordinate returns the corresponding unt32 Morton coded\n// coordinate. (See https://en.wikipedia.org/wiki/Z-order_curve)\nconst r0c0ToMorton2x16 = (row: number, col: number) =>\n\t(r0ToMorton16(row) | c0ToMorton16(col)) >>> 0;\n\ntype RecurArrayHelper<T> = RecurArray<T> | T;\ntype RecurArray<T> = RecurArrayHelper<T>[];\n\n/** Undo JSON serialization's coercion of 'undefined' to null. */\nconst nullToUndefined = <T>(array: RecurArray<T | null>): RecurArray<T | undefined> =>\n\tarray.map((value) => {\n\t\treturn value === null ? undefined : Array.isArray(value) ? nullToUndefined(value) : value;\n\t});\n\ntype UA<T> = (T | undefined)[];\n\n/**\n * A sparse 4 billion x 4 billion array stored as 16x16 tiles.\n */\nexport class SparseArray2D<T>\n\timplements IMatrixReader<T | undefined>, IMatrixWriter<T | undefined>\n{\n\tconstructor(private readonly root: UA<UA<UA<UA<UA<T>>>>> = [undefined]) {}\n\n\tpublic get rowCount() {\n\t\treturn 0xffffffff;\n\t}\n\tpublic get colCount() {\n\t\treturn 0xffffffff;\n\t}\n\n\tpublic getCell(row: number, col: number): T | undefined {\n\t\tconst keyHi = r0c0ToMorton2x16(row >>> 16, col >>> 16);\n\t\tconst level0 = this.root[keyHi];\n\t\tif (level0 !== undefined) {\n\t\t\tconst keyLo = r0c0ToMorton2x16(row, col);\n\t\t\tconst level1 = level0[byte0(keyLo)];\n\t\t\tif (level1 !== undefined) {\n\t\t\t\tconst level2 = level1[byte1(keyLo)];\n\t\t\t\tif (level2 !== undefined) {\n\t\t\t\t\tconst level3 = level2[byte2(keyLo)];\n\t\t\t\t\tif (level3 !== undefined) {\n\t\t\t\t\t\treturn level3[byte3(keyLo)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tpublic get matrixProducer() {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\t\treturn undefined as any;\n\t}\n\n\tpublic setCell(row: number, col: number, value: T | undefined) {\n\t\tconst keyHi = r0c0ToMorton2x16(row >>> 16, col >>> 16);\n\t\tconst keyLo = r0c0ToMorton2x16(row, col);\n\n\t\tconst level0 = this.getLevel(this.root, keyHi);\n\t\tconst level1 = this.getLevel(level0, byte0(keyLo));\n\t\tconst level2 = this.getLevel(level1, byte1(keyLo));\n\t\tconst level3 = this.getLevel(level2, byte2(keyLo));\n\t\tlevel3[byte3(keyLo)] = value;\n\t}\n\n\t/**\n\t * Invokes the given 'callback' for each key in a 16 x 16 tile at the indicated row.\n\t *\n\t * (Note that 'rowBits' is the appropriate byte from 'r0ToMorton16' for the current\n\t * level being traversed.)\n\t */\n\tprivate forEachKeyInRow(rowBits: number, callback: (key: number) => void) {\n\t\tfor (let col = 0; col < 16; col++) {\n\t\t\t// Perf: Potentially faster to replace 'c0ToMorton16()' with a short look up table?\n\t\t\tcallback((rowBits | c0ToMorton16(col)) >>> 0);\n\t\t}\n\t}\n\n\t/**\n\t * Invokes the given 'callback' for each key in a 16 x 16 tile at the indicated col.\n\t *\n\t * (Note that 'colBits' is the appropriate byte from 'c0ToMorton16' for the current\n\t * level being traversed.)\n\t */\n\tprivate forEachKeyInCol(col: number, callback: (key: number) => void) {\n\t\tfor (let row = 0; row < 16; row++) {\n\t\t\t// Perf: Potentially faster to replace 'r0ToMorton16()' with a short look up table?\n\t\t\tcallback((r0ToMorton16(row) | col) >>> 0);\n\t\t}\n\t}\n\n\t/**\n\t * Invokes the give 'callback' with the next 'level' array for each populated region\n\t * of the given row in the 'currentLevel'.\n\t *\n\t * (Note that 'rowBits' is the appropriate byte from 'r0ToMorton16' for the current\n\t * level being traversed.)\n\t */\n\tprivate forEachInRow<V extends UA<any>, U extends UA<V>>(\n\t\tcurrentLevel: U,\n\t\trowBits: number,\n\t\tcallback: (level: V) => void,\n\t) {\n\t\tthis.forEachKeyInRow(rowBits, (key) => {\n\t\t\tconst nextLevel = currentLevel[key];\n\t\t\tif (nextLevel !== undefined) {\n\t\t\t\tcallback(nextLevel);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Invokes the give 'callback' with the next 'level' array for each populated region\n\t * of the given col in the 'currentLevel'.\n\t *\n\t * (Note that 'colBits' is the appropriate byte from 'c0ToMorton16' for the current\n\t * level being traversed.)\n\t */\n\tprivate forEachInCol<V extends UA<any>, U extends UA<V>>(\n\t\tcurrentLevel: U,\n\t\tcolBits: number,\n\t\tcallback: (level: V) => void,\n\t) {\n\t\tthis.forEachKeyInCol(colBits, (key) => {\n\t\t\tconst nextLevel = currentLevel[key];\n\t\t\tif (nextLevel !== undefined) {\n\t\t\t\tcallback(nextLevel);\n\t\t\t}\n\t\t});\n\t}\n\n\t/** Clears the all cells contained within the specified span of rows. */\n\tpublic clearRows(rowStart: number, rowCount: number) {\n\t\tconst rowEnd = rowStart + rowCount;\n\t\tfor (let row = rowStart; row < rowEnd; row++) {\n\t\t\tconst rowHi = r0ToMorton16(row >>> 16);\n\n\t\t\t// The top level of tree is a 64k x 64k tile. We need to scan all 64k entries.\n\t\t\tfor (let colHi = 0; colHi < 0x10000; colHi++) {\n\t\t\t\tconst keyHi = (rowHi | c0ToMorton16(colHi)) >>> 0;\n\t\t\t\tconst level0 = this.root[keyHi];\n\t\t\t\tif (level0 !== undefined) {\n\t\t\t\t\t// The remainder of the tree is divided in 16 x 16 tiles.\n\t\t\t\t\tconst rowLo = r0ToMorton16(row);\n\t\t\t\t\tthis.forEachInRow(level0, byte0(rowLo), (level1) => {\n\t\t\t\t\t\tthis.forEachInRow(level1, byte1(rowLo), (level2) => {\n\t\t\t\t\t\t\tthis.forEachInRow(level2, byte2(rowLo), (level3) => {\n\t\t\t\t\t\t\t\tthis.forEachKeyInRow(byte3(rowLo), (key) => {\n\t\t\t\t\t\t\t\t\tlevel3[key] = undefined;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Clears the all cells contained within the specifed span of cols. */\n\tpublic clearCols(colStart: number, colCount: number) {\n\t\tconst colEnd = colStart + colCount;\n\t\tfor (let col = colStart; col < colEnd; col++) {\n\t\t\tconst colHi = c0ToMorton16(col >>> 16);\n\n\t\t\t// The top level of tree is a 64k x 64k tile. We need to scan all 64k entries.\n\t\t\tfor (let rowHi = 0; rowHi < 0x10000; rowHi++) {\n\t\t\t\tconst keyHi = (colHi | r0ToMorton16(rowHi)) >>> 0;\n\t\t\t\tconst level0 = this.root[keyHi];\n\t\t\t\tif (level0 !== undefined) {\n\t\t\t\t\t// The remainder of the tree is divided in 16 x 16 tiles.\n\t\t\t\t\tconst colLo = c0ToMorton16(col);\n\t\t\t\t\tthis.forEachInCol(level0, byte0(colLo), (level1) => {\n\t\t\t\t\t\tthis.forEachInCol(level1, byte1(colLo), (level2) => {\n\t\t\t\t\t\t\tthis.forEachInCol(level2, byte2(colLo), (level3) => {\n\t\t\t\t\t\t\t\tthis.forEachKeyInCol(byte3(colLo), (key) => {\n\t\t\t\t\t\t\t\t\tlevel3[key] = undefined;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getLevel<T>(parent: UA<UA<T>>, subKey: number) {\n\t\tconst level = parent[subKey];\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\t\treturn level === undefined ? (parent[subKey] = new Array(256).fill(undefined)) : level;\n\t}\n\n\tpublic snapshot() {\n\t\treturn this.root;\n\t}\n\n\tpublic static load<T>(data: RecurArray<T>) {\n\t\treturn new SparseArray2D<T>(nullToUndefined<T>(data) as SparseArray2D<T>[\"root\"]);\n\t}\n}\n"]}
|
package/dist/split.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../src/split.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAE/C,6CAA6C;AAC7C,oBAAY,GAAG,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAQ7D,wBAAgB,OAAO,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAI5F;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAItD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAI/D;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,KAAK,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../src/split.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAE/C,6CAA6C;AAC7C,oBAAY,GAAG,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAQ7D,wBAAgB,OAAO,CAAC,KAAK,SAAS,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAI5F;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAItD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAI/D;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,KAAK,SAAS,MAAM,EAC7C,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAChB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GACd,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAUxB;AAQD,wBAAgB,UAAU,CAAC,KAAK,SAAS,MAAM,EAC9C,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAChB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GACd,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAaxB;AAED,MAAM,WAAW,YAAY;IAC5B,8GAA8G;IAC9G,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAEpC,wGAAwG;IACxG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,YAAY,CAkB/E;AAED;mBACmB;AACnB,wBAAgB,qBAAqB,CAAC,KAAK,SAAS,MAAM,EACzD,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACP,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAwBhC;AAED,wBAAgB,0BAA0B,CAAC,KAAK,SAAS,MAAM,EAAE,EAAE,EAClE,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAChB,EAAE,EAAE,EAAE,GACJ,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAahC;AAED,MAAM,WAAW,iBAAiB,CAAC,GAAG;IACrC,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAC5B,qEAAqE;IACrE,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;CACzC"}
|
package/dist/split.js
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.boundedParetoSetOperations = exports.boundedParetoSplitter = exports.boundedPareto = exports.ivlCompare = exports.ivlExcept = exports.ivlMeetsOrTouches = exports.ivlMeets = exports.ivlJoin = void 0;
|
|
8
8
|
/** A much faster version of `Math.max` specialized to two numeric arguments. */
|
|
9
|
-
const fastMax = (x1, x2) => x1 < x2 ? x2 : x1;
|
|
9
|
+
const fastMax = (x1, x2) => (x1 < x2 ? x2 : x1);
|
|
10
10
|
/** A much faster version of `Math.min` specialized to two numeric arguments. */
|
|
11
|
-
const fastMin = (x1, x2) => x1 < x2 ? x1 : x2;
|
|
11
|
+
const fastMin = (x1, x2) => (x1 < x2 ? x1 : x2);
|
|
12
12
|
function ivlJoin(ivl1, ivl2) {
|
|
13
13
|
const [x1a, x1b] = ivl1;
|
|
14
14
|
const [x2a, x2b] = ivl2;
|
|
@@ -77,7 +77,9 @@ function boundedPareto(alpha, L, H) {
|
|
|
77
77
|
const hlAlpha = hAlpha * lAlpha;
|
|
78
78
|
const hAlphaSubLAlpha = hAlpha - lAlpha;
|
|
79
79
|
const negAlphaInv = -1 / alpha;
|
|
80
|
-
const cdf = alpha === 1
|
|
80
|
+
const cdf = alpha === 1
|
|
81
|
+
? (x) => (1 - lAlpha / x) / cdfDenom
|
|
82
|
+
: (x) => (1 - lAlpha * x ** -alpha) / cdfDenom;
|
|
81
83
|
const invCdf = alpha === 1
|
|
82
84
|
? (y) => 1 / ((hAlpha - y * hAlphaSubLAlpha) / hlAlpha)
|
|
83
85
|
: (y) => ((hAlpha - y * hAlphaSubLAlpha) / hlAlpha) ** negAlphaInv;
|
package/dist/split.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split.js","sourceRoot":"","sources":["../src/split.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { SetOperations, Pair } from \"./bspSet\";\n\n/** Represents a half-open interval [a, b) */\nexport type Ivl<Index extends number = number> = Pair<Index>;\n\n/** A much faster version of `Math.max` specialized to two numeric arguments. */\nconst fastMax = <Index extends number>(x1: Index, x2: Index): Index => x1 < x2 ? x2 : x1;\n\n/** A much faster version of `Math.min` specialized to two numeric arguments. */\nconst fastMin = <Index extends number>(x1: Index, x2: Index): Index => x1 < x2 ? x1 : x2;\n\nexport function ivlJoin<Index extends number>(ivl1: Ivl<Index>, ivl2: Ivl<Index>): Ivl<Index> {\n const [x1a, x1b] = ivl1;\n const [x2a, x2b] = ivl2;\n return [fastMin(x1a, x2a), fastMax(x1b, x2b)];\n}\n\nexport function ivlMeets(ivl1: Ivl, ivl2: Ivl): boolean {\n const [x1a, x1b] = ivl1;\n const [x2a, x2b] = ivl2;\n return fastMax(x1a, x2a) < fastMin(x1b, x2b);\n}\n\nexport function ivlMeetsOrTouches(ivl1: Ivl, ivl2: Ivl): boolean {\n const [x1a, x1b] = ivl1;\n const [x2a, x2b] = ivl2;\n return fastMax(x1a, x2a) <= fastMin(x1b, x2b);\n}\n\n/** computes the set difference on intervals. Precondition: they meet */\nexport function ivlExcept<Index extends number>(ivl1: Ivl<Index>, ivl2: Ivl<Index>): Ivl<Index> | undefined {\n const [x1a, x1b] = ivl1;\n const [x2a, x2b] = ivl2;\n if (x1a < x2a && x2b >= x1b) { return [x1a, x2a]; }\n if (x1a >= x2a && x2b < x1b) { return [x2b, x1b]; }\n return undefined;\n}\n\nfunction ivlMeet<Index extends number>(ivl1: Ivl<Index>, ivl2: Ivl<Index>): Ivl<Index> {\n const [x1a, x1b] = ivl1;\n const [x2a, x2b] = ivl2;\n return [fastMax(x1a, x2a), fastMin(x1b, x2b)];\n}\n\nexport function ivlCompare<Index extends number>(ivl1: Ivl<Index>, ivl2: Ivl<Index>): -1 | 0 | 1 | undefined {\n const [x1a, x1b] = ivl1;\n const [x2a, x2b] = ivl2;\n if (x1a === x2a && x1b === x2b) { return 0; }\n if (x1a >= x2a && x1b <= x2b) { return -1; }\n if (x1a <= x2a && x1b >= x2b) { return 1; }\n return undefined;\n}\n\nexport interface Distribution {\n /** The cummulative distribution function. This is used to compute the probabilty mass of a given interval. */\n readonly cdf: (x: number) => number;\n\n /** The inverse cummulative distribution function. This is used to estimate a point given a quantile. */\n readonly invCdf: (x: number) => number;\n}\n\n/** This is a bounded pareto distribution with a shape parameter `alpha`, a lower bound `L` and an upper bound `H`.\n * It has good properties for being used as a space splitting function in sofar, as it causes the indices to grow\n * exponentially. This behavior guarantees `O(log k)` as worst-case execution time when it's used as a space-splitting\n * function.\n *\n * On the other hand, we now can use it to approximate the access to grids better than just binary search, a\n * similar argument as for using exponential search. But we can use it to give exact probability masses for arbitrary\n * intervals. This allows us to search in both dimensions of a grid and use the probability mass to decide what axis\n * to cut next.\n */\nexport function boundedPareto(alpha: number, L: number, H: number): Distribution {\n const lAlpha = L ** alpha;\n const cdfDenom = 1 - (L / H) ** alpha;\n const hAlpha = H ** alpha;\n const hlAlpha = hAlpha * lAlpha;\n const hAlphaSubLAlpha = hAlpha - lAlpha;\n const negAlphaInv = -1 / alpha;\n\n const cdf =\n alpha === 1 ? (x: number) => (1 - lAlpha / x) / cdfDenom : (x: number) => (1 - lAlpha * x ** -alpha) / cdfDenom;\n const invCdf =\n alpha === 1\n ? (y: number) => 1 / ((hAlpha - y * hAlphaSubLAlpha) / hlAlpha)\n : (y: number) => ((hAlpha - y * hAlphaSubLAlpha) / hlAlpha) ** negAlphaInv;\n\n return { cdf, invCdf };\n}\n\n/** Creates a dimension splitter that operates on integer interval values and is based on a bounded Pareto\n * distribution. */\nexport function boundedParetoSplitter<Index extends number>(\n alpha: number,\n L: number,\n H: number,\n): DimensionSplitter<Pair<Index>> {\n const distribution = boundedPareto(alpha, L, H);\n return {\n canSplit: ([keyLb, keyUb]) => keyUb - keyLb > 1,\n split([keyLb, keyUb]: Pair<Index>) {\n const ubCdf = distribution.cdf(keyUb);\n const lbCdf = distribution.cdf(keyLb + 1);\n const cuttingPoint = distribution.invCdf((ubCdf + lbCdf) / 2);\n // pick a cutting point, but making sure either side has at least one element in it.\n const discreteCuttingPoint = Math.min(Math.max(Math.round(cuttingPoint), keyLb + 1), keyUb - 1) as Index;\n\n const leftProb = distribution.cdf(discreteCuttingPoint) - distribution.cdf(keyLb + 1);\n const rightProb = distribution.cdf(keyUb) - distribution.cdf(discreteCuttingPoint);\n\n const result: Pair<Pair<Pair<Index>, number>> = [\n [[keyLb, discreteCuttingPoint], leftProb],\n [[discreteCuttingPoint, keyUb], rightProb],\n ];\n return result;\n },\n };\n}\n\nexport function boundedParetoSetOperations<Index extends number, Id>(\n alpha: number,\n L: number,\n H: number,\n top: Pair<Index>,\n id: Id,\n): SetOperations<Pair<Index>, Id> {\n const splitter = boundedParetoSplitter<Index>(alpha, L, H);\n return {\n id,\n split: (key) => splitter.split(key),\n canSplit: (key) => splitter.canSplit(key),\n meets: ivlMeets,\n intersect: ivlMeet,\n union: (x, y) => (ivlMeetsOrTouches(x, y) ? ivlJoin(x, y) : undefined),\n except: ivlExcept,\n compare: ivlCompare,\n top,\n };\n}\n\nexport interface DimensionSplitter<Key> {\n /** For a given key, returns if the key can be further sub-divided. */\n canSplit(key: Key): boolean;\n /** Splits a key and returns the probability mass for either half. */\n split(key: Key): Pair<Pair<Key, number>>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"split.js","sourceRoot":"","sources":["../src/split.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { SetOperations, Pair } from \"./bspSet\";\n\n/** Represents a half-open interval [a, b) */\nexport type Ivl<Index extends number = number> = Pair<Index>;\n\n/** A much faster version of `Math.max` specialized to two numeric arguments. */\nconst fastMax = <Index extends number>(x1: Index, x2: Index): Index => (x1 < x2 ? x2 : x1);\n\n/** A much faster version of `Math.min` specialized to two numeric arguments. */\nconst fastMin = <Index extends number>(x1: Index, x2: Index): Index => (x1 < x2 ? x1 : x2);\n\nexport function ivlJoin<Index extends number>(ivl1: Ivl<Index>, ivl2: Ivl<Index>): Ivl<Index> {\n\tconst [x1a, x1b] = ivl1;\n\tconst [x2a, x2b] = ivl2;\n\treturn [fastMin(x1a, x2a), fastMax(x1b, x2b)];\n}\n\nexport function ivlMeets(ivl1: Ivl, ivl2: Ivl): boolean {\n\tconst [x1a, x1b] = ivl1;\n\tconst [x2a, x2b] = ivl2;\n\treturn fastMax(x1a, x2a) < fastMin(x1b, x2b);\n}\n\nexport function ivlMeetsOrTouches(ivl1: Ivl, ivl2: Ivl): boolean {\n\tconst [x1a, x1b] = ivl1;\n\tconst [x2a, x2b] = ivl2;\n\treturn fastMax(x1a, x2a) <= fastMin(x1b, x2b);\n}\n\n/** computes the set difference on intervals. Precondition: they meet */\nexport function ivlExcept<Index extends number>(\n\tivl1: Ivl<Index>,\n\tivl2: Ivl<Index>,\n): Ivl<Index> | undefined {\n\tconst [x1a, x1b] = ivl1;\n\tconst [x2a, x2b] = ivl2;\n\tif (x1a < x2a && x2b >= x1b) {\n\t\treturn [x1a, x2a];\n\t}\n\tif (x1a >= x2a && x2b < x1b) {\n\t\treturn [x2b, x1b];\n\t}\n\treturn undefined;\n}\n\nfunction ivlMeet<Index extends number>(ivl1: Ivl<Index>, ivl2: Ivl<Index>): Ivl<Index> {\n\tconst [x1a, x1b] = ivl1;\n\tconst [x2a, x2b] = ivl2;\n\treturn [fastMax(x1a, x2a), fastMin(x1b, x2b)];\n}\n\nexport function ivlCompare<Index extends number>(\n\tivl1: Ivl<Index>,\n\tivl2: Ivl<Index>,\n): -1 | 0 | 1 | undefined {\n\tconst [x1a, x1b] = ivl1;\n\tconst [x2a, x2b] = ivl2;\n\tif (x1a === x2a && x1b === x2b) {\n\t\treturn 0;\n\t}\n\tif (x1a >= x2a && x1b <= x2b) {\n\t\treturn -1;\n\t}\n\tif (x1a <= x2a && x1b >= x2b) {\n\t\treturn 1;\n\t}\n\treturn undefined;\n}\n\nexport interface Distribution {\n\t/** The cummulative distribution function. This is used to compute the probabilty mass of a given interval. */\n\treadonly cdf: (x: number) => number;\n\n\t/** The inverse cummulative distribution function. This is used to estimate a point given a quantile. */\n\treadonly invCdf: (x: number) => number;\n}\n\n/** This is a bounded pareto distribution with a shape parameter `alpha`, a lower bound `L` and an upper bound `H`.\n * It has good properties for being used as a space splitting function in sofar, as it causes the indices to grow\n * exponentially. This behavior guarantees `O(log k)` as worst-case execution time when it's used as a space-splitting\n * function.\n *\n * On the other hand, we now can use it to approximate the access to grids better than just binary search, a\n * similar argument as for using exponential search. But we can use it to give exact probability masses for arbitrary\n * intervals. This allows us to search in both dimensions of a grid and use the probability mass to decide what axis\n * to cut next.\n */\nexport function boundedPareto(alpha: number, L: number, H: number): Distribution {\n\tconst lAlpha = L ** alpha;\n\tconst cdfDenom = 1 - (L / H) ** alpha;\n\tconst hAlpha = H ** alpha;\n\tconst hlAlpha = hAlpha * lAlpha;\n\tconst hAlphaSubLAlpha = hAlpha - lAlpha;\n\tconst negAlphaInv = -1 / alpha;\n\n\tconst cdf =\n\t\talpha === 1\n\t\t\t? (x: number) => (1 - lAlpha / x) / cdfDenom\n\t\t\t: (x: number) => (1 - lAlpha * x ** -alpha) / cdfDenom;\n\tconst invCdf =\n\t\talpha === 1\n\t\t\t? (y: number) => 1 / ((hAlpha - y * hAlphaSubLAlpha) / hlAlpha)\n\t\t\t: (y: number) => ((hAlpha - y * hAlphaSubLAlpha) / hlAlpha) ** negAlphaInv;\n\n\treturn { cdf, invCdf };\n}\n\n/** Creates a dimension splitter that operates on integer interval values and is based on a bounded Pareto\n * distribution. */\nexport function boundedParetoSplitter<Index extends number>(\n\talpha: number,\n\tL: number,\n\tH: number,\n): DimensionSplitter<Pair<Index>> {\n\tconst distribution = boundedPareto(alpha, L, H);\n\treturn {\n\t\tcanSplit: ([keyLb, keyUb]) => keyUb - keyLb > 1,\n\t\tsplit([keyLb, keyUb]: Pair<Index>) {\n\t\t\tconst ubCdf = distribution.cdf(keyUb);\n\t\t\tconst lbCdf = distribution.cdf(keyLb + 1);\n\t\t\tconst cuttingPoint = distribution.invCdf((ubCdf + lbCdf) / 2);\n\t\t\t// pick a cutting point, but making sure either side has at least one element in it.\n\t\t\tconst discreteCuttingPoint = Math.min(\n\t\t\t\tMath.max(Math.round(cuttingPoint), keyLb + 1),\n\t\t\t\tkeyUb - 1,\n\t\t\t) as Index;\n\n\t\t\tconst leftProb = distribution.cdf(discreteCuttingPoint) - distribution.cdf(keyLb + 1);\n\t\t\tconst rightProb = distribution.cdf(keyUb) - distribution.cdf(discreteCuttingPoint);\n\n\t\t\tconst result: Pair<Pair<Pair<Index>, number>> = [\n\t\t\t\t[[keyLb, discreteCuttingPoint], leftProb],\n\t\t\t\t[[discreteCuttingPoint, keyUb], rightProb],\n\t\t\t];\n\t\t\treturn result;\n\t\t},\n\t};\n}\n\nexport function boundedParetoSetOperations<Index extends number, Id>(\n\talpha: number,\n\tL: number,\n\tH: number,\n\ttop: Pair<Index>,\n\tid: Id,\n): SetOperations<Pair<Index>, Id> {\n\tconst splitter = boundedParetoSplitter<Index>(alpha, L, H);\n\treturn {\n\t\tid,\n\t\tsplit: (key) => splitter.split(key),\n\t\tcanSplit: (key) => splitter.canSplit(key),\n\t\tmeets: ivlMeets,\n\t\tintersect: ivlMeet,\n\t\tunion: (x, y) => (ivlMeetsOrTouches(x, y) ? ivlJoin(x, y) : undefined),\n\t\texcept: ivlExcept,\n\t\tcompare: ivlCompare,\n\t\ttop,\n\t};\n}\n\nexport interface DimensionSplitter<Key> {\n\t/** For a given key, returns if the key can be further sub-divided. */\n\tcanSplit(key: Key): boolean;\n\t/** Splits a key and returns the probability mass for either half. */\n\tsplit(key: Key): Pair<Pair<Key, number>>;\n}\n"]}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,WAAW;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,WAAW;IAC3B,MAAM,QAAG;IACT,OAAO,QAAG;CACV;AAED,MAAM,WAAW,aAAa;IAC7B,sBAAsB,CAAC,UAAU,EAAE,WAAW,OAAE;CAChD"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// TODO: We temporarily duplicate these contracts from 'framework/undo-redo' to unblock development\n// of SharedMatrix undo while we decide on the correct layering for undo.\n\nexport interface IRevertible {\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// TODO: We temporarily duplicate these contracts from 'framework/undo-redo' to unblock development\n// of SharedMatrix undo while we decide on the correct layering for undo.\n\nexport interface IRevertible {\n\trevert();\n\tdiscard();\n}\n\nexport interface IUndoConsumer {\n\tpushToCurrentOperation(revertible: IRevertible);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undoprovider.d.ts","sourceRoot":"","sources":["../src/undoprovider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"undoprovider.d.ts","sourceRoot":"","sources":["../src/undoprovider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAEN,2BAA2B,EAE3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,MAAM,EAAiB,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,qBAAa,kBAAkB;IAQ7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN5B,OAAO,CAAC,YAAY,CAAC,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAC,CAAqB;gBAGrB,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,EACjD,UAAU,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI;IAG5D,MAAM,CACZ,SAAS,EAAE,2BAA2B,EACtC,MAAM,EAAE;QAAE,OAAO,EAAE,kBAAkB,CAAA;KAAE,EAAE;IAuD1C,OAAO,CAAC,cAAc;CAwCtB;AAED,qBAAa,kBAAkB,CAAC,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAHJ,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,iBAAiB;IAwBzC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;CAmBrE"}
|