@gmod/gbz-base 0.0.1 → 1.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.
Files changed (62) hide show
  1. package/README.md +45 -4
  2. package/bin/query.js +3 -1
  3. package/dist/cli.js +85 -19
  4. package/dist/cli.js.map +1 -0
  5. package/dist/db.d.ts +14 -6
  6. package/dist/db.js +92 -28
  7. package/dist/db.js.map +1 -0
  8. package/dist/filehandle.js +1 -0
  9. package/dist/filehandle.js.map +1 -0
  10. package/dist/gbwt/bytecode.d.ts +1 -1
  11. package/dist/gbwt/bytecode.js +7 -3
  12. package/dist/gbwt/bytecode.js.map +1 -0
  13. package/dist/gbwt/node.js +7 -2
  14. package/dist/gbwt/node.js.map +1 -0
  15. package/dist/gbwt/record.d.ts +4 -0
  16. package/dist/gbwt/record.js +30 -2
  17. package/dist/gbwt/record.js.map +1 -0
  18. package/dist/gbwt/sequence.js +8 -1
  19. package/dist/gbwt/sequence.js.map +1 -0
  20. package/dist/graphName.d.ts +9 -0
  21. package/dist/graphName.js +83 -0
  22. package/dist/graphName.js.map +1 -0
  23. package/dist/index.d.ts +5 -4
  24. package/dist/index.js +3 -2
  25. package/dist/index.js.map +1 -0
  26. package/dist/lcs.js +32 -10
  27. package/dist/lcs.js.map +1 -0
  28. package/dist/query.d.ts +4 -2
  29. package/dist/query.js +19 -0
  30. package/dist/query.js.map +1 -0
  31. package/dist/sqlite/btree.d.ts +1 -1
  32. package/dist/sqlite/btree.js +24 -7
  33. package/dist/sqlite/btree.js.map +1 -0
  34. package/dist/sqlite/database.d.ts +1 -1
  35. package/dist/sqlite/database.js +12 -2
  36. package/dist/sqlite/database.js.map +1 -0
  37. package/dist/sqlite/pager.d.ts +8 -3
  38. package/dist/sqlite/pager.js +71 -12
  39. package/dist/sqlite/pager.js.map +1 -0
  40. package/dist/sqlite/record.js +3 -1
  41. package/dist/sqlite/record.js.map +1 -0
  42. package/dist/subgraph.d.ts +12 -2
  43. package/dist/subgraph.js +413 -84
  44. package/dist/subgraph.js.map +1 -0
  45. package/package.json +36 -11
  46. package/src/cli.ts +258 -0
  47. package/src/db.ts +374 -0
  48. package/src/filehandle.ts +4 -0
  49. package/src/gbwt/bytecode.ts +87 -0
  50. package/src/gbwt/node.ts +64 -0
  51. package/src/gbwt/record.ts +177 -0
  52. package/src/gbwt/sequence.ts +50 -0
  53. package/src/graphName.ts +94 -0
  54. package/src/index.ts +34 -0
  55. package/src/lcs.ts +282 -0
  56. package/src/query.ts +106 -0
  57. package/src/sqlite/btree.ts +260 -0
  58. package/src/sqlite/database.ts +117 -0
  59. package/src/sqlite/pager.ts +148 -0
  60. package/src/sqlite/record.ts +100 -0
  61. package/src/subgraph.ts +1353 -0
  62. package/tools/haplotype-index/src/main.rs +197 -163
