UNPKG

min-bounding-rectangle

Version:

Minimum bounding rectangle implementation in JavaScript. Uses `concaveman` and `mathjs` as dependencies.

1,553 lines (1,552 loc) 249 kB
function Rr(t, e, n = 0, r = t.length - 1, i = Mu) { for (; r > n; ) { if (r - n > 600) { const f = r - n + 1, l = e - n + 1, a = Math.log(f), c = 0.5 * Math.exp(2 * a / 3), D = 0.5 * Math.sqrt(a * c * (f - c) / f) * (l - f / 2 < 0 ? -1 : 1), w = Math.max(n, Math.floor(e - l * c / f + D)), M = Math.min(r, Math.floor(e + (f - l) * c / f + D)); Rr(t, e, w, M, i); } const u = t[e]; let o = n, s = r; for (Xe(t, n, e), i(t[r], u) > 0 && Xe(t, n, r); o < s; ) { for (Xe(t, o, s), o++, s--; i(t[o], u) < 0; ) o++; for (; i(t[s], u) > 0; ) s--; } i(t[n], u) === 0 ? Xe(t, n, s) : (s++, Xe(t, s, r)), s <= e && (n = s + 1), e <= s && (r = s - 1); } } function Xe(t, e, n) { const r = t[e]; t[e] = t[n], t[n] = r; } function Mu(t, e) { return t < e ? -1 : t > e ? 1 : 0; } class Kn { constructor(e = 9) { this._maxEntries = Math.max(4, e), this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)), this.clear(); } all() { return this._all(this.data, []); } search(e) { let n = this.data; const r = []; if (!tn(e, n)) return r; const i = this.toBBox, u = []; for (; n; ) { for (let o = 0; o < n.children.length; o++) { const s = n.children[o], f = n.leaf ? i(s) : s; tn(e, f) && (n.leaf ? r.push(s) : xn(e, f) ? this._all(s, r) : u.push(s)); } n = u.pop(); } return r; } collides(e) { let n = this.data; if (!tn(e, n)) return !1; const r = []; for (; n; ) { for (let i = 0; i < n.children.length; i++) { const u = n.children[i], o = n.leaf ? this.toBBox(u) : u; if (tn(e, o)) { if (n.leaf || xn(e, o)) return !0; r.push(u); } } n = r.pop(); } return !1; } load(e) { if (!(e && e.length)) return this; if (e.length < this._minEntries) { for (let r = 0; r < e.length; r++) this.insert(e[r]); return this; } let n = this._build(e.slice(), 0, e.length - 1, 0); if (!this.data.children.length) this.data = n; else if (this.data.height === n.height) this._splitRoot(this.data, n); else { if (this.data.height < n.height) { const r = this.data; this.data = n, n = r; } this._insert(n, this.data.height - n.height - 1, !0); } return this; } insert(e) { return e && this._insert(e, this.data.height - 1), this; } clear() { return this.data = xe([]), this; } remove(e, n) { if (!e) return this; let r = this.data; const i = this.toBBox(e), u = [], o = []; let s, f, l; for (; r || u.length; ) { if (r || (r = u.pop(), f = u[u.length - 1], s = o.pop(), l = !0), r.leaf) { const a = Nu(e, r.children, n); if (a !== -1) return r.children.splice(a, 1), u.push(r), this._condense(u), this; } !l && !r.leaf && xn(r, i) ? (u.push(r), o.push(s), s = 0, f = r, r = r.children[0]) : f ? (s++, r = f.children[s], l = !1) : r = null; } return this; } toBBox(e) { return e; } compareMinX(e, n) { return e.minX - n.minX; } compareMinY(e, n) { return e.minY - n.minY; } toJSON() { return this.data; } fromJSON(e) { return this.data = e, this; } _all(e, n) { const r = []; for (; e; ) e.leaf ? n.push(...e.children) : r.push(...e.children), e = r.pop(); return n; } _build(e, n, r, i) { const u = r - n + 1; let o = this._maxEntries, s; if (u <= o) return s = xe(e.slice(n, r + 1)), Ae(s, this.toBBox), s; i || (i = Math.ceil(Math.log(u) / Math.log(o)), o = Math.ceil(u / Math.pow(o, i - 1))), s = xe([]), s.leaf = !1, s.height = i; const f = Math.ceil(u / o), l = f * Math.ceil(Math.sqrt(o)); jn(e, n, r, l, this.compareMinX); for (let a = n; a <= r; a += l) { const c = Math.min(a + l - 1, r); jn(e, a, c, f, this.compareMinY); for (let D = a; D <= c; D += f) { const w = Math.min(D + f - 1, c); s.children.push(this._build(e, D, w, i - 1)); } } return Ae(s, this.toBBox), s; } _chooseSubtree(e, n, r, i) { for (; i.push(n), !(n.leaf || i.length - 1 === r); ) { let u = 1 / 0, o = 1 / 0, s; for (let f = 0; f < n.children.length; f++) { const l = n.children[f], a = Nn(l), c = Tu(e, l) - a; c < o ? (o = c, u = a < u ? a : u, s = l) : c === o && a < u && (u = a, s = l); } n = s || n.children[0]; } return n; } _insert(e, n, r) { const i = r ? e : this.toBBox(e), u = [], o = this._chooseSubtree(i, this.data, n, u); for (o.children.push(e), Ze(o, i); n >= 0 && u[n].children.length > this._maxEntries; ) this._split(u, n), n--; this._adjustParentBBoxes(i, u, n); } // split overflowed node into two _split(e, n) { const r = e[n], i = r.children.length, u = this._minEntries; this._chooseSplitAxis(r, u, i); const o = this._chooseSplitIndex(r, u, i), s = xe(r.children.splice(o, r.children.length - o)); s.height = r.height, s.leaf = r.leaf, Ae(r, this.toBBox), Ae(s, this.toBBox), n ? e[n - 1].children.push(s) : this._splitRoot(r, s); } _splitRoot(e, n) { this.data = xe([e, n]), this.data.height = e.height + 1, this.data.leaf = !1, Ae(this.data, this.toBBox); } _chooseSplitIndex(e, n, r) { let i, u = 1 / 0, o = 1 / 0; for (let s = n; s <= r - n; s++) { const f = Le(e, 0, s, this.toBBox), l = Le(e, s, r, this.toBBox), a = bu(f, l), c = Nn(f) + Nn(l); a < u ? (u = a, i = s, o = c < o ? c : o) : a === u && c < o && (o = c, i = s); } return i || r - n; } // sorts node children by the best axis for split _chooseSplitAxis(e, n, r) { const i = e.leaf ? this.compareMinX : xu, u = e.leaf ? this.compareMinY : Su, o = this._allDistMargin(e, n, r, i), s = this._allDistMargin(e, n, r, u); o < s && e.children.sort(i); } // total margin of all possible split distributions where each node is at least m full _allDistMargin(e, n, r, i) { e.children.sort(i); const u = this.toBBox, o = Le(e, 0, n, u), s = Le(e, r - n, r, u); let f = je(o) + je(s); for (let l = n; l < r - n; l++) { const a = e.children[l]; Ze(o, e.leaf ? u(a) : a), f += je(o); } for (let l = r - n - 1; l >= n; l--) { const a = e.children[l]; Ze(s, e.leaf ? u(a) : a), f += je(s); } return f; } _adjustParentBBoxes(e, n, r) { for (let i = r; i >= 0; i--) Ze(n[i], e); } _condense(e) { for (let n = e.length - 1, r; n >= 0; n--) e[n].children.length === 0 ? n > 0 ? (r = e[n - 1].children, r.splice(r.indexOf(e[n]), 1)) : this.clear() : Ae(e[n], this.toBBox); } } function Nu(t, e, n) { if (!n) return e.indexOf(t); for (let r = 0; r < e.length; r++) if (n(t, e[r])) return r; return -1; } function Ae(t, e) { Le(t, 0, t.children.length, e, t); } function Le(t, e, n, r, i) { i || (i = xe(null)), i.minX = 1 / 0, i.minY = 1 / 0, i.maxX = -1 / 0, i.maxY = -1 / 0; for (let u = e; u < n; u++) { const o = t.children[u]; Ze(i, t.leaf ? r(o) : o); } return i; } function Ze(t, e) { return t.minX = Math.min(t.minX, e.minX), t.minY = Math.min(t.minY, e.minY), t.maxX = Math.max(t.maxX, e.maxX), t.maxY = Math.max(t.maxY, e.maxY), t; } function xu(t, e) { return t.minX - e.minX; } function Su(t, e) { return t.minY - e.minY; } function Nn(t) { return (t.maxX - t.minX) * (t.maxY - t.minY); } function je(t) { return t.maxX - t.minX + (t.maxY - t.minY); } function Tu(t, e) { return (Math.max(e.maxX, t.maxX) - Math.min(e.minX, t.minX)) * (Math.max(e.maxY, t.maxY) - Math.min(e.minY, t.minY)); } function bu(t, e) { const n = Math.max(t.minX, e.minX), r = Math.max(t.minY, e.minY), i = Math.min(t.maxX, e.maxX), u = Math.min(t.maxY, e.maxY); return Math.max(0, i - n) * Math.max(0, u - r); } function xn(t, e) { return t.minX <= e.minX && t.minY <= e.minY && e.maxX <= t.maxX && e.maxY <= t.maxY; } function tn(t, e) { return e.minX <= t.maxX && e.minY <= t.maxY && e.maxX >= t.minX && e.maxY >= t.minY; } function xe(t) { return { children: t, height: 1, leaf: !0, minX: 1 / 0, minY: 1 / 0, maxX: -1 / 0, maxY: -1 / 0 }; } function jn(t, e, n, r, i) { const u = [e, n]; for (; u.length; ) { if (n = u.pop(), e = u.pop(), n - e <= r) continue; const o = e + Math.ceil((n - e) / r / 2) * r; Rr(t, o, e, n, i), u.push(e, o, o, n); } } class Iu { constructor(e = [], n = (r, i) => r < i ? -1 : r > i ? 1 : 0) { if (this.data = e, this.length = this.data.length, this.compare = n, this.length > 0) for (let r = (this.length >> 1) - 1; r >= 0; r--) this._down(r); } push(e) { this.data.push(e), this._up(this.length++); } pop() { if (this.length === 0) return; const e = this.data[0], n = this.data.pop(); return --this.length > 0 && (this.data[0] = n, this._down(0)), e; } peek() { return this.data[0]; } _up(e) { const { data: n, compare: r } = this, i = n[e]; for (; e > 0; ) { const u = e - 1 >> 1, o = n[u]; if (r(i, o) >= 0) break; n[e] = o, e = u; } n[e] = i; } _down(e) { const { data: n, compare: r } = this, i = this.length >> 1, u = n[e]; for (; e < i; ) { let o = (e << 1) + 1; const s = o + 1; if (s < this.length && r(n[s], n[o]) < 0 && (o = s), r(n[o], u) >= 0) break; n[e] = n[o], e = o; } n[e] = u; } } function qr(t) { return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t; } var $e = { exports: {} }, Sn, tr; function Ou() { return tr || (tr = 1, Sn = function(e, n, r, i) { var u = e[0], o = e[1], s = !1; r === void 0 && (r = 0), i === void 0 && (i = n.length); for (var f = (i - r) / 2, l = 0, a = f - 1; l < f; a = l++) { var c = n[r + l * 2 + 0], D = n[r + l * 2 + 1], w = n[r + a * 2 + 0], M = n[r + a * 2 + 1], h = D > o != M > o && u < (w - c) * (o - D) / (M - D) + c; h && (s = !s); } return s; }), Sn; } var Tn, er; function Pu() { return er || (er = 1, Tn = function(e, n, r, i) { var u = e[0], o = e[1], s = !1; r === void 0 && (r = 0), i === void 0 && (i = n.length); for (var f = i - r, l = 0, a = f - 1; l < f; a = l++) { var c = n[l + r][0], D = n[l + r][1], w = n[a + r][0], M = n[a + r][1], h = D > o != M > o && u < (w - c) * (o - D) / (M - D) + c; h && (s = !s); } return s; }), Tn; } var nr; function zu() { if (nr) return $e.exports; nr = 1; var t = Ou(), e = Pu(); return $e.exports = function(r, i, u, o) { return i.length > 0 && Array.isArray(i[0]) ? e(r, i, u, o) : t(r, i, u, o); }, $e.exports.nested = e, $e.exports.flat = t, $e.exports; } var Ru = zu(); const qu = /* @__PURE__ */ qr(Ru), ae = 11102230246251565e-32, bt = 134217729, Yu = (3 + 8 * ae) * ae; function bn(t, e, n, r, i) { let u, o, s, f, l = e[0], a = r[0], c = 0, D = 0; a > l == a > -l ? (u = l, l = e[++c]) : (u = a, a = r[++D]); let w = 0; if (c < t && D < n) for (a > l == a > -l ? (o = l + u, s = u - (o - l), l = e[++c]) : (o = a + u, s = u - (o - a), a = r[++D]), u = o, s !== 0 && (i[w++] = s); c < t && D < n; ) a > l == a > -l ? (o = u + l, f = o - u, s = u - (o - f) + (l - f), l = e[++c]) : (o = u + a, f = o - u, s = u - (o - f) + (a - f), a = r[++D]), u = o, s !== 0 && (i[w++] = s); for (; c < t; ) o = u + l, f = o - u, s = u - (o - f) + (l - f), l = e[++c], u = o, s !== 0 && (i[w++] = s); for (; D < n; ) o = u + a, f = o - u, s = u - (o - f) + (a - f), a = r[++D], u = o, s !== 0 && (i[w++] = s); return (u !== 0 || w === 0) && (i[w++] = u), w; } function Uu(t, e) { let n = e[0]; for (let r = 1; r < t; r++) n += e[r]; return n; } function Ge(t) { return new Float64Array(t); } const Xu = (3 + 16 * ae) * ae, $u = (2 + 12 * ae) * ae, Lu = (9 + 64 * ae) * ae * ae, Ce = Ge(4), rr = Ge(8), ir = Ge(12), ur = Ge(16), qt = Ge(4); function Zu(t, e, n, r, i, u, o) { let s, f, l, a, c, D, w, M, h, g, p, E, F, A, d, m, C, y; const B = t - i, x = n - i, T = e - u, q = r - u; A = B * q, D = bt * B, w = D - (D - B), M = B - w, D = bt * q, h = D - (D - q), g = q - h, d = M * g - (A - w * h - M * h - w * g), m = T * x, D = bt * T, w = D - (D - T), M = T - w, D = bt * x, h = D - (D - x), g = x - h, C = M * g - (m - w * h - M * h - w * g), p = d - C, c = d - p, Ce[0] = d - (p + c) + (c - C), E = A + p, c = E - A, F = A - (E - c) + (p - c), p = F - m, c = F - p, Ce[1] = F - (p + c) + (c - m), y = E + p, c = y - E, Ce[2] = E - (y - c) + (p - c), Ce[3] = y; let Z = Uu(4, Ce), W = $u * o; if (Z >= W || -Z >= W || (c = t - B, s = t - (B + c) + (c - i), c = n - x, l = n - (x + c) + (c - i), c = e - T, f = e - (T + c) + (c - u), c = r - q, a = r - (q + c) + (c - u), s === 0 && f === 0 && l === 0 && a === 0) || (W = Lu * o + Yu * Math.abs(Z), Z += B * a + q * s - (T * l + x * f), Z >= W || -Z >= W)) return Z; A = s * q, D = bt * s, w = D - (D - s), M = s - w, D = bt * q, h = D - (D - q), g = q - h, d = M * g - (A - w * h - M * h - w * g), m = f * x, D = bt * f, w = D - (D - f), M = f - w, D = bt * x, h = D - (D - x), g = x - h, C = M * g - (m - w * h - M * h - w * g), p = d - C, c = d - p, qt[0] = d - (p + c) + (c - C), E = A + p, c = E - A, F = A - (E - c) + (p - c), p = F - m, c = F - p, qt[1] = F - (p + c) + (c - m), y = E + p, c = y - E, qt[2] = E - (y - c) + (p - c), qt[3] = y; const L = bn(4, Ce, 4, qt, rr); A = B * a, D = bt * B, w = D - (D - B), M = B - w, D = bt * a, h = D - (D - a), g = a - h, d = M * g - (A - w * h - M * h - w * g), m = T * l, D = bt * T, w = D - (D - T), M = T - w, D = bt * l, h = D - (D - l), g = l - h, C = M * g - (m - w * h - M * h - w * g), p = d - C, c = d - p, qt[0] = d - (p + c) + (c - C), E = A + p, c = E - A, F = A - (E - c) + (p - c), p = F - m, c = F - p, qt[1] = F - (p + c) + (c - m), y = E + p, c = y - E, qt[2] = E - (y - c) + (p - c), qt[3] = y; const z = bn(L, rr, 4, qt, ir); A = s * a, D = bt * s, w = D - (D - s), M = s - w, D = bt * a, h = D - (D - a), g = a - h, d = M * g - (A - w * h - M * h - w * g), m = f * l, D = bt * f, w = D - (D - f), M = f - w, D = bt * l, h = D - (D - l), g = l - h, C = M * g - (m - w * h - M * h - w * g), p = d - C, c = d - p, qt[0] = d - (p + c) + (c - C), E = A + p, c = E - A, F = A - (E - c) + (p - c), p = F - m, c = F - p, qt[1] = F - (p + c) + (c - m), y = E + p, c = y - E, qt[2] = E - (y - c) + (p - c), qt[3] = y; const J = bn(z, ir, 4, qt, ur); return ur[J - 1]; } function Wu(t, e, n, r, i, u) { const o = (e - u) * (n - i), s = (t - i) * (r - u), f = o - s, l = Math.abs(o + s); return Math.abs(f) >= Xu * l ? f : -Zu(t, e, n, r, i, u, l); } function Vu(t, e, n) { e = Math.max(0, e === void 0 ? 2 : e), n = n || 0; const r = Qu(t), i = new Kn(16); i.toBBox = function(D) { return { minX: D[0], minY: D[1], maxX: D[0], maxY: D[1] }; }, i.compareMinX = function(D, w) { return D[0] - w[0]; }, i.compareMinY = function(D, w) { return D[1] - w[1]; }, i.load(t); const u = []; let o; for (let D = 0; D < r.length; D++) { const w = r[D]; i.remove(w), o = ar(w, o), u.push(o); } const s = new Kn(16); for (let D = 0; D < u.length; D++) s.insert(In(u[D])); const f = e * e, l = n * n; for (; u.length; ) { const D = u.shift(), w = D.p, M = D.next.p, h = On(w, M); if (h < l) continue; const g = h / f, p = Hu(i, D.prev.p, w, M, D.next.next.p, g, s); p && Math.min(On(p, w), On(p, M)) <= g && (u.push(D), u.push(ar(p, D)), i.remove(p), s.remove(D), s.insert(In(D)), s.insert(In(D.next))); } let a = o; const c = []; do c.push(a.p), a = a.next; while (a !== o); return c.push(a.p), c; } function Hu(t, e, n, r, i, u, o) { const s = new Iu([], Ju); let f = t.data; for (; f; ) { for (let l = 0; l < f.children.length; l++) { const a = f.children[l], c = f.leaf ? Pn(a, n, r) : ku(n, r, a); c > u || s.push({ node: a, dist: c }); } for (; s.length && !s.peek().node.children; ) { const l = s.pop(), a = l.node, c = Pn(a, e, n), D = Pn(a, r, i); if (l.dist < c && l.dist < D && sr(n, a, o) && sr(r, a, o)) return a; } f = s.pop(), f && (f = f.node); } return null; } function Ju(t, e) { return t.dist - e.dist; } function ku(t, e, n) { if (or(t, n) || or(e, n)) return 0; const r = en(t[0], t[1], e[0], e[1], n.minX, n.minY, n.maxX, n.minY); if (r === 0) return 0; const i = en(t[0], t[1], e[0], e[1], n.minX, n.minY, n.minX, n.maxY); if (i === 0) return 0; const u = en(t[0], t[1], e[0], e[1], n.maxX, n.minY, n.maxX, n.maxY); if (u === 0) return 0; const o = en(t[0], t[1], e[0], e[1], n.minX, n.maxY, n.maxX, n.maxY); return o === 0 ? 0 : Math.min(r, i, u, o); } function or(t, e) { return t[0] >= e.minX && t[0] <= e.maxX && t[1] >= e.minY && t[1] <= e.maxY; } function sr(t, e, n) { const r = Math.min(t[0], e[0]), i = Math.min(t[1], e[1]), u = Math.max(t[0], e[0]), o = Math.max(t[1], e[1]), s = n.search({ minX: r, minY: i, maxX: u, maxY: o }); for (let f = 0; f < s.length; f++) if (Gu(s[f].p, s[f].next.p, t, e)) return !1; return !0; } function Se(t, e, n) { return Wu(t[0], t[1], e[0], e[1], n[0], n[1]); } function Gu(t, e, n, r) { return t !== r && e !== n && Se(t, e, n) > 0 != Se(t, e, r) > 0 && Se(n, r, t) > 0 != Se(n, r, e) > 0; } function In(t) { const e = t.p, n = t.next.p; return t.minX = Math.min(e[0], n[0]), t.minY = Math.min(e[1], n[1]), t.maxX = Math.max(e[0], n[0]), t.maxY = Math.max(e[1], n[1]), t; } function Qu(t) { let e = t[0], n = t[0], r = t[0], i = t[0]; for (let s = 0; s < t.length; s++) { const f = t[s]; f[0] < e[0] && (e = f), f[0] > r[0] && (r = f), f[1] < n[1] && (n = f), f[1] > i[1] && (i = f); } const u = [e, n, r, i], o = u.slice(); for (let s = 0; s < t.length; s++) qu(t[s], u) || o.push(t[s]); return ju(o); } function ar(t, e) { const n = { p: t, prev: null, next: null, minX: 0, minY: 0, maxX: 0, maxY: 0 }; return e ? (n.next = e.next, n.prev = e, e.next.prev = n, e.next = n) : (n.prev = n, n.next = n), n; } function On(t, e) { const n = t[0] - e[0], r = t[1] - e[1]; return n * n + r * r; } function Pn(t, e, n) { let r = e[0], i = e[1], u = n[0] - r, o = n[1] - i; if (u !== 0 || o !== 0) { const s = ((t[0] - r) * u + (t[1] - i) * o) / (u * u + o * o); s > 1 ? (r = n[0], i = n[1]) : s > 0 && (r += u * s, i += o * s); } return u = t[0] - r, o = t[1] - i, u * u + o * o; } function en(t, e, n, r, i, u, o, s) { const f = n - t, l = r - e, a = o - i, c = s - u, D = t - i, w = e - u, M = f * f + l * l, h = f * a + l * c, g = a * a + c * c, p = f * D + l * w, E = a * D + c * w, F = M * g - h * h; let A, d, m = F, C = F; F === 0 ? (A = 0, m = 1, d = E, C = g) : (A = h * E - g * p, d = M * E - h * p, A < 0 ? (A = 0, d = E, C = g) : A > m && (A = m, d = E + h, C = g)), d < 0 ? (d = 0, -p < 0 ? A = 0 : -p > M ? A = m : (A = -p, m = M)) : d > C && (d = C, -p + h < 0 ? A = 0 : -p + h > M ? A = m : (A = -p + h, m = M)); const y = A === 0 ? 0 : A / m, B = d === 0 ? 0 : d / C, x = (1 - y) * t + y * n, T = (1 - y) * e + y * r, q = (1 - B) * i + B * o, Z = (1 - B) * u + B * s, W = q - x, L = Z - T; return W * W + L * L; } function Ku(t, e) { return t[0] === e[0] ? t[1] - e[1] : t[0] - e[0]; } function ju(t) { t.sort(Ku); const e = []; for (let r = 0; r < t.length; r++) { for (; e.length >= 2 && Se(e[e.length - 2], e[e.length - 1], t[r]) <= 0; ) e.pop(); e.push(t[r]); } const n = []; for (let r = t.length - 1; r >= 0; r--) { for (; n.length >= 2 && Se(n[n.length - 2], n[n.length - 1], t[r]) <= 0; ) n.pop(); n.push(t[r]); } return n.pop(), e.pop(), e.concat(n); } function fn() { return fn = Object.assign ? Object.assign.bind() : function(t) { for (var e = 1; e < arguments.length; e++) { var n = arguments[e]; for (var r in n) ({}).hasOwnProperty.call(n, r) && (t[r] = n[r]); } return t; }, fn.apply(null, arguments); } var Yr = { // minimum relative difference between two compared values, // used by all comparison functions relTol: 1e-12, // minimum absolute difference between two compared values, // used by all comparison functions absTol: 1e-15, // type of default matrix output. Choose 'matrix' (default) or 'array' matrix: "Matrix", // type of default number output. Choose 'number' (default) 'BigNumber', 'bigint', or 'Fraction' number: "number", // type of fallback used for config { number: 'bigint' } when a value cannot be represented // in the configured numeric type. Choose 'number' (default) or 'BigNumber'. numberFallback: "number", // number of significant digits in BigNumbers precision: 64, // predictable output type of functions. When true, output type depends only // on the input types. When false (default), output type can vary depending // on input values. For example `math.sqrt(-4)` returns `complex('2i')` when // predictable is false, and returns `NaN` when true. predictable: !1, // random seed for seeded pseudo random number generation // null = randomly seed randomSeed: null }; function to(t, e) { if (cn(t, e)) return t[e]; throw typeof t[e] == "function" && no(t, e) ? new Error('Cannot access method "' + e + '" as a property') : new Error('No access to property "' + e + '"'); } function eo(t, e, n) { if (cn(t, e)) return t[e] = n, n; throw new Error('No access to property "' + e + '"'); } function cn(t, e) { return !ro(t) && !Array.isArray(t) ? !1 : kt(io, e) ? !0 : !(e in Object.prototype || e in Function.prototype); } function no(t, e) { return t == null || typeof t[e] != "function" || kt(t, e) && Object.getPrototypeOf && e in Object.getPrototypeOf(t) ? !1 : kt(uo, e) ? !0 : !(e in Object.prototype || e in Function.prototype); } function ro(t) { return typeof t == "object" && t && t.constructor === Object; } var io = { length: !0, name: !0 }, uo = { toString: !0, valueOf: !0, toLocaleString: !0 }; class oo { constructor(e) { this.wrappedObject = e, this[Symbol.iterator] = this.entries; } keys() { return Object.keys(this.wrappedObject).filter((e) => this.has(e)).values(); } get(e) { return to(this.wrappedObject, e); } set(e, n) { return eo(this.wrappedObject, e, n), this; } has(e) { return cn(this.wrappedObject, e) && e in this.wrappedObject; } entries() { return so(this.keys(), (e) => [e, this.get(e)]); } forEach(e) { for (var n of this.keys()) e(this.get(n), n, this); } delete(e) { cn(this.wrappedObject, e) && delete this.wrappedObject[e]; } clear() { for (var e of this.keys()) this.delete(e); } get size() { return Object.keys(this.wrappedObject).length; } } function so(t, e) { return { next: () => { var n = t.next(); return n.done ? n : { value: e(n.value), done: !1 }; } }; } function lt(t) { return typeof t == "number"; } function Nt(t) { return !t || typeof t != "object" || typeof t.constructor != "function" ? !1 : t.isBigNumber === !0 && typeof t.constructor.prototype == "object" && t.constructor.prototype.isBigNumber === !0 || typeof t.constructor.isDecimal == "function" && t.constructor.isDecimal(t) === !0; } function Ur(t) { return typeof t == "bigint"; } function gn(t) { return t && typeof t == "object" && Object.getPrototypeOf(t).isComplex === !0 || !1; } function vn(t) { return t && typeof t == "object" && Object.getPrototypeOf(t).isFraction === !0 || !1; } function Fn(t) { return t && t.constructor.prototype.isUnit === !0 || !1; } function jt(t) { return typeof t == "string"; } var At = Array.isArray; function Mt(t) { return t && t.constructor.prototype.isMatrix === !0 || !1; } function He(t) { return Array.isArray(t) || Mt(t); } function Xr(t) { return t && t.isDenseMatrix && t.constructor.prototype.isMatrix === !0 || !1; } function $r(t) { return t && t.isSparseMatrix && t.constructor.prototype.isMatrix === !0 || !1; } function Lr(t) { return t && t.constructor.prototype.isRange === !0 || !1; } function wn(t) { return t && t.constructor.prototype.isIndex === !0 || !1; } function Zr(t) { return typeof t == "boolean"; } function Wr(t) { return t && t.constructor.prototype.isResultSet === !0 || !1; } function Vr(t) { return t && t.constructor.prototype.isHelp === !0 || !1; } function Hr(t) { return typeof t == "function"; } function Jr(t) { return t instanceof Date; } function kr(t) { return t instanceof RegExp; } function qe(t) { return !!(t && typeof t == "object" && t.constructor === Object && !gn(t) && !vn(t)); } function Ie(t) { return t ? t instanceof Map || t instanceof oo || typeof t.set == "function" && typeof t.get == "function" && typeof t.keys == "function" && typeof t.has == "function" : !1; } function ao(t) { return Ie(t) && Ie(t.a) && Ie(t.b); } function fo(t) { return Ie(t) && qe(t.wrappedObject); } function Gr(t) { return t === null; } function Qr(t) { return t === void 0; } function Kr(t) { return t && t.isAccessorNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function jr(t) { return t && t.isArrayNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function ti(t) { return t && t.isAssignmentNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function ei(t) { return t && t.isBlockNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function ni(t) { return t && t.isConditionalNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function ri(t) { return t && t.isConstantNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function ii(t) { return t && t.isFunctionAssignmentNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function ui(t) { return t && t.isFunctionNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function oi(t) { return t && t.isIndexNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function si(t) { return t && t.isNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function ai(t) { return t && t.isObjectNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function fi(t) { return t && t.isOperatorNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function ci(t) { return t && t.isParenthesisNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function li(t) { return t && t.isRangeNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function hi(t) { return t && t.isRelationalNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function Di(t) { return t && t.isSymbolNode === !0 && t.constructor.prototype.isNode === !0 || !1; } function pi(t) { return t && t.constructor.prototype.isChain === !0 || !1; } function me(t) { var e = typeof t; return e === "object" ? t === null ? "null" : Nt(t) ? "BigNumber" : t.constructor && t.constructor.name ? t.constructor.name : "Object" : e; } function Dt(t) { var e = typeof t; if (e === "number" || e === "bigint" || e === "string" || e === "boolean" || t === null || t === void 0) return t; if (typeof t.clone == "function") return t.clone(); if (Array.isArray(t)) return t.map(function(n) { return Dt(n); }); if (t instanceof Date) return new Date(t.valueOf()); if (Nt(t)) return t; if (qe(t)) return co(t, Dt); if (e === "function") return t; throw new TypeError("Cannot clone: unknown type of value (value: ".concat(t, ")")); } function co(t, e) { var n = {}; for (var r in t) kt(t, r) && (n[r] = e(t[r])); return n; } function di(t, e) { if (Array.isArray(e)) throw new TypeError("Arrays are not supported by deepExtend"); for (var n in e) if (kt(e, n) && !(n in Object.prototype) && !(n in Function.prototype)) if (e[n] && e[n].constructor === Object) t[n] === void 0 && (t[n] = {}), t[n] && t[n].constructor === Object ? di(t[n], e[n]) : t[n] = e[n]; else { if (Array.isArray(e[n])) throw new TypeError("Arrays are not supported by deepExtend"); t[n] = e[n]; } return t; } function Pe(t, e) { var n, r, i; if (Array.isArray(t)) { if (!Array.isArray(e) || t.length !== e.length) return !1; for (r = 0, i = t.length; r < i; r++) if (!Pe(t[r], e[r])) return !1; return !0; } else { if (typeof t == "function") return t === e; if (t instanceof Object) { if (Array.isArray(e) || !(e instanceof Object)) return !1; for (n in t) if (!(n in e) || !Pe(t[n], e[n])) return !1; for (n in e) if (!(n in t)) return !1; return !0; } else return t === e; } } function lo(t) { var e = {}; return mi(t, e), e; } function mi(t, e) { for (var n in t) if (kt(t, n)) { var r = t[n]; typeof r == "object" && r !== null ? mi(r, e) : e[n] = r; } } function ye(t, e, n) { var r = !0, i; Object.defineProperty(t, e, { get: function() { return r && (i = n(), r = !1), i; }, set: function(o) { i = o, r = !1; }, configurable: !0, enumerable: !0 }); } function kt(t, e) { return t && Object.hasOwnProperty.call(t, e); } function ho(t) { return t && typeof t.factory == "function"; } function Do(t, e) { for (var n = {}, r = 0; r < e.length; r++) { var i = e[r], u = t[i]; u !== void 0 && (n[i] = u); } return n; } var fr = ["Matrix", "Array"], cr = ["number", "BigNumber", "Fraction"]; function po(t, e) { function n(r) { if (r) { if (r.epsilon !== void 0) { console.warn('Warning: The configuration option "epsilon" is deprecated. Use "relTol" and "absTol" instead.'); var i = Dt(r); return i.relTol = r.epsilon, i.absTol = r.epsilon * 1e-3, delete i.epsilon, n(i); } var u = Dt(t); lr(r, "matrix", fr), lr(r, "number", cr), di(t, r); var o = Dt(t), s = Dt(r); return e("config", o, u, s), o; } else return Dt(t); } return n.MATRIX_OPTIONS = fr, n.NUMBER_OPTIONS = cr, Object.keys(Yr).forEach((r) => { Object.defineProperty(n, r, { get: () => t[r], enumerable: !0, configurable: !0 }); }), n; } function lr(t, e, n) { t[e] !== void 0 && !n.includes(t[e]) && console.warn('Warning: Unknown value "' + t[e] + '" for configuration option "' + e + '". Available options: ' + n.map((r) => JSON.stringify(r)).join(", ") + "."); } function hr() { return !0; } function Vt() { return !1; } function Be() { } const Dr = "Argument is not a typed-function."; function gi() { function t(v) { return typeof v == "object" && v !== null && v.constructor === Object; } const e = [{ name: "number", test: function(v) { return typeof v == "number"; } }, { name: "string", test: function(v) { return typeof v == "string"; } }, { name: "boolean", test: function(v) { return typeof v == "boolean"; } }, { name: "Function", test: function(v) { return typeof v == "function"; } }, { name: "Array", test: Array.isArray }, { name: "Date", test: function(v) { return v instanceof Date; } }, { name: "RegExp", test: function(v) { return v instanceof RegExp; } }, { name: "Object", test: t }, { name: "null", test: function(v) { return v === null; } }, { name: "undefined", test: function(v) { return v === void 0; } }], n = { name: "any", test: hr, isAny: !0 }; let r, i, u = 0, o = { createCount: 0 }; function s(v) { const _ = r.get(v); if (_) return _; let N = 'Unknown type "' + v + '"'; const b = v.toLowerCase(); let P; for (P of i) if (P.toLowerCase() === b) { N += '. Did you mean "' + P + '" ?'; break; } throw new TypeError(N); } function f(v) { let _ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "any"; const N = _ ? s(_).index : i.length, b = []; for (let I = 0; I < v.length; ++I) { if (!v[I] || typeof v[I].name != "string" || typeof v[I].test != "function") throw new TypeError("Object with properties {name: string, test: function} expected"); const X = v[I].name; if (r.has(X)) throw new TypeError('Duplicate type name "' + X + '"'); b.push(X), r.set(X, { name: X, test: v[I].test, isAny: v[I].isAny, index: N + I, conversionsTo: [] // Newly added type can't have any conversions to it }); } const P = i.slice(N); i = i.slice(0, N).concat(b).concat(P); for (let I = N + b.length; I < i.length; ++I) r.get(i[I]).index = I; } function l() { r = /* @__PURE__ */ new Map(), i = [], u = 0, f([n], !1); } l(), f(e); function a() { let v; for (v of i) r.get(v).conversionsTo = []; u = 0; } function c(v) { const _ = i.filter((N) => { const b = r.get(N); return !b.isAny && b.test(v); }); return _.length ? _ : ["any"]; } function D(v) { return v && typeof v == "function" && "_typedFunctionData" in v; } function w(v, _, N) { if (!D(v)) throw new TypeError(Dr); const b = N && N.exact, P = Array.isArray(_) ? _.join(",") : _, I = A(P), X = g(I); if (!b || X in v.signatures) { const ut = v._typedFunctionData.signatureMap.get(X); if (ut) return ut; } const Y = I.length; let $; if (b) { $ = []; let ut; for (ut in v.signatures) $.push(v._typedFunctionData.signatureMap.get(ut)); } else $ = v._typedFunctionData.signatures; for (let ut = 0; ut < Y; ++ut) { const ct = I[ut], Et = []; let Yt; for (Yt of $) { const Rt = y(Yt.params, ut); if (!(!Rt || ct.restParam && !Rt.restParam)) { if (!Rt.hasAny) { const Gt = F(Rt); if (ct.types.some((Qt) => !Gt.has(Qt.name))) continue; } Et.push(Yt); } } if ($ = Et, $.length === 0) break; } let R; for (R of $) if (R.params.length <= Y) return R; throw new TypeError("Signature not found (signature: " + (v.name || "unnamed") + "(" + g(I, ", ") + "))"); } function M(v, _, N) { return w(v, _, N).implementation; } function h(v, _) { const N = s(_); if (N.test(v)) return v; const b = N.conversionsTo; if (b.length === 0) throw new Error("There are no conversions to " + _ + " defined."); for (let P = 0; P < b.length; P++) if (s(b[P].from).test(v)) return b[P].convert(v); throw new Error("Cannot convert " + v + " to " + _); } function g(v) { let _ = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ","; return v.map((N) => N.name).join(_); } function p(v) { const _ = v.indexOf("...") === 0, b = (_ ? v.length > 3 ? v.slice(3) : "any" : v).split("|").map((Y) => s(Y.trim())); let P = !1, I = _ ? "..." : ""; return { types: b.map(function(Y) { return P = Y.isAny || P, I += Y.name + "|", { name: Y.name, typeIndex: Y.index, test: Y.test, isAny: Y.isAny, conversion: null, conversionIndex: -1 }; }), name: I.slice(0, -1), // remove trailing '|' from above hasAny: P, hasConversion: !1, restParam: _ }; } function E(v) { const _ = v.types.map((X) => X.name), N = J(_); let b = v.hasAny, P = v.name; const I = N.map(function(X) { const Y = s(X.from); return b = Y.isAny || b, P += "|" + X.from, { name: X.from, typeIndex: Y.index, test: Y.test, isAny: Y.isAny, conversion: X, conversionIndex: X.index }; }); return { types: v.types.concat(I), name: P, hasAny: b, hasConversion: I.length > 0, restParam: v.restParam }; } function F(v) { return v.typeSet || (v.typeSet = /* @__PURE__ */ new Set(), v.types.forEach((_) => v.typeSet.add(_.name))), v.typeSet; } function A(v) { const _ = []; if (typeof v != "string") throw new TypeError("Signatures must be strings"); const N = v.trim(); if (N === "") return _; const b = N.split(","); for (let P = 0; P < b.length; ++P) { const I = p(b[P].trim()); if (I.restParam && P !== b.length - 1) throw new SyntaxError('Unexpected rest parameter "' + b[P] + '": only allowed for the last parameter'); if (I.types.length === 0) return null; _.push(I); } return _; } function d(v) { const _ = st(v); return _ ? _.restParam : !1; } function m(v) { if (!v || v.types.length === 0) return hr; if (v.types.length === 1) return s(v.types[0].name).test; if (v.types.length === 2) { const _ = s(v.types[0].name).test, N = s(v.types[1].name).test; return function(P) { return _(P) || N(P); }; } else { const _ = v.types.map(function(N) { return s(N.name).test; }); return function(b) { for (let P = 0; P < _.length; P++) if (_[P](b)) return !0; return !1; }; } } function C(v) { let _, N, b; if (d(v)) { _ = zt(v).map(m); const P = _.length, I = m(st(v)), X = function(Y) { for (let $ = P; $ < Y.length; $++) if (!I(Y[$])) return !1; return !0; }; return function($) { for (let R = 0; R < _.length; R++) if (!_[R]($[R])) return !1; return X($) && $.length >= P + 1; }; } else return v.length === 0 ? function(I) { return I.length === 0; } : v.length === 1 ? (N = m(v[0]), function(I) { return N(I[0]) && I.length === 1; }) : v.length === 2 ? (N = m(v[0]), b = m(v[1]), function(I) { return N(I[0]) && b(I[1]) && I.length === 2; }) : (_ = v.map(m), function(I) { for (let X = 0; X < _.length; X++) if (!_[X](I[X])) return !1; return I.length === _.length; }); } function y(v, _) { return _ < v.length ? v[_] : d(v) ? st(v) : null; } function B(v, _) { const N = y(v, _); return N ? F(N) : /* @__PURE__ */ new Set(); } function x(v) { return v.conversion === null || v.conversion === void 0; } function T(v, _) { const N = /* @__PURE__ */ new Set(); return v.forEach((b) => { const P = B(b.params, _); let I; for (I of P) N.add(I); }), N.has("any") ? ["any"] : Array.from(N); } function q(v, _, N) { let b, P; const I = v || "unnamed"; let X = N, Y; for (Y = 0; Y < _.length; Y++) { const ct = []; if (X.forEach((Et) => { const Yt = y(Et.params, Y), Rt = m(Yt); (Y < Et.params.length || d(Et.params)) && Rt(_[Y]) && ct.push(Et); }), ct.length === 0) { if (P = T(X, Y), P.length > 0) { const Et = c(_[Y]); return b = new TypeError("Unexpected type of argument in function " + I + " (expected: " + P.join(" or ") + ", actual: " + Et.join(" | ") + ", index: " + Y + ")"), b.data = { category: "wrongType", fn: I, index: Y, actual: Et, expected: P }, b; } } else X = ct; } const $ = X.map(function(ct) { return d(ct.params) ? 1 / 0 : ct.params.length; }); if (_.length < Math.min.apply(null, $)) return P = T(X, Y), b = new TypeError("Too few arguments in function " + I + " (expected: " + P.join(" or ") + ", index: " + _.length + ")"), b.data = { category: "tooFewArgs", fn: I, index: _.length, expected: P }, b; const R = Math.max.apply(null, $); if (_.length > R) return b = new TypeError("Too many arguments in function " + I + " (expected: " + R + ", actual: " + _.length + ")"), b.data = { category: "tooManyArgs", fn: I, index: _.length, expectedLength: R }, b; const ut = []; for (let ct = 0; ct < _.length; ++ct) ut.push(c(_[ct]).join("|")); return b = new TypeError('Arguments of type "' + ut.join(", ") + '" do not match any of the defined signatures of function ' + I + "."), b.data = { category: "mismatch", actual: ut }, b; } function Z(v) { let _ = i.length + 1; for (let N = 0; N < v.types.length; N++) x(v.types[N]) && (_ = Math.min(_, v.types[N].typeIndex)); return _; } function W(v) { let _ = u + 1; for (let N = 0; N < v.types.length; N++) x(v.types[N]) || (_ = Math.min(_, v.types[N].conversionIndex)); return _; } function L(v, _) { if (v.hasAny) { if (!_.hasAny) return 1; } else if (_.hasAny) return -1; if (v.restParam) { if (!_.restParam) return 1; } else if (_.restParam) return -1; if (v.hasConversion) { if (!_.hasConversion) return 1; } else if (_.hasConversion) return -1; const N = Z(v) - Z(_); if (N < 0) return -1; if (N > 0) return 1; const b = W(v) - W(_); return b < 0 ? -1 : b > 0 ? 1 : 0; } function z(v, _) { const N = v.params, b = _.params, P = st(N), I = st(b), X = d(N), Y = d(b); if (X && P.hasAny) { if (!Y || !I.hasAny) return 1; } else if (Y && I.hasAny) return -1; let $ = 0, R = 0, ut; for (ut of N) ut.hasAny && ++$, ut.hasConversion && ++R; let ct = 0, Et = 0; for (ut of b) ut.hasAny && ++ct, ut.hasConversion && ++Et; if ($ !== ct) return $ - ct; if (X && P.hasConversion) { if (!Y || !I.hasConversion) return 1; } else if (Y && I.hasConversion) return -1; if (R !== Et) return R - Et; if (X) { if (!Y) return 1; } else if (Y) return -1; const Yt = (N.length - b.length) * (X ? -1 : 1); if (Yt !== 0) return Yt; const Rt = []; let Gt = 0; for (let Ee = 0; Ee < N.length; ++Ee) { const Qe = L(N[Ee], b[Ee]); Rt.push(Qe), Gt += Qe; } if (Gt !== 0) return Gt; let Qt; for (Qt of Rt) if (Qt !== 0) return Qt; return 0; } function J(v) { if (v.length === 0) return []; const _ = v.map(s); v.length > 1 && _.sort((P, I) => P.index - I.index); let N = _[0].conversionsTo; if (v.length === 1) return N; N = N.concat([]); const b = new Set(v); for (let P = 1; P < _.length; ++P) { let I; for (I of _[P].conversionsTo) b.has(I.from) || (N.push(I), b.add(I.from)); } return N; } function k(v, _) { let N = _; if (v.some((P) => P.hasConversion)) { const P = d(v), I = v.map(G); N = function() { const Y = [], $ = P ? arguments.length - 1 : arguments.length; for (let R = 0; R < $; R++) Y[R] = I[R](arguments[R]); return P && (Y[$] = arguments[$].map(I[$])), _.apply(this, Y); }; } let b = N; if (d(v)) { const P = v.length - 1; b = function() { return N.apply(this, it(arguments, 0, P).concat([it(arguments, P)])); }; } return b; } function G(v) { let _, N, b, P; const I = [], X = []; switch (v.types.forEach(function(Y) { Y.conversion && (I.push(s(Y.conversion.from).test), X.push(Y.conversion.convert)); }), X.length) { case 0: return function($) { return $; }; case 1: return _ = I[0], b = X[0], function($) { return _($) ? b($) : $; }; case 2: return _ = I[0], N = I[1], b = X[0], P = X[1], function($) { return _($) ? b($) : N($) ? P($) : $; }; default: return function($) { for (let R = 0; R < X.length; R++) if (I[R]($)) return X[R]($); return $; }; } } function j(v) { function _(N, b, P) { if (b < N.length) { const I = N[b]; let X = []; if (I.restParam) { const Y = I.types.filter(x); Y.length < I.types.length && X.push({ types: Y, name: "..." + Y.map(($) => $.name).join("|"), hasAny: Y.some(($) => $.isAny), hasConversion: !1, restParam: !0 }), X.push(I); } else X = I.types.map(function(Y) { return { types: [Y], name: Y.name, hasAny: Y.isAny, hasConversion: Y.conversion, restParam: !1 }; }); return xt(X, function(Y) { return _(N, b + 1, P.concat([Y])); }); } else return [P]; } return _(v, 0, []); } function rt(v, _) { const N = Math.max(v.length, _.length); for (let Y = 0; Y < N; Y++) { const $ = B(v, Y), R = B(_, Y); let ut = !1, ct; for (ct of R) if ($.has(ct)) { ut = !0; break; } if (!ut) return !1; } const b = v.length, P = _.length, I = d(v), X = d(_); return I ? X ? b === P : P >= b : X ? b >= P : b === P; } function et(v) { return v.map((_) => ue(_) ? Wt(_.referToSelf.callback) : ie(_) ? yt(_.referTo.references, _.referTo.callback) : _); } function ot(v, _, N) { const b = []; let P; for (P of v) { let I = N[P]; if (typeof I != "number") throw new TypeError('No definition for referenced signature "' + P + '"'); if (I = _[I], typeof I != "function") return !1; b.push(I); } return b; } function wt(v, _, N) { const b = et(v), P = new Array(b.length).fill(!1); let I = !0; for (; I; ) { I = !1; let X = !0; for (let Y = 0; Y < b.length; ++Y) { if (P[Y]) continue; const $ = b[Y]; if (ue($)) b[Y] = $.referToSelf.callback(N), b[Y].referToSelf = $.referToSelf, P[Y] = !0, X = !1; else if (ie($)) { const R = ot($.referTo.references, b, _); R ? (b[Y] = $.referTo.callback.apply(this, R), b[Y].referTo = $.referTo, P[Y] = !0, X = !1) : I = !0; } } if (X && I) throw new SyntaxError("Circular reference detected in resolving typed.referTo"); } return b; } function vt(v) { const _ = /\bthis(\(|\.signatures\b)/; Object.keys(v).forEach((N) => { const b = v[N]; if (_.test(b.toString())) throw new SyntaxError("Using `this` to self-reference a function is deprecated since typed-function@3. Use typed.referTo and typed.referToSelf instead."); }); } function mt(v, _) { if (o.createCount++, Object.keys(_).length === 0) throw new SyntaxError("No signatures provided"); o.warnAgainstDeprecatedThis && vt(_); const N = [], b = [], P = {}, I = []; let X; for (X in _) { if (!Object.prototype.hasOwnProperty.call(_, X)) continue; const nt = A(X); if (!nt) continue; N.forEach(function(Ue) { if (rt(Ue, nt)) throw new TypeError('Conflicting signatures "' + g(Ue) + '" and "' + g(nt) + '".'); }), N.push(nt); const Ut = b.length; b.push(_[X]); const Bu = nt.map(E); let Ke; for (Ke of j(Bu)) { const Ue = g(Ke); I.push({ params: Ke, name: Ue, fn: Ut }), Ke.every((_u) => !_u.hasConversion) && (P[Ue] = Ut); } } I.sort(z); const Y = wt(b, P, Ye); let $; for ($ in P) Object.prototype.hasOwnProperty.call(P, $) && (P[$] = Y[P[$]]); const R = [], ut = /* @__PURE__ */ new Map(); for ($ of I) ut.has($.name) || ($.fn = Y[$.fn], R.push($), ut.set($.name, $)); const ct = R[0] && R[0].params.length <= 2 && !d(R[0].params), Et = R[1] && R[1].params.length <= 2 && !d(R[1].params), Yt = R[2] && R[2].params.length <= 2 && !d(R[2].params), Rt = R[3] && R[3].params.length <= 2 && !d(R[3].params), Gt = R[4] && R[4].params.length <= 2 && !d(R[4].params), Qt = R[5] && R[5].params.length <= 2 && !d(R[5].params), Ee = ct && Et && Yt && Rt && Gt && Qt; for (let nt = 0; nt < R.length; ++nt) R[nt].test = C(R[nt].params); const Qe = ct ? m(R[0].params[0]) : Vt, Qi = Et ? m(R[1].params[0]) : Vt, Ki = Yt ? m(R[2].params[0]) : Vt, ji = Rt ? m(R[3].params[0]) : Vt, tu = Gt ? m(R[4].params[0]) : Vt, eu = Qt ? m(R[5].params[0]) : Vt, nu = ct ? m(R[0].params[1]) : Vt, ru = Et ? m(R[1].params[1]) : Vt, iu = Yt ? m(R[2].params[1]) : Vt, uu = Rt ? m(R[3].params[1]) : Vt, ou = Gt ? m(R[4].params[1]) : Vt, su = Qt ? m(R[5].params[1]) : Vt; for (let nt = 0; nt < R.length; ++nt) R[nt].implementation = k(R[nt].params, R[nt].fn); const au = ct ? R[0].implementation : Be, fu = Et ? R[1].implementation : Be, cu = Yt ? R[2].implementation : Be, lu = Rt ? R[3].implementation : Be, hu = Gt ? R[4].implementation : Be, Du = Qt ? R[5].implementation : Be, pu = ct ? R[0].params.length : -1, du = Et ? R[1].params.length : -1, mu = Yt ? R[2].params.length : -1, gu = Rt ? R[3].params.length : -1, vu = Gt ? R[4].params.length : -1, Fu = Qt ? R[5].params.length : -1, wu = Ee ? 6 : 0, Eu = R.length, Au = R.map((nt) => nt.test), Cu = R.map((nt) => nt.implementation), yu = function() { for (let Ut = wu; Ut < Eu; Ut++) if (Au[Ut](arguments)) return Cu[Ut].apply(this, arguments); return o.onMismatch(v, arguments, R);