@gmod/hic 1.0.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/LICENSE +25 -0
- package/README.md +91 -0
- package/dist/binWindow.d.ts +24 -0
- package/dist/binWindow.js +32 -0
- package/dist/binWindow.js.map +1 -0
- package/dist/binary.d.ts +15 -0
- package/dist/binary.js +67 -0
- package/dist/binary.js.map +1 -0
- package/dist/bufferedFile.d.ts +13 -0
- package/dist/bufferedFile.js +78 -0
- package/dist/bufferedFile.js.map +1 -0
- package/dist/contactRecords.d.ts +25 -0
- package/dist/contactRecords.js +3 -0
- package/dist/contactRecords.js.map +1 -0
- package/dist/hicFile.d.ts +94 -0
- package/dist/hicFile.js +769 -0
- package/dist/hicFile.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lru.d.ts +29 -0
- package/dist/lru.js +55 -0
- package/dist/lru.js.map +1 -0
- package/dist/matrix.d.ts +9 -0
- package/dist/matrix.js +41 -0
- package/dist/matrix.js.map +1 -0
- package/dist/matrixZoomData.d.ts +14 -0
- package/dist/matrixZoomData.js +96 -0
- package/dist/matrixZoomData.js.map +1 -0
- package/dist/normalizationVector.d.ts +10 -0
- package/dist/normalizationVector.js +51 -0
- package/dist/normalizationVector.js.map +1 -0
- package/dist/package.json +1 -0
- package/dist/reader.d.ts +3 -0
- package/dist/reader.js +12 -0
- package/dist/reader.js.map +1 -0
- package/dist/types.d.ts +35 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/esm/binWindow.d.ts +24 -0
- package/esm/binWindow.js +29 -0
- package/esm/binWindow.js.map +1 -0
- package/esm/binary.d.ts +15 -0
- package/esm/binary.js +64 -0
- package/esm/binary.js.map +1 -0
- package/esm/bufferedFile.d.ts +13 -0
- package/esm/bufferedFile.js +75 -0
- package/esm/bufferedFile.js.map +1 -0
- package/esm/contactRecords.d.ts +25 -0
- package/esm/contactRecords.js +2 -0
- package/esm/contactRecords.js.map +1 -0
- package/esm/hicFile.d.ts +94 -0
- package/esm/hicFile.js +762 -0
- package/esm/hicFile.js.map +1 -0
- package/esm/index.d.ts +5 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/lru.d.ts +29 -0
- package/esm/lru.js +52 -0
- package/esm/lru.js.map +1 -0
- package/esm/matrix.d.ts +9 -0
- package/esm/matrix.js +35 -0
- package/esm/matrix.js.map +1 -0
- package/esm/matrixZoomData.d.ts +14 -0
- package/esm/matrixZoomData.js +93 -0
- package/esm/matrixZoomData.js.map +1 -0
- package/esm/normalizationVector.d.ts +10 -0
- package/esm/normalizationVector.js +45 -0
- package/esm/normalizationVector.js.map +1 -0
- package/esm/reader.d.ts +3 -0
- package/esm/reader.js +9 -0
- package/esm/reader.js.map +1 -0
- package/esm/types.d.ts +35 -0
- package/esm/types.js +2 -0
- package/esm/types.js.map +1 -0
- package/package.json +73 -0
- package/src/binWindow.ts +30 -0
- package/src/binary.ts +72 -0
- package/src/bufferedFile.ts +74 -0
- package/src/contactRecords.ts +25 -0
- package/src/hicFile.ts +943 -0
- package/src/index.ts +12 -0
- package/src/lru.ts +77 -0
- package/src/matrix.ts +43 -0
- package/src/matrixZoomData.ts +133 -0
- package/src/normalizationVector.ts +58 -0
- package/src/reader.ts +11 -0
- package/src/types.ts +40 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hicFile.js","sourceRoot":"","sources":["../src/hicFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,YAAY,MAAM,aAAa,CAAA;AACtC,OAAO,YAAY,MAAM,mBAAmB,CAAA;AAC5C,OAAO,GAAG,MAAM,UAAU,CAAA;AAC1B,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,mBAAmB,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAalD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAA;AAExE,MAAM,eAAe,GAAG,CAAC,KAAK,CAAA;AAC9B,MAAM,MAAM,GAAG,CAAC,CAAA;AAChB,MAAM,KAAK,GAAG,CAAC,CAAA;AACf,MAAM,GAAG,GAAG,CAAC,CAAA;AA+Bb;;;;;GAKG;AACH,SAAS,eAAe,CAAC,OAAuB,EAAE,CAAS;IACzD,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM;QAC9B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC;YACE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACnC,CAAA;AACP,CAAC;AAED,4EAA4E;AAC5E,+EAA+E;AAC/E,yCAAyC;AACzC,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,0EAA0E;AAC1E,gFAAgF;AAChF,4EAA4E;AAC5E,yEAAyE;AACzE,mBAAmB;AACnB,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,oBAAoB;AACpB,EAAE;AACF,sCAAsC;AACtC,2CAA2C;AAC3C,2CAA2C;AAC3C,2CAA2C;AAC3C,2CAA2C;AAC3C,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,kCAAkC;AAClC,MAAM,uBAAuB,GAAG,IAAI,CAAA;AACpC,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,gFAAgF;AAChF,+EAA+E;AAC/E,4DAA4D;AAC5D,MAAM,qBAAqB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAA;AAC/C,0EAA0E;AAC1E,6EAA6E;AAC7E,6EAA6E;AAC7E,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAC7B,yEAAyE;AACzE,4EAA4E;AAC5E,gFAAgF;AAChF,0EAA0E;AAC1E,qEAAqE;AACrE,MAAM,sBAAsB,GAAG,EAAE,CAAA;AAEjC,+EAA+E;AAC/E,yEAAyE;AACzE,6EAA6E;AAC7E,mDAAmD;AACnD,SAAS,gBAAgB,CAAC,KAAY;IACpC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAA;IAC5C,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;AAC9D,CAAC;AAED,SAAS,yBAAyB,CAChC,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,UAAkB;IAElB,OAAO,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,UAAU,EAAE,CAAA;AAClD,CAAC;AAED,MAAM,OAAO,OAAO;IACV,MAAM,CAAW;IACjB,IAAI,CAAQ;IAEpB,oEAAoE;IACpE,uEAAuE;IACvE,6EAA6E;IAC7E,2EAA2E;IAC3E,+EAA+E;IACvE,eAAe,GAAG,IAAI,GAAG,CAG/B,sBAAsB,CAAC,CAAA;IACjB,kBAAkB,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7B,WAAW,GAAG,IAAI,GAAG,CAC3B,iBAAiB,CAClB,CAAA;IACO,UAAU,GAAG,IAAI,GAAG,CAAgB,uBAAuB,EAAE;QACnE,QAAQ,EAAE,qBAAqB;QAC/B,KAAK,EAAE,gBAAgB;KACxB,CAAC,CAAA;IACM,uBAAuB,GAAG,CAAC,CAAC,CAAA;IAC5B,mBAAmB,GAAG,CAAC,CAAC,CAAA;IAExB,WAAW,CAA2B;IACtC,gBAAgB,CAA2B;IAC3C,OAAO,GAAG,CAAC,CAAA;IACX,QAAQ,GAAG,EAAE,CAAA;IACb,cAAc,GAAG,CAAC,CAAA;IAC1B,uEAAuE;IACvE,0EAA0E;IAC1E,0BAA0B;IAC1B,gCAAgC,CAAoB;IAC5C,eAAe,CAA6C;IAE5D,WAAW,GAAiB,EAAE,CAAA;IAC9B,kBAAkB,GAA2B,EAAE,CAAA;IAC/C,aAAa,GAA2B,EAAE,CAAA;IAC1C,aAAa,GAAa,EAAE,CAAA;IAC5B,WAAW,GAAqC,EAAE,CAAA;IAClD,IAAI,CAAyB;IAErC,YAAY,MAAiB;QAC3B,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;QACpB,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAA;QAC9C,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,uEAAuE;QACvE,4EAA4E;QAC5E,sEAAsE;QACtE,mBAAmB;QACnB,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;YACnE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;YAC5B,MAAM,CAAC,CAAA;QACT,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QACjB,OAAO,IAAI,CAAC,IAAK,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,0EAA0E;QAC1E,4EAA4E;QAC5E,4EAA4E;QAC5E,yEAAyE;QACzE,kEAAkE;QAClE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACrB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QACvB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QAErB,0DAA0D;QAC1D,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACtC,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAC1C,CAAC;QACD,IAAI,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QACvD,YAAY,CAAC,SAAS,EAAE,CAAA,CAAC,QAAQ;QACjC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA;QACpC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7D,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;QAE5C,yEAAyE;QACzE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAEvB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CACzD,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,EAC1C,MAAM,CAAC,SAAS,CACjB,CAAA;QAED,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,GAAG,EAAE,CAAC,CAAA;QAClD,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAEnD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,CAAA;QAExC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;YACrD,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;QACnD,CAAC;QAED,IAAI,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA;QACvC,OAAO,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;YACzB,YAAY,CAAC,SAAS,EAAE,CAAA,CAAC,gBAAgB;YACzC,YAAY,CAAC,SAAS,EAAE,CAAA,CAAC,kBAAkB;QAC7C,CAAC;QAED,IAAI,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG;gBACV,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE;gBAC9B,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE;aACxE,CAAA;YACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC1B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAA;YAC7C,CAAC,EAAE,CAAA;QACL,CAAC;QAED,IAAI,cAAc,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA;QAC1C,OAAO,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;QAChD,CAAC;QAED,gDAAgD;QAChD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC3D,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;YAChD,CAAC;iBAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,OAAO,CAAA;YACnC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC,MAAM,OAAO,EAAE,CAAC,GAAG,OAAO,CAAA;YAC/C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,QAAQ;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,aAAa;SAChC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtC,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;QAE1D,IAAI,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QACvD,6CAA6C;QAC7C,MAAM,MAAM,GACV,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA;QACnE,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA;QAEpC,0EAA0E;QAC1E,4BAA4B;QAC5B,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;QACzC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CACzB,IAAI,CAAC,cAAc,GAAG,IAAI,EAC1B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CACzB,CAAA;QACD,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAEnD,OAAO,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,CAAA;YACpC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;YAClC,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;QAC9C,CAAC;QAED,6DAA6D;QAC7D,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAClC,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,MAAM,CAAA;QAC1E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,OAAe;QAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBACzD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC5B,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,OAAe;QAC/C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC7D,IAAI,MAA0B,CAAA;QAC9B,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;YACtD,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QACrD,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,aAAqB,EACrB,OAAkB,EAClB,OAAkB,EAClB,KAAa,EACb,OAAe;QAEf,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QAEtE,6EAA6E;QAC7E,yEAAyE;QACzE,4EAA4E;QAC5E,2EAA2E;QAC3E,2EAA2E;QAC3E,uEAAuE;QACvE,qEAAqE;QACrE,2EAA2E;QAC3E,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,SAAS,GACb,IAAI,KAAK,SAAS;YAClB,IAAI,KAAK,SAAS;YAClB,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QACnE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;QACxC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;QAExC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QACvC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAEvC,uEAAuE;QACvE,qEAAqE;QACrE,yEAAyE;QACzE,4EAA4E;QAC5E,4DAA4D;QAC5D,EAAE;QACF,6EAA6E;QAC7E,sEAAsE;QACtE,0EAA0E;QAC1E,0EAA0E;QAC1E,2EAA2E;QAC3E,EAAE;QACF,yEAAyE;QACzE,yEAAyE;QACzE,8BAA8B;QAC9B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC;YAC1D,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC;SAChC,CAAC,CAAA;QAEF,0EAA0E;QAC1E,yEAAyE;QACzE,4EAA4E;QAC5E,yDAAyD;QACzD,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAA;YACvC,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAA;QACxC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAA;QAC5C,IAAI,CAAC,GAAG,CAAC,CAAA;QAET,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,kEAAkE;YAClE,aAAa;YACb,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAQ;YACV,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAA;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;YACvB,qEAAqE;YACrE,kEAAkE;YAClE,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;gBACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;oBACnB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;oBACnB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;wBAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAE,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAE,CAAA;wBAClD,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;4BACtC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;4BACf,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;4BACf,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,GAAG,IAAI,CAAA;4BAChC,CAAC,EAAE,CAAA;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;oBACnB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;oBACnB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;wBAC/C,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;wBACf,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;wBACf,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;wBACzB,CAAC,EAAE,CAAA;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,4CAA4C;QAC5C,MAAM,cAAc,GAAmB;YACrC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;SACjC,CAAA;QAED,qEAAqE;QACrE,6EAA6E;QAC7E,2EAA2E;QAC3E,2EAA2E;QAC3E,kDAAkD;QAClD,EAAE;QACF,2EAA2E;QAC3E,4EAA4E;QAC5E,wEAAwE;QACxE,4EAA4E;QAC5E,cAAc;QACd,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM;YACnD,UAAU,EAAE,SAAS;SACtB,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,aAAqB,EACrB,EAAa,EACb,EAAa,EACb,KAAa,EACb,OAAe;QAEf,IAAI,MAOS,CAAA;QACb,IAAI,aAAa,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,CAAA;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,CAAA;YAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC3C,aAAa,EACb,IAAI,EACJ,KAAK,EACL,OAAO,CACR,CAAA;YACD,MAAM,GAAG,GACP,IAAI,KAAK,IAAI;gBACX,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAC/B,aAAa,EACb,IAAI,EACJ,KAAK,EACL,OAAO,CACR,CAAA;YACP,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;gBACf,MAAM,GAAG;oBACP,EAAE,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC;oBAC7D,EAAE,EAAE,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC;oBAC7D,OAAO;oBACP,OAAO;iBACR,CAAA;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAkB,EAAE,OAAkB,EAAE,OAAe;QACrE,MAAM,QAAQ,GAAG,CAAC,WAAmB,EAAE,EAAkB,EAAE,EAAE,CAC3D,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,WAAW,EAAE,CAAA;QAEjC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAE1C,IAAI,MAAM,GAA0B,EAAE,CAAA;QACtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QACrD,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACN,yEAAyE;YACzE,2EAA2E;YAC3E,yEAAyE;YACzE,kEAAkE;YAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC/C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;gBACtC,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,MAAM,IAAI,KAAK,CACb,GAAG,sBAAsB,KAAK,OAAO,YAAY,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAC9E,CAAA;gBACH,CAAC;gBAED,MAAM,YAAY,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;gBACvE,MAAM,mBAAmB,GAAa,EAAE,CAAA;gBACxC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;oBACrD,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBACrB,CAAC;yBAAM,CAAC;wBACN,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBAC/B,CAAC;gBACH,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CACpC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAChC,CACF,CAAA;gBACD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;oBAC9B,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;oBAC7D,CAAC;gBACH,CAAC;gBACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,WAAmB,EAAE,EAAkB;QACrD,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QAEtC,IAAI,KAAwB,CAAA;QAC5B,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;YAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAe,CAAA;YAC7D,MAAM,MAAM,GAAG,IAAI,YAAY,CAC7B,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAC/D,CAAA;YACD,0EAA0E;YAC1E,uEAAuE;YACvE,2DAA2D;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;YAChC,KAAK,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAA;QAC5E,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;;;OAQG;IACK,iBAAiB,CACvB,MAAoB,EACpB,QAAgB;QAEhB,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAA;YACrC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAA;YACrC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAA;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;gBACzB,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;gBACzB,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;YAC/B,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QAC/B,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QAClC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;QAElC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACpE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;QAE7B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,0EAA0E;YAC1E,+DAA+D;YAC/D,yCAAyC;YACzC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAA;YACrC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAA;YACrC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAA;YACzC,IAAI,CAAC,GAAG,CAAC,CAAA;YACT,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;gBAC3D,MAAM,IAAI,GAAG,UAAU,GAAG,EAAE,CAAA;gBAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;gBACjE,IAAI,CAAC,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAAC;oBAC5B,MAAM,IAAI,KAAK,CACb,sBAAsB,QAAQ,iCAAiC,CAChE,CAAA;gBACH,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,IAAI,CAAC,CAAC,CAAC;wBACL,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;oBACjE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;oBACd,MAAM,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;oBACnE,CAAC,EAAE,CAAA;gBACL,CAAC;YACH,CAAC;YACD,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;QACnD,CAAC;QAED,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,0EAA0E;YAC1E,yEAAyE;YACzE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;YAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;YAC3B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;YACjC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;YACjC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC,GAAG,CAAC,CAAA;YACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,oEAAoE;gBACpE,wCAAwC;gBACxC,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;gBACjE,mEAAmE;gBACnE,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;oBAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;oBAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;oBACpC,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,GAAG,CAAA;oBAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;oBACb,CAAC,EAAE,CAAA;gBACL,CAAC;YACH,CAAC;YACD,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,IAAY,EACZ,GAAW,EACX,IAAY,EACZ,OAAe;QAEf,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;QAChE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,GAAG,GAAG,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QAElE,wEAAwE;QACxE,yEAAyE;QACzE,4EAA4E;QAC5E,2DAA2D;QAC3D,yEAAyE;QACzE,0BAA0B;QAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,oEAAoE;YACpE,sEAAsE;YACtE,mEAAmE;YACnE,2EAA2E;YAC3E,mEAAmE;YACnE,4BAA4B;YAC5B,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBACzD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAChC,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAClC,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,GAAW;QAC/C,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QACpD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;QAClD,MAAM,YAAY,GAChB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAA;QAChE,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC5E,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,4EAA4E;QAC5E,6EAA6E;QAC7E,wEAAwE;QACxE,kDAAkD;QAClD,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QACjB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;YACtB,kEAAkE;YAClE,kEAAkE;YAClE,uEAAuE;YACvE,sEAAsE;YACtE,uEAAuE;YACvE,qEAAqE;YACrE,qEAAqE;YACrE,2CAA2C;YAC3C,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK,CACxD,CAAC,CAAU,EAAE,EAAE;gBACb,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAA;gBACjC,MAAM,CAAC,CAAA;YACT,CAAC,CACF,CAAA;YACD,MAAM,IAAI,CAAC,gBAAgB,CAAA;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,sEAAsE;QACtE,qCAAqC;QACrC,IAAI,IAAI,CAAC,uBAAuB,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,CAAC,mBAAmB,CAAC;gBAC7B,KAAK,EAAE,IAAI,CAAC,uBAAuB;gBACnC,IAAI,EAAE,IAAI,CAAC,mBAAmB;aAC/B,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC/D,MAAM,IAAI,CAAC,mBAAmB,CAAC;gBAC7B,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;gBAC7B,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;aAC7B,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,wCAAwC,EAAE,CAAA;YACvD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,mEAAmE;gBACnE,uEAAuE;gBACvE,yEAAyE;gBACzE,kEAAkE;gBAClE,uEAAuE;gBACvE,yEAAyE;gBACzE,0BAA0B;gBAC1B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,qEAAqE;QACrE,gDAAgD;QAChD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC/B,OAAO,IAAI,CAAC,kBAAkB,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAsC;QAC9D,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC1D,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QACzD,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;QACzB,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA;QACpC,OAAO,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAA;QACzC,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IAED,2EAA2E;IAC3E,yCAAyC;IACzC,KAAK,CAAC,wCAAwC;QAC5C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QACjB,IAAI,IAAI,CAAC,gCAAgC,KAAK,SAAS,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAC5C,IAAI,CAAC,gCAAgC,CACtC,CAAA;YACD,IAAI,SAAS,GAAG,GAAG,CAAA;YAEnB,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YAC9C,2EAA2E;YAC3E,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;gBACzD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA;gBACtC,MAAM,YAAY,GAAG,QAAQ,GAAG,EAAE,CAAA;gBAClC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,YAAY,CAAC,CAAA;gBAC/D,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;gBAEzB,MAAM,cAAc,GAAG,KAAK,EAAE,SAAiB,EAAE,GAAgB,EAAE,EAAE;oBACnE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;oBAClD,IAAI,CAAC,GAAG,SAAS,CAAA;oBACjB,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;wBACf,IAAI,MAAM,CAAC,SAAS,EAAE,GAAG,GAAG,EAAE,CAAC;4BAC7B,CAAC,EAAE,CAAA,CAAC,0CAA0C;4BAC9C,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAA;4BAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;4BAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,GAAG,CAAC,CAAA;4BAC5D,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;4BAC7B,OAAM;wBACR,CAAC;wBACD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;oBACnC,CAAC;oBACD,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAA;gBAC9B,CAAC,CAAA;gBAED,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBACpC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAA;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,gDAAgD;IAChD,KAAK,CAAC,kBAAkB,CAAC,KAAa;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAChE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACxC,2EAA2E;QAC3E,4EAA4E;QAC5E,0EAA0E;QAC1E,uEAAuE;QACvE,oEAAoE;QACpE,wEAAwE;QACxE,qEAAqE;QACrE,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA,CAAC,mCAAmC;QAE1E,MAAM,SAAS,GAAG,KAAK,EACrB,UAAkB,EAClB,SAAiB,EACA,EAAE;YACnB,IAAI,SAAS,GAAG,CAAC,CAAA;YACjB,MAAM,EAAE,GAAG,UAAU,CAAA;YAErB,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;YAC1C,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,SAAS,EAAE,CAAA,CAAC,OAAO;YAC1B,MAAM,CAAC,SAAS,EAAE,CAAA,CAAC,OAAO;YAC1B,MAAM,CAAC,MAAM,EAAE,CAAA,CAAC,UAAU;YAC1B,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;YAChE,SAAS,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YAEvE,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,EAAE,GAAG,CAAC,CAAA;YAClD,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;YAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;YACxC,SAAS;gBACP,GAAG,GAAG,gBAAgB,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;YAEjE,OAAO,SAAS,GAAG,CAAC,KAAK,CAAC;gBACxB,CAAC,CAAC,EAAE,GAAG,SAAS;gBAChB,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;QAC9C,CAAC,CAAA;QAED,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAA;IACxE,CAAC;IAED,oBAAoB,CAAC,YAA0B;QAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,CAAA,CAAC,KAAK;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA,CAAC,IAAI;QACzC,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,CAAA,CAAC,IAAI;QAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,CAAA,CAAC,IAAI;QAC1C,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA,CAAC,IAAI;QAChD,MAAM,WAAW,GACf,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA,CAAC,MAAM;QAC1E,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,EAAE,CAAA;QAElD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;QACD,IAAI,CAAC,eAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IAClE,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;IACjD,CAAC;CACF"}
|
package/esm/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { HicFile, NO_DATA_FOR_RESOLUTION } from './hicFile.ts';
|
|
2
|
+
export { readerFromFilehandle } from './reader.ts';
|
|
3
|
+
export type { HicConfig } from './hicFile.ts';
|
|
4
|
+
export type { ContactRecords } from './contactRecords.ts';
|
|
5
|
+
export type { Chromosome, HicMetadata, HicRegion, Reader, Zoom, } from './types.ts';
|
package/esm/index.js
ADDED
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
package/esm/lru.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional second bound, for a cache whose entries differ wildly in size.
|
|
3
|
+
*
|
|
4
|
+
* An entry cap is a memory bound only while entries are interchangeable, and the
|
|
5
|
+
* block cache's are not: a block holds every contact in its bin square, so one
|
|
6
|
+
* can be a few thousand contacts or a few hundred thousand depending on binsize
|
|
7
|
+
* and distance from the diagonal. Capping entries therefore forced one number to
|
|
8
|
+
* answer two questions — how many blocks a fetch needs at once, and how much
|
|
9
|
+
* memory the biggest of them may hold — and the memory question won, which is
|
|
10
|
+
* what left the cache too small to serve a multi-region fetch (see hicFile.ts).
|
|
11
|
+
*
|
|
12
|
+
* Splitting them lets the entry cap track the working set while `maxBytes`
|
|
13
|
+
* stays the backstop it was standing in for.
|
|
14
|
+
*/
|
|
15
|
+
interface WeightOpts<V> {
|
|
16
|
+
maxBytes: number;
|
|
17
|
+
weigh: (value: V) => number;
|
|
18
|
+
}
|
|
19
|
+
export default class LRU<K, V> {
|
|
20
|
+
private max;
|
|
21
|
+
private map;
|
|
22
|
+
private weight;
|
|
23
|
+
private weightOpts;
|
|
24
|
+
constructor(max?: number, weightOpts?: WeightOpts<V>);
|
|
25
|
+
get(key: K): V | undefined;
|
|
26
|
+
set(key: K, val: V): void;
|
|
27
|
+
delete(key: K): void;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
package/esm/lru.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export default class LRU {
|
|
2
|
+
max;
|
|
3
|
+
map = new Map();
|
|
4
|
+
weight = 0;
|
|
5
|
+
weightOpts;
|
|
6
|
+
constructor(max = 10, weightOpts) {
|
|
7
|
+
this.max = max;
|
|
8
|
+
this.weightOpts = weightOpts;
|
|
9
|
+
}
|
|
10
|
+
get(key) {
|
|
11
|
+
const item = this.map.get(key);
|
|
12
|
+
if (item !== undefined) {
|
|
13
|
+
// refresh key
|
|
14
|
+
this.map.delete(key);
|
|
15
|
+
this.map.set(key, item);
|
|
16
|
+
}
|
|
17
|
+
return item;
|
|
18
|
+
}
|
|
19
|
+
set(key, val) {
|
|
20
|
+
if (this.map.has(key)) {
|
|
21
|
+
// refresh key, and drop its old weight — `set` on an existing key
|
|
22
|
+
// replaces the value, so the weight it contributed goes with it
|
|
23
|
+
this.delete(key);
|
|
24
|
+
}
|
|
25
|
+
this.map.set(key, val);
|
|
26
|
+
this.weight += this.weightOpts?.weigh(val) ?? 0;
|
|
27
|
+
// Entry cap first, then the byte budget. `size > 1` keeps a single entry
|
|
28
|
+
// larger than the whole budget rather than evicting it and looping forever
|
|
29
|
+
// on an empty map — a cache that can't hold the thing just asked for should
|
|
30
|
+
// still answer the caller that asked.
|
|
31
|
+
while (this.map.size > this.max ||
|
|
32
|
+
(this.weightOpts !== undefined &&
|
|
33
|
+
this.weight > this.weightOpts.maxBytes &&
|
|
34
|
+
this.map.size > 1)) {
|
|
35
|
+
const oldest = this.map.keys().next().value;
|
|
36
|
+
if (oldest === undefined) {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
this.delete(oldest);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Used to evict a rejected in-flight promise so the next caller retries
|
|
43
|
+
// rather than resolving against a cached failure forever.
|
|
44
|
+
delete(key) {
|
|
45
|
+
const existing = this.map.get(key);
|
|
46
|
+
if (existing !== undefined) {
|
|
47
|
+
this.weight -= this.weightOpts?.weigh(existing) ?? 0;
|
|
48
|
+
}
|
|
49
|
+
this.map.delete(key);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=lru.js.map
|
package/esm/lru.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru.js","sourceRoot":"","sources":["../src/lru.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,OAAO,OAAO,GAAG;IACd,GAAG,CAAQ;IACX,GAAG,GAAG,IAAI,GAAG,EAAQ,CAAA;IACrB,MAAM,GAAG,CAAC,CAAA;IACV,UAAU,CAA2B;IAE7C,YAAY,GAAG,GAAG,EAAE,EAAE,UAA0B;QAC9C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,GAAG,CAAC,GAAM;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,cAAc;YACd,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACzB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,GAAM;QAChB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,kEAAkE;YAClE,gEAAgE;YAChE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAE/C,yEAAyE;QACzE,2EAA2E;QAC3E,4EAA4E;QAC5E,sCAAsC;QACtC,OACE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG;YACxB,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS;gBAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ;gBACtC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,EACpB,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;YAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAK;YACP,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,0DAA0D;IAC1D,MAAM,CAAC,GAAM;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACtD,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;CACF"}
|
package/esm/matrix.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import MatrixZoomData from './matrixZoomData.ts';
|
|
2
|
+
import type { Chromosome } from './types.ts';
|
|
3
|
+
export default class Matrix {
|
|
4
|
+
private bpZoomData;
|
|
5
|
+
constructor(zoomDataList: MatrixZoomData[]);
|
|
6
|
+
getZoomData(binSize: number): MatrixZoomData | undefined;
|
|
7
|
+
static getKey(chrIdx1: number, chrIdx2: number): string;
|
|
8
|
+
static parseMatrix(data: ArrayBuffer, chromosomes: Chromosome[]): Matrix;
|
|
9
|
+
}
|
package/esm/matrix.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import BinaryParser from "./binary.js";
|
|
2
|
+
import MatrixZoomData from "./matrixZoomData.js";
|
|
3
|
+
export default class Matrix {
|
|
4
|
+
// BP levels only. The FRAG code paths were dropped in this fork, so a
|
|
5
|
+
// matrix's FRAG zoom levels are parsed off the wire and discarded rather than
|
|
6
|
+
// kept in a second list nothing can reach.
|
|
7
|
+
bpZoomData;
|
|
8
|
+
constructor(zoomDataList) {
|
|
9
|
+
this.bpZoomData = zoomDataList.filter(zd => zd.zoom.unit === 'BP');
|
|
10
|
+
}
|
|
11
|
+
// Fetch zoom data by bin size. If no matching level exists return undefined.
|
|
12
|
+
getZoomData(binSize) {
|
|
13
|
+
return this.bpZoomData.find(zd => binSize === zd.zoom.binSize);
|
|
14
|
+
}
|
|
15
|
+
static getKey(chrIdx1, chrIdx2) {
|
|
16
|
+
const lo = Math.min(chrIdx1, chrIdx2);
|
|
17
|
+
const hi = Math.max(chrIdx1, chrIdx2);
|
|
18
|
+
return `${lo}_${hi}`;
|
|
19
|
+
}
|
|
20
|
+
static parseMatrix(data, chromosomes) {
|
|
21
|
+
const dis = new BinaryParser(new DataView(data));
|
|
22
|
+
const c1 = dis.getInt(); // Should equal chrIdx1
|
|
23
|
+
const c2 = dis.getInt(); // Should equal chrIdx2
|
|
24
|
+
const chr1 = chromosomes[c1];
|
|
25
|
+
const chr2 = chromosomes[c2];
|
|
26
|
+
// # of resolution levels (bp and frags)
|
|
27
|
+
let nResolutions = dis.getInt();
|
|
28
|
+
const zdList = [];
|
|
29
|
+
while (nResolutions-- > 0) {
|
|
30
|
+
zdList.push(MatrixZoomData.parseMatrixZoomData(chr1, chr2, dis));
|
|
31
|
+
}
|
|
32
|
+
return new Matrix(zdList);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=matrix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrix.js","sourceRoot":"","sources":["../src/matrix.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;AACtC,OAAO,cAAc,MAAM,qBAAqB,CAAA;AAIhD,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,sEAAsE;IACtE,8EAA8E;IAC9E,2CAA2C;IACnC,UAAU,CAAkB;IAEpC,YAAY,YAA8B;QACxC,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IACpE,CAAC;IAED,6EAA6E;IAC7E,WAAW,CAAC,OAAe;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAe,EAAE,OAAe;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACrC,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,CAAA;IACtB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAiB,EAAE,WAAyB;QAC7D,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAChD,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA,CAAC,uBAAuB;QAC/C,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA,CAAC,uBAAuB;QAE/C,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAE,CAAA;QAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAE,CAAA;QAE7B,wCAAwC;QACxC,IAAI,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAqB,EAAE,CAAA;QACnC,OAAO,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;QAClE,CAAC;QACD,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type BinaryParser from './binary.ts';
|
|
2
|
+
import type { BlockIndexEntry, Chromosome, HicRegion, Zoom } from './types.ts';
|
|
3
|
+
export default class MatrixZoomData {
|
|
4
|
+
chr1: Chromosome;
|
|
5
|
+
chr2: Chromosome;
|
|
6
|
+
zoom: Zoom;
|
|
7
|
+
blockBinCount: number;
|
|
8
|
+
blockColumnCount: number;
|
|
9
|
+
blockIndex: Record<number, BlockIndexEntry>;
|
|
10
|
+
constructor(chr1: Chromosome, chr2: Chromosome, zoom: Zoom, blockBinCount: number, blockColumnCount: number, blockIndex: Record<number, BlockIndexEntry>);
|
|
11
|
+
getKey(): string;
|
|
12
|
+
getBlockNumbers(region1: HicRegion, region2: HicRegion, version: number): number[];
|
|
13
|
+
static parseMatrixZoomData(chr1: Chromosome, chr2: Chromosome, dis: BinaryParser): MatrixZoomData;
|
|
14
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { binWindow } from "./binWindow.js";
|
|
2
|
+
export default class MatrixZoomData {
|
|
3
|
+
chr1;
|
|
4
|
+
chr2;
|
|
5
|
+
zoom;
|
|
6
|
+
blockBinCount;
|
|
7
|
+
blockColumnCount;
|
|
8
|
+
blockIndex;
|
|
9
|
+
constructor(chr1, chr2, zoom, blockBinCount, blockColumnCount, blockIndex) {
|
|
10
|
+
this.chr1 = chr1;
|
|
11
|
+
this.chr2 = chr2;
|
|
12
|
+
this.zoom = zoom;
|
|
13
|
+
this.blockBinCount = blockBinCount;
|
|
14
|
+
this.blockColumnCount = blockColumnCount;
|
|
15
|
+
this.blockIndex = blockIndex;
|
|
16
|
+
}
|
|
17
|
+
getKey() {
|
|
18
|
+
return `${this.chr1.name}_${this.chr2.name}_${this.zoom.unit}_${this.zoom.binSize}`;
|
|
19
|
+
}
|
|
20
|
+
getBlockNumbers(region1, region2, version) {
|
|
21
|
+
const sameChr = this.chr1 === this.chr2;
|
|
22
|
+
const binsize = this.zoom.binSize;
|
|
23
|
+
const blockBinCount = this.blockBinCount;
|
|
24
|
+
const blockColumnCount = this.blockColumnCount;
|
|
25
|
+
// Integer bin bounds, not the raw fractional quotients upstream used: the
|
|
26
|
+
// blocks selected here must cover every bin the record filter will accept,
|
|
27
|
+
// and `binWindow` widens that to any bin overlapping the region. Selecting
|
|
28
|
+
// too many blocks only costs a read the filter then discards; selecting too
|
|
29
|
+
// few silently drops records (see binWindow.ts).
|
|
30
|
+
const [x1, x2] = binWindow(region1, binsize);
|
|
31
|
+
const [y1, y2] = binWindow(region2, binsize);
|
|
32
|
+
// A Set dedups the block numbers that transposition can collide on the
|
|
33
|
+
// same-chr diagonal, and keeps both branches uniform.
|
|
34
|
+
const blockNumbers = new Set();
|
|
35
|
+
if (version < 9 || !sameChr) {
|
|
36
|
+
const col1 = Math.floor(x1 / blockBinCount);
|
|
37
|
+
const col2 = Math.floor((x2 - 1) / blockBinCount);
|
|
38
|
+
const row1 = Math.floor(y1 / blockBinCount);
|
|
39
|
+
const row2 = Math.floor((y2 - 1) / blockBinCount);
|
|
40
|
+
for (let row = row1; row <= row2; row++) {
|
|
41
|
+
for (let column = col1; column <= col2; column++) {
|
|
42
|
+
blockNumbers.add(sameChr && row < column
|
|
43
|
+
? column * blockColumnCount + row
|
|
44
|
+
: row * blockColumnCount + column);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// PAD = positionAlongDiagonal (~projected). Depth is the axis
|
|
50
|
+
// perpendicular to the diagonal; nearer means closer to the diagonal.
|
|
51
|
+
// Widening stays safe here too: overlapping regions take the
|
|
52
|
+
// `containsDiagonal` branch (nearerDepth 0) and disjoint ones only see
|
|
53
|
+
// the near-corner gap shrink, so no depth level is lost.
|
|
54
|
+
const translatedLowerPAD = Math.floor((x1 + y1) / 2 / blockBinCount);
|
|
55
|
+
const translatedHigherPAD = Math.floor((x2 + y2) / 2 / blockBinCount);
|
|
56
|
+
const translatedNearerDepth = Math.floor(Math.log2(1 + Math.abs(x1 - y2) / Math.sqrt(2) / blockBinCount));
|
|
57
|
+
const translatedFurtherDepth = Math.floor(Math.log2(1 + Math.abs(x2 - y1) / Math.sqrt(2) / blockBinCount));
|
|
58
|
+
// code above assumes above diagonal, but we could be below it
|
|
59
|
+
const containsDiagonal = (x2 - y1) * (x1 - y2) < 0;
|
|
60
|
+
const nearerDepth = containsDiagonal
|
|
61
|
+
? 0
|
|
62
|
+
: Math.min(translatedNearerDepth, translatedFurtherDepth);
|
|
63
|
+
const furtherDepth = Math.max(translatedNearerDepth, translatedFurtherDepth);
|
|
64
|
+
for (let depth = nearerDepth; depth <= furtherDepth; depth++) {
|
|
65
|
+
for (let pad = translatedLowerPAD; pad <= translatedHigherPAD; pad++) {
|
|
66
|
+
blockNumbers.add(depth * blockColumnCount + pad);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return [...blockNumbers];
|
|
71
|
+
}
|
|
72
|
+
static parseMatrixZoomData(chr1, chr2, dis) {
|
|
73
|
+
const unit = dis.getString();
|
|
74
|
+
const zoomIndex = dis.getInt();
|
|
75
|
+
dis.getFloat(); // sumCounts
|
|
76
|
+
dis.getFloat(); // occupiedCellCount
|
|
77
|
+
dis.getFloat(); // stdDev
|
|
78
|
+
dis.getFloat(); // percent95
|
|
79
|
+
const binSize = dis.getInt();
|
|
80
|
+
const blockBinCount = dis.getInt();
|
|
81
|
+
const blockColumnCount = dis.getInt();
|
|
82
|
+
let nBlocks = dis.getInt();
|
|
83
|
+
const blockIndex = {};
|
|
84
|
+
while (nBlocks-- > 0) {
|
|
85
|
+
const blockNumber = dis.getInt();
|
|
86
|
+
const filePosition = dis.getLong();
|
|
87
|
+
const size = dis.getInt();
|
|
88
|
+
blockIndex[blockNumber] = { filePosition, size };
|
|
89
|
+
}
|
|
90
|
+
return new MatrixZoomData(chr1, chr2, { index: zoomIndex, unit, binSize }, blockBinCount, blockColumnCount, blockIndex);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=matrixZoomData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matrixZoomData.js","sourceRoot":"","sources":["../src/matrixZoomData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Reader } from './types.ts';
|
|
2
|
+
export default class NormalizationVector {
|
|
3
|
+
private cache;
|
|
4
|
+
private file;
|
|
5
|
+
private filePosition;
|
|
6
|
+
private nValues;
|
|
7
|
+
private dataType;
|
|
8
|
+
constructor(file: Reader, filePosition: number, nValues: number, dataType: number);
|
|
9
|
+
getValues(start: number, end: number): Promise<Float64Array<ArrayBufferLike>>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import BinaryParser from "./binary.js";
|
|
2
|
+
const DOUBLE = 8;
|
|
3
|
+
export default class NormalizationVector {
|
|
4
|
+
cache;
|
|
5
|
+
file;
|
|
6
|
+
filePosition;
|
|
7
|
+
nValues;
|
|
8
|
+
dataType;
|
|
9
|
+
constructor(file, filePosition, nValues, dataType) {
|
|
10
|
+
this.file = file;
|
|
11
|
+
this.filePosition = filePosition;
|
|
12
|
+
this.nValues = nValues;
|
|
13
|
+
this.dataType = dataType;
|
|
14
|
+
}
|
|
15
|
+
async getValues(start, end) {
|
|
16
|
+
// The read below clamps to `nValues`, so the cache can never cover past it.
|
|
17
|
+
// Compare against the clamped bound or a request that runs off the end of
|
|
18
|
+
// the vector — reachable when the assembly's refseq is longer than the size
|
|
19
|
+
// the `.hic` recorded for that chromosome — leaves `end > cache.end` true
|
|
20
|
+
// forever, and every call re-reads the same range from the file.
|
|
21
|
+
const wanted = Math.min(end, this.nValues);
|
|
22
|
+
if (!this.cache || start < this.cache.start || wanted > this.cache.end) {
|
|
23
|
+
const adjustedStart = Math.max(0, start - 1000);
|
|
24
|
+
const adjustedEnd = Math.min(this.nValues, end + 1000);
|
|
25
|
+
const startPosition = this.filePosition + adjustedStart * this.dataType;
|
|
26
|
+
const n = adjustedEnd - adjustedStart;
|
|
27
|
+
const data = await this.file.read(startPosition, n * this.dataType);
|
|
28
|
+
const parser = new BinaryParser(new DataView(data));
|
|
29
|
+
const values = new Float64Array(n);
|
|
30
|
+
for (let i = 0; i < n; i++) {
|
|
31
|
+
values[i] =
|
|
32
|
+
this.dataType === DOUBLE ? parser.getDouble() : parser.getFloat();
|
|
33
|
+
}
|
|
34
|
+
this.cache = { start: adjustedStart, end: adjustedEnd, values };
|
|
35
|
+
}
|
|
36
|
+
// A view, not a copy: the caller only reads it, and a fetch asks for one of
|
|
37
|
+
// these per chromosome per region pair. Both this and `slice` clamp a
|
|
38
|
+
// request running past the end to what exists, which the caller already
|
|
39
|
+
// handles — an out-of-range index reads undefined, making the product NaN,
|
|
40
|
+
// which the record filter drops.
|
|
41
|
+
const sliceStart = start - this.cache.start;
|
|
42
|
+
return this.cache.values.subarray(sliceStart, sliceStart + (end - start));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=normalizationVector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizationVector.js","sourceRoot":"","sources":["../src/normalizationVector.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;AAItC,MAAM,MAAM,GAAG,CAAC,CAAA;AAEhB,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC9B,KAAK,CACqD;IAE1D,IAAI,CAAQ;IACZ,YAAY,CAAQ;IACpB,OAAO,CAAQ;IACf,QAAQ,CAAQ;IAExB,YACE,IAAY,EACZ,YAAoB,EACpB,OAAe,EACf,QAAgB;QAEhB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,GAAW;QACxC,4EAA4E;QAC5E,0EAA0E;QAC1E,4EAA4E;QAC5E,0EAA0E;QAC1E,iEAAiE;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACvE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAA;YAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,CAAA;YACtD,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAA;YACvE,MAAM,CAAC,GAAG,WAAW,GAAG,aAAa,CAAA;YACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;YACnE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;YACnD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,CAAC,CAAC;oBACP,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YACrE,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,CAAA;QACjE,CAAC;QAED,4EAA4E;QAC5E,sEAAsE;QACtE,wEAAwE;QACxE,2EAA2E;QAC3E,iCAAiC;QACjC,MAAM,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAA;IAC3E,CAAC;CACF"}
|
package/esm/reader.d.ts
ADDED
package/esm/reader.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function readerFromFilehandle(filehandle) {
|
|
2
|
+
return {
|
|
3
|
+
async read(position, length) {
|
|
4
|
+
const buf = await filehandle.read(length, position);
|
|
5
|
+
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAAC,UAA6B;IAChE,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,MAAc;YACzC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YACnD,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAA;QAC1E,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/esm/types.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The only read this parser needs: `length` bytes at `position`, coming back
|
|
3
|
+
* SHORT at end-of-file rather than throwing — the header walk deliberately
|
|
4
|
+
* reads past the end to discover whether a file carries normalization data at
|
|
5
|
+
* all. `generic-filehandle2` handles behave this way (a remote 416 included),
|
|
6
|
+
* and `readerFromFilehandle` adapts one to this shape.
|
|
7
|
+
*/
|
|
8
|
+
export interface Reader {
|
|
9
|
+
read: (position: number, length: number) => Promise<ArrayBuffer>;
|
|
10
|
+
}
|
|
11
|
+
export interface Chromosome {
|
|
12
|
+
index: number;
|
|
13
|
+
name: string;
|
|
14
|
+
size: number;
|
|
15
|
+
}
|
|
16
|
+
export interface HicRegion {
|
|
17
|
+
chr: string;
|
|
18
|
+
start: number;
|
|
19
|
+
end: number;
|
|
20
|
+
}
|
|
21
|
+
export interface Zoom {
|
|
22
|
+
index: number;
|
|
23
|
+
unit: string;
|
|
24
|
+
binSize: number;
|
|
25
|
+
}
|
|
26
|
+
export interface BlockIndexEntry {
|
|
27
|
+
filePosition: number;
|
|
28
|
+
size: number;
|
|
29
|
+
}
|
|
30
|
+
export interface HicMetadata {
|
|
31
|
+
version: number;
|
|
32
|
+
genome: string;
|
|
33
|
+
chromosomes: Chromosome[];
|
|
34
|
+
resolutions: number[];
|
|
35
|
+
}
|
package/esm/types.js
ADDED
package/esm/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gmod/hic",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"packageManager": "pnpm@11.15.1",
|
|
5
|
+
"description": "Read .hic contact matrix files in node or the browser",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/GMOD/hic.git"
|
|
11
|
+
},
|
|
12
|
+
"type": "module",
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"exports": {
|
|
15
|
+
"import": "./esm/index.js",
|
|
16
|
+
"require": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"author": {
|
|
19
|
+
"name": "Colin Diesh",
|
|
20
|
+
"email": "colin.diesh@gmail.com",
|
|
21
|
+
"url": "https://github.com/cmdcolin"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"esm",
|
|
26
|
+
"src"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"test": "vitest",
|
|
30
|
+
"clean": "rimraf dist esm",
|
|
31
|
+
"format": "prettier --write .",
|
|
32
|
+
"format:check": "prettier --check .",
|
|
33
|
+
"lint": "eslint --report-unused-disable-directives --max-warnings 0",
|
|
34
|
+
"typecheck": "tsc --noEmit -p tsconfig.lint.json",
|
|
35
|
+
"prebuild": "pnpm clean",
|
|
36
|
+
"build:esm": "tsc --outDir esm",
|
|
37
|
+
"build:es5": "tsc --module commonjs --moduleResolution bundler --outDir dist",
|
|
38
|
+
"postbuild:es5": "echo '{\"type\": \"commonjs\"}' > dist/package.json",
|
|
39
|
+
"preversion": "pnpm lint && pnpm format:check && pnpm typecheck && pnpm test --run && pnpm build",
|
|
40
|
+
"postversion": "git push --follow-tags",
|
|
41
|
+
"build": "pnpm build:esm && pnpm build:es5",
|
|
42
|
+
"coverage": "pnpm test --coverage",
|
|
43
|
+
"version": "git-cliff --tag v$npm_package_version --unreleased --prepend CHANGELOG.md && git add CHANGELOG.md"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"hic",
|
|
47
|
+
"juicebox",
|
|
48
|
+
"straw",
|
|
49
|
+
"genomics",
|
|
50
|
+
"bionode",
|
|
51
|
+
"biojs"
|
|
52
|
+
],
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"generic-filehandle2": "^2.3.1",
|
|
55
|
+
"pako-esm2": "^2.0.2"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@eslint/js": "^10.0.1",
|
|
59
|
+
"@types/node": "^25.9.5",
|
|
60
|
+
"@vitest/coverage-v8": "^4.1.10",
|
|
61
|
+
"eslint": "^10.8.0",
|
|
62
|
+
"eslint-plugin-import-x": "^4.17.1",
|
|
63
|
+
"git-cliff": "^2.13.1",
|
|
64
|
+
"prettier": "^3.9.6",
|
|
65
|
+
"rimraf": "^6.1.3",
|
|
66
|
+
"typescript": "^6.0.3",
|
|
67
|
+
"typescript-eslint": "^8.65.0",
|
|
68
|
+
"vitest": "^4.1.10"
|
|
69
|
+
},
|
|
70
|
+
"publishConfig": {
|
|
71
|
+
"access": "public"
|
|
72
|
+
}
|
|
73
|
+
}
|
package/src/binWindow.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { HicRegion } from './types.ts'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Half-open `[first, last+1)` range of bin indices **overlapping** a region.
|
|
5
|
+
*
|
|
6
|
+
* Upstream hic-straw compares bin indices against the raw fractional quotients
|
|
7
|
+
* `start/binsize` and `end/binsize`, which is exact only for the
|
|
8
|
+
* chromosome-aligned queries juicebox issues. A genome browser queries
|
|
9
|
+
* arbitrary viewport windows, where `start % binsize !== 0` essentially always
|
|
10
|
+
* holds, and the raw quotient then (a) drops the bin straddling the region's
|
|
11
|
+
* start — a missing column at the left edge of every block, jittering as the
|
|
12
|
+
* user pans — while keeping the one straddling the end, and (b) selects
|
|
13
|
+
* *nothing at all* for a region narrower than one bin, which is reachable by
|
|
14
|
+
* locking a coarse binsize while zoomed in.
|
|
15
|
+
*
|
|
16
|
+
* Flooring/ceiling also matches `getNormVectors`, which already builds its
|
|
17
|
+
* vector slice over `[floor(start/binsize), ceil(end/binsize))` — so
|
|
18
|
+
* `rec.bin1 - norm.offset1` indexes exactly the values that were fetched.
|
|
19
|
+
*
|
|
20
|
+
* Lives in its own module because both the record filter (`hicFile`) and the
|
|
21
|
+
* block-number selection (`matrixZoomData`) must agree on the window: widening
|
|
22
|
+
* only one of them still drops records, since a bin can sit in a block the
|
|
23
|
+
* other never asked for.
|
|
24
|
+
*/
|
|
25
|
+
export function binWindow(region: HicRegion, binsize: number) {
|
|
26
|
+
return [
|
|
27
|
+
Math.floor(region.start / binsize),
|
|
28
|
+
Math.ceil(region.end / binsize),
|
|
29
|
+
] as const
|
|
30
|
+
}
|
package/src/binary.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export default class BinaryParser {
|
|
2
|
+
position = 0
|
|
3
|
+
private view: DataView
|
|
4
|
+
private length: number
|
|
5
|
+
private littleEndian: boolean
|
|
6
|
+
|
|
7
|
+
constructor(dataView: DataView, littleEndian = true) {
|
|
8
|
+
this.view = dataView
|
|
9
|
+
this.length = dataView.byteLength
|
|
10
|
+
this.littleEndian = littleEndian
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
available() {
|
|
14
|
+
return this.length - this.position
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getByte() {
|
|
18
|
+
const ret = this.view.getUint8(this.position)
|
|
19
|
+
this.position += 1
|
|
20
|
+
return ret
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
getShort() {
|
|
24
|
+
const ret = this.view.getInt16(this.position, this.littleEndian)
|
|
25
|
+
this.position += 2
|
|
26
|
+
return ret
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
getInt() {
|
|
30
|
+
const ret = this.view.getInt32(this.position, this.littleEndian)
|
|
31
|
+
this.position += 4
|
|
32
|
+
return ret
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// No native 64-bit read that lands in a `number`, so compose two 32-bit words
|
|
36
|
+
// (deliberately not getBigUint64 — every caller is a file offset or a count
|
|
37
|
+
// that stays well inside Number.MAX_SAFE_INTEGER, and a BigInt would have to
|
|
38
|
+
// be converted back at each use site). hic-straw accumulated byte-by-byte
|
|
39
|
+
// through a throwaway 8-element array, which is a per-entry allocation in the
|
|
40
|
+
// block-index parse loop.
|
|
41
|
+
getLong() {
|
|
42
|
+
const p = this.position
|
|
43
|
+
const le = this.littleEndian
|
|
44
|
+
const first = this.view.getUint32(p, le)
|
|
45
|
+
const second = this.view.getUint32(p + 4, le)
|
|
46
|
+
this.position += 8
|
|
47
|
+
// little-endian puts the low word first, big-endian the high word
|
|
48
|
+
return le ? second * 0x1_0000_0000 + first : first * 0x1_0000_0000 + second
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
getString() {
|
|
52
|
+
let s = ''
|
|
53
|
+
let c = this.view.getUint8(this.position++)
|
|
54
|
+
while (c !== 0) {
|
|
55
|
+
s += String.fromCharCode(c)
|
|
56
|
+
c = this.view.getUint8(this.position++)
|
|
57
|
+
}
|
|
58
|
+
return s
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
getFloat() {
|
|
62
|
+
const ret = this.view.getFloat32(this.position, this.littleEndian)
|
|
63
|
+
this.position += 4
|
|
64
|
+
return ret
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
getDouble() {
|
|
68
|
+
const ret = this.view.getFloat64(this.position, this.littleEndian)
|
|
69
|
+
this.position += 8
|
|
70
|
+
return ret
|
|
71
|
+
}
|
|
72
|
+
}
|