@@ -1,12 +1,12 @@
1
1
  export class Pager {
2
- source;
3
- pageSize;
4
- fileSize;
5
2
  blocks = new Map();
6
3
  blockSize;
7
4
  maxBlocks;
8
5
  bytesFetched = 0;
9
6
  fetches = 0;
7
+ source;
8
+ pageSize;
9
+ fileSize;
10
10
  constructor(source, pageSize, fileSize, opts = {}) {
11
11
  this.source = source;
12
12
  this.pageSize = pageSize;
@@ -15,8 +15,26 @@ export class Pager {
15
15
  this.blockSize = Math.max(pageSize, Math.ceil(requested / pageSize) * pageSize);
16
16
  this.maxBlocks = opts.maxBlocks ?? 256;
17
17
  }
18
+ async read(length, start) {
19
+ let attempt = 0;
20
+ for (;;) {
21
+ try {
22
+ const bytes = await this.source.read(length, start);
23
+ this.bytesFetched += bytes.length;
24
+ return bytes;
25
+ }
26
+ catch (error) {
27
+ attempt += 1;
28
+ if (attempt >= 3) {
29
+ throw error;
30
+ }
31
+ await new Promise(resolve => setTimeout(resolve, 200 * attempt));
32
+ }
33
+ }
34
+ }
18
35
  seed(index, bytes) {
19
- if (bytes.length === Math.min(this.blockSize, this.fileSize - index * this.blockSize)) {
36
+ if (bytes.length ===
37
+ Math.min(this.blockSize, this.fileSize - index * this.blockSize)) {
20
38
  this.blocks.set(index, Promise.resolve(bytes));
21
39
  }
22
40
  }
@@ -29,19 +47,59 @@ export class Pager {
29
47
  }
30
48
  const start = index * this.blockSize;
31
49
  const length = Math.min(this.blockSize, this.fileSize - start);
32
- const pending = this.source.read(length, start).then(bytes => {
33
- this.bytesFetched += bytes.length;
34
- return bytes;
35
- });
50
+ const pending = this.read(length, start);
36
51
  this.fetches += 1;
37
52
  this.blocks.set(index, pending);
38
- if (this.blocks.size > this.maxBlocks) {
53
+ this.forgetOnFailure(pending, [index]);
54
+ this.evict();
55
+ return pending;
56
+ }
57
+ prefetch(pageNumbers) {
58
+ const wanted = [
59
+ ...new Set(pageNumbers.map(pageNumber => Math.floor(((pageNumber - 1) * this.pageSize) / this.blockSize))),
60
+ ]
61
+ .filter(index => !this.blocks.has(index))
62
+ .sort((a, b) => a - b);
63
+ let runStart = 0;
64
+ while (runStart < wanted.length) {
65
+ let runEnd = runStart + 1;
66
+ while (runEnd < wanted.length &&
67
+ wanted[runEnd] === wanted[runEnd - 1] + 1) {
68
+ runEnd += 1;
69
+ }
70
+ this.fetchRun(wanted[runStart], runEnd - runStart);
71
+ runStart = runEnd;
72
+ }
73
+ }
74
+ fetchRun(firstIndex, count) {
75
+ const start = firstIndex * this.blockSize;
76
+ const length = Math.min(count * this.blockSize, this.fileSize - start);
77
+ const pending = this.read(length, start);
78
+ this.fetches += 1;
79
+ const indexes = [];
80
+ for (let i = 0; i < count; i++) {
81
+ const within = i * this.blockSize;
82
+ indexes.push(firstIndex + i);
83
+ this.blocks.set(firstIndex + i, pending.then(bytes => bytes.subarray(within, within + this.blockSize)));
84
+ }
85
+ this.forgetOnFailure(pending, indexes);
86
+ this.evict();
87
+ }
88
+ forgetOnFailure(pending, indexes) {
89
+ pending.catch(() => {
90
+ for (const index of indexes) {
91
+ this.blocks.delete(index);
92
+ }
93
+ });
94
+ }
95
+ evict() {
96
+ while (this.blocks.size > this.maxBlocks) {
39
97
  const oldest = this.blocks.keys().next().value;
40
- if (oldest !== undefined) {
41
- this.blocks.delete(oldest);
98
+ if (oldest === undefined) {
99
+ break;
42
100
  }
101
+ this.blocks.delete(oldest);
43
102
  }
44
- return pending;
45
103
  }
46
104
  async page(pageNumber) {
47
105
  const offset = (pageNumber - 1) * this.pageSize;
@@ -53,3 +111,4 @@ export class Pager {
53
111
  return bytes.subarray(within, within + this.pageSize);
54
112
  }
55
113
  }
114
+ //# sourceMappingURL=pager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pager.js","sourceRoot":"","sources":["../../src/sqlite/pager.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,8 @@ function readSignedInt(view, offset, width) {
34
34
  return view.getInt16(offset) * 4294967296 + view.getUint32(offset + 2);
35
35
  default: {
36
36
  const big = view.getBigInt64(offset);
37
- if (big > BigInt(Number.MAX_SAFE_INTEGER) || big < BigInt(Number.MIN_SAFE_INTEGER)) {
37
+ if (big > BigInt(Number.MAX_SAFE_INTEGER) ||
38
+ big < BigInt(Number.MIN_SAFE_INTEGER)) {
38
39
  throw new Error(`SQLite integer ${big} exceeds the safe integer range`);
39
40
  }
40
41
  return Number(big);
@@ -83,3 +84,4 @@ export function decodeRecord(payload) {
83
84
  throw new Error(`SQLite serial type ${type} is reserved`);
84
85
  });
85
86
  }
87
+ //# sourceMappingURL=record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/sqlite/record.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import type { GBZBase, PathName } from './db.ts';
2
- import type { Pos } from './gbwt/record.ts';
3
2
  import type { Orientation } from './gbwt/node.ts';
3
+ import type { Pos } from './gbwt/record.ts';
4
4
  export type HaplotypeOutput = 'all' | 'distinct' | 'reference-only' | 'none';
5
+ export type SnarlOutput = 'none' | 'contained' | 'overlapping';
5
6
  export interface PathPosition {
6
7
  seqOffset: number;
7
8
  handle: number;
@@ -59,7 +60,6 @@ export interface ToJsonOptions {
59
60
  names?: 'anonymous' | 'resolved';
60
61
  }
61
62
  export declare class Subgraph {
62
- private db;
63
63
  private records;
64
64
  private paths;
65
65
  private refId;
@@ -75,6 +75,7 @@ export declare class Subgraph {
75
75
  identificationSteps: number;
76
76
  identificationFetches: number;
77
77
  };
78
+ private db;
78
79
  constructor(db: GBZBase);
79
80
  get nodeCount(): number;
80
81
  get pathCount(): number;
@@ -105,6 +106,12 @@ export declare class Subgraph {
105
106
  removed: number;
106
107
  }>;
107
108
  private insertContext;
109
+ betweenNodes(start: number, end: number): Promise<number>;
110
+ extractSnarls(snarls: SnarlOutput): Promise<number>;
111
+ private overlappingSnarls;
112
+ private isSnarlEntryInSubgraph;
113
+ private recordReader;
114
+ private findCoveringSnarl;
108
115
  extractPaths(reference: ReferencePath | undefined, output: HaplotypeOutput): void;
109
116
  private distinctPaths;
110
117
  identifyPaths(): Promise<void>;
@@ -118,5 +125,8 @@ export declare class Subgraph {
118
125
  private edits;
119
126
  alignToRef(pathIndex: number): string | undefined;
120
127
  alignments(): HaplotypeAlignment[];
128
+ private canonicalEdges;
129
+ stableName(): Promise<string>;
130
+ toGFA(cigar: boolean, opts?: ToJsonOptions): Promise<string>;
121
131
  toJSON(cigar: boolean, opts?: ToJsonOptions): SubgraphJson;
122
132
  }