{"version":3,"file":"amendTimeSeries.cjs","sources":["../../../src/table/amendTimeSeries.ts"],"sourcesContent":["import { closestIdx } from '../dataframe/StreamingDataFrame';\n\nexport type Table = [times: number[], ...values: any[][]];\n\n// prevTable and nextTable are assumed sorted ASC on reference [0] arrays\n// nextTable is assumed to be contiguous, only edges are checked for overlap\n// ...so prev: [1,2,5] + next: [3,4,6] -> [1,2,3,4,6]\nexport function amendTable(prevTable: Table, nextTable: Table): Table {\n  let [prevTimes] = prevTable;\n  let [nextTimes] = nextTable;\n\n  let pLen = prevTimes.length;\n  let pStart = prevTimes[0];\n  let pEnd = prevTimes[pLen - 1];\n\n  let nLen = nextTimes.length;\n  let nStart = nextTimes[0];\n  let nEnd = nextTimes[nLen - 1];\n\n  let outTable: Table;\n\n  if (pLen) {\n    if (nLen) {\n      // append, no overlap\n      if (nStart > pEnd) {\n        outTable = prevTable.map((_, i) => prevTable[i].concat(nextTable[i])) as Table;\n      }\n      // prepend, no overlap\n      else if (nEnd < pStart) {\n        outTable = nextTable.map((_, i) => nextTable[i].concat(prevTable[i])) as Table;\n      }\n      // full replace\n      else if (nStart <= pStart && nEnd >= pEnd) {\n        outTable = nextTable;\n      }\n      // partial replace\n      else if (nStart > pStart && nEnd < pEnd) {\n        // partial replace\n        let startIdx = closestIdx(nStart, prevTimes);\n        startIdx = prevTimes[startIdx] < nStart ? startIdx + 1 : startIdx;\n        let endIdx = closestIdx(nEnd, prevTimes);\n        endIdx = prevTimes[endIdx] > nEnd ? endIdx - 1 : endIdx;\n\n        outTable = prevTable.map((_, i) =>\n          prevTable[i]\n            .slice(0, startIdx)\n            .concat(nextTable[i])\n            .concat(prevTable[i].slice(endIdx + 1))\n        ) as Table;\n      }\n      // append, with overlap\n      else if (nStart >= pStart) {\n        let idx = closestIdx(nStart, prevTimes);\n        idx = prevTimes[idx] < nStart ? idx - 1 : idx;\n        outTable = prevTable.map((_, i) => prevTable[i].slice(0, idx).concat(nextTable[i])) as Table;\n      }\n      // prepend, with overlap\n      else if (nEnd >= pStart) {\n        let idx = closestIdx(nEnd, prevTimes);\n        idx = prevTimes[idx] < nEnd ? idx : idx + 1;\n        outTable = nextTable.map((_, i) => nextTable[i].concat(prevTable[i].slice(idx))) as Table;\n      }\n    } else {\n      outTable = prevTable;\n    }\n  } else {\n    if (nLen) {\n      outTable = nextTable;\n    } else {\n      outTable = [[]];\n    }\n  }\n\n  return outTable!;\n}\n\nexport function trimTable(table: Table, fromTime: number, toTime: number): Table {\n  let [times, ...vals] = table;\n  let fromIdx: number | undefined;\n  let toIdx: number | undefined;\n\n  // trim to bounds\n  if (times[0] < fromTime) {\n    fromIdx = closestIdx(fromTime, times);\n\n    if (times[fromIdx] < fromTime) {\n      fromIdx++;\n    }\n  }\n\n  if (times[times.length - 1] > toTime) {\n    toIdx = closestIdx(toTime, times);\n\n    if (times[toIdx] > toTime) {\n      toIdx--;\n    }\n  }\n\n  if (fromIdx != null || toIdx != null) {\n    times = times.slice(fromIdx ?? 0, toIdx);\n    vals = vals.map((vals2) => vals2.slice(fromIdx ?? 0, toIdx));\n  }\n\n  return [times, ...vals];\n}\n"],"names":["closestIdx"],"mappings":"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"}