{"version":3,"file":"openchemlib-utils.js","sources":["../lib/util/getXAtomicNumber.js","../lib/util/isCsp3.js","../lib/util/makeRacemic.js","../lib/util/tagAtom.js","../lib/hose/getHoseCodesForAtomsInternal.js","../lib/path/getAllAtomsPaths.js","../node_modules/is-any-array/lib-esm/index.js","../node_modules/ml-array-max/lib-es6/index.js","../node_modules/ml-array-min/lib-es6/index.js","../node_modules/ml-array-rescale/lib-es6/index.js","../node_modules/ml-matrix/matrix.js","../node_modules/ml-matrix/matrix.mjs","../node_modules/ml-floyd-warshall/lib-esm/index.js","../lib/util/getConnectivityMatrix.js","../lib/topic/getCanonizedDiaIDs.js","../lib/topic/getCanonizedHoseCodes.js","../lib/topic/getDiaIDsAndInfo.js","../lib/topic/getHeterotopicSymmetryRanks.js","../lib/diastereotopic/getChiralOrHeterotopicCarbons.js","../lib/diastereotopic/ensureHeterotopicChiralBonds.js","../lib/topic/getMoleculeWithH.js","../lib/topic/getXMolecule.js","../lib/topic/TopicMolecule.js","../lib/util/getSymmetryRanks.js","../lib/diastereotopic/getDiastereotopicAtomIDs.js","../lib/diastereotopic/getDiastereotopicAtomIDsAndH.js","../lib/diastereotopic/groupDiastereotopicAtomIDs.js","../lib/diastereotopic/getGroupedDiastereotopicAtomIDs.js","../lib/diastereotopic/getDiastereotopicAtomIDsFromMolfile.js","../lib/diastereotopic/toDiastereotopicSVG.js","../lib/hose/getHoseCodes.js","../lib/hose/getHoseCodesAndInfo.js","../lib/hose/getHoseCodesForAtoms.js","../lib/hose/getHoseCodesForAtom.js","../lib/hose/getHoseCodesFromDiastereotopicID.js","../lib/hose/getHoseCodesForPath.js","../lib/polymer/createPolymer.js","../lib/util/combineSmiles.js","../node_modules/isutf8/dist/index.esm.js","../node_modules/ensure-string/lib-esm/index.js","../lib/util/dwar/utils/getCamelCase.js","../lib/util/dwar/utils/getParts.js","../lib/util/dwar/utils/parseColumnbProperties.js","../lib/util/dwar/utils/parseData.js","../lib/util/dwar/parseDwar.js","../lib/util/getAtomsInfo.js","../lib/util/getImplicitHydrogensCount.js","../node_modules/atom-sorter/lib/src/index.js","../lib/util/getMF.js","../lib/util/getCharge.js","../lib/util/getMolfilesMapping.js","../lib/util/getUnsaturation.js","../lib/util/getNMRHints.js","../lib/util/getNextNMRHint.js","../lib/util/getProperties.js","../lib/util/getAtoms.js","../lib/util/nbOH.js","../lib/util/nbCOOH.js","../lib/util/nbCHO.js","../lib/util/nbNH2.js","../lib/util/nbCN.js","../lib/util/nbLabileH.js","../lib/util/toggleHydrogens.js","../lib/util/toVisualizerMolfile.js","../lib/path/getPathAndTorsion.js","../lib/path/getPathsInfo.js","../lib/path/getShortestPaths.js","../node_modules/papaparse/papaparse.min.js","../lib/db/utils/getMoleculeCreators.js","../lib/db/utils/appendCSV.js","../lib/db/utils/appendColor.js","../node_modules/get-value/dist/index.mjs","../lib/db/utils/appendEntries.js","../node_modules/sdf-parser/src/getEntriesBoundaries.js","../node_modules/sdf-parser/src/util/getMolecule.js","../node_modules/sdf-parser/src/parse.js","../lib/db/utils/appendSDF.js","../lib/db/utils/appendSmilesList.js","../node_modules/@lukeed/uuid/dist/index.mjs","../lib/db/utils/pushEntry.js","../lib/db/utils/pushMoleculeInfo.js","../lib/util/noWait.js","../lib/db/utils/search.js","../lib/db/MoleculesDB.js","../lib/features/getAtomFeatures.js","../lib/util/getRAtomicNumber.js","../lib/fragment/fragmentAcyclicSingleBonds.js","../lib/reaction/utils/appendOCLReaction.js","../lib/reaction/utils/checkIfExistsOrAddInfo.js","../lib/reaction/utils/applyOneReactantReactions.js","../lib/reaction/utils/getFilteredTrees.js","../lib/reaction/utils/getLeaves.js","../lib/reaction/utils/getNodes.js","../lib/reaction/Reactions.js"],"sourcesContent":["let xAtomicNumber = 0;\n/**\n * Returns the atomic number of the X atom\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getXAtomicNumber(molecule) {\n    if (!xAtomicNumber) {\n        const OCL = molecule.getOCL();\n        xAtomicNumber = OCL.Molecule.getAtomicNoFromLabel('X', OCL.Molecule.cPseudoAtomX);\n    }\n    return xAtomicNumber;\n}\n//# sourceMappingURL=getXAtomicNumber.js.map","/**\n * Check if a specific atom is a sp3 carbon\n * @param {import('openchemlib').Molecule} molecule\n * @param {number} atomID\n */\nexport function isCsp3(molecule, atomID) {\n    if (molecule.getAtomicNo(atomID) !== 6)\n        return false;\n    if (molecule.getAtomCharge(atomID) !== 0)\n        return false;\n    if (molecule.getImplicitHydrogens(atomID) + molecule.getConnAtoms(atomID) !==\n        4) {\n        return false;\n    }\n    return true;\n}\n//# sourceMappingURL=isCsp3.js.map","/**\n * This method put all the chiral centers in the molecule in the same group and racemic\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @param {object} [options={}]\n * @param {object} [options.OCL] - openchemlib library\n */\nexport function makeRacemic(molecule) {\n    const { Molecule } = molecule.getOCL();\n    // if we don't calculate this we have 2 epimers\n    molecule.ensureHelperArrays(Molecule.cHelperCIP);\n    // we need to make one group \"AND\" for chiral (to force to racemic, this means diastereotopic and not enantiotopic)\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomParity(i) !== Molecule.cAtomParityNone) {\n            molecule.setAtomESR(i, Molecule.cESRTypeAnd, 0); // changed to group 0; TLS 9.Nov.2015\n        }\n    }\n    // after the change we need to recalculate the CIP\n    molecule.ensureHelperArrays(Molecule.cHelperCIP);\n}\n//# sourceMappingURL=makeRacemic.js.map","import { getXAtomicNumber } from './getXAtomicNumber.js';\n/**\n * Tag an atom to be able to visualize it\n * @param molecule\n * @param iAtom\n */\nexport function tagAtom(molecule, iAtom) {\n    const customLabel = `${molecule.getAtomLabel(iAtom)}*`;\n    molecule.setAtomCustomLabel(iAtom, customLabel);\n    if (molecule.getAtomicNo(iAtom) === 1) {\n        molecule.setAtomicNo(iAtom, getXAtomicNumber(molecule));\n    }\n    else {\n        // we can not use X because we would have problems with valencies if it is\n        // expanded hydrogens or not\n        // we can not only use a custom label because it does not count for the canonisation\n        molecule.setAtomMass(iAtom, molecule.getAtomMass(iAtom) + 5);\n    }\n    return customLabel;\n}\n//# sourceMappingURL=tagAtom.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\nimport { isCsp3 } from '../util/isCsp3.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from '../util/tagAtom.js';\nexport const FULL_HOSE_CODE = 1;\nexport const HOSE_CODE_CUT_C_SP3_SP3 = 2;\n/**\n * Returns the hose code for specific atom numbers\n * @param {import('openchemlib').Molecule} molecule - The OCL molecule with expandedImplicitHydrogens and ensureHeterotopicChiralBonds\n * @param {object} [options={}]\n * @param {string[]} [options.allowedCustomLabels] - Array of the custom labels that are considered as root atoms. By default all atoms having a customLabel\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n */\nexport function getHoseCodesForAtomsInternal(molecule, options = {}) {\n    const fragments = getHoseCodesForAtomsAsFragments(molecule, options);\n    const OCL = molecule.getOCL();\n    const hoses = [];\n    for (const fragment of fragments) {\n        hoses.push(fragment.getCanonizedIDCode(OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS));\n    }\n    return hoses;\n}\nexport function getHoseCodesForAtomsAsFragments(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    const { allowedCustomLabels, minSphereSize = 0, maxSphereSize = 4, kind = FULL_HOSE_CODE, tagAtoms = [], tagAtomFct = tagAtom, } = options;\n    const rootAtoms = options.rootAtoms ? options.rootAtoms.slice() : [];\n    molecule = molecule.getCompactCopy();\n    if (tagAtoms.length > 0) {\n        internalTagAtoms(molecule, tagAtoms, rootAtoms, tagAtomFct);\n    }\n    else {\n        // this force reordering of atoms in order to have hydrogens at the end\n        molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    }\n    if (rootAtoms.length === 0) {\n        for (let j = 0; j < molecule.getAllAtoms(); j++) {\n            if (allowedCustomLabels?.includes(molecule.getAtomCustomLabel(j)) ||\n                molecule.getAtomCustomLabel(j)) {\n                rootAtoms.push(j);\n            }\n        }\n    }\n    const fragments = [];\n    const fragment = new OCL.Molecule(0, 0);\n    // keep track of the atoms when creating the fragment\n    const mappings = [];\n    let min = 0;\n    let max = 0;\n    const atomMask = new Uint8Array(molecule.getAllAtoms());\n    const atomList = new Uint8Array(molecule.getAllAtoms());\n    for (let sphere = 0; sphere <= maxSphereSize; sphere++) {\n        if (max === 0) {\n            for (const rootAtom of rootAtoms) {\n                atomList[max] = rootAtom;\n                atomMask[rootAtom] = true;\n                max++;\n            }\n        }\n        else {\n            let newMax = max;\n            for (let i = min; i < max; i++) {\n                const atom = atomList[i];\n                for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                    const connAtom = molecule.getConnAtom(atom, j);\n                    if (!atomMask[connAtom]) {\n                        switch (kind) {\n                            case FULL_HOSE_CODE:\n                                atomMask[connAtom] = true;\n                                atomList[newMax++] = connAtom;\n                                break;\n                            case HOSE_CODE_CUT_C_SP3_SP3:\n                                if (!(isCsp3(molecule, atom) && isCsp3(molecule, connAtom))) {\n                                    atomMask[connAtom] = true;\n                                    atomList[newMax++] = connAtom;\n                                }\n                                break;\n                            default:\n                                throw new Error('getHoseCoesForAtom unknown kind');\n                        }\n                    }\n                }\n            }\n            min = max;\n            max = newMax;\n        }\n        if (sphere >= minSphereSize) {\n            molecule.copyMoleculeByAtoms(fragment, atomMask, true, mappings);\n            // we using atomMapNo field in order to keep track of the original atom number even if we remove hydrogens\n            for (let i = 0; i < fragment.getAllAtoms(); i++) {\n                fragment.setAtomMapNo(i, mappings.indexOf(i) + 1);\n            }\n            fragment.removeExplicitHydrogens();\n            makeRacemic(fragment);\n            // we encode atom characteristics in the query features\n            addQueryFeaturesAndRemoveMapNo(fragment, molecule);\n            fragments.push(fragment.getCompactCopy());\n        }\n    }\n    return fragments;\n}\n/**\n * If the atom is not an halogen, X or an hydrogen\n * we add query features to the atom\n * This includes aromaticity, ring size, number of hydrogens\n * @param {import('openchemlib').Molecule} fragment\n * @param {import('openchemlib').Molecule} molecule\n */\nfunction addQueryFeaturesAndRemoveMapNo(fragment, molecule) {\n    const Molecule = molecule.getOCL().Molecule;\n    for (let i = 0; i < fragment.getAllAtoms(); i++) {\n        const mapping = fragment.getAtomMapNo(i) - 1;\n        fragment.setAtomMapNo(i, 0);\n        if ([1, 9, 17, 35, 53, getXAtomicNumber(molecule)].includes(fragment.getAtomicNo(i))) {\n            continue;\n        }\n        // aromaticity\n        const isAromatic = molecule.isAromaticAtom(mapping);\n        if (isAromatic) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFAromatic, true);\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNotAromatic, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFAromatic, false);\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNotAromatic, true);\n        }\n        // cycles\n        const smallestRing = molecule.getAtomRingSize(mapping);\n        switch (smallestRing) {\n            case 0:\n                break;\n            case 3:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize3, true);\n                break;\n            case 4:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize4, true);\n                break;\n            case 5:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize5, true);\n                break;\n            case 6:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize6, true);\n                break;\n            case 7:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSize7, true);\n                break;\n            default:\n                fragment.setAtomQueryFeature(i, Molecule.cAtomQFRingSizeLarge, true);\n        }\n        const nbHydrogens = molecule.getAllHydrogens(mapping);\n        if (nbHydrogens === 0) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot0Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot0Hydrogen, true);\n        }\n        if (nbHydrogens === 1) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot1Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot1Hydrogen, true);\n        }\n        if (nbHydrogens === 2) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot2Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot2Hydrogen, true);\n        }\n        if (nbHydrogens === 3) {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot3Hydrogen, false);\n        }\n        else {\n            fragment.setAtomQueryFeature(i, Molecule.cAtomQFNot3Hydrogen, true);\n        }\n    }\n}\n// tagging atoms may change the order of the atoms because hydrogens must be at the end of the file\n// in order to remember the rootAtoms we will tag before\nfunction internalTagAtoms(molecule, tagAtoms, rootAtoms, tagAtomFct) {\n    const OCL = molecule.getOCL();\n    if (tagAtoms) {\n        for (let i = 0; i < molecule.getAllAtoms(); i++) {\n            molecule.setAtomMapNo(i, i + 1);\n        }\n        if (tagAtoms.length > 0) {\n            for (const atom of tagAtoms) {\n                tagAtomFct(molecule, atom);\n            }\n        }\n    }\n    // this force reordering of atoms in order to have hydrogens at the end\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    if (rootAtoms.length > 0) {\n        const mapping = new Int32Array(molecule.getAllAtoms());\n        for (let i = 0; i < molecule.getAllAtoms(); i++) {\n            mapping[molecule.getAtomMapNo(i) - 1] = i;\n        }\n        for (let i = 0; i < rootAtoms.length; i++) {\n            rootAtoms[i] = mapping[rootAtoms[i]];\n        }\n    }\n}\n//# sourceMappingURL=getHoseCodesForAtomsInternal.js.map","/**\n * We need to create an array of atoms\n * that contains an array of pathLength\n * that contains an array of object\n * @param molecule\n * @param options\n * @returns\n */\nexport function getAllAtomsPaths(molecule, options = {}) {\n    const { maxPathLength = 5 } = options;\n    const allAtomsPaths = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const oneAtomPaths = [];\n        allAtomsPaths.push(oneAtomPaths);\n        let atomPaths = [];\n        atomPaths.push({ path: [i], pathLength: 0 });\n        oneAtomPaths.push(atomPaths);\n        let nextIndexes = [0];\n        let nextAtoms = [i];\n        for (let sphere = 1; sphere <= maxPathLength; sphere++) {\n            atomPaths = [];\n            oneAtomPaths.push(atomPaths);\n            const currentIndexes = nextIndexes;\n            const currentAtoms = nextAtoms;\n            nextIndexes = [];\n            nextAtoms = [];\n            for (let i = 0; i < currentIndexes.length; i++) {\n                const atom = currentAtoms[i];\n                const index = currentIndexes[i];\n                const previousPath = oneAtomPaths[sphere - 1][index].path;\n                for (let conn = 0; conn < molecule.getAllConnAtoms(atom); conn++) {\n                    const connectedAtom = molecule.getConnAtom(atom, conn);\n                    if (previousPath.includes(connectedAtom))\n                        continue;\n                    nextIndexes.push(atomPaths.length);\n                    nextAtoms.push(connectedAtom);\n                    atomPaths.push({\n                        path: [...previousPath, connectedAtom],\n                        pathLength: sphere,\n                    });\n                }\n            }\n        }\n    }\n    return allAtomsPaths;\n}\n//# sourceMappingURL=getAllAtomsPaths.js.map","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n    const tag = toString.call(value);\n    return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var maxValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] > maxValue) maxValue = input[i];\n  }\n\n  return maxValue;\n}\n\nexport { max as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var _options$fromIndex = options.fromIndex,\n      fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n      _options$toIndex = options.toIndex,\n      toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n  if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n    throw new Error('fromIndex must be a positive integer smaller than length');\n  }\n\n  if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n    throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n  }\n\n  var minValue = input[fromIndex];\n\n  for (var i = fromIndex + 1; i < toIndex; i++) {\n    if (input[i] < minValue) minValue = input[i];\n  }\n\n  return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  } else if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  var output;\n\n  if (options.output !== undefined) {\n    if (!isAnyArray(options.output)) {\n      throw new TypeError('output option must be an array if specified');\n    }\n\n    output = options.output;\n  } else {\n    output = new Array(input.length);\n  }\n\n  var currentMin = min(input);\n  var currentMax = max(input);\n\n  if (currentMin === currentMax) {\n    throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n  }\n\n  var _options$min = options.min,\n      minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n      _options$max = options.max,\n      maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n  if (minValue >= maxValue) {\n    throw new RangeError('min option must be smaller than max option');\n  }\n\n  var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n  for (var i = 0; i < input.length; i++) {\n    output[i] = (input[i] - currentMin) * factor + minValue;\n  }\n\n  return output;\n}\n\nexport { rescale as default };\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n  const {\n    maxRows = 15,\n    maxColumns = 10,\n    maxNumSize = 8,\n    padMinus = 'auto',\n  } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\n\n  if (padMinus === 'auto') {\n    padMinus = false;\n    loop: for (let i = 0; i < maxI; i++) {\n      for (let j = 0; j < maxJ; j++) {\n        if (matrix.get(i, j) < 0) {\n          padMinus = true;\n          break loop;\n        }\n      }\n    }\n  }\n\n  for (let i = 0; i < maxI; i++) {\n    let line = [];\n    for (let j = 0; j < maxJ; j++) {\n      line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n    }\n    result.push(`${line.join(' ')}`);\n  }\n  if (maxJ !== columns) {\n    result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n  }\n  if (maxI !== rows) {\n    result.push(`... ${rows - maxRows} more rows`);\n  }\n  return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n  return (\n    num >= 0 && padMinus\n      ? ` ${formatNumber2(num, maxNumSize - 1)}`\n      : formatNumber2(num, maxNumSize)\n  ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n  // small.length numbers should be as is\n  let str = num.toString();\n  if (str.length <= len) return str;\n\n  // (7)'0.00123' is better then (7)'1.23e-2'\n  // (8)'0.000123' is worse then (7)'1.23e-3',\n  let fix = num.toFixed(len);\n  if (fix.length > len) {\n    fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n  }\n  if (\n    fix.length <= len &&\n    !fix.startsWith('0.000') &&\n    !fix.startsWith('-0.000')\n  ) {\n    return fix;\n  }\n\n  // well, if it's still too long the user should've used longer numbers\n  let exp = num.toExponential(len);\n  if (exp.length > len) {\n    exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n  }\n  return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n  AbstractMatrix.prototype.add = function add(value) {\n    if (typeof value === 'number') return this.addS(value);\n    return this.addM(value);\n  };\n\n  AbstractMatrix.prototype.addS = function addS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.addM = function addM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.add = function add(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.add(value);\n  };\n\n  AbstractMatrix.prototype.sub = function sub(value) {\n    if (typeof value === 'number') return this.subS(value);\n    return this.subM(value);\n  };\n\n  AbstractMatrix.prototype.subS = function subS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.subM = function subM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sub = function sub(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sub(value);\n  };\n  AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n  AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n  AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n  AbstractMatrix.subtract = AbstractMatrix.sub;\n\n  AbstractMatrix.prototype.mul = function mul(value) {\n    if (typeof value === 'number') return this.mulS(value);\n    return this.mulM(value);\n  };\n\n  AbstractMatrix.prototype.mulS = function mulS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.mulM = function mulM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mul = function mul(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mul(value);\n  };\n  AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n  AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n  AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n  AbstractMatrix.multiply = AbstractMatrix.mul;\n\n  AbstractMatrix.prototype.div = function div(value) {\n    if (typeof value === 'number') return this.divS(value);\n    return this.divM(value);\n  };\n\n  AbstractMatrix.prototype.divS = function divS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.divM = function divM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.div = function div(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.div(value);\n  };\n  AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n  AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n  AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n  AbstractMatrix.divide = AbstractMatrix.div;\n\n  AbstractMatrix.prototype.mod = function mod(value) {\n    if (typeof value === 'number') return this.modS(value);\n    return this.modM(value);\n  };\n\n  AbstractMatrix.prototype.modS = function modS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.modM = function modM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) % matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.mod = function mod(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.mod(value);\n  };\n  AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n  AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n  AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n  AbstractMatrix.modulus = AbstractMatrix.mod;\n\n  AbstractMatrix.prototype.and = function and(value) {\n    if (typeof value === 'number') return this.andS(value);\n    return this.andM(value);\n  };\n\n  AbstractMatrix.prototype.andS = function andS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.andM = function andM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) & matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.and = function and(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.and(value);\n  };\n\n  AbstractMatrix.prototype.or = function or(value) {\n    if (typeof value === 'number') return this.orS(value);\n    return this.orM(value);\n  };\n\n  AbstractMatrix.prototype.orS = function orS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.orM = function orM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) | matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.or = function or(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.or(value);\n  };\n\n  AbstractMatrix.prototype.xor = function xor(value) {\n    if (typeof value === 'number') return this.xorS(value);\n    return this.xorM(value);\n  };\n\n  AbstractMatrix.prototype.xorS = function xorS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.xorM = function xorM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.xor = function xor(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.xor(value);\n  };\n\n  AbstractMatrix.prototype.leftShift = function leftShift(value) {\n    if (typeof value === 'number') return this.leftShiftS(value);\n    return this.leftShiftM(value);\n  };\n\n  AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) << matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.leftShift = function leftShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.leftShift(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n    if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n    return this.signPropagatingRightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.signPropagatingRightShift(value);\n  };\n\n  AbstractMatrix.prototype.rightShift = function rightShift(value) {\n    if (typeof value === 'number') return this.rightShiftS(value);\n    return this.rightShiftM(value);\n  };\n\n  AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.rightShift = function rightShift(matrix, value) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.rightShift(value);\n  };\n  AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n  AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n  AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n  AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n  AbstractMatrix.prototype.not = function not() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, ~(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.not = function not(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.not();\n  };\n\n  AbstractMatrix.prototype.abs = function abs() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.abs(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.abs = function abs(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.abs();\n  };\n\n  AbstractMatrix.prototype.acos = function acos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acos = function acos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acos();\n  };\n\n  AbstractMatrix.prototype.acosh = function acosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.acosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.acosh = function acosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.acosh();\n  };\n\n  AbstractMatrix.prototype.asin = function asin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asin = function asin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asin();\n  };\n\n  AbstractMatrix.prototype.asinh = function asinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.asinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.asinh = function asinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.asinh();\n  };\n\n  AbstractMatrix.prototype.atan = function atan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atan = function atan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atan();\n  };\n\n  AbstractMatrix.prototype.atanh = function atanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.atanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.atanh = function atanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.atanh();\n  };\n\n  AbstractMatrix.prototype.cbrt = function cbrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cbrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cbrt = function cbrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cbrt();\n  };\n\n  AbstractMatrix.prototype.ceil = function ceil() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.ceil(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.ceil = function ceil(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.ceil();\n  };\n\n  AbstractMatrix.prototype.clz32 = function clz32() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.clz32(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.clz32 = function clz32(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.clz32();\n  };\n\n  AbstractMatrix.prototype.cos = function cos() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cos(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cos = function cos(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cos();\n  };\n\n  AbstractMatrix.prototype.cosh = function cosh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.cosh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.cosh = function cosh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.cosh();\n  };\n\n  AbstractMatrix.prototype.exp = function exp() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.exp(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.exp = function exp(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.exp();\n  };\n\n  AbstractMatrix.prototype.expm1 = function expm1() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.expm1(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.expm1 = function expm1(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.expm1();\n  };\n\n  AbstractMatrix.prototype.floor = function floor() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.floor(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.floor = function floor(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.floor();\n  };\n\n  AbstractMatrix.prototype.fround = function fround() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.fround(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.fround = function fround(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.fround();\n  };\n\n  AbstractMatrix.prototype.log = function log() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log = function log(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log();\n  };\n\n  AbstractMatrix.prototype.log1p = function log1p() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log1p(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log1p = function log1p(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log1p();\n  };\n\n  AbstractMatrix.prototype.log10 = function log10() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log10(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log10 = function log10(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log10();\n  };\n\n  AbstractMatrix.prototype.log2 = function log2() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.log2(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.log2 = function log2(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.log2();\n  };\n\n  AbstractMatrix.prototype.round = function round() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.round(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.round = function round(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.round();\n  };\n\n  AbstractMatrix.prototype.sign = function sign() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sign(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sign = function sign(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sign();\n  };\n\n  AbstractMatrix.prototype.sin = function sin() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sin(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sin = function sin(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sin();\n  };\n\n  AbstractMatrix.prototype.sinh = function sinh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sinh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sinh = function sinh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sinh();\n  };\n\n  AbstractMatrix.prototype.sqrt = function sqrt() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.sqrt(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.sqrt = function sqrt(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.sqrt();\n  };\n\n  AbstractMatrix.prototype.tan = function tan() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tan(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tan = function tan(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tan();\n  };\n\n  AbstractMatrix.prototype.tanh = function tanh() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.tanh(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.tanh = function tanh(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.tanh();\n  };\n\n  AbstractMatrix.prototype.trunc = function trunc() {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, Math.trunc(this.get(i, j)));\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.trunc = function trunc(matrix) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.trunc();\n  };\n\n  AbstractMatrix.pow = function pow(matrix, arg0) {\n    const newMatrix = new Matrix(matrix);\n    return newMatrix.pow(arg0);\n  };\n\n  AbstractMatrix.prototype.pow = function pow(value) {\n    if (typeof value === 'number') return this.powS(value);\n    return this.powM(value);\n  };\n\n  AbstractMatrix.prototype.powS = function powS(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** value);\n      }\n    }\n    return this;\n  };\n\n  AbstractMatrix.prototype.powM = function powM(matrix) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (this.rows !== matrix.rows ||\n      this.columns !== matrix.columns) {\n      throw new RangeError('Matrices dimensions must be equal');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n      }\n    }\n    return this;\n  };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n  let max = outer ? matrix.rows : matrix.rows - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Row index out of range');\n  }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n  let max = outer ? matrix.columns : matrix.columns - 1;\n  if (index < 0 || index > max) {\n    throw new RangeError('Column index out of range');\n  }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.columns) {\n    throw new RangeError(\n      'vector size must be the same as the number of columns',\n    );\n  }\n  return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n  if (vector.to1DArray) {\n    vector = vector.to1DArray();\n  }\n  if (vector.length !== matrix.rows) {\n    throw new RangeError('vector size must be the same as the number of rows');\n  }\n  return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n  if (!isAnyArray.isAnyArray(rowIndices)) {\n    throw new TypeError('row indices must be an array');\n  }\n\n  for (let i = 0; i < rowIndices.length; i++) {\n    if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n      throw new RangeError('row indices are out of range');\n    }\n  }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n  if (!isAnyArray.isAnyArray(columnIndices)) {\n    throw new TypeError('column indices must be an array');\n  }\n\n  for (let i = 0; i < columnIndices.length; i++) {\n    if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n      throw new RangeError('column indices are out of range');\n    }\n  }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n  if (arguments.length !== 5) {\n    throw new RangeError('expected 4 arguments');\n  }\n  checkNumber('startRow', startRow);\n  checkNumber('endRow', endRow);\n  checkNumber('startColumn', startColumn);\n  checkNumber('endColumn', endColumn);\n  if (\n    startRow > endRow ||\n    startColumn > endColumn ||\n    startRow < 0 ||\n    startRow >= matrix.rows ||\n    endRow < 0 ||\n    endRow >= matrix.rows ||\n    startColumn < 0 ||\n    startColumn >= matrix.columns ||\n    endColumn < 0 ||\n    endColumn >= matrix.columns\n  ) {\n    throw new RangeError('Submatrix indices are out of range');\n  }\n}\n\nfunction newArray(length, value = 0) {\n  let array = [];\n  for (let i = 0; i < length; i++) {\n    array.push(value);\n  }\n  return array;\n}\n\nfunction checkNumber(name, value) {\n  if (typeof value !== 'number') {\n    throw new TypeError(`${name} must be a number`);\n  }\n}\n\nfunction checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n\nfunction sumByRow(matrix) {\n  let sum = newArray(matrix.rows);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumByColumn(matrix) {\n  let sum = newArray(matrix.columns);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] += matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction sumAll(matrix) {\n  let v = 0;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v += matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction productByRow(matrix) {\n  let sum = newArray(matrix.rows, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[i] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productByColumn(matrix) {\n  let sum = newArray(matrix.columns, 1);\n  for (let i = 0; i < matrix.rows; ++i) {\n    for (let j = 0; j < matrix.columns; ++j) {\n      sum[j] *= matrix.get(i, j);\n    }\n  }\n  return sum;\n}\n\nfunction productAll(matrix) {\n  let v = 1;\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      v *= matrix.get(i, j);\n    }\n  }\n  return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let i = 0; i < rows; i++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean[i];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n    }\n  }\n  return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const variance = [];\n\n  for (let j = 0; j < cols; j++) {\n    let sum1 = 0;\n    let sum2 = 0;\n    let x = 0;\n    for (let i = 0; i < rows; i++) {\n      x = matrix.get(i, j) - mean[j];\n      sum1 += x;\n      sum2 += x * x;\n    }\n    if (unbiased) {\n      variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n    } else {\n      variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n    }\n  }\n  return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n  const rows = matrix.rows;\n  const cols = matrix.columns;\n  const size = rows * cols;\n\n  let sum1 = 0;\n  let sum2 = 0;\n  let x = 0;\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      x = matrix.get(i, j) - mean;\n      sum1 += x;\n      sum2 += x * x;\n    }\n  }\n  if (unbiased) {\n    return (sum2 - (sum1 * sum1) / size) / (size - 1);\n  } else {\n    return (sum2 - (sum1 * sum1) / size) / size;\n  }\n}\n\nfunction centerByRow(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[i]);\n    }\n  }\n}\n\nfunction centerByColumn(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean[j]);\n    }\n  }\n}\n\nfunction centerAll(matrix, mean) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) - mean);\n    }\n  }\n}\n\nfunction getScaleByRow(matrix) {\n  const scale = [];\n  for (let i = 0; i < matrix.rows; i++) {\n    let sum = 0;\n    for (let j = 0; j < matrix.columns; j++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[i]);\n    }\n  }\n}\n\nfunction getScaleByColumn(matrix) {\n  const scale = [];\n  for (let j = 0; j < matrix.columns; j++) {\n    let sum = 0;\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale[j]);\n    }\n  }\n}\n\nfunction getScaleAll(matrix) {\n  const divider = matrix.size - 1;\n  let sum = 0;\n  for (let j = 0; j < matrix.columns; j++) {\n    for (let i = 0; i < matrix.rows; i++) {\n      sum += matrix.get(i, j) ** 2 / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n  for (let i = 0; i < matrix.rows; i++) {\n    for (let j = 0; j < matrix.columns; j++) {\n      matrix.set(i, j, matrix.get(i, j) / scale);\n    }\n  }\n}\n\nclass AbstractMatrix {\n  static from1DArray(newRows, newColumns, newData) {\n    let length = newRows * newColumns;\n    if (length !== newData.length) {\n      throw new RangeError('data length does not match given dimensions');\n    }\n    let newMatrix = new Matrix(newRows, newColumns);\n    for (let row = 0; row < newRows; row++) {\n      for (let column = 0; column < newColumns; column++) {\n        newMatrix.set(row, column, newData[row * newColumns + column]);\n      }\n    }\n    return newMatrix;\n  }\n\n  static rowVector(newData) {\n    let vector = new Matrix(1, newData.length);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(0, i, newData[i]);\n    }\n    return vector;\n  }\n\n  static columnVector(newData) {\n    let vector = new Matrix(newData.length, 1);\n    for (let i = 0; i < newData.length; i++) {\n      vector.set(i, 0, newData[i]);\n    }\n    return vector;\n  }\n\n  static zeros(rows, columns) {\n    return new Matrix(rows, columns);\n  }\n\n  static ones(rows, columns) {\n    return new Matrix(rows, columns).fill(1);\n  }\n\n  static rand(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { random = Math.random } = options;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.set(i, j, random());\n      }\n    }\n    return matrix;\n  }\n\n  static randInt(rows, columns, options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1000, random = Math.random } = options;\n    if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n    if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let interval = max - min;\n    let matrix = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        let value = min + Math.round(random() * interval);\n        matrix.set(i, j, value);\n      }\n    }\n    return matrix;\n  }\n\n  static eye(rows, columns, value) {\n    if (columns === undefined) columns = rows;\n    if (value === undefined) value = 1;\n    let min = Math.min(rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, value);\n    }\n    return matrix;\n  }\n\n  static diag(data, rows, columns) {\n    let l = data.length;\n    if (rows === undefined) rows = l;\n    if (columns === undefined) columns = rows;\n    let min = Math.min(l, rows, columns);\n    let matrix = this.zeros(rows, columns);\n    for (let i = 0; i < min; i++) {\n      matrix.set(i, i, data[i]);\n    }\n    return matrix;\n  }\n\n  static min(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static max(matrix1, matrix2) {\n    matrix1 = this.checkMatrix(matrix1);\n    matrix2 = this.checkMatrix(matrix2);\n    let rows = matrix1.rows;\n    let columns = matrix1.columns;\n    let result = new this(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n      }\n    }\n    return result;\n  }\n\n  static checkMatrix(value) {\n    return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n  }\n\n  static isMatrix(value) {\n    return value != null && value.klass === 'Matrix';\n  }\n\n  get size() {\n    return this.rows * this.columns;\n  }\n\n  apply(callback) {\n    if (typeof callback !== 'function') {\n      throw new TypeError('callback must be a function');\n    }\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        callback.call(this, i, j);\n      }\n    }\n    return this;\n  }\n\n  to1DArray() {\n    let array = [];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        array.push(this.get(i, j));\n      }\n    }\n    return array;\n  }\n\n  to2DArray() {\n    let copy = [];\n    for (let i = 0; i < this.rows; i++) {\n      copy.push([]);\n      for (let j = 0; j < this.columns; j++) {\n        copy[i].push(this.get(i, j));\n      }\n    }\n    return copy;\n  }\n\n  toJSON() {\n    return this.to2DArray();\n  }\n\n  isRowVector() {\n    return this.rows === 1;\n  }\n\n  isColumnVector() {\n    return this.columns === 1;\n  }\n\n  isVector() {\n    return this.rows === 1 || this.columns === 1;\n  }\n\n  isSquare() {\n    return this.rows === this.columns;\n  }\n\n  isEmpty() {\n    return this.rows === 0 || this.columns === 0;\n  }\n\n  isSymmetric() {\n    if (this.isSquare()) {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j <= i; j++) {\n          if (this.get(i, j) !== this.get(j, i)) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  isDistance() {\n    if (!this.isSymmetric()) return false;\n\n    for (let i = 0; i < this.rows; i++) {\n      if (this.get(i, i) !== 0) return false;\n    }\n\n    return true;\n  }\n\n  isEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isEchelonForm = false;\n          checked = true;\n        }\n      }\n      i++;\n    }\n    return isEchelonForm;\n  }\n\n  isReducedEchelonForm() {\n    let i = 0;\n    let j = 0;\n    let previousColumn = -1;\n    let isReducedEchelonForm = true;\n    let checked = false;\n    while (i < this.rows && isReducedEchelonForm) {\n      j = 0;\n      checked = false;\n      while (j < this.columns && checked === false) {\n        if (this.get(i, j) === 0) {\n          j++;\n        } else if (this.get(i, j) === 1 && j > previousColumn) {\n          checked = true;\n          previousColumn = j;\n        } else {\n          isReducedEchelonForm = false;\n          checked = true;\n        }\n      }\n      for (let k = j + 1; k < this.rows; k++) {\n        if (this.get(i, k) !== 0) {\n          isReducedEchelonForm = false;\n        }\n      }\n      i++;\n    }\n    return isReducedEchelonForm;\n  }\n\n  echelonForm() {\n    let result = this.clone();\n    let h = 0;\n    let k = 0;\n    while (h < result.rows && k < result.columns) {\n      let iMax = h;\n      for (let i = h; i < result.rows; i++) {\n        if (result.get(i, k) > result.get(iMax, k)) {\n          iMax = i;\n        }\n      }\n      if (result.get(iMax, k) === 0) {\n        k++;\n      } else {\n        result.swapRows(h, iMax);\n        let tmp = result.get(h, k);\n        for (let j = k; j < result.columns; j++) {\n          result.set(h, j, result.get(h, j) / tmp);\n        }\n        for (let i = h + 1; i < result.rows; i++) {\n          let factor = result.get(i, k) / result.get(h, k);\n          result.set(i, k, 0);\n          for (let j = k + 1; j < result.columns; j++) {\n            result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n          }\n        }\n        h++;\n        k++;\n      }\n    }\n    return result;\n  }\n\n  reducedEchelonForm() {\n    let result = this.echelonForm();\n    let m = result.columns;\n    let n = result.rows;\n    let h = n - 1;\n    while (h >= 0) {\n      if (result.maxRow(h) === 0) {\n        h--;\n      } else {\n        let p = 0;\n        let pivot = false;\n        while (p < n && pivot === false) {\n          if (result.get(h, p) === 1) {\n            pivot = true;\n          } else {\n            p++;\n          }\n        }\n        for (let i = 0; i < h; i++) {\n          let factor = result.get(i, p);\n          for (let j = p; j < m; j++) {\n            let tmp = result.get(i, j) - factor * result.get(h, j);\n            result.set(i, j, tmp);\n          }\n        }\n        h--;\n      }\n    }\n    return result;\n  }\n\n  set() {\n    throw new Error('set method is unimplemented');\n  }\n\n  get() {\n    throw new Error('get method is unimplemented');\n  }\n\n  repeat(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { rows = 1, columns = 1 } = options;\n    if (!Number.isInteger(rows) || rows <= 0) {\n      throw new TypeError('rows must be a positive integer');\n    }\n    if (!Number.isInteger(columns) || columns <= 0) {\n      throw new TypeError('columns must be a positive integer');\n    }\n    let matrix = new Matrix(this.rows * rows, this.columns * columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n      }\n    }\n    return matrix;\n  }\n\n  fill(value) {\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, value);\n      }\n    }\n    return this;\n  }\n\n  neg() {\n    return this.mulS(-1);\n  }\n\n  getRow(index) {\n    checkRowIndex(this, index);\n    let row = [];\n    for (let i = 0; i < this.columns; i++) {\n      row.push(this.get(index, i));\n    }\n    return row;\n  }\n\n  getRowVector(index) {\n    return Matrix.rowVector(this.getRow(index));\n  }\n\n  setRow(index, array) {\n    checkRowIndex(this, index);\n    array = checkRowVector(this, array);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, array[i]);\n    }\n    return this;\n  }\n\n  swapRows(row1, row2) {\n    checkRowIndex(this, row1);\n    checkRowIndex(this, row2);\n    for (let i = 0; i < this.columns; i++) {\n      let temp = this.get(row1, i);\n      this.set(row1, i, this.get(row2, i));\n      this.set(row2, i, temp);\n    }\n    return this;\n  }\n\n  getColumn(index) {\n    checkColumnIndex(this, index);\n    let column = [];\n    for (let i = 0; i < this.rows; i++) {\n      column.push(this.get(i, index));\n    }\n    return column;\n  }\n\n  getColumnVector(index) {\n    return Matrix.columnVector(this.getColumn(index));\n  }\n\n  setColumn(index, array) {\n    checkColumnIndex(this, index);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, array[i]);\n    }\n    return this;\n  }\n\n  swapColumns(column1, column2) {\n    checkColumnIndex(this, column1);\n    checkColumnIndex(this, column2);\n    for (let i = 0; i < this.rows; i++) {\n      let temp = this.get(i, column1);\n      this.set(i, column1, this.get(i, column2));\n      this.set(i, column2, temp);\n    }\n    return this;\n  }\n\n  addRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[j]);\n      }\n    }\n    return this;\n  }\n\n  subRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[j]);\n      }\n    }\n    return this;\n  }\n\n  mulRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[j]);\n      }\n    }\n    return this;\n  }\n\n  divRowVector(vector) {\n    vector = checkRowVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[j]);\n      }\n    }\n    return this;\n  }\n\n  addColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) + vector[i]);\n      }\n    }\n    return this;\n  }\n\n  subColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) - vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) * vector[i]);\n      }\n    }\n    return this;\n  }\n\n  divColumnVector(vector) {\n    vector = checkColumnVector(this, vector);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        this.set(i, j, this.get(i, j) / vector[i]);\n      }\n    }\n    return this;\n  }\n\n  mulRow(index, value) {\n    checkRowIndex(this, index);\n    for (let i = 0; i < this.columns; i++) {\n      this.set(index, i, this.get(index, i) * value);\n    }\n    return this;\n  }\n\n  mulColumn(index, value) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      this.set(i, index, this.get(i, index) * value);\n    }\n    return this;\n  }\n\n  max(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    switch (by) {\n      case 'row': {\n        const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[row]) {\n              max[row] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case 'column': {\n        const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max[column]) {\n              max[column] = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      case undefined: {\n        let max = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) > max) {\n              max = this.get(row, column);\n            }\n          }\n        }\n        return max;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  maxIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) > v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  min(by) {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n\n    switch (by) {\n      case 'row': {\n        const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[row]) {\n              min[row] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case 'column': {\n        const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min[column]) {\n              min[column] = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      case undefined: {\n        let min = this.get(0, 0);\n        for (let row = 0; row < this.rows; row++) {\n          for (let column = 0; column < this.columns; column++) {\n            if (this.get(row, column) < min) {\n              min = this.get(row, column);\n            }\n          }\n        }\n        return min;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  minIndex() {\n    checkNonEmpty(this);\n    let v = this.get(0, 0);\n    let idx = [0, 0];\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        if (this.get(i, j) < v) {\n          v = this.get(i, j);\n          idx[0] = i;\n          idx[1] = j;\n        }\n      }\n    }\n    return idx;\n  }\n\n  maxRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  maxRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) > v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  minRow(row) {\n    checkRowIndex(this, row);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(row, 0);\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n      }\n    }\n    return v;\n  }\n\n  minRowIndex(row) {\n    checkRowIndex(this, row);\n    checkNonEmpty(this);\n    let v = this.get(row, 0);\n    let idx = [row, 0];\n    for (let i = 1; i < this.columns; i++) {\n      if (this.get(row, i) < v) {\n        v = this.get(row, i);\n        idx[1] = i;\n      }\n    }\n    return idx;\n  }\n\n  maxColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  maxColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) > v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  minColumn(column) {\n    checkColumnIndex(this, column);\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(0, column);\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n      }\n    }\n    return v;\n  }\n\n  minColumnIndex(column) {\n    checkColumnIndex(this, column);\n    checkNonEmpty(this);\n    let v = this.get(0, column);\n    let idx = [0, column];\n    for (let i = 1; i < this.rows; i++) {\n      if (this.get(i, column) < v) {\n        v = this.get(i, column);\n        idx[0] = i;\n      }\n    }\n    return idx;\n  }\n\n  diag() {\n    let min = Math.min(this.rows, this.columns);\n    let diag = [];\n    for (let i = 0; i < min; i++) {\n      diag.push(this.get(i, i));\n    }\n    return diag;\n  }\n\n  norm(type = 'frobenius') {\n    switch (type) {\n      case 'max':\n        return this.max();\n      case 'frobenius':\n        return Math.sqrt(this.dot(this));\n      default:\n        throw new RangeError(`unknown norm type: ${type}`);\n    }\n  }\n\n  cumulativeSum() {\n    let sum = 0;\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        sum += this.get(i, j);\n        this.set(i, j, sum);\n      }\n    }\n    return this;\n  }\n\n  dot(vector2) {\n    if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n    let vector1 = this.to1DArray();\n    if (vector1.length !== vector2.length) {\n      throw new RangeError('vectors do not have the same size');\n    }\n    let dot = 0;\n    for (let i = 0; i < vector1.length; i++) {\n      dot += vector1[i] * vector2[i];\n    }\n    return dot;\n  }\n\n  mmul(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.columns;\n\n    let result = new Matrix(m, p);\n\n    let Bcolj = new Float64Array(n);\n    for (let j = 0; j < p; j++) {\n      for (let k = 0; k < n; k++) {\n        Bcolj[k] = other.get(k, j);\n      }\n\n      for (let i = 0; i < m; i++) {\n        let s = 0;\n        for (let k = 0; k < n; k++) {\n          s += this.get(i, k) * Bcolj[k];\n        }\n\n        result.set(i, j, s);\n      }\n    }\n    return result;\n  }\n\n  mpow(scalar) {\n    if (!this.isSquare()) {\n      throw new RangeError('Matrix must be square');\n    }\n    if (!Number.isInteger(scalar) || scalar < 0) {\n      throw new RangeError('Exponent must be a non-negative integer');\n    }\n    // Russian Peasant exponentiation, i.e. exponentiation by squaring\n    let result = Matrix.eye(this.rows);\n    let bb = this;\n    // Note: Don't bit shift. In JS, that would truncate at 32 bits\n    for (let e = scalar; e >= 1; e /= 2) {\n      if ((e & 1) !== 0) {\n        result = result.mmul(bb);\n      }\n      bb = bb.mmul(bb);\n    }\n    return result;\n  }\n\n  strassen2x2(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(2, 2);\n    const a11 = this.get(0, 0);\n    const b11 = other.get(0, 0);\n    const a12 = this.get(0, 1);\n    const b12 = other.get(0, 1);\n    const a21 = this.get(1, 0);\n    const b21 = other.get(1, 0);\n    const a22 = this.get(1, 1);\n    const b22 = other.get(1, 1);\n\n    // Compute intermediate values.\n    const m1 = (a11 + a22) * (b11 + b22);\n    const m2 = (a21 + a22) * b11;\n    const m3 = a11 * (b12 - b22);\n    const m4 = a22 * (b21 - b11);\n    const m5 = (a11 + a12) * b22;\n    const m6 = (a21 - a11) * (b11 + b12);\n    const m7 = (a12 - a22) * (b21 + b22);\n\n    // Combine intermediate values into the output.\n    const c00 = m1 + m4 - m5 + m7;\n    const c01 = m3 + m5;\n    const c10 = m2 + m4;\n    const c11 = m1 - m2 + m3 + m6;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    return result;\n  }\n\n  strassen3x3(other) {\n    other = Matrix.checkMatrix(other);\n    let result = new Matrix(3, 3);\n\n    const a00 = this.get(0, 0);\n    const a01 = this.get(0, 1);\n    const a02 = this.get(0, 2);\n    const a10 = this.get(1, 0);\n    const a11 = this.get(1, 1);\n    const a12 = this.get(1, 2);\n    const a20 = this.get(2, 0);\n    const a21 = this.get(2, 1);\n    const a22 = this.get(2, 2);\n\n    const b00 = other.get(0, 0);\n    const b01 = other.get(0, 1);\n    const b02 = other.get(0, 2);\n    const b10 = other.get(1, 0);\n    const b11 = other.get(1, 1);\n    const b12 = other.get(1, 2);\n    const b20 = other.get(2, 0);\n    const b21 = other.get(2, 1);\n    const b22 = other.get(2, 2);\n\n    const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n    const m2 = (a00 - a10) * (-b01 + b11);\n    const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n    const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n    const m5 = (a10 + a11) * (-b00 + b01);\n    const m6 = a00 * b00;\n    const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n    const m8 = (-a00 + a20) * (b02 - b12);\n    const m9 = (a20 + a21) * (-b00 + b02);\n    const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n    const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n    const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n    const m13 = (a02 - a22) * (b11 - b21);\n    const m14 = a02 * b20;\n    const m15 = (a21 + a22) * (-b20 + b21);\n    const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n    const m17 = (a02 - a12) * (b12 - b22);\n    const m18 = (a11 + a12) * (-b20 + b22);\n    const m19 = a01 * b10;\n    const m20 = a12 * b21;\n    const m21 = a10 * b02;\n    const m22 = a20 * b01;\n    const m23 = a22 * b22;\n\n    const c00 = m6 + m14 + m19;\n    const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n    const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n    const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n    const c11 = m2 + m4 + m5 + m6 + m20;\n    const c12 = m14 + m16 + m17 + m18 + m21;\n    const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n    const c21 = m12 + m13 + m14 + m15 + m22;\n    const c22 = m6 + m7 + m8 + m9 + m23;\n\n    result.set(0, 0, c00);\n    result.set(0, 1, c01);\n    result.set(0, 2, c02);\n    result.set(1, 0, c10);\n    result.set(1, 1, c11);\n    result.set(1, 2, c12);\n    result.set(2, 0, c20);\n    result.set(2, 1, c21);\n    result.set(2, 2, c22);\n    return result;\n  }\n\n  mmulStrassen(y) {\n    y = Matrix.checkMatrix(y);\n    let x = this.clone();\n    let r1 = x.rows;\n    let c1 = x.columns;\n    let r2 = y.rows;\n    let c2 = y.columns;\n    if (c1 !== r2) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n      );\n    }\n\n    // Put a matrix into the top left of a matrix of zeros.\n    // `rows` and `cols` are the dimensions of the output matrix.\n    function embed(mat, rows, cols) {\n      let r = mat.rows;\n      let c = mat.columns;\n      if (r === rows && c === cols) {\n        return mat;\n      } else {\n        let resultat = AbstractMatrix.zeros(rows, cols);\n        resultat = resultat.setSubMatrix(mat, 0, 0);\n        return resultat;\n      }\n    }\n\n    // Make sure both matrices are the same size.\n    // This is exclusively for simplicity:\n    // this algorithm can be implemented with matrices of different sizes.\n\n    let r = Math.max(r1, r2);\n    let c = Math.max(c1, c2);\n    x = embed(x, r, c);\n    y = embed(y, r, c);\n\n    // Our recursive multiplication function.\n    function blockMult(a, b, rows, cols) {\n      // For small matrices, resort to naive multiplication.\n      if (rows <= 512 || cols <= 512) {\n        return a.mmul(b); // a is equivalent to this\n      }\n\n      // Apply dynamic padding.\n      if (rows % 2 === 1 && cols % 2 === 1) {\n        a = embed(a, rows + 1, cols + 1);\n        b = embed(b, rows + 1, cols + 1);\n      } else if (rows % 2 === 1) {\n        a = embed(a, rows + 1, cols);\n        b = embed(b, rows + 1, cols);\n      } else if (cols % 2 === 1) {\n        a = embed(a, rows, cols + 1);\n        b = embed(b, rows, cols + 1);\n      }\n\n      let halfRows = parseInt(a.rows / 2, 10);\n      let halfCols = parseInt(a.columns / 2, 10);\n      // Subdivide input matrices.\n      let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n      let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n      let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n      let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n      let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n      let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n      let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n      let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n      // Compute intermediate values.\n      let m1 = blockMult(\n        AbstractMatrix.add(a11, a22),\n        AbstractMatrix.add(b11, b22),\n        halfRows,\n        halfCols,\n      );\n      let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n      let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n      let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n      let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n      let m6 = blockMult(\n        AbstractMatrix.sub(a21, a11),\n        AbstractMatrix.add(b11, b12),\n        halfRows,\n        halfCols,\n      );\n      let m7 = blockMult(\n        AbstractMatrix.sub(a12, a22),\n        AbstractMatrix.add(b21, b22),\n        halfRows,\n        halfCols,\n      );\n\n      // Combine intermediate values into the output.\n      let c11 = AbstractMatrix.add(m1, m4);\n      c11.sub(m5);\n      c11.add(m7);\n      let c12 = AbstractMatrix.add(m3, m5);\n      let c21 = AbstractMatrix.add(m2, m4);\n      let c22 = AbstractMatrix.sub(m1, m2);\n      c22.add(m3);\n      c22.add(m6);\n\n      // Crop output to the desired size (undo dynamic padding).\n      let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      result = result.setSubMatrix(c11, 0, 0);\n      result = result.setSubMatrix(c12, c11.rows, 0);\n      result = result.setSubMatrix(c21, 0, c11.columns);\n      result = result.setSubMatrix(c22, c11.rows, c11.columns);\n      return result.subMatrix(0, rows - 1, 0, cols - 1);\n    }\n\n    return blockMult(x, y, r, c);\n  }\n\n  scaleRows(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.rows; i++) {\n      const row = this.getRow(i);\n      if (row.length > 0) {\n        rescale(row, { min, max, output: row });\n      }\n      newMatrix.setRow(i, row);\n    }\n    return newMatrix;\n  }\n\n  scaleColumns(options = {}) {\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { min = 0, max = 1 } = options;\n    if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n    if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n    if (min >= max) throw new RangeError('min must be smaller than max');\n    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let i = 0; i < this.columns; i++) {\n      const column = this.getColumn(i);\n      if (column.length) {\n        rescale(column, {\n          min,\n          max,\n          output: column,\n        });\n      }\n      newMatrix.setColumn(i, column);\n    }\n    return newMatrix;\n  }\n\n  flipRows() {\n    const middle = Math.ceil(this.columns / 2);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < middle; j++) {\n        let first = this.get(i, j);\n        let last = this.get(i, this.columns - 1 - j);\n        this.set(i, j, last);\n        this.set(i, this.columns - 1 - j, first);\n      }\n    }\n    return this;\n  }\n\n  flipColumns() {\n    const middle = Math.ceil(this.rows / 2);\n    for (let j = 0; j < this.columns; j++) {\n      for (let i = 0; i < middle; i++) {\n        let first = this.get(i, j);\n        let last = this.get(this.rows - 1 - i, j);\n        this.set(i, j, last);\n        this.set(this.rows - 1 - i, j, first);\n      }\n    }\n    return this;\n  }\n\n  kroneckerProduct(other) {\n    other = Matrix.checkMatrix(other);\n\n    let m = this.rows;\n    let n = this.columns;\n    let p = other.rows;\n    let q = other.columns;\n\n    let result = new Matrix(m * p, n * q);\n    for (let i = 0; i < m; i++) {\n      for (let j = 0; j < n; j++) {\n        for (let k = 0; k < p; k++) {\n          for (let l = 0; l < q; l++) {\n            result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  kroneckerSum(other) {\n    other = Matrix.checkMatrix(other);\n    if (!this.isSquare() || !other.isSquare()) {\n      throw new Error('Kronecker Sum needs two Square Matrices');\n    }\n    let m = this.rows;\n    let n = other.rows;\n    let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n    let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n    return AxI.add(IxB);\n  }\n\n  transpose() {\n    let result = new Matrix(this.columns, this.rows);\n    for (let i = 0; i < this.rows; i++) {\n      for (let j = 0; j < this.columns; j++) {\n        result.set(j, i, this.get(i, j));\n      }\n    }\n    return result;\n  }\n\n  sortRows(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.rows; i++) {\n      this.setRow(i, this.getRow(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  sortColumns(compareFunction = compareNumbers) {\n    for (let i = 0; i < this.columns; i++) {\n      this.setColumn(i, this.getColumn(i).sort(compareFunction));\n    }\n    return this;\n  }\n\n  subMatrix(startRow, endRow, startColumn, endColumn) {\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    let newMatrix = new Matrix(\n      endRow - startRow + 1,\n      endColumn - startColumn + 1,\n    );\n    for (let i = startRow; i <= endRow; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixRow(indices, startColumn, endColumn) {\n    if (startColumn === undefined) startColumn = 0;\n    if (endColumn === undefined) endColumn = this.columns - 1;\n    if (\n      startColumn > endColumn ||\n      startColumn < 0 ||\n      startColumn >= this.columns ||\n      endColumn < 0 ||\n      endColumn >= this.columns\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startColumn; j <= endColumn; j++) {\n        if (indices[i] < 0 || indices[i] >= this.rows) {\n          throw new RangeError(`Row index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n      }\n    }\n    return newMatrix;\n  }\n\n  subMatrixColumn(indices, startRow, endRow) {\n    if (startRow === undefined) startRow = 0;\n    if (endRow === undefined) endRow = this.rows - 1;\n    if (\n      startRow > endRow ||\n      startRow < 0 ||\n      startRow >= this.rows ||\n      endRow < 0 ||\n      endRow >= this.rows\n    ) {\n      throw new RangeError('Argument out of range');\n    }\n\n    let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n    for (let i = 0; i < indices.length; i++) {\n      for (let j = startRow; j <= endRow; j++) {\n        if (indices[i] < 0 || indices[i] >= this.columns) {\n          throw new RangeError(`Column index out of range: ${indices[i]}`);\n        }\n        newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n      }\n    }\n    return newMatrix;\n  }\n\n  setSubMatrix(matrix, startRow, startColumn) {\n    matrix = Matrix.checkMatrix(matrix);\n    if (matrix.isEmpty()) {\n      return this;\n    }\n    let endRow = startRow + matrix.rows - 1;\n    let endColumn = startColumn + matrix.columns - 1;\n    checkRange(this, startRow, endRow, startColumn, endColumn);\n    for (let i = 0; i < matrix.rows; i++) {\n      for (let j = 0; j < matrix.columns; j++) {\n        this.set(startRow + i, startColumn + j, matrix.get(i, j));\n      }\n    }\n    return this;\n  }\n\n  selection(rowIndices, columnIndices) {\n    checkRowIndices(this, rowIndices);\n    checkColumnIndices(this, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < rowIndices.length; i++) {\n      let rowIndex = rowIndices[i];\n      for (let j = 0; j < columnIndices.length; j++) {\n        let columnIndex = columnIndices[j];\n        newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n      }\n    }\n    return newMatrix;\n  }\n\n  trace() {\n    let min = Math.min(this.rows, this.columns);\n    let trace = 0;\n    for (let i = 0; i < min; i++) {\n      trace += this.get(i, i);\n    }\n    return trace;\n  }\n\n  clone() {\n    return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n  }\n\n  /**\n   * @template {AbstractMatrix} M\n   * @param {AbstractMatrix} from\n   * @param {M} to\n   * @return {M}\n   */\n  static copy(from, to) {\n    for (const [row, column, value] of from.entries()) {\n      to.set(row, column, value);\n    }\n\n    return to;\n  }\n\n  sum(by) {\n    switch (by) {\n      case 'row':\n        return sumByRow(this);\n      case 'column':\n        return sumByColumn(this);\n      case undefined:\n        return sumAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  product(by) {\n    switch (by) {\n      case 'row':\n        return productByRow(this);\n      case 'column':\n        return productByColumn(this);\n      case undefined:\n        return productAll(this);\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  mean(by) {\n    const sum = this.sum(by);\n    switch (by) {\n      case 'row': {\n        for (let i = 0; i < this.rows; i++) {\n          sum[i] /= this.columns;\n        }\n        return sum;\n      }\n      case 'column': {\n        for (let i = 0; i < this.columns; i++) {\n          sum[i] /= this.rows;\n        }\n        return sum;\n      }\n      case undefined:\n        return sum / this.size;\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  variance(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { unbiased = true, mean = this.mean(by) } = options;\n    if (typeof unbiased !== 'boolean') {\n      throw new TypeError('unbiased must be a boolean');\n    }\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByColumn(this, unbiased, mean);\n      }\n      case undefined: {\n        if (typeof mean !== 'number') {\n          throw new TypeError('mean must be a number');\n        }\n        return varianceAll(this, unbiased, mean);\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  standardDeviation(by, options) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    const variance = this.variance(by, options);\n    if (by === undefined) {\n      return Math.sqrt(variance);\n    } else {\n      for (let i = 0; i < variance.length; i++) {\n        variance[i] = Math.sqrt(variance[i]);\n      }\n      return variance;\n    }\n  }\n\n  center(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    const { center = this.mean(by) } = options;\n    switch (by) {\n      case 'row': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!isAnyArray.isAnyArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByColumn(this, center);\n        return this;\n      }\n      case undefined: {\n        if (typeof center !== 'number') {\n          throw new TypeError('center must be a number');\n        }\n        centerAll(this, center);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  scale(by, options = {}) {\n    if (typeof by === 'object') {\n      options = by;\n      by = undefined;\n    }\n    if (typeof options !== 'object') {\n      throw new TypeError('options must be an object');\n    }\n    let scale = options.scale;\n    switch (by) {\n      case 'row': {\n        if (scale === undefined) {\n          scale = getScaleByRow(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByRow(this, scale);\n        return this;\n      }\n      case 'column': {\n        if (scale === undefined) {\n          scale = getScaleByColumn(this);\n        } else if (!isAnyArray.isAnyArray(scale)) {\n          throw new TypeError('scale must be an array');\n        }\n        scaleByColumn(this, scale);\n        return this;\n      }\n      case undefined: {\n        if (scale === undefined) {\n          scale = getScaleAll(this);\n        } else if (typeof scale !== 'number') {\n          throw new TypeError('scale must be a number');\n        }\n        scaleAll(this, scale);\n        return this;\n      }\n      default:\n        throw new Error(`invalid option: ${by}`);\n    }\n  }\n\n  toString(options) {\n    return inspectMatrixWithOptions(this, options);\n  }\n\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield [row, column, value]\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *entries() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield [row, col, this.get(row, col)];\n      }\n    }\n  }\n\n  /**\n   * iterator from left to right, from top to bottom\n   * yield value\n   * @returns {Generator<number, void, void>}\n   */\n  *values() {\n    for (let row = 0; row < this.rows; row++) {\n      for (let col = 0; col < this.columns; col++) {\n        yield this.get(row, col);\n      }\n    }\n  }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n    inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n  return array.every((element) => {\n    return typeof element === 'number';\n  });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n  AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n  /**\n   * @type {Float64Array[]}\n   */\n  data;\n\n  /**\n   * Init an empty matrix\n   * @param {number} nRows\n   * @param {number} nColumns\n   */\n  #initData(nRows, nColumns) {\n    this.data = [];\n\n    if (Number.isInteger(nColumns) && nColumns >= 0) {\n      for (let i = 0; i < nRows; i++) {\n        this.data.push(new Float64Array(nColumns));\n      }\n    } else {\n      throw new TypeError('nColumns must be a positive integer');\n    }\n\n    this.rows = nRows;\n    this.columns = nColumns;\n  }\n\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      this.#initData(nRows.rows, nRows.columns);\n      Matrix.copy(nRows, this);\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      this.#initData(nRows, nColumns);\n    } else if (isAnyArray.isAnyArray(nRows)) {\n      // Copy the values from the 2D array\n      const arrayData = nRows;\n      nRows = arrayData.length;\n      nColumns = nRows ? arrayData[0].length : 0;\n      if (typeof nColumns !== 'number') {\n        throw new TypeError(\n          'Data must be a 2D array with at least one element',\n        );\n      }\n      this.data = [];\n\n      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        if (!isArrayOfNumbers(arrayData[i])) {\n          throw new TypeError('Input data contains non-numeric values');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n\n      this.rows = nRows;\n      this.columns = nColumns;\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n\n  removeRow(index) {\n    checkRowIndex(this, index);\n    this.data.splice(index, 1);\n    this.rows -= 1;\n    return this;\n  }\n\n  addRow(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.rows;\n    }\n    checkRowIndex(this, index, true);\n    array = Float64Array.from(checkRowVector(this, array));\n    this.data.splice(index, 0, array);\n    this.rows += 1;\n    return this;\n  }\n\n  removeColumn(index) {\n    checkColumnIndex(this, index);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns - 1);\n      for (let j = 0; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      for (let j = index + 1; j < this.columns; j++) {\n        newRow[j - 1] = this.data[i][j];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns -= 1;\n    return this;\n  }\n\n  addColumn(index, array) {\n    if (typeof array === 'undefined') {\n      array = index;\n      index = this.columns;\n    }\n    checkColumnIndex(this, index, true);\n    array = checkColumnVector(this, array);\n    for (let i = 0; i < this.rows; i++) {\n      const newRow = new Float64Array(this.columns + 1);\n      let j = 0;\n      for (; j < index; j++) {\n        newRow[j] = this.data[i][j];\n      }\n      newRow[j++] = array[i];\n      for (; j < this.columns + 1; j++) {\n        newRow[j] = this.data[i][j - 1];\n      }\n      this.data[i] = newRow;\n    }\n    this.columns += 1;\n    return this;\n  }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n  /** @type {Matrix} */\n  #matrix;\n\n  get size() {\n    return this.#matrix.size;\n  }\n\n  get rows() {\n    return this.#matrix.rows;\n  }\n\n  get columns() {\n    return this.#matrix.columns;\n  }\n\n  get diagonalSize() {\n    return this.rows;\n  }\n\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isSymmetricMatrix(value) {\n    return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static zeros(diagonalSize) {\n    return new this(diagonalSize);\n  }\n\n  /**\n   * @param diagonalSize\n   * @return {SymmetricMatrix}\n   */\n  static ones(diagonalSize) {\n    return new this(diagonalSize).fill(1);\n  }\n\n  /**\n   * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n   * @return {this}\n   */\n  constructor(diagonalSize) {\n    super();\n\n    if (Matrix.isMatrix(diagonalSize)) {\n      if (!diagonalSize.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n\n      this.#matrix = Matrix.copy(\n        diagonalSize,\n        new Matrix(diagonalSize.rows, diagonalSize.rows),\n      );\n    } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n      this.#matrix = new Matrix(diagonalSize, diagonalSize);\n    } else {\n      this.#matrix = new Matrix(diagonalSize);\n\n      if (!this.isSymmetric()) {\n        throw new TypeError('not symmetric data');\n      }\n    }\n  }\n\n  clone() {\n    const matrix = new SymmetricMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  toMatrix() {\n    return new Matrix(this);\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.#matrix.get(rowIndex, columnIndex);\n  }\n  set(rowIndex, columnIndex, value) {\n    // symmetric set\n    this.#matrix.set(rowIndex, columnIndex, value);\n    this.#matrix.set(columnIndex, rowIndex, value);\n\n    return this;\n  }\n\n  removeCross(index) {\n    // symmetric remove side\n    this.#matrix.removeRow(index);\n    this.#matrix.removeColumn(index);\n\n    return this;\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    const row = array.slice();\n    row.splice(index, 1);\n\n    this.#matrix.addRow(index, row);\n    this.#matrix.addColumn(index, array);\n\n    return this;\n  }\n\n  /**\n   * @param {Mask[]} mask\n   */\n  applyMask(mask) {\n    if (mask.length !== this.diagonalSize) {\n      throw new RangeError('Mask size do not match with matrix size');\n    }\n\n    // prepare sides to remove from matrix from mask\n    /** @type {number[]} */\n    const sidesToRemove = [];\n    for (const [index, passthroughs] of mask.entries()) {\n      if (passthroughs) continue;\n      sidesToRemove.push(index);\n    }\n    // to remove from highest to lowest for no mutation shifting\n    sidesToRemove.reverse();\n\n    // remove sides\n    for (const sideIndex of sidesToRemove) {\n      this.removeCross(sideIndex);\n    }\n\n    return this;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * iterate from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 1 2 3 4\n   * B 2 5 6 7\n   * C 3 6 8 9\n   * D 4 7 9 10\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n   *\n   * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n\n    /** @type {number[]} */\n    const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n    for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   * @return {SymmetricMatrix}\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n    // compactSize = (sideSize * (sideSize + 1)) / 2\n    // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n    // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new SymmetricMatrix(diagonalSize);\n    for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row;\n    }\n\n    return matrix;\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield [row, column, value]\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightEntries() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield [row, col, value];\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n\n  /**\n   * half iterator upper-right-corner from left to right, from top to bottom\n   * yield value\n   *\n   * @returns {Generator<[number, number, number], void, void>}\n   */\n  *upperRightValues() {\n    for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n      const value = this.get(row, col);\n\n      yield value;\n\n      // at the end of row, move cursor to next row at diagonal position\n      if (++col >= this.diagonalSize) col = ++row;\n    }\n  }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n  /**\n   * not the same as matrix.isSymmetric()\n   * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n   *\n   * @param value\n   * @returns {boolean}\n   */\n  static isDistanceMatrix(value) {\n    return (\n      SymmetricMatrix.isSymmetricMatrix(value) &&\n      value.klassSubType === 'DistanceMatrix'\n    );\n  }\n\n  constructor(sideSize) {\n    super(sideSize);\n\n    if (!this.isDistance()) {\n      throw new TypeError('Provided arguments do no produce a distance matrix');\n    }\n  }\n\n  set(rowIndex, columnIndex, value) {\n    // distance matrix diagonal is 0\n    if (rowIndex === columnIndex) value = 0;\n\n    return super.set(rowIndex, columnIndex, value);\n  }\n\n  addCross(index, array) {\n    if (array === undefined) {\n      array = index;\n      index = this.diagonalSize;\n    }\n\n    // ensure distance\n    array = array.slice();\n    array[index] = 0;\n\n    return super.addCross(index, array);\n  }\n\n  toSymmetricMatrix() {\n    return new SymmetricMatrix(this);\n  }\n\n  clone() {\n    const matrix = new DistanceMatrix(this.diagonalSize);\n\n    for (const [row, col, value] of this.upperRightEntries()) {\n      if (row === col) continue;\n      matrix.set(row, col, value);\n    }\n\n    return matrix;\n  }\n\n  /**\n   * Compact format upper-right corner of matrix\n   * no diagonal (only zeros)\n   * iterable from left to right, from top to bottom.\n   *\n   * ```\n   *   A B C D\n   * A 0 1 2 3\n   * B 1 0 4 5\n   * C 2 4 0 6\n   * D 3 5 6 0\n   * ```\n   *\n   * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n   *\n   * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n   *\n   * @returns {number[]}\n   */\n  toCompact() {\n    const { diagonalSize } = this;\n    const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n    /** @type {number[]} */\n    const compact = new Array(compactLength);\n    for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n      compact[index] = this.get(row, col);\n\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return compact;\n  }\n\n  /**\n   * @param {number[]} compact\n   */\n  static fromCompact(compact) {\n    const compactSize = compact.length;\n\n    if (compactSize === 0) {\n      return new this(0);\n    }\n\n    // compactSize in Natural integer range ]0;∞]\n    // compactSize = (sideSize * (sideSize - 1)) / 2\n    // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n    const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n    if (!Number.isInteger(diagonalSize)) {\n      throw new TypeError(\n        `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n          compact,\n        )}`,\n      );\n    }\n\n    const matrix = new this(diagonalSize);\n    for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n      matrix.set(col, row, compact[index]);\n      if (++col >= diagonalSize) col = ++row + 1;\n    }\n\n    return matrix;\n  }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n  constructor(matrix, rows, columns) {\n    super();\n    this.matrix = matrix;\n    this.rows = rows;\n    this.columns = columns;\n  }\n}\n\nclass MatrixColumnView extends BaseView {\n  constructor(matrix, column) {\n    checkColumnIndex(matrix, column);\n    super(matrix, matrix.rows, 1);\n    this.column = column;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.column, value);\n    return this;\n  }\n\n  get(rowIndex) {\n    return this.matrix.get(rowIndex, this.column);\n  }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n  constructor(matrix, columnIndices) {\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, matrix.rows, columnIndices.length);\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n  }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n  }\n}\n\nclass MatrixFlipRowView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.rows, matrix.columns);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n  }\n}\n\nclass MatrixRowView extends BaseView {\n  constructor(matrix, row) {\n    checkRowIndex(matrix, row);\n    super(matrix, 1, matrix.columns);\n    this.row = row;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.row, columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.row, columnIndex);\n  }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n  constructor(matrix, rowIndices) {\n    checkRowIndices(matrix, rowIndices);\n    super(matrix, rowIndices.length, matrix.columns);\n    this.rowIndices = rowIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n  }\n}\n\nclass MatrixSelectionView extends BaseView {\n  constructor(matrix, rowIndices, columnIndices) {\n    checkRowIndices(matrix, rowIndices);\n    checkColumnIndices(matrix, columnIndices);\n    super(matrix, rowIndices.length, columnIndices.length);\n    this.rowIndices = rowIndices;\n    this.columnIndices = columnIndices;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.rowIndices[rowIndex],\n      this.columnIndices[columnIndex],\n    );\n  }\n}\n\nclass MatrixSubView extends BaseView {\n  constructor(matrix, startRow, endRow, startColumn, endColumn) {\n    checkRange(matrix, startRow, endRow, startColumn, endColumn);\n    super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n    this.startRow = startRow;\n    this.startColumn = startColumn;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n      value,\n    );\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(\n      this.startRow + rowIndex,\n      this.startColumn + columnIndex,\n    );\n  }\n}\n\nclass MatrixTransposeView extends BaseView {\n  constructor(matrix) {\n    super(matrix, matrix.columns, matrix.rows);\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.matrix.set(columnIndex, rowIndex, value);\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.matrix.get(columnIndex, rowIndex);\n  }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n  constructor(data, options = {}) {\n    const { rows = 1 } = options;\n\n    if (data.length % rows !== 0) {\n      throw new Error('the data length is not divisible by the number of rows');\n    }\n    super();\n    this.rows = rows;\n    this.columns = data.length / rows;\n    this.data = data;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    this.data[index] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    let index = this._calculateIndex(rowIndex, columnIndex);\n    return this.data[index];\n  }\n\n  _calculateIndex(row, column) {\n    return row * this.columns + column;\n  }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n  constructor(data) {\n    super();\n    this.data = data;\n    this.rows = data.length;\n    this.columns = data[0].length;\n  }\n\n  set(rowIndex, columnIndex, value) {\n    this.data[rowIndex][columnIndex] = value;\n    return this;\n  }\n\n  get(rowIndex, columnIndex) {\n    return this.data[rowIndex][columnIndex];\n  }\n}\n\nfunction wrap(array, options) {\n  if (isAnyArray.isAnyArray(array)) {\n    if (array[0] && isAnyArray.isAnyArray(array[0])) {\n      return new WrapperMatrix2D(array);\n    } else {\n      return new WrapperMatrix1D(array, options);\n    }\n  } else {\n    throw new Error('the argument is not an array');\n  }\n}\n\nclass LuDecomposition {\n  constructor(matrix) {\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n    let lu = matrix.clone();\n    let rows = lu.rows;\n    let columns = lu.columns;\n    let pivotVector = new Float64Array(rows);\n    let pivotSign = 1;\n    let i, j, k, p, s, t, v;\n    let LUcolj, kmax;\n\n    for (i = 0; i < rows; i++) {\n      pivotVector[i] = i;\n    }\n\n    LUcolj = new Float64Array(rows);\n\n    for (j = 0; j < columns; j++) {\n      for (i = 0; i < rows; i++) {\n        LUcolj[i] = lu.get(i, j);\n      }\n\n      for (i = 0; i < rows; i++) {\n        kmax = Math.min(i, j);\n        s = 0;\n        for (k = 0; k < kmax; k++) {\n          s += lu.get(i, k) * LUcolj[k];\n        }\n        LUcolj[i] -= s;\n        lu.set(i, j, LUcolj[i]);\n      }\n\n      p = j;\n      for (i = j + 1; i < rows; i++) {\n        if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n          p = i;\n        }\n      }\n\n      if (p !== j) {\n        for (k = 0; k < columns; k++) {\n          t = lu.get(p, k);\n          lu.set(p, k, lu.get(j, k));\n          lu.set(j, k, t);\n        }\n\n        v = pivotVector[p];\n        pivotVector[p] = pivotVector[j];\n        pivotVector[j] = v;\n\n        pivotSign = -pivotSign;\n      }\n\n      if (j < rows && lu.get(j, j) !== 0) {\n        for (i = j + 1; i < rows; i++) {\n          lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n        }\n      }\n    }\n\n    this.LU = lu;\n    this.pivotVector = pivotVector;\n    this.pivotSign = pivotSign;\n  }\n\n  isSingular() {\n    let data = this.LU;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      if (data.get(j, j) === 0) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let lu = this.LU;\n    let rows = lu.rows;\n\n    if (rows !== value.rows) {\n      throw new Error('Invalid matrix dimensions');\n    }\n    if (this.isSingular()) {\n      throw new Error('LU matrix is singular');\n    }\n\n    let count = value.columns;\n    let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n    let columns = lu.columns;\n    let i, j, k;\n\n    for (k = 0; k < columns; k++) {\n      for (i = k + 1; i < columns; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    for (k = columns - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / lu.get(k, k));\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n        }\n      }\n    }\n    return X;\n  }\n\n  get determinant() {\n    let data = this.LU;\n    if (!data.isSquare()) {\n      throw new Error('Matrix must be square');\n    }\n    let determinant = this.pivotSign;\n    let col = data.columns;\n    for (let j = 0; j < col; j++) {\n      determinant *= data.get(j, j);\n    }\n    return determinant;\n  }\n\n  get lowerTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i > j) {\n          X.set(i, j, data.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, 1);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get upperTriangularMatrix() {\n    let data = this.LU;\n    let rows = data.rows;\n    let columns = data.columns;\n    let X = new Matrix(rows, columns);\n    for (let i = 0; i < rows; i++) {\n      for (let j = 0; j < columns; j++) {\n        if (i <= j) {\n          X.set(i, j, data.get(i, j));\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get pivotPermutationVector() {\n    return Array.from(this.pivotVector);\n  }\n}\n\nfunction hypotenuse(a, b) {\n  let r = 0;\n  if (Math.abs(a) > Math.abs(b)) {\n    r = b / a;\n    return Math.abs(a) * Math.sqrt(1 + r * r);\n  }\n  if (b !== 0) {\n    r = a / b;\n    return Math.abs(b) * Math.sqrt(1 + r * r);\n  }\n  return 0;\n}\n\nclass QrDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let qr = value.clone();\n    let m = value.rows;\n    let n = value.columns;\n    let rdiag = new Float64Array(n);\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      let nrm = 0;\n      for (i = k; i < m; i++) {\n        nrm = hypotenuse(nrm, qr.get(i, k));\n      }\n      if (nrm !== 0) {\n        if (qr.get(k, k) < 0) {\n          nrm = -nrm;\n        }\n        for (i = k; i < m; i++) {\n          qr.set(i, k, qr.get(i, k) / nrm);\n        }\n        qr.set(k, k, qr.get(k, k) + 1);\n        for (j = k + 1; j < n; j++) {\n          s = 0;\n          for (i = k; i < m; i++) {\n            s += qr.get(i, k) * qr.get(i, j);\n          }\n          s = -s / qr.get(k, k);\n          for (i = k; i < m; i++) {\n            qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n      rdiag[k] = -nrm;\n    }\n\n    this.QR = qr;\n    this.Rdiag = rdiag;\n  }\n\n  solve(value) {\n    value = Matrix.checkMatrix(value);\n\n    let qr = this.QR;\n    let m = qr.rows;\n\n    if (value.rows !== m) {\n      throw new Error('Matrix row dimensions must agree');\n    }\n    if (!this.isFullRank()) {\n      throw new Error('Matrix is rank deficient');\n    }\n\n    let count = value.columns;\n    let X = value.clone();\n    let n = qr.columns;\n    let i, j, k, s;\n\n    for (k = 0; k < n; k++) {\n      for (j = 0; j < count; j++) {\n        s = 0;\n        for (i = k; i < m; i++) {\n          s += qr.get(i, k) * X.get(i, j);\n        }\n        s = -s / qr.get(k, k);\n        for (i = k; i < m; i++) {\n          X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n        }\n      }\n    }\n    for (k = n - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n      }\n      for (i = 0; i < k; i++) {\n        for (j = 0; j < count; j++) {\n          X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n        }\n      }\n    }\n\n    return X.subMatrix(0, n - 1, 0, count - 1);\n  }\n\n  isFullRank() {\n    let columns = this.QR.columns;\n    for (let i = 0; i < columns; i++) {\n      if (this.Rdiag[i] === 0) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  get upperTriangularMatrix() {\n    let qr = this.QR;\n    let n = qr.columns;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        if (i < j) {\n          X.set(i, j, qr.get(i, j));\n        } else if (i === j) {\n          X.set(i, j, this.Rdiag[i]);\n        } else {\n          X.set(i, j, 0);\n        }\n      }\n    }\n    return X;\n  }\n\n  get orthogonalMatrix() {\n    let qr = this.QR;\n    let rows = qr.rows;\n    let columns = qr.columns;\n    let X = new Matrix(rows, columns);\n    let i, j, k, s;\n\n    for (k = columns - 1; k >= 0; k--) {\n      for (i = 0; i < rows; i++) {\n        X.set(i, k, 0);\n      }\n      X.set(k, k, 1);\n      for (j = k; j < columns; j++) {\n        if (qr.get(k, k) !== 0) {\n          s = 0;\n          for (i = k; i < rows; i++) {\n            s += qr.get(i, k) * X.get(i, j);\n          }\n\n          s = -s / qr.get(k, k);\n\n          for (i = k; i < rows; i++) {\n            X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n          }\n        }\n      }\n    }\n    return X;\n  }\n}\n\nclass SingularValueDecomposition {\n  constructor(value, options = {}) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    if (value.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let m = value.rows;\n    let n = value.columns;\n\n    const {\n      computeLeftSingularVectors = true,\n      computeRightSingularVectors = true,\n      autoTranspose = false,\n    } = options;\n\n    let wantu = Boolean(computeLeftSingularVectors);\n    let wantv = Boolean(computeRightSingularVectors);\n\n    let swapped = false;\n    let a;\n    if (m < n) {\n      if (!autoTranspose) {\n        a = value.clone();\n        // eslint-disable-next-line no-console\n        console.warn(\n          'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n        );\n      } else {\n        a = value.transpose();\n        m = a.rows;\n        n = a.columns;\n        swapped = true;\n        let aux = wantu;\n        wantu = wantv;\n        wantv = aux;\n      }\n    } else {\n      a = value.clone();\n    }\n\n    let nu = Math.min(m, n);\n    let ni = Math.min(m + 1, n);\n    let s = new Float64Array(ni);\n    let U = new Matrix(m, nu);\n    let V = new Matrix(n, n);\n\n    let e = new Float64Array(n);\n    let work = new Float64Array(m);\n\n    let si = new Float64Array(ni);\n    for (let i = 0; i < ni; i++) si[i] = i;\n\n    let nct = Math.min(m - 1, n);\n    let nrt = Math.max(0, Math.min(n - 2, m));\n    let mrc = Math.max(nct, nrt);\n\n    for (let k = 0; k < mrc; k++) {\n      if (k < nct) {\n        s[k] = 0;\n        for (let i = k; i < m; i++) {\n          s[k] = hypotenuse(s[k], a.get(i, k));\n        }\n        if (s[k] !== 0) {\n          if (a.get(k, k) < 0) {\n            s[k] = -s[k];\n          }\n          for (let i = k; i < m; i++) {\n            a.set(i, k, a.get(i, k) / s[k]);\n          }\n          a.set(k, k, a.get(k, k) + 1);\n        }\n        s[k] = -s[k];\n      }\n\n      for (let j = k + 1; j < n; j++) {\n        if (k < nct && s[k] !== 0) {\n          let t = 0;\n          for (let i = k; i < m; i++) {\n            t += a.get(i, k) * a.get(i, j);\n          }\n          t = -t / a.get(k, k);\n          for (let i = k; i < m; i++) {\n            a.set(i, j, a.get(i, j) + t * a.get(i, k));\n          }\n        }\n        e[j] = a.get(k, j);\n      }\n\n      if (wantu && k < nct) {\n        for (let i = k; i < m; i++) {\n          U.set(i, k, a.get(i, k));\n        }\n      }\n\n      if (k < nrt) {\n        e[k] = 0;\n        for (let i = k + 1; i < n; i++) {\n          e[k] = hypotenuse(e[k], e[i]);\n        }\n        if (e[k] !== 0) {\n          if (e[k + 1] < 0) {\n            e[k] = 0 - e[k];\n          }\n          for (let i = k + 1; i < n; i++) {\n            e[i] /= e[k];\n          }\n          e[k + 1] += 1;\n        }\n        e[k] = -e[k];\n        if (k + 1 < m && e[k] !== 0) {\n          for (let i = k + 1; i < m; i++) {\n            work[i] = 0;\n          }\n          for (let i = k + 1; i < m; i++) {\n            for (let j = k + 1; j < n; j++) {\n              work[i] += e[j] * a.get(i, j);\n            }\n          }\n          for (let j = k + 1; j < n; j++) {\n            let t = -e[j] / e[k + 1];\n            for (let i = k + 1; i < m; i++) {\n              a.set(i, j, a.get(i, j) + t * work[i]);\n            }\n          }\n        }\n        if (wantv) {\n          for (let i = k + 1; i < n; i++) {\n            V.set(i, k, e[i]);\n          }\n        }\n      }\n    }\n\n    let p = Math.min(n, m + 1);\n    if (nct < n) {\n      s[nct] = a.get(nct, nct);\n    }\n    if (m < p) {\n      s[p - 1] = 0;\n    }\n    if (nrt + 1 < p) {\n      e[nrt] = a.get(nrt, p - 1);\n    }\n    e[p - 1] = 0;\n\n    if (wantu) {\n      for (let j = nct; j < nu; j++) {\n        for (let i = 0; i < m; i++) {\n          U.set(i, j, 0);\n        }\n        U.set(j, j, 1);\n      }\n      for (let k = nct - 1; k >= 0; k--) {\n        if (s[k] !== 0) {\n          for (let j = k + 1; j < nu; j++) {\n            let t = 0;\n            for (let i = k; i < m; i++) {\n              t += U.get(i, k) * U.get(i, j);\n            }\n            t = -t / U.get(k, k);\n            for (let i = k; i < m; i++) {\n              U.set(i, j, U.get(i, j) + t * U.get(i, k));\n            }\n          }\n          for (let i = k; i < m; i++) {\n            U.set(i, k, -U.get(i, k));\n          }\n          U.set(k, k, 1 + U.get(k, k));\n          for (let i = 0; i < k - 1; i++) {\n            U.set(i, k, 0);\n          }\n        } else {\n          for (let i = 0; i < m; i++) {\n            U.set(i, k, 0);\n          }\n          U.set(k, k, 1);\n        }\n      }\n    }\n\n    if (wantv) {\n      for (let k = n - 1; k >= 0; k--) {\n        if (k < nrt && e[k] !== 0) {\n          for (let j = k + 1; j < n; j++) {\n            let t = 0;\n            for (let i = k + 1; i < n; i++) {\n              t += V.get(i, k) * V.get(i, j);\n            }\n            t = -t / V.get(k + 1, k);\n            for (let i = k + 1; i < n; i++) {\n              V.set(i, j, V.get(i, j) + t * V.get(i, k));\n            }\n          }\n        }\n        for (let i = 0; i < n; i++) {\n          V.set(i, k, 0);\n        }\n        V.set(k, k, 1);\n      }\n    }\n\n    let pp = p - 1;\n    let eps = Number.EPSILON;\n    while (p > 0) {\n      let k, kase;\n      for (k = p - 2; k >= -1; k--) {\n        if (k === -1) {\n          break;\n        }\n        const alpha =\n          Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n        if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n          e[k] = 0;\n          break;\n        }\n      }\n      if (k === p - 2) {\n        kase = 4;\n      } else {\n        let ks;\n        for (ks = p - 1; ks >= k; ks--) {\n          if (ks === k) {\n            break;\n          }\n          let t =\n            (ks !== p ? Math.abs(e[ks]) : 0) +\n            (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n          if (Math.abs(s[ks]) <= eps * t) {\n            s[ks] = 0;\n            break;\n          }\n        }\n        if (ks === k) {\n          kase = 3;\n        } else if (ks === p - 1) {\n          kase = 1;\n        } else {\n          kase = 2;\n          k = ks;\n        }\n      }\n\n      k++;\n\n      switch (kase) {\n        case 1: {\n          let f = e[p - 2];\n          e[p - 2] = 0;\n          for (let j = p - 2; j >= k; j--) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            if (j !== k) {\n              f = -sn * e[j - 1];\n              e[j - 1] = cs * e[j - 1];\n            }\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n                V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n                V.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 2: {\n          let f = e[k - 1];\n          e[k - 1] = 0;\n          for (let j = k; j < p; j++) {\n            let t = hypotenuse(s[j], f);\n            let cs = s[j] / t;\n            let sn = f / t;\n            s[j] = t;\n            f = -sn * e[j];\n            e[j] = cs * e[j];\n            if (wantu) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n                U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          break;\n        }\n        case 3: {\n          const scale = Math.max(\n            Math.abs(s[p - 1]),\n            Math.abs(s[p - 2]),\n            Math.abs(e[p - 2]),\n            Math.abs(s[k]),\n            Math.abs(e[k]),\n          );\n          const sp = s[p - 1] / scale;\n          const spm1 = s[p - 2] / scale;\n          const epm1 = e[p - 2] / scale;\n          const sk = s[k] / scale;\n          const ek = e[k] / scale;\n          const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n          const c = sp * epm1 * (sp * epm1);\n          let shift = 0;\n          if (b !== 0 || c !== 0) {\n            if (b < 0) {\n              shift = 0 - Math.sqrt(b * b + c);\n            } else {\n              shift = Math.sqrt(b * b + c);\n            }\n            shift = c / (b + shift);\n          }\n          let f = (sk + sp) * (sk - sp) + shift;\n          let g = sk * ek;\n          for (let j = k; j < p - 1; j++) {\n            let t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            let cs = f / t;\n            let sn = g / t;\n            if (j !== k) {\n              e[j - 1] = t;\n            }\n            f = cs * s[j] + sn * e[j];\n            e[j] = cs * e[j] - sn * s[j];\n            g = sn * s[j + 1];\n            s[j + 1] = cs * s[j + 1];\n            if (wantv) {\n              for (let i = 0; i < n; i++) {\n                t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n                V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n                V.set(i, j, t);\n              }\n            }\n            t = hypotenuse(f, g);\n            if (t === 0) t = Number.MIN_VALUE;\n            cs = f / t;\n            sn = g / t;\n            s[j] = t;\n            f = cs * e[j] + sn * s[j + 1];\n            s[j + 1] = -sn * e[j] + cs * s[j + 1];\n            g = sn * e[j + 1];\n            e[j + 1] = cs * e[j + 1];\n            if (wantu && j < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n                U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n                U.set(i, j, t);\n              }\n            }\n          }\n          e[p - 2] = f;\n          break;\n        }\n        case 4: {\n          if (s[k] <= 0) {\n            s[k] = s[k] < 0 ? -s[k] : 0;\n            if (wantv) {\n              for (let i = 0; i <= pp; i++) {\n                V.set(i, k, -V.get(i, k));\n              }\n            }\n          }\n          while (k < pp) {\n            if (s[k] >= s[k + 1]) {\n              break;\n            }\n            let t = s[k];\n            s[k] = s[k + 1];\n            s[k + 1] = t;\n            if (wantv && k < n - 1) {\n              for (let i = 0; i < n; i++) {\n                t = V.get(i, k + 1);\n                V.set(i, k + 1, V.get(i, k));\n                V.set(i, k, t);\n              }\n            }\n            if (wantu && k < m - 1) {\n              for (let i = 0; i < m; i++) {\n                t = U.get(i, k + 1);\n                U.set(i, k + 1, U.get(i, k));\n                U.set(i, k, t);\n              }\n            }\n            k++;\n          }\n          p--;\n          break;\n        }\n        // no default\n      }\n    }\n\n    if (swapped) {\n      let tmp = V;\n      V = U;\n      U = tmp;\n    }\n\n    this.m = m;\n    this.n = n;\n    this.s = s;\n    this.U = U;\n    this.V = V;\n  }\n\n  solve(value) {\n    let Y = value;\n    let e = this.threshold;\n    let scols = this.s.length;\n    let Ls = Matrix.zeros(scols, scols);\n\n    for (let i = 0; i < scols; i++) {\n      if (Math.abs(this.s[i]) <= e) {\n        Ls.set(i, i, 0);\n      } else {\n        Ls.set(i, i, 1 / this.s[i]);\n      }\n    }\n\n    let U = this.U;\n    let V = this.rightSingularVectors;\n\n    let VL = V.mmul(Ls);\n    let vrows = V.rows;\n    let urows = U.rows;\n    let VLU = Matrix.zeros(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < scols; k++) {\n          sum += VL.get(i, k) * U.get(j, k);\n        }\n        VLU.set(i, j, sum);\n      }\n    }\n\n    return VLU.mmul(Y);\n  }\n\n  solveForDiagonal(value) {\n    return this.solve(Matrix.diag(value));\n  }\n\n  inverse() {\n    let V = this.V;\n    let e = this.threshold;\n    let vrows = V.rows;\n    let vcols = V.columns;\n    let X = new Matrix(vrows, this.s.length);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < vcols; j++) {\n        if (Math.abs(this.s[j]) > e) {\n          X.set(i, j, V.get(i, j) / this.s[j]);\n        }\n      }\n    }\n\n    let U = this.U;\n\n    let urows = U.rows;\n    let ucols = U.columns;\n    let Y = new Matrix(vrows, urows);\n\n    for (let i = 0; i < vrows; i++) {\n      for (let j = 0; j < urows; j++) {\n        let sum = 0;\n        for (let k = 0; k < ucols; k++) {\n          sum += X.get(i, k) * U.get(j, k);\n        }\n        Y.set(i, j, sum);\n      }\n    }\n\n    return Y;\n  }\n\n  get condition() {\n    return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n  }\n\n  get norm2() {\n    return this.s[0];\n  }\n\n  get rank() {\n    let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n    let r = 0;\n    let s = this.s;\n    for (let i = 0, ii = s.length; i < ii; i++) {\n      if (s[i] > tol) {\n        r++;\n      }\n    }\n    return r;\n  }\n\n  get diagonal() {\n    return Array.from(this.s);\n  }\n\n  get threshold() {\n    return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n  }\n\n  get leftSingularVectors() {\n    return this.U;\n  }\n\n  get rightSingularVectors() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    return Matrix.diag(this.s);\n  }\n}\n\nfunction inverse(matrix, useSVD = false) {\n  matrix = WrapperMatrix2D.checkMatrix(matrix);\n  if (useSVD) {\n    return new SingularValueDecomposition(matrix).inverse();\n  } else {\n    return solve(matrix, Matrix.eye(matrix.rows));\n  }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n  leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n  rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n  if (useSVD) {\n    return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n  } else {\n    return leftHandSide.isSquare()\n      ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n      : new QrDecomposition(leftHandSide).solve(rightHandSide);\n  }\n}\n\nfunction determinant(matrix) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isSquare()) {\n    if (matrix.columns === 0) {\n      return 1;\n    }\n\n    let a, b, c, d;\n    if (matrix.columns === 2) {\n      // 2 x 2 matrix\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(1, 0);\n      d = matrix.get(1, 1);\n\n      return a * d - b * c;\n    } else if (matrix.columns === 3) {\n      // 3 x 3 matrix\n      let subMatrix0, subMatrix1, subMatrix2;\n      subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n      subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n      subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n      a = matrix.get(0, 0);\n      b = matrix.get(0, 1);\n      c = matrix.get(0, 2);\n\n      return (\n        a * determinant(subMatrix0) -\n        b * determinant(subMatrix1) +\n        c * determinant(subMatrix2)\n      );\n    } else {\n      // general purpose determinant using the LU decomposition\n      return new LuDecomposition(matrix).determinant;\n    }\n  } else {\n    throw Error('determinant can only be calculated for a square matrix');\n  }\n}\n\nfunction xrange(n, exception) {\n  let range = [];\n  for (let i = 0; i < n; i++) {\n    if (i !== exception) {\n      range.push(i);\n    }\n  }\n  return range;\n}\n\nfunction dependenciesOneRow(\n  error,\n  matrix,\n  index,\n  thresholdValue = 10e-10,\n  thresholdError = 10e-10,\n) {\n  if (error > thresholdError) {\n    return new Array(matrix.rows + 1).fill(0);\n  } else {\n    let returnArray = matrix.addRow(index, [0]);\n    for (let i = 0; i < returnArray.rows; i++) {\n      if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n        returnArray.set(i, 0, 0);\n      }\n    }\n    return returnArray.to1DArray();\n  }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n  const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n  matrix = Matrix.checkMatrix(matrix);\n\n  let n = matrix.rows;\n  let results = new Matrix(n, n);\n\n  for (let i = 0; i < n; i++) {\n    let b = Matrix.columnVector(matrix.getRow(i));\n    let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n    let svd = new SingularValueDecomposition(Abis);\n    let x = svd.solve(b);\n    let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n    results.setRow(\n      i,\n      dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n    );\n  }\n  return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n  matrix = Matrix.checkMatrix(matrix);\n  if (matrix.isEmpty()) {\n    // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n    // (0xn)*(nx0)*(0xn) = 0xn\n    // (nx0)*(0xn)*(nx0) = nx0\n    return matrix.transpose();\n  }\n  let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n  let U = svdSolution.leftSingularVectors;\n  let V = svdSolution.rightSingularVectors;\n  let s = svdSolution.diagonal;\n\n  for (let i = 0; i < s.length; i++) {\n    if (Math.abs(s[i]) > threshold) {\n      s[i] = 1.0 / s[i];\n    } else {\n      s[i] = 0.0;\n    }\n  }\n\n  return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n  const { center = true } = options;\n  if (center) {\n    xMatrix = xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix = yMatrix.center('column');\n    }\n  }\n  const cov = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < cov.rows; i++) {\n    for (let j = 0; j < cov.columns; j++) {\n      cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n    }\n  }\n  return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n  xMatrix = new Matrix(xMatrix);\n  let yIsSame = false;\n  if (\n    typeof yMatrix === 'object' &&\n    !Matrix.isMatrix(yMatrix) &&\n    !isAnyArray.isAnyArray(yMatrix)\n  ) {\n    options = yMatrix;\n    yMatrix = xMatrix;\n    yIsSame = true;\n  } else {\n    yMatrix = new Matrix(yMatrix);\n  }\n  if (xMatrix.rows !== yMatrix.rows) {\n    throw new TypeError('Both matrices must have the same number of rows');\n  }\n\n  const { center = true, scale = true } = options;\n  if (center) {\n    xMatrix.center('column');\n    if (!yIsSame) {\n      yMatrix.center('column');\n    }\n  }\n  if (scale) {\n    xMatrix.scale('column');\n    if (!yIsSame) {\n      yMatrix.scale('column');\n    }\n  }\n\n  const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n  const sdy = yIsSame\n    ? sdx\n    : yMatrix.standardDeviation('column', { unbiased: true });\n\n  const corr = xMatrix.transpose().mmul(yMatrix);\n  for (let i = 0; i < corr.rows; i++) {\n    for (let j = 0; j < corr.columns; j++) {\n      corr.set(\n        i,\n        j,\n        corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n      );\n    }\n  }\n  return corr;\n}\n\nclass EigenvalueDecomposition {\n  constructor(matrix, options = {}) {\n    const { assumeSymmetric = false } = options;\n\n    matrix = WrapperMatrix2D.checkMatrix(matrix);\n    if (!matrix.isSquare()) {\n      throw new Error('Matrix is not a square matrix');\n    }\n\n    if (matrix.isEmpty()) {\n      throw new Error('Matrix must be non-empty');\n    }\n\n    let n = matrix.columns;\n    let V = new Matrix(n, n);\n    let d = new Float64Array(n);\n    let e = new Float64Array(n);\n    let value = matrix;\n    let i, j;\n\n    let isSymmetric = false;\n    if (assumeSymmetric) {\n      isSymmetric = true;\n    } else {\n      isSymmetric = matrix.isSymmetric();\n    }\n\n    if (isSymmetric) {\n      for (i = 0; i < n; i++) {\n        for (j = 0; j < n; j++) {\n          V.set(i, j, value.get(i, j));\n        }\n      }\n      tred2(n, e, d, V);\n      tql2(n, e, d, V);\n    } else {\n      let H = new Matrix(n, n);\n      let ort = new Float64Array(n);\n      for (j = 0; j < n; j++) {\n        for (i = 0; i < n; i++) {\n          H.set(i, j, value.get(i, j));\n        }\n      }\n      orthes(n, H, ort, V);\n      hqr2(n, e, d, V, H);\n    }\n\n    this.n = n;\n    this.e = e;\n    this.d = d;\n    this.V = V;\n  }\n\n  get realEigenvalues() {\n    return Array.from(this.d);\n  }\n\n  get imaginaryEigenvalues() {\n    return Array.from(this.e);\n  }\n\n  get eigenvectorMatrix() {\n    return this.V;\n  }\n\n  get diagonalMatrix() {\n    let n = this.n;\n    let e = this.e;\n    let d = this.d;\n    let X = new Matrix(n, n);\n    let i, j;\n    for (i = 0; i < n; i++) {\n      for (j = 0; j < n; j++) {\n        X.set(i, j, 0);\n      }\n      X.set(i, i, d[i]);\n      if (e[i] > 0) {\n        X.set(i, i + 1, e[i]);\n      } else if (e[i] < 0) {\n        X.set(i, i - 1, e[i]);\n      }\n    }\n    return X;\n  }\n}\n\nfunction tred2(n, e, d, V) {\n  let f, g, h, i, j, k, hh, scale;\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n  }\n\n  for (i = n - 1; i > 0; i--) {\n    scale = 0;\n    h = 0;\n    for (k = 0; k < i; k++) {\n      scale = scale + Math.abs(d[k]);\n    }\n\n    if (scale === 0) {\n      e[i] = d[i - 1];\n      for (j = 0; j < i; j++) {\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n        V.set(j, i, 0);\n      }\n    } else {\n      for (k = 0; k < i; k++) {\n        d[k] /= scale;\n        h += d[k] * d[k];\n      }\n\n      f = d[i - 1];\n      g = Math.sqrt(h);\n      if (f > 0) {\n        g = -g;\n      }\n\n      e[i] = scale * g;\n      h = h - f * g;\n      d[i - 1] = f - g;\n      for (j = 0; j < i; j++) {\n        e[j] = 0;\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        V.set(j, i, f);\n        g = e[j] + V.get(j, j) * f;\n        for (k = j + 1; k <= i - 1; k++) {\n          g += V.get(k, j) * d[k];\n          e[k] += V.get(k, j) * f;\n        }\n        e[j] = g;\n      }\n\n      f = 0;\n      for (j = 0; j < i; j++) {\n        e[j] /= h;\n        f += e[j] * d[j];\n      }\n\n      hh = f / (h + h);\n      for (j = 0; j < i; j++) {\n        e[j] -= hh * d[j];\n      }\n\n      for (j = 0; j < i; j++) {\n        f = d[j];\n        g = e[j];\n        for (k = j; k <= i - 1; k++) {\n          V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n        }\n        d[j] = V.get(i - 1, j);\n        V.set(i, j, 0);\n      }\n    }\n    d[i] = h;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    V.set(n - 1, i, V.get(i, i));\n    V.set(i, i, 1);\n    h = d[i + 1];\n    if (h !== 0) {\n      for (k = 0; k <= i; k++) {\n        d[k] = V.get(k, i + 1) / h;\n      }\n\n      for (j = 0; j <= i; j++) {\n        g = 0;\n        for (k = 0; k <= i; k++) {\n          g += V.get(k, i + 1) * V.get(k, j);\n        }\n        for (k = 0; k <= i; k++) {\n          V.set(k, j, V.get(k, j) - g * d[k]);\n        }\n      }\n    }\n\n    for (k = 0; k <= i; k++) {\n      V.set(k, i + 1, 0);\n    }\n  }\n\n  for (j = 0; j < n; j++) {\n    d[j] = V.get(n - 1, j);\n    V.set(n - 1, j, 0);\n  }\n\n  V.set(n - 1, n - 1, 1);\n  e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n  let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n  for (i = 1; i < n; i++) {\n    e[i - 1] = e[i];\n  }\n\n  e[n - 1] = 0;\n\n  let f = 0;\n  let tst1 = 0;\n  let eps = Number.EPSILON;\n\n  for (l = 0; l < n; l++) {\n    tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n    m = l;\n    while (m < n) {\n      if (Math.abs(e[m]) <= eps * tst1) {\n        break;\n      }\n      m++;\n    }\n\n    if (m > l) {\n      do {\n\n        g = d[l];\n        p = (d[l + 1] - g) / (2 * e[l]);\n        r = hypotenuse(p, 1);\n        if (p < 0) {\n          r = -r;\n        }\n\n        d[l] = e[l] / (p + r);\n        d[l + 1] = e[l] * (p + r);\n        dl1 = d[l + 1];\n        h = g - d[l];\n        for (i = l + 2; i < n; i++) {\n          d[i] -= h;\n        }\n\n        f = f + h;\n\n        p = d[m];\n        c = 1;\n        c2 = c;\n        c3 = c;\n        el1 = e[l + 1];\n        s = 0;\n        s2 = 0;\n        for (i = m - 1; i >= l; i--) {\n          c3 = c2;\n          c2 = c;\n          s2 = s;\n          g = c * e[i];\n          h = c * p;\n          r = hypotenuse(p, e[i]);\n          e[i + 1] = s * r;\n          s = e[i] / r;\n          c = p / r;\n          p = c * d[i] - s * g;\n          d[i + 1] = h + s * (c * g + s * d[i]);\n\n          for (k = 0; k < n; k++) {\n            h = V.get(k, i + 1);\n            V.set(k, i + 1, s * V.get(k, i) + c * h);\n            V.set(k, i, c * V.get(k, i) - s * h);\n          }\n        }\n\n        p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n        e[l] = s * p;\n        d[l] = c * p;\n      } while (Math.abs(e[l]) > eps * tst1);\n    }\n    d[l] = d[l] + f;\n    e[l] = 0;\n  }\n\n  for (i = 0; i < n - 1; i++) {\n    k = i;\n    p = d[i];\n    for (j = i + 1; j < n; j++) {\n      if (d[j] < p) {\n        k = j;\n        p = d[j];\n      }\n    }\n\n    if (k !== i) {\n      d[k] = d[i];\n      d[i] = p;\n      for (j = 0; j < n; j++) {\n        p = V.get(j, i);\n        V.set(j, i, V.get(j, k));\n        V.set(j, k, p);\n      }\n    }\n  }\n}\n\nfunction orthes(n, H, ort, V) {\n  let low = 0;\n  let high = n - 1;\n  let f, g, h, i, j, m;\n  let scale;\n\n  for (m = low + 1; m <= high - 1; m++) {\n    scale = 0;\n    for (i = m; i <= high; i++) {\n      scale = scale + Math.abs(H.get(i, m - 1));\n    }\n\n    if (scale !== 0) {\n      h = 0;\n      for (i = high; i >= m; i--) {\n        ort[i] = H.get(i, m - 1) / scale;\n        h += ort[i] * ort[i];\n      }\n\n      g = Math.sqrt(h);\n      if (ort[m] > 0) {\n        g = -g;\n      }\n\n      h = h - ort[m] * g;\n      ort[m] = ort[m] - g;\n\n      for (j = m; j < n; j++) {\n        f = 0;\n        for (i = high; i >= m; i--) {\n          f += ort[i] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (i = m; i <= high; i++) {\n          H.set(i, j, H.get(i, j) - f * ort[i]);\n        }\n      }\n\n      for (i = 0; i <= high; i++) {\n        f = 0;\n        for (j = high; j >= m; j--) {\n          f += ort[j] * H.get(i, j);\n        }\n\n        f = f / h;\n        for (j = m; j <= high; j++) {\n          H.set(i, j, H.get(i, j) - f * ort[j]);\n        }\n      }\n\n      ort[m] = scale * ort[m];\n      H.set(m, m - 1, scale * g);\n    }\n  }\n\n  for (i = 0; i < n; i++) {\n    for (j = 0; j < n; j++) {\n      V.set(i, j, i === j ? 1 : 0);\n    }\n  }\n\n  for (m = high - 1; m >= low + 1; m--) {\n    if (H.get(m, m - 1) !== 0) {\n      for (i = m + 1; i <= high; i++) {\n        ort[i] = H.get(i, m - 1);\n      }\n\n      for (j = m; j <= high; j++) {\n        g = 0;\n        for (i = m; i <= high; i++) {\n          g += ort[i] * V.get(i, j);\n        }\n\n        g = g / ort[m] / H.get(m, m - 1);\n        for (i = m; i <= high; i++) {\n          V.set(i, j, V.get(i, j) + g * ort[i]);\n        }\n      }\n    }\n  }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n  let n = nn - 1;\n  let low = 0;\n  let high = nn - 1;\n  let eps = Number.EPSILON;\n  let exshift = 0;\n  let norm = 0;\n  let p = 0;\n  let q = 0;\n  let r = 0;\n  let s = 0;\n  let z = 0;\n  let iter = 0;\n  let i, j, k, l, m, t, w, x, y;\n  let ra, sa, vr, vi;\n  let notlast, cdivres;\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      d[i] = H.get(i, i);\n      e[i] = 0;\n    }\n\n    for (j = Math.max(i - 1, 0); j < nn; j++) {\n      norm = norm + Math.abs(H.get(i, j));\n    }\n  }\n\n  while (n >= low) {\n    l = n;\n    while (l > low) {\n      s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n      if (s === 0) {\n        s = norm;\n      }\n      if (Math.abs(H.get(l, l - 1)) < eps * s) {\n        break;\n      }\n      l--;\n    }\n\n    if (l === n) {\n      H.set(n, n, H.get(n, n) + exshift);\n      d[n] = H.get(n, n);\n      e[n] = 0;\n      n--;\n      iter = 0;\n    } else if (l === n - 1) {\n      w = H.get(n, n - 1) * H.get(n - 1, n);\n      p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n      q = p * p + w;\n      z = Math.sqrt(Math.abs(q));\n      H.set(n, n, H.get(n, n) + exshift);\n      H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n      x = H.get(n, n);\n\n      if (q >= 0) {\n        z = p >= 0 ? p + z : p - z;\n        d[n - 1] = x + z;\n        d[n] = d[n - 1];\n        if (z !== 0) {\n          d[n] = x - w / z;\n        }\n        e[n - 1] = 0;\n        e[n] = 0;\n        x = H.get(n, n - 1);\n        s = Math.abs(x) + Math.abs(z);\n        p = x / s;\n        q = z / s;\n        r = Math.sqrt(p * p + q * q);\n        p = p / r;\n        q = q / r;\n\n        for (j = n - 1; j < nn; j++) {\n          z = H.get(n - 1, j);\n          H.set(n - 1, j, q * z + p * H.get(n, j));\n          H.set(n, j, q * H.get(n, j) - p * z);\n        }\n\n        for (i = 0; i <= n; i++) {\n          z = H.get(i, n - 1);\n          H.set(i, n - 1, q * z + p * H.get(i, n));\n          H.set(i, n, q * H.get(i, n) - p * z);\n        }\n\n        for (i = low; i <= high; i++) {\n          z = V.get(i, n - 1);\n          V.set(i, n - 1, q * z + p * V.get(i, n));\n          V.set(i, n, q * V.get(i, n) - p * z);\n        }\n      } else {\n        d[n - 1] = x + p;\n        d[n] = x + p;\n        e[n - 1] = z;\n        e[n] = -z;\n      }\n\n      n = n - 2;\n      iter = 0;\n    } else {\n      x = H.get(n, n);\n      y = 0;\n      w = 0;\n      if (l < n) {\n        y = H.get(n - 1, n - 1);\n        w = H.get(n, n - 1) * H.get(n - 1, n);\n      }\n\n      if (iter === 10) {\n        exshift += x;\n        for (i = low; i <= n; i++) {\n          H.set(i, i, H.get(i, i) - x);\n        }\n        s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n        // eslint-disable-next-line no-multi-assign\n        x = y = 0.75 * s;\n        w = -0.4375 * s * s;\n      }\n\n      if (iter === 30) {\n        s = (y - x) / 2;\n        s = s * s + w;\n        if (s > 0) {\n          s = Math.sqrt(s);\n          if (y < x) {\n            s = -s;\n          }\n          s = x - w / ((y - x) / 2 + s);\n          for (i = low; i <= n; i++) {\n            H.set(i, i, H.get(i, i) - s);\n          }\n          exshift += s;\n          // eslint-disable-next-line no-multi-assign\n          x = y = w = 0.964;\n        }\n      }\n\n      iter = iter + 1;\n\n      m = n - 2;\n      while (m >= l) {\n        z = H.get(m, m);\n        r = x - z;\n        s = y - z;\n        p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n        q = H.get(m + 1, m + 1) - z - r - s;\n        r = H.get(m + 2, m + 1);\n        s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n        p = p / s;\n        q = q / s;\n        r = r / s;\n        if (m === l) {\n          break;\n        }\n        if (\n          Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n          eps *\n            (Math.abs(p) *\n              (Math.abs(H.get(m - 1, m - 1)) +\n                Math.abs(z) +\n                Math.abs(H.get(m + 1, m + 1))))\n        ) {\n          break;\n        }\n        m--;\n      }\n\n      for (i = m + 2; i <= n; i++) {\n        H.set(i, i - 2, 0);\n        if (i > m + 2) {\n          H.set(i, i - 3, 0);\n        }\n      }\n\n      for (k = m; k <= n - 1; k++) {\n        notlast = k !== n - 1;\n        if (k !== m) {\n          p = H.get(k, k - 1);\n          q = H.get(k + 1, k - 1);\n          r = notlast ? H.get(k + 2, k - 1) : 0;\n          x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n          if (x !== 0) {\n            p = p / x;\n            q = q / x;\n            r = r / x;\n          }\n        }\n\n        if (x === 0) {\n          break;\n        }\n\n        s = Math.sqrt(p * p + q * q + r * r);\n        if (p < 0) {\n          s = -s;\n        }\n\n        if (s !== 0) {\n          if (k !== m) {\n            H.set(k, k - 1, -s * x);\n          } else if (l !== m) {\n            H.set(k, k - 1, -H.get(k, k - 1));\n          }\n\n          p = p + s;\n          x = p / s;\n          y = q / s;\n          z = r / s;\n          q = q / p;\n          r = r / p;\n\n          for (j = k; j < nn; j++) {\n            p = H.get(k, j) + q * H.get(k + 1, j);\n            if (notlast) {\n              p = p + r * H.get(k + 2, j);\n              H.set(k + 2, j, H.get(k + 2, j) - p * z);\n            }\n\n            H.set(k, j, H.get(k, j) - p * x);\n            H.set(k + 1, j, H.get(k + 1, j) - p * y);\n          }\n\n          for (i = 0; i <= Math.min(n, k + 3); i++) {\n            p = x * H.get(i, k) + y * H.get(i, k + 1);\n            if (notlast) {\n              p = p + z * H.get(i, k + 2);\n              H.set(i, k + 2, H.get(i, k + 2) - p * r);\n            }\n\n            H.set(i, k, H.get(i, k) - p);\n            H.set(i, k + 1, H.get(i, k + 1) - p * q);\n          }\n\n          for (i = low; i <= high; i++) {\n            p = x * V.get(i, k) + y * V.get(i, k + 1);\n            if (notlast) {\n              p = p + z * V.get(i, k + 2);\n              V.set(i, k + 2, V.get(i, k + 2) - p * r);\n            }\n\n            V.set(i, k, V.get(i, k) - p);\n            V.set(i, k + 1, V.get(i, k + 1) - p * q);\n          }\n        }\n      }\n    }\n  }\n\n  if (norm === 0) {\n    return;\n  }\n\n  for (n = nn - 1; n >= 0; n--) {\n    p = d[n];\n    q = e[n];\n\n    if (q === 0) {\n      l = n;\n      H.set(n, n, 1);\n      for (i = n - 1; i >= 0; i--) {\n        w = H.get(i, i) - p;\n        r = 0;\n        for (j = l; j <= n; j++) {\n          r = r + H.get(i, j) * H.get(j, n);\n        }\n\n        if (e[i] < 0) {\n          z = w;\n          s = r;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n            t = (x * s - z * r) / q;\n            H.set(i, n, t);\n            H.set(\n              i + 1,\n              n,\n              Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n            );\n          }\n\n          t = Math.abs(H.get(i, n));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    } else if (q < 0) {\n      l = n - 1;\n\n      if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n        H.set(n - 1, n - 1, q / H.get(n, n - 1));\n        H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n      } else {\n        cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n        H.set(n - 1, n - 1, cdivres[0]);\n        H.set(n - 1, n, cdivres[1]);\n      }\n\n      H.set(n, n - 1, 0);\n      H.set(n, n, 1);\n      for (i = n - 2; i >= 0; i--) {\n        ra = 0;\n        sa = 0;\n        for (j = l; j <= n; j++) {\n          ra = ra + H.get(i, j) * H.get(j, n - 1);\n          sa = sa + H.get(i, j) * H.get(j, n);\n        }\n\n        w = H.get(i, i) - p;\n\n        if (e[i] < 0) {\n          z = w;\n          r = ra;\n          s = sa;\n        } else {\n          l = i;\n          if (e[i] === 0) {\n            cdivres = cdiv(-ra, -sa, w, q);\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n          } else {\n            x = H.get(i, i + 1);\n            y = H.get(i + 1, i);\n            vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n            vi = (d[i] - p) * 2 * q;\n            if (vr === 0 && vi === 0) {\n              vr =\n                eps *\n                norm *\n                (Math.abs(w) +\n                  Math.abs(q) +\n                  Math.abs(x) +\n                  Math.abs(y) +\n                  Math.abs(z));\n            }\n            cdivres = cdiv(\n              x * r - z * ra + q * sa,\n              x * s - z * sa - q * ra,\n              vr,\n              vi,\n            );\n            H.set(i, n - 1, cdivres[0]);\n            H.set(i, n, cdivres[1]);\n            if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n              H.set(\n                i + 1,\n                n - 1,\n                (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n              );\n              H.set(\n                i + 1,\n                n,\n                (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n              );\n            } else {\n              cdivres = cdiv(\n                -r - y * H.get(i, n - 1),\n                -s - y * H.get(i, n),\n                z,\n                q,\n              );\n              H.set(i + 1, n - 1, cdivres[0]);\n              H.set(i + 1, n, cdivres[1]);\n            }\n          }\n\n          t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n          if (eps * t * t > 1) {\n            for (j = i; j <= n; j++) {\n              H.set(j, n - 1, H.get(j, n - 1) / t);\n              H.set(j, n, H.get(j, n) / t);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  for (i = 0; i < nn; i++) {\n    if (i < low || i > high) {\n      for (j = i; j < nn; j++) {\n        V.set(i, j, H.get(i, j));\n      }\n    }\n  }\n\n  for (j = nn - 1; j >= low; j--) {\n    for (i = low; i <= high; i++) {\n      z = 0;\n      for (k = low; k <= Math.min(j, high); k++) {\n        z = z + V.get(i, k) * H.get(k, j);\n      }\n      V.set(i, j, z);\n    }\n  }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n  let r, d;\n  if (Math.abs(yr) > Math.abs(yi)) {\n    r = yi / yr;\n    d = yr + r * yi;\n    return [(xr + r * xi) / d, (xi - r * xr) / d];\n  } else {\n    r = yr / yi;\n    d = yi + r * yr;\n    return [(r * xr + xi) / d, (r * xi - xr) / d];\n  }\n}\n\nclass CholeskyDecomposition {\n  constructor(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n    if (!value.isSymmetric()) {\n      throw new Error('Matrix is not symmetric');\n    }\n\n    let a = value;\n    let dimension = a.rows;\n    let l = new Matrix(dimension, dimension);\n    let positiveDefinite = true;\n    let i, j, k;\n\n    for (j = 0; j < dimension; j++) {\n      let d = 0;\n      for (k = 0; k < j; k++) {\n        let s = 0;\n        for (i = 0; i < k; i++) {\n          s += l.get(k, i) * l.get(j, i);\n        }\n        s = (a.get(j, k) - s) / l.get(k, k);\n        l.set(j, k, s);\n        d = d + s * s;\n      }\n\n      d = a.get(j, j) - d;\n\n      positiveDefinite &&= d > 0;\n      l.set(j, j, Math.sqrt(Math.max(d, 0)));\n      for (k = j + 1; k < dimension; k++) {\n        l.set(j, k, 0);\n      }\n    }\n\n    this.L = l;\n    this.positiveDefinite = positiveDefinite;\n  }\n\n  isPositiveDefinite() {\n    return this.positiveDefinite;\n  }\n\n  solve(value) {\n    value = WrapperMatrix2D.checkMatrix(value);\n\n    let l = this.L;\n    let dimension = l.rows;\n\n    if (value.rows !== dimension) {\n      throw new Error('Matrix dimensions do not match');\n    }\n    if (this.isPositiveDefinite() === false) {\n      throw new Error('Matrix is not positive definite');\n    }\n\n    let count = value.columns;\n    let B = value.clone();\n    let i, j, k;\n\n    for (k = 0; k < dimension; k++) {\n      for (j = 0; j < count; j++) {\n        for (i = 0; i < k; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    for (k = dimension - 1; k >= 0; k--) {\n      for (j = 0; j < count; j++) {\n        for (i = k + 1; i < dimension; i++) {\n          B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n        }\n        B.set(k, j, B.get(k, j) / l.get(k, k));\n      }\n    }\n\n    return B;\n  }\n\n  get lowerTriangularMatrix() {\n    return this.L;\n  }\n}\n\nclass nipals {\n  constructor(X, options = {}) {\n    X = WrapperMatrix2D.checkMatrix(X);\n    let { Y } = options;\n    const {\n      scaleScores = false,\n      maxIterations = 1000,\n      terminationCriteria = 1e-10,\n    } = options;\n\n    let u;\n    if (Y) {\n      if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n        Y = Matrix.columnVector(Y);\n      } else {\n        Y = WrapperMatrix2D.checkMatrix(Y);\n      }\n      if (Y.rows !== X.rows) {\n        throw new Error('Y should have the same number of rows as X');\n      }\n      u = Y.getColumnVector(0);\n    } else {\n      u = X.getColumnVector(0);\n    }\n\n    let diff = 1;\n    let t, q, w, tOld;\n\n    for (\n      let counter = 0;\n      counter < maxIterations && diff > terminationCriteria;\n      counter++\n    ) {\n      w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n      w = w.div(w.norm());\n\n      t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n      if (counter > 0) {\n        diff = t.clone().sub(tOld).pow(2).sum();\n      }\n      tOld = t.clone();\n\n      if (Y) {\n        q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n        q = q.div(q.norm());\n\n        u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n      } else {\n        u = t;\n      }\n    }\n\n    if (Y) {\n      let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      p = p.div(p.norm());\n      let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n      let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n      let yResidual = Y.clone().sub(\n        t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n      );\n\n      this.t = t;\n      this.p = p.transpose();\n      this.w = w.transpose();\n      this.q = q;\n      this.u = u;\n      this.s = t.transpose().mmul(t);\n      this.xResidual = xResidual;\n      this.yResidual = yResidual;\n      this.betas = residual;\n    } else {\n      this.w = w.transpose();\n      this.s = t.transpose().mmul(t).sqrt();\n      if (scaleScores) {\n        this.t = t.clone().div(this.s.get(0, 0));\n      } else {\n        this.t = t;\n      }\n      this.xResidual = X.sub(t.mmul(w.transpose()));\n    }\n  }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n","import { Matrix } from 'ml-matrix';\n/**\n * Algorithm that finds the shortest distance from one node to the other\n * @param {Matrix} adjMatrix - A squared adjacency matrix\n * @return {Matrix} - Distance from a node to the other, -1 if the node is unreachable\n */\nexport function floydWarshall(adjMatrix) {\n    if (Matrix.isMatrix(adjMatrix) && adjMatrix.columns !== adjMatrix.rows) {\n        throw new TypeError('The adjacency matrix should be squared');\n    }\n    const numVertices = adjMatrix.columns;\n    let distMatrix = new Matrix(numVertices, numVertices);\n    distMatrix.apply((row, column) => {\n        // principal diagonal is 0\n        if (row === column) {\n            distMatrix.set(row, column, 0);\n        }\n        else {\n            let val = adjMatrix.get(row, column);\n            if (val || Object.is(val, -0)) {\n                // edges values remain the same\n                distMatrix.set(row, column, val);\n            }\n            else {\n                // 0 values become infinity\n                distMatrix.set(row, column, Number.POSITIVE_INFINITY);\n            }\n        }\n    });\n    for (let k = 0; k < numVertices; ++k) {\n        for (let i = 0; i < numVertices; ++i) {\n            for (let j = 0; j < numVertices; ++j) {\n                let dist = distMatrix.get(i, k) + distMatrix.get(k, j);\n                if (distMatrix.get(i, j) > dist) {\n                    distMatrix.set(i, j, dist);\n                }\n            }\n        }\n    }\n    // When there's no connection the value is -1\n    distMatrix.apply((row, column) => {\n        if (distMatrix.get(row, column) === Number.POSITIVE_INFINITY) {\n            distMatrix.set(row, column, -1);\n        }\n    });\n    return distMatrix;\n}\n//# sourceMappingURL=index.js.map","import { floydWarshall } from 'ml-floyd-warshall';\nimport { Matrix } from 'ml-matrix';\n/**\n * Returns a connectivity matrix\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {boolean} [options.pathLength=false] - get the path length between atoms\n * @param {boolean} [options.mass=false] - set the nominal mass of the atoms on diagonal\n * @param {boolean} [options.atomicNo=false] - set the atomic number of the atom on diagonal\n * @param {boolean} [options.negativeAtomicNo=false] - set the atomic number * -1 of the atom on diagonal\n * @param {boolean} [options.sdt=false] - set 1, 2 or 3 depending if single, double or triple bond\n * @param {boolean} [options.sdta=false] - set 1, 2, 3 or 4 depending if single, double, triple or aromatic  bond\n */\nexport function getConnectivityMatrix(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    const nbAtoms = molecule.getAllAtoms();\n    let result = new Array(nbAtoms).fill();\n    result = result.map(() => new Array(nbAtoms).fill(0));\n    if (!options.pathLength) {\n        if (options.atomicNo) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = molecule.getAtomicNo(i);\n            }\n        }\n        else if (options.negativeAtomicNo) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = -molecule.getAtomicNo(i);\n            }\n        }\n        else if (options.mass) {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = OCL.Molecule.cRoundedMass[molecule.getAtomicNo(i)];\n            }\n        }\n        else {\n            for (let i = 0; i < nbAtoms; i++) {\n                result[i][i] = 1;\n            }\n        }\n    }\n    if (options.sdt) {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                result[i][molecule.getConnAtom(i, j)] = molecule.getConnBondOrder(i, j);\n            }\n        }\n    }\n    else if (options.sdta) {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                const bondNumber = molecule.getConnBond(i, j);\n                if (molecule.isAromaticBond(bondNumber)) {\n                    result[i][molecule.getConnAtom(i, j)] = 4;\n                }\n                else {\n                    result[i][molecule.getConnAtom(i, j)] = molecule.getConnBondOrder(i, j);\n                }\n            }\n        }\n    }\n    else {\n        for (let i = 0; i < nbAtoms; i++) {\n            const l = molecule.getAllConnAtoms(i);\n            for (let j = 0; j < l; j++) {\n                result[i][molecule.getConnAtom(i, j)] = 1;\n            }\n        }\n    }\n    if (options.pathLength) {\n        result = floydWarshall(new Matrix(result)).to2DArray();\n    }\n    return result;\n}\n//# sourceMappingURL=getConnectivityMatrix.js.map","import { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from '../util/tagAtom.js';\nexport function getCanonizedDiaIDs(diaMol, options) {\n    const { logger, maxNbAtoms } = options;\n    const moleculeWithH = diaMol.moleculeWithH;\n    if (moleculeWithH.getAllAtoms() > maxNbAtoms) {\n        logger.warn(`too many atoms to evaluate heterotopic chiral bonds: ${moleculeWithH.getAllAtoms()} > ${maxNbAtoms}`);\n        return [];\n    }\n    const heterotopicSymmetryRanks = diaMol.heterotopicSymmetryRanks;\n    const finalRanks = diaMol.finalRanks;\n    const canonizedDiaIDs = new Array(moleculeWithH.getAllAtoms());\n    moleculeWithH.ensureHelperArrays(diaMol.molecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    const cache = {};\n    for (let i = 0; i < diaMol.moleculeWithH.getAllAtoms(); i++) {\n        const rank = heterotopicSymmetryRanks[i];\n        if (rank && cache[rank]) {\n            canonizedDiaIDs[finalRanks[i]] = cache[rank].diaID;\n            continue;\n        }\n        const tempMolecule = diaMol.moleculeWithH.getCompactCopy();\n        tagAtom(tempMolecule, i);\n        makeRacemic(tempMolecule);\n        const diaID = tempMolecule.getCanonizedIDCode(diaMol.molecule.getOCL().Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        canonizedDiaIDs[finalRanks[i]] = diaID;\n    }\n    return canonizedDiaIDs;\n}\n//# sourceMappingURL=getCanonizedDiaIDs.js.map","import { getHoseCodesForAtomsInternal } from '../hose/getHoseCodesForAtomsInternal.js';\nimport { tagAtom } from '../util/tagAtom.js';\nexport function getCanonizedHoseCodes(topicMolecule) {\n    const options = topicMolecule.options;\n    const heterotopicSymmetryRanks = topicMolecule.heterotopicSymmetryRanks;\n    const moleculeWithH = topicMolecule.moleculeWithH;\n    const finalRanks = topicMolecule.finalRanks;\n    const canonizedHoseCodes = new Array(moleculeWithH.getAllAtoms());\n    moleculeWithH.ensureHelperArrays(topicMolecule.molecule.getOCL().Molecule\n        .cHelperSymmetryStereoHeterotopicity);\n    const cache = {};\n    for (let i = 0; i < topicMolecule.moleculeWithH.getAllAtoms(); i++) {\n        const rank = heterotopicSymmetryRanks[i];\n        if (rank && cache[rank]) {\n            canonizedHoseCodes[finalRanks[i]] = cache[rank].diaID;\n            continue;\n        }\n        const tempMolecule = topicMolecule.moleculeWithH.getCompactCopy();\n        tagAtom(tempMolecule, i);\n        const hoses = getHoseCodesForAtomsInternal(tempMolecule, options);\n        canonizedHoseCodes[finalRanks[i]] = hoses;\n    }\n    return canonizedHoseCodes;\n}\n//# sourceMappingURL=getCanonizedHoseCodes.js.map","export function getDiaIDsAndInfo(diaMol, canonizedDiaIDs) {\n    const newDiaIDs = [];\n    const molecule = diaMol.moleculeWithH;\n    const counts = {};\n    for (const diaID of canonizedDiaIDs) {\n        if (!counts[diaID]) {\n            counts[diaID] = 0;\n        }\n        counts[diaID]++;\n    }\n    for (let i = 0; i < canonizedDiaIDs.length; i++) {\n        const diaID = canonizedDiaIDs[diaMol.finalRanks[i]];\n        const newDiaID = {\n            idCode: diaID,\n            attachedHydrogensIDCodes: [],\n            attachedHydrogens: [],\n            nbAttachedHydrogens: 0,\n            atomLabel: molecule.getAtomLabel(i),\n            nbEquivalentAtoms: counts[diaID],\n            heavyAtom: undefined,\n            atomMapNo: molecule.getAtomMapNo(i),\n        };\n        if (molecule.getAtomicNo(i) === 1) {\n            const atom = molecule.getConnAtom(i, 0);\n            newDiaID.heavyAtom = canonizedDiaIDs[diaMol.finalRanks[atom]];\n        }\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const atom = molecule.getConnAtom(i, j);\n            if (molecule.getAtomicNo(atom) === 1) {\n                newDiaID.nbAttachedHydrogens++;\n                newDiaID.attachedHydrogens.push(atom);\n                const hydrogenDiaID = canonizedDiaIDs[diaMol.finalRanks[atom]];\n                if (!newDiaID.attachedHydrogensIDCodes.includes(hydrogenDiaID)) {\n                    newDiaID.attachedHydrogensIDCodes.push(hydrogenDiaID);\n                }\n            }\n        }\n        newDiaIDs.push(newDiaID);\n    }\n    return newDiaIDs;\n}\n//# sourceMappingURL=getDiaIDsAndInfo.js.map","/**\n * Get a unique atomic number for a X\n * @param xMolecule\n * @returns\n */\nexport function getHeterotopicSymmetryRanks(xMolecule) {\n    xMolecule.ensureHelperArrays(xMolecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    const symmetryRanks = [];\n    for (let i = 0; i < xMolecule.getAllAtoms(); i++) {\n        symmetryRanks.push(xMolecule.getSymmetryRank(i));\n    }\n    return symmetryRanks;\n}\nexport function getFinalRanks(xMolecule) {\n    xMolecule.ensureHelperArrays(xMolecule.getOCL().Molecule.cHelperSymmetryStereoHeterotopicity);\n    return xMolecule.getFinalRanks(0).map((rank) => rank - 1);\n}\n//# sourceMappingURL=getHeterotopicSymmetryRanks.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\n/**\n * Returns the atoms that are chiral or pseudo chiral.\n * There could be some issues if the original molecule lacks chiral bonds.\n * The function will add them and this could lead to some issues in the case of pseudochiral atoms.\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number[]}\n */\nexport function getChiralOrHeterotopicCarbons(molecule) {\n    const { Molecule } = molecule.getOCL();\n    const xAtomicNumber = getXAtomicNumber(molecule);\n    const internalMolecule = molecule.getCompactCopy();\n    // hydrogens may be diastereotopic, we need to add them\n    internalMolecule.addImplicitHydrogens();\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (internalMolecule.getAtomicNo(i) === 1) {\n            internalMolecule.setAtomicNo(i, xAtomicNumber);\n        }\n    }\n    addPossibleChiralBonds(internalMolecule);\n    internalMolecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (internalMolecule.getAtomicNo(i) === xAtomicNumber) {\n            continue;\n        }\n        if (molecule.getAtomicNo(i) !== internalMolecule.getAtomicNo(i)) {\n            throw new Error('getChiralOrHeterotopicCarbons: mismatching atomic numbers');\n        }\n        if (internalMolecule.getAtomicNo(i) !== 6) {\n            continue;\n        }\n        const neighbourSymmetries = getNeighbourSymmetries(internalMolecule, i);\n        if (neighbourSymmetries.length === 4) {\n            atoms.push(i);\n        }\n    }\n    return atoms;\n}\nfunction addPossibleChiralBonds(molecule) {\n    const { Molecule } = molecule.getOCL();\n    molecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    for (let i = 0; i < molecule.getAtoms(); i++) {\n        if (molecule.getAtomicNo(i) !== 6)\n            continue;\n        if (molecule.getStereoBond(i) >= 0)\n            continue;\n        const neighbourSymmetries = getNeighbourSymmetries(molecule, i);\n        if (neighbourSymmetries.length <= 2)\n            continue;\n        const stereoBond = molecule.getAtomPreferredStereoBond(i);\n        if (stereoBond !== -1) {\n            molecule.setBondType(stereoBond, Molecule.cBondTypeUp);\n            if (molecule.getBondAtom(1, stereoBond) === i) {\n                const connAtom = molecule.getBondAtom(0, stereoBond);\n                molecule.setBondAtom(0, stereoBond, i);\n                molecule.setBondAtom(1, stereoBond, connAtom);\n            }\n            // To me it seems that we have to add all stereo centers into AND group 0. TLS 9.Nov.2015\n            molecule.setAtomESR(i, Molecule.cESRTypeAnd, 0);\n        }\n    }\n}\nfunction getNeighbourSymmetries(molecule, iAtom) {\n    const neighbourSymmetries = [];\n    for (let j = 0; j < molecule.getAllConnAtoms(iAtom); j++) {\n        const connAtom = molecule.getConnAtom(iAtom, j);\n        const symmetryRank = molecule.getSymmetryRank(connAtom);\n        if (!neighbourSymmetries.includes(symmetryRank)) {\n            neighbourSymmetries.push(molecule.getSymmetryRank(connAtom));\n        }\n    }\n    return neighbourSymmetries;\n}\n//# sourceMappingURL=getChiralOrHeterotopicCarbons.js.map","import { getChiralOrHeterotopicCarbons } from './getChiralOrHeterotopicCarbons.js';\n/**\n * This function will add missing chiral bonds on carbons ensure that all enantiotopic\n * or diastereotopic atoms can be identified uniquely\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {number} [options.esrType=Molecule.cESRTypeAnd]\n * @param {boolean} [options.atLeastThreeAtoms=true] - if true, only carbons with at least three atoms will be considered\n */\nexport function ensureHeterotopicChiralBonds(molecule, options = {}) {\n    const { Molecule } = molecule.getOCL();\n    const { esrType = Molecule.cESRTypeAnd, atLeastThreeAtoms = true } = options;\n    molecule.ensureHelperArrays(Molecule.cHelperBitNeighbours);\n    const heterotopicCarbons = getChiralOrHeterotopicCarbons(molecule);\n    for (const i of heterotopicCarbons) {\n        if (atLeastThreeAtoms && molecule.getAllConnAtoms(i) < 3)\n            continue;\n        if (molecule.getStereoBond(i) === -1) {\n            const stereoBond = molecule.getAtomPreferredStereoBond(i);\n            if (stereoBond !== -1) {\n                molecule.setBondType(stereoBond, Molecule.cBondTypeUp);\n                if (molecule.getBondAtom(1, stereoBond) === i) {\n                    const connAtom = molecule.getBondAtom(0, stereoBond);\n                    molecule.setBondAtom(0, stereoBond, i);\n                    molecule.setBondAtom(1, stereoBond, connAtom);\n                }\n                // To me it seems that we have to add all stereo centers into AND group 0. TLS 9.Nov.2015\n                molecule.setAtomESR(i, esrType, 0);\n            }\n        }\n    }\n}\n//# sourceMappingURL=ensureHeterotopicChiralBonds.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\n/**\n * Expand all the implicit hydrogens and ensure chiral bonds on heterotopic bonds\n * @param molecule\n * @param options\n * @returns\n */\nexport function getMoleculeWithH(molecule, options) {\n    const { logger, maxNbAtoms } = options;\n    const moleculeWithH = molecule.getCompactCopy();\n    moleculeWithH.addImplicitHydrogens();\n    if (moleculeWithH.getAllAtoms() > maxNbAtoms) {\n        logger.warn(`too many atoms to evaluate heterotopic chiral bonds: ${moleculeWithH.getAllAtoms()} > ${maxNbAtoms}`);\n    }\n    else {\n        ensureHeterotopicChiralBonds(moleculeWithH);\n    }\n    return moleculeWithH;\n}\n//# sourceMappingURL=getMoleculeWithH.js.map","import { getXAtomicNumber } from '../util/getXAtomicNumber.js';\n/**\n * In order to be able to give a unique ID to all the atoms we are replacing the H by X\n * @param moleculeWithH\n * @returns\n */\nexport function getXMolecule(moleculeWithH) {\n    const xAtomNumber = getXAtomicNumber(moleculeWithH);\n    const xMolecule = moleculeWithH.getCompactCopy();\n    for (let i = 0; i < xMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (xMolecule.getAtomicNo(i) === 1) {\n            xMolecule.setAtomicNo(i, xAtomNumber);\n        }\n    }\n    return xMolecule;\n}\n//# sourceMappingURL=getXMolecule.js.map","import { getHoseCodesForAtomsAsFragments } from '../hose/getHoseCodesForAtomsInternal.js';\nimport { getAllAtomsPaths } from '../path/getAllAtomsPaths.js';\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getCanonizedDiaIDs } from './getCanonizedDiaIDs.js';\nimport { getCanonizedHoseCodes } from './getCanonizedHoseCodes.js';\nimport { getDiaIDsAndInfo } from './getDiaIDsAndInfo.js';\nimport { getFinalRanks, getHeterotopicSymmetryRanks, } from './getHeterotopicSymmetryRanks.js';\nimport { getMoleculeWithH } from './getMoleculeWithH.js';\nimport { getXMolecule } from './getXMolecule.js';\n/**\n * This class deals with topicity information and hose codes\n * It is optimized to avoid recalculation of the same information\n */\nexport class TopicMolecule {\n    originalMolecule;\n    molecule;\n    idCode;\n    options;\n    cache;\n    constructor(molecule, options = {}) {\n        this.originalMolecule = molecule;\n        this.options = {\n            maxPathLength: 5,\n            maxNbAtoms: 250,\n            logger: console,\n            ...options,\n        };\n        this.idCode = molecule.getIDCode();\n        this.molecule = this.originalMolecule.getCompactCopy();\n        this.molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n        this.molecule.ensureHelperArrays(this.molecule.getOCL().Molecule.cHelperNeighbours);\n        this.cache = {};\n    }\n    /**\n     * This method ensures that all the atoms have a mapNo corresponding to the atom number.\n     * It will enforce mapNo in molecule and moleculeWithH\n     * We start numbering the atoms at 1\n     */\n    setAtomNoInMapNo() {\n        const molecules = [this.molecule, this.moleculeWithH];\n        for (const molecule of molecules) {\n            for (let i = 0; i < molecule.getAllAtoms(); i++) {\n                molecule.setAtomMapNo(i, i + 1, false);\n            }\n        }\n    }\n    /**\n     * This method ensures that all the atoms have a mapNo in the molecule (and not the moleculeWithH! )\n     */\n    ensureMapNo() {\n        const existingMapNo = {};\n        for (let i = 0; i < this.molecule.getAllAtoms(); i++) {\n            const mapNo = this.molecule.getAtomMapNo(i);\n            if (mapNo) {\n                if (existingMapNo[mapNo]) {\n                    throw new Error('The molecule contains several atoms with the same mapNo');\n                }\n                existingMapNo[mapNo] = true;\n            }\n        }\n        let nextMapNo = 1;\n        for (let i = 0; i < this.molecule.getAllAtoms(); i++) {\n            const mapNo = this.molecule.getAtomMapNo(i);\n            if (!mapNo) {\n                while (existingMapNo[nextMapNo]) {\n                    nextMapNo++;\n                }\n                existingMapNo[nextMapNo] = true;\n                this.molecule.setAtomMapNo(i, nextMapNo, false);\n            }\n        }\n    }\n    getHoseFragment(rootAtoms, options = {}) {\n        const { sphereSize = 2, tagAtoms = rootAtoms, tagAtomFct } = options;\n        const fragments = getHoseCodesForAtomsAsFragments(this.moleculeWithH, {\n            rootAtoms,\n            minSphereSize: sphereSize,\n            maxSphereSize: sphereSize,\n            tagAtoms,\n            tagAtomFct,\n        });\n        return fragments[0];\n    }\n    getAtomPathsFrom(atom, options = {}) {\n        const { minPathLength = 1, maxPathLength = this.options.maxPathLength, toAtomicNo, } = options;\n        if (maxPathLength > this.options.maxPathLength) {\n            throw new Error('The maxPathLength is too long, you should increase the maxPathLength when instantiating the TopicMolecule');\n        }\n        const atomPaths = this.atomsPaths[atom];\n        const paths = [];\n        for (let i = minPathLength; i <= maxPathLength; i++) {\n            for (const atomPath of atomPaths[i]) {\n                if (!toAtomicNo ||\n                    this.moleculeWithH.getAtomicNo(atomPath.path.at(-1)) ===\n                        toAtomicNo) {\n                    paths.push(atomPath.path);\n                }\n            }\n        }\n        return paths;\n    }\n    getAtomPaths(atom1, atom2, options = {}) {\n        const { pathLength } = options;\n        if (pathLength !== undefined && pathLength > this.options.maxPathLength) {\n            throw new Error('The distance is too long, you should increase the maxPathLength when instantiating the TopicMolecule');\n        }\n        const atomPaths = this.atomsPaths[atom1];\n        const minDistance = pathLength || 0;\n        const maxDistance = pathLength || this.options.maxPathLength;\n        const paths = [];\n        for (let i = minDistance; i <= maxDistance; i++) {\n            for (const atomPath of atomPaths[i]) {\n                if (atomPath.path.at(-1) === atom2) {\n                    paths.push(atomPath.path);\n                }\n            }\n        }\n        return paths;\n    }\n    get atomsPaths() {\n        if (this.cache.atomsPaths)\n            return this.cache.atomsPaths;\n        this.cache.atomsPaths = getAllAtomsPaths(this.moleculeWithH, {\n            maxPathLength: this.options.maxPathLength,\n        });\n        return this.cache.atomsPaths;\n    }\n    toMolfile(options = {}) {\n        const { version = 2 } = options;\n        if (version === 2) {\n            return this.molecule.toMolfile();\n        }\n        return this.molecule.toMolfileV3();\n    }\n    getMolecule() {\n        return this.molecule;\n    }\n    /**\n     * Returns a new TopicMolecule but will copy precalculated information\n     * if possible (same idCode). This is very practical when expanding hydrogens\n     * for example.\n     * @param molecule\n     * @returns\n     */\n    fromMolecule(molecule) {\n        const idCode = molecule.getIDCode();\n        if (idCode !== this.idCode) {\n            // no way for optimisation\n            return new TopicMolecule(molecule);\n        }\n        const topicMolecule = new TopicMolecule(molecule);\n        topicMolecule.cache = {\n            canonizedDiaIDs: this.cache.canonizedDiaIDs,\n            canonizedHoseCodes: this.cache.canonizedHoseCodes,\n        };\n        return topicMolecule;\n    }\n    /**\n     * Returns a molecule with all the hydrogens added. The order is NOT canonized\n     */\n    get moleculeWithH() {\n        if (this.cache.moleculeWithH)\n            return this.cache.moleculeWithH;\n        this.cache.moleculeWithH = getMoleculeWithH(this.molecule, {\n            maxNbAtoms: this.options.maxNbAtoms,\n            logger: this.options.logger,\n        });\n        return this.cache.moleculeWithH;\n    }\n    get xMolecule() {\n        if (this.cache.xMolecule)\n            return this.cache.xMolecule;\n        this.cache.xMolecule = getXMolecule(this.moleculeWithH);\n        return this.cache.xMolecule;\n    }\n    /**\n     * This is related to the current moleculeWithH. The order is NOT canonized\n     */\n    get diaIDs() {\n        if (this.cache.diaIDs)\n            return this.cache.diaIDs;\n        const diaIDs = [];\n        if (this.moleculeWithH.getAllAtoms() > this.options.maxNbAtoms) {\n            this.options.logger.warn(`too many atoms to evaluate heterotopicity: ${this.moleculeWithH.getAllAtoms()} > ${this.options.maxNbAtoms}`);\n        }\n        else {\n            for (let i = 0; i < this.moleculeWithH.getAllAtoms(); i++) {\n                diaIDs.push(this.canonizedDiaIDs[this.finalRanks[i]]);\n            }\n        }\n        this.cache.diaIDs = diaIDs;\n        return diaIDs;\n    }\n    /**\n     * We return the atomIDs corresponding to the specified diaID as well has the attached hydrogens or heavy atoms\n     * @param diaID\n     * @returns\n     */\n    getDiaIDsObject() {\n        if (!this.diaIDs)\n            return undefined;\n        return groupDiastereotopicAtomIDsAsObject(this.diaIDs, this.molecule, this.moleculeWithH);\n    }\n    /**\n     * This is related to the current moleculeWithH. The order is NOT canonized\n     */\n    get hoseCodes() {\n        if (this.cache.hoseCodes)\n            return this.cache.hoseCodes;\n        const hoseCodes = [];\n        for (let i = 0; i < this.moleculeWithH.getAllAtoms(); i++) {\n            hoseCodes.push(this.canonizedHoseCodes[this.finalRanks[i]]);\n        }\n        this.cache.hoseCodes = hoseCodes;\n        return hoseCodes;\n    }\n    get canonizedDiaIDs() {\n        if (this.cache.canonizedDiaIDs)\n            return this.cache.canonizedDiaIDs;\n        this.cache.canonizedDiaIDs = getCanonizedDiaIDs(this, {\n            maxNbAtoms: this.options.maxNbAtoms,\n            logger: this.options.logger,\n        });\n        return this.cache.canonizedDiaIDs;\n    }\n    get canonizedHoseCodes() {\n        if (this.cache.canonizedHoseCodes) {\n            return this.cache.canonizedHoseCodes;\n        }\n        this.cache.canonizedHoseCodes = getCanonizedHoseCodes(this);\n        return this.cache.canonizedHoseCodes;\n    }\n    /**\n     * Returns the distance matrix for the current moleculeWithH\n     */\n    get distanceMatrix() {\n        return getConnectivityMatrix(this.moleculeWithH, { pathLength: true });\n    }\n    get diaIDsAndInfo() {\n        if (this.cache.diaIDsAndInfo) {\n            return this.cache.diaIDsAndInfo;\n        }\n        this.cache.diaIDsAndInfo = getDiaIDsAndInfo(this, this.canonizedDiaIDs);\n        return this.cache.diaIDsAndInfo;\n    }\n    /**\n     * Returns symmetryRanks for all the atoms including hydrogens. Those ranks\n     * deals with topicity and is related to the current moleculeWithH.\n     * In order to calculate the ranks we replace all the\n     * hydrogens with a X atom.\n     */\n    get heterotopicSymmetryRanks() {\n        if (this.cache.heterotopicSymmetryRanks) {\n            return this.cache.heterotopicSymmetryRanks;\n        }\n        this.cache.heterotopicSymmetryRanks = getHeterotopicSymmetryRanks(this.xMolecule);\n        return [...this.cache.heterotopicSymmetryRanks];\n    }\n    /**\n     * Returns finalRanks for all the atoms including hydrogens. Those ranks\n     * deals with topicity and is related to the current moleculeWithH.\n     * All the atoms have a unique identifier.j\n     * In order to calculate the ranks we replace all the\n     * hydrogens with a X atom.\n     */\n    get finalRanks() {\n        if (this.cache.finalRanks)\n            return this.cache.finalRanks;\n        this.cache.finalRanks = getFinalRanks(this.xMolecule);\n        return this.cache.finalRanks;\n    }\n    toMolfileWithH(options = {}) {\n        const { version = 2 } = options;\n        if (version === 2) {\n            return this.moleculeWithH.toMolfile();\n        }\n        return this.moleculeWithH.toMolfileV3();\n    }\n    toMolfileWithoutH(options = {}) {\n        const molecule = this.molecule.getCompactCopy();\n        molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n        const atomsToDelete = [];\n        for (let atomID = 0; atomID < molecule.getAtoms(); atomID++) {\n            if (molecule.getExplicitHydrogens(atomID) > 0) {\n                for (let i = 0; i < molecule.getAllConnAtoms(atomID); i++) {\n                    const connectedAtom = molecule.getConnAtom(atomID, i);\n                    if (molecule.getAtomicNo(connectedAtom) === 1) {\n                        atomsToDelete.push(connectedAtom);\n                    }\n                }\n            }\n        }\n        molecule.deleteAtoms(atomsToDelete);\n        const { version = 2 } = options;\n        if (version === 2) {\n            return molecule.toMolfile();\n        }\n        return molecule.toMolfileV3();\n    }\n    /**\n     * Returns an array of objects containing the oclID and the corresponding hydrogens and atoms\n     * for the specified atomLabel (if any)\n     * This always applied to the molecule with expanded hydrogens and chirality\n     * @param options\n     * @returns\n     */\n    getGroupedDiastereotopicAtomIDs(options = {}) {\n        if (!this.diaIDs)\n            return undefined;\n        return groupDiastereotopicAtomIDs(this.diaIDs, this.moleculeWithH, options);\n    }\n    /**\n     * This method returns a mapping between the diaIDs of the current molecule.\n     * It expects that the initial molfile and the final molfile contains atomMapNo\n     * in order to track which atom becomes which one.\n     * @param molecule\n     */\n    getDiaIDsMapping(molecule) {\n        const topicMolecule = new TopicMolecule(molecule);\n        const originalDiaIDs = this.diaIDsAndInfo.filter((diaID) => diaID.atomMapNo);\n        const destinationDiaIDs = topicMolecule.diaIDsAndInfo.filter((diaID) => diaID.atomMapNo);\n        const mapping = {};\n        // we first check all the atoms present in the molfile\n        for (const destinationDiaID of destinationDiaIDs) {\n            const originalDiaID = originalDiaIDs.find((diaID) => diaID.atomMapNo === destinationDiaID.atomMapNo);\n            const newIDCode = destinationDiaID.idCode;\n            const oldIDCode = originalDiaID.idCode;\n            if (oldIDCode in mapping) {\n                if (mapping[oldIDCode] !== newIDCode) {\n                    mapping[oldIDCode] = undefined;\n                }\n            }\n            else {\n                mapping[oldIDCode] = newIDCode;\n            }\n        }\n        // we now check all the attached hydrogens that are not defined in the molfile and were not yet mapped\n        for (const destinationDiaID of destinationDiaIDs) {\n            const originalDiaID = originalDiaIDs.find((diaID) => diaID.atomMapNo === destinationDiaID.atomMapNo);\n            for (let i = 0; i < originalDiaID.attachedHydrogensIDCodes.length; i++) {\n                const oldHydrogenIDCode = originalDiaID.attachedHydrogensIDCodes[i];\n                if (mapping[oldHydrogenIDCode])\n                    continue;\n                const newHydrogenIDCode = destinationDiaID.attachedHydrogensIDCodes[i];\n                if (oldHydrogenIDCode && newHydrogenIDCode) {\n                    if (oldHydrogenIDCode in mapping) {\n                        if (mapping[oldHydrogenIDCode] !== newHydrogenIDCode) {\n                            mapping[oldHydrogenIDCode] = undefined;\n                        }\n                    }\n                    else {\n                        mapping[oldHydrogenIDCode] = newHydrogenIDCode;\n                    }\n                }\n            }\n        }\n        return mapping;\n    }\n}\nexport function groupDiastereotopicAtomIDs(diaIDs, molecule, options = {}) {\n    const diaIDsObject = groupDiastereotopicAtomIDsAsObject(diaIDs, molecule, molecule, options);\n    return Object.keys(diaIDsObject).map((key) => diaIDsObject[key]);\n}\nfunction groupDiastereotopicAtomIDsAsObject(diaIDs, molecule, moleculeWithH, options = {}) {\n    const { atomLabel } = options;\n    const diaIDsObject = {};\n    for (let i = 0; i < diaIDs.length; i++) {\n        if (!atomLabel || moleculeWithH.getAtomLabel(i) === atomLabel) {\n            const diaID = diaIDs[i];\n            if (!diaIDsObject[diaID]) {\n                diaIDsObject[diaID] = {\n                    counter: 0,\n                    atoms: [],\n                    oclID: diaID,\n                    atomLabel: moleculeWithH.getAtomLabel(i),\n                    heavyAtoms: [],\n                    attachedHydrogens: [],\n                    existingAtoms: [],\n                };\n            }\n            if (moleculeWithH.getAtomicNo(i) === 1) {\n                const connected = moleculeWithH.getConnAtom(i, 0);\n                if (!diaIDsObject[diaID].heavyAtoms.includes(connected)) {\n                    diaIDsObject[diaID].heavyAtoms.push(connected);\n                }\n                if (molecule.getAtomicNo(i)) {\n                    diaIDsObject[diaID].existingAtoms.push(i);\n                }\n                else if (!diaIDsObject[diaID].existingAtoms.includes(connected)) {\n                    diaIDsObject[diaID].existingAtoms.push(connected);\n                }\n            }\n            else {\n                for (let j = 0; j < moleculeWithH.getAllConnAtoms(i); j++) {\n                    const connected = moleculeWithH.getConnAtom(i, j);\n                    if (moleculeWithH.getAtomicNo(connected) === 1) {\n                        diaIDsObject[diaID].attachedHydrogens.push(connected);\n                    }\n                }\n                diaIDsObject[diaID].existingAtoms.push(i);\n            }\n            diaIDsObject[diaID].counter++;\n            diaIDsObject[diaID].atoms.push(i);\n        }\n    }\n    for (const diaID in diaIDsObject) {\n        diaIDsObject[diaID].existingAtoms.sort((a, b) => a - b);\n        diaIDsObject[diaID].attachedHydrogens.sort((a, b) => a - b);\n    }\n    return diaIDsObject;\n}\n//# sourceMappingURL=TopicMolecule.js.map","import { getXAtomicNumber } from './getXAtomicNumber.js';\n/**\n * Returns an array of symmetry ranks.\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getSymmetryRanks(molecule) {\n    const { Molecule } = molecule.getOCL();\n    const xAtomNumber = getXAtomicNumber(molecule);\n    // most of the molecules have some symmetry\n    const internalMolecule = molecule.getCompactCopy();\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        // hydrogens are not taken into account during canonization, we need to change them with an atom with a valence of 1\n        if (internalMolecule.getAtomicNo(i) === 1) {\n            internalMolecule.setAtomicNo(i, xAtomNumber);\n        }\n    }\n    internalMolecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const symmetryRanks = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        symmetryRanks.push(internalMolecule.getSymmetryRank(i));\n    }\n    return symmetryRanks;\n}\n//# sourceMappingURL=getSymmetryRanks.js.map","import { getSymmetryRanks } from '../util/getSymmetryRanks.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from '../util/tagAtom.js';\nimport { ensureHeterotopicChiralBonds } from './ensureHeterotopicChiralBonds.js';\n/**\n * Returns an array of diastereotopic ID (as idCode)\n * @param {import('openchemlib').Molecule} molecule\n */\nexport function getDiastereotopicAtomIDs(molecule) {\n    const { Molecule } = molecule.getOCL();\n    ensureHeterotopicChiralBonds(molecule);\n    const symmetryRanks = getSymmetryRanks(molecule);\n    const numberAtoms = molecule.getAllAtoms();\n    const ids = [];\n    const cache = {};\n    for (let iAtom = 0; iAtom < numberAtoms; iAtom++) {\n        const rank = symmetryRanks[iAtom];\n        if (rank && cache[rank]) {\n            ids[iAtom] = cache[rank];\n            continue;\n        }\n        const tempMolecule = molecule.getCompactCopy();\n        tagAtom(tempMolecule, iAtom);\n        makeRacemic(tempMolecule);\n        // We need to ensure the helper array in order to get correctly the result of racemisation\n        ids[iAtom] = tempMolecule.getCanonizedIDCode(Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        cache[rank] = ids[iAtom];\n    }\n    return ids;\n}\n//# sourceMappingURL=getDiastereotopicAtomIDs.js.map","import { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs.js';\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n */\nexport function getDiastereotopicAtomIDsAndH(molecule) {\n    const OCL = molecule.getOCL();\n    molecule = molecule.getCompactCopy();\n    molecule.addImplicitHydrogens();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    const newDiaIDs = [];\n    for (let i = 0; i < diaIDs.length; i++) {\n        const diaID = diaIDs[i];\n        const newDiaID = {\n            oclID: diaID,\n            hydrogenOCLIDs: [],\n            nbHydrogens: 0,\n        };\n        if (molecule.getAtomicNo(i) === 1) {\n            const atom = molecule.getConnAtom(i, 0);\n            newDiaID.heavyAtom = diaIDs[atom];\n        }\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const atom = molecule.getConnAtom(i, j);\n            if (molecule.getAtomicNo(atom) === 1) {\n                newDiaID.nbHydrogens++;\n                if (!newDiaID.hydrogenOCLIDs.includes(diaIDs[atom])) {\n                    newDiaID.hydrogenOCLIDs.push(diaIDs[atom]);\n                }\n            }\n        }\n        newDiaIDs.push(newDiaID);\n    }\n    return newDiaIDs;\n}\n//# sourceMappingURL=getDiastereotopicAtomIDsAndH.js.map","export function groupDiastereotopicAtomIDs(diaIDs, molecule, options = {}) {\n    const { atomLabel } = options;\n    const diaIDsObject = {};\n    for (let i = 0; i < diaIDs.length; i++) {\n        if (!atomLabel || molecule.getAtomLabel(i) === atomLabel) {\n            const diaID = diaIDs[i];\n            if (!diaIDsObject[diaID]) {\n                diaIDsObject[diaID] = {\n                    counter: 0,\n                    atoms: [],\n                    oclID: diaID,\n                    atomLabel: molecule.getAtomLabel(i),\n                };\n            }\n            diaIDsObject[diaID].counter++;\n            diaIDsObject[diaID].atoms.push(i);\n        }\n    }\n    return Object.keys(diaIDsObject).map((key) => diaIDsObject[key]);\n}\n//# sourceMappingURL=groupDiastereotopicAtomIDs.js.map","import { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs.js';\nimport { groupDiastereotopicAtomIDs } from './groupDiastereotopicAtomIDs.js';\n/**\n * This function groups the diasterotopic atomIds of the molecule based on equivalence of atoms. The output object contains\n * a set of chemically equivalent atoms(element.atoms) and the groups of magnetically equivalent atoms (element.magneticGroups)\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.atomLabel] - Select atoms of the given atomLabel. By default it returns all the explicit atoms in the molecule\n * @returns {Array}\n */\nexport function getGroupedDiastereotopicAtomIDs(molecule, options = {}) {\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    return groupDiastereotopicAtomIDs(diaIDs, molecule, options);\n}\n//# sourceMappingURL=getGroupedDiastereotopicAtomIDs.js.map","import { getDiastereotopicAtomIDsAndH } from './getDiastereotopicAtomIDsAndH.js';\n/**\n * Parse a molfile and returns an object containing the molecule, the map and the diaIDs\n * The map allows to reload properties assigned to the atom molfile\n * Please take care than numbering of atoms starts at 0 !\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {string} molfile\n * @returns\n */\nexport function getDiastereotopicAtomIDsFromMolfile(OCL, molfile) {\n    const { map, molecule } = OCL.Molecule.fromMolfileWithAtomMap(molfile);\n    const diaIDsArray = getDiastereotopicAtomIDsAndH(molecule);\n    const diaIDs = {};\n    for (let i = 0; i < map.length; i++) {\n        diaIDs[map[i]] = { source: map[i], destination: i, ...diaIDsArray[i] };\n    }\n    return { map: diaIDs, molecule, diaIDs: diaIDsArray };\n}\n//# sourceMappingURL=getDiastereotopicAtomIDsFromMolfile.js.map","import { getDiastereotopicAtomIDsAndH } from './getDiastereotopicAtomIDsAndH.js';\n/**\n * Returns a SVG\n * @param {*} molecule\n * @param {*} [options={}]\n */\nexport function toDiastereotopicSVG(molecule, options = {}) {\n    const { width = 300, height = 200, prefix = 'ocl', heavyAtomHydrogen = false, } = options;\n    let svg = options.svg;\n    let diaIDs = [];\n    const hydrogenInfo = {};\n    for (const line of getDiastereotopicAtomIDsAndH(molecule)) {\n        hydrogenInfo[line.oclID] = line;\n    }\n    if (heavyAtomHydrogen) {\n        for (let i = 0; i < molecule.getAtoms(); i++) {\n            diaIDs.push([]);\n        }\n        const groupedDiaIDs = molecule.getGroupedDiastereotopicAtomIDs();\n        for (const diaID of groupedDiaIDs) {\n            if (hydrogenInfo[diaID.oclID] &&\n                hydrogenInfo[diaID.oclID].nbHydrogens > 0) {\n                for (const atom of diaID.atoms) {\n                    for (const id of hydrogenInfo[diaID.oclID].hydrogenOCLIDs) {\n                        if (!diaIDs[atom * 1].includes(id))\n                            diaIDs[atom].push(id);\n                    }\n                }\n            }\n        }\n    }\n    else {\n        diaIDs = molecule.getDiastereotopicAtomIDs().map((a) => [a]);\n    }\n    if (!svg)\n        svg = molecule.toSVG(width, height, prefix);\n    svg = svg.replaceAll(/Atom:\\d+\"/g, (value) => {\n        const atom = value.replaceAll(/\\D/g, '');\n        return `${value} data-diaid=\"${diaIDs[atom].join(',')}\"`;\n    });\n    return svg;\n}\n//# sourceMappingURL=toDiastereotopicSVG.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { tagAtom } from '../util/tagAtom.js';\nimport { getHoseCodesForAtomsInternal } from './getHoseCodesForAtomsInternal.js';\n/**\n * Returns the hose codes for all atoms in the molecule\n * @param {*} molecule\n * @param {object} [options={}]\n * @param {string[]} [options.atomLabels]\n * @param {number} [options.minSphereSize=0]\n * @param {number} [options.maxSphereSize=4]\n * @returns\n */\nexport function getHoseCodes(molecule, options = {}) {\n    const { atomLabels, minSphereSize, maxSphereSize } = options;\n    const { Molecule } = molecule.getOCL();\n    const atomicNumbers = atomLabels?.map((label) => Molecule.getAtomicNoFromLabel(label));\n    const internalMolecule = molecule.getCompactCopy();\n    internalMolecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(internalMolecule);\n    const hoses = [];\n    for (let i = 0; i < internalMolecule.getAllAtoms(); i++) {\n        if (atomicNumbers &&\n            !atomicNumbers.includes(internalMolecule.getAtomicNo(i))) {\n            hoses.push(undefined);\n        }\n        else {\n            const tempMolecule = internalMolecule.getCompactCopy();\n            tagAtom(tempMolecule, i);\n            hoses.push(getHoseCodesForAtomsInternal(tempMolecule, {\n                minSphereSize,\n                maxSphereSize,\n            }));\n        }\n    }\n    return hoses;\n}\n//# sourceMappingURL=getHoseCodes.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getSymmetryRanks } from '../util/getSymmetryRanks.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from '../util/tagAtom.js';\nimport { getHoseCodesForAtomsInternal } from './getHoseCodesForAtomsInternal.js';\n/**\n * Returns an object containing a molfile, molfile with hydrogens, hoses codes and optionally the diaIDs\n * and the diaIDs\n * The map allows to reload properties assigned to the atom molfile\n * Please take care than numbering of atoms starts at 0 !\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string[]} [options.atomLabels]\n * @param {boolean} [options.calculateDiastereotopicIDs=true]\n * @param {number} [options.minSphereSize=0]\n * @param {number} [options.maxSphereSize=4]\n * @returns\n */\nexport function getHoseCodesAndInfo(molecule, options = {}) {\n    const { minSphereSize, maxSphereSize, calculateDiastereotopicIDs = true, } = options;\n    const { Molecule } = molecule.getOCL();\n    molecule = molecule.getCompactCopy();\n    // this will force reordering of the hydrogens to the end, just to have the same order as in the molfile\n    molecule.ensureHelperArrays(Molecule.cHelperNeighbours);\n    const newMolfile = molecule.toMolfile();\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    molecule.ensureHelperArrays(Molecule.cHelperSymmetryStereoHeterotopicity);\n    const newMolfileWithH = molecule.toMolfile();\n    const symmetryRanks = getSymmetryRanks(molecule);\n    const cache = {};\n    const hoses = [];\n    const diaIDs = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const rank = symmetryRanks[i];\n        if (rank && cache[rank]) {\n            diaIDs.push(cache[rank].diaID);\n            hoses.push(cache[rank].hose);\n            continue;\n        }\n        const tempMolecule = molecule.getCompactCopy();\n        tagAtom(tempMolecule, i);\n        let diaID;\n        if (calculateDiastereotopicIDs) {\n            makeRacemic(tempMolecule);\n            diaID = tempMolecule.getCanonizedIDCode(Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n            diaIDs.push(diaID);\n        }\n        const hose = getHoseCodesForAtomsInternal(tempMolecule, {\n            minSphereSize,\n            maxSphereSize,\n        });\n        hoses.push(hose);\n        cache[rank] = { diaID, hose };\n    }\n    const distanceMatrix = getConnectivityMatrix(molecule, { pathLength: true });\n    return {\n        molfile: newMolfile,\n        molfileWithH: newMolfileWithH,\n        hoses,\n        diaIDs: calculateDiastereotopicIDs ? diaIDs : undefined,\n        moleculeWithHydrogens: molecule,\n        distanceMatrix,\n    };\n}\n//# sourceMappingURL=getHoseCodesAndInfo.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { tagAtom } from '../util/tagAtom.js';\nimport { getHoseCodesForAtomsInternal } from './getHoseCodesForAtomsInternal.js';\nexport const FULL_HOSE_CODE = 1;\nexport const HOSE_CODE_CUT_C_SP3_SP3 = 2;\n/**\n * Returns the hose code for specific atom numbers\n * @param {import('openchemlib').Molecule} originalMolecule - The OCL molecule to be fragmented\n * @param {number[]} rootAtoms\n * @param {object} [options={}]\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n */\nexport function getHoseCodesForAtoms(originalMolecule, rootAtoms = [], options = {}) {\n    const { minSphereSize = 0, maxSphereSize = 4, kind = FULL_HOSE_CODE, } = options;\n    const molecule = originalMolecule.getCompactCopy();\n    // those 2 lines should be done only once\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    const allowedCustomLabels = [];\n    for (const rootAtom of rootAtoms) {\n        allowedCustomLabels.push(tagAtom(molecule, rootAtom));\n    }\n    return getHoseCodesForAtomsInternal(molecule, {\n        minSphereSize,\n        maxSphereSize,\n        allowedCustomLabels,\n        kind,\n    });\n}\n//# sourceMappingURL=getHoseCodesForAtoms.js.map","import { getHoseCodesForAtoms } from './getHoseCodesForAtoms.js';\n/**\n * Returns the hose code for a specific atom number\n * @param {import('openchemlib').Molecule} originalMolecule\n * @param {number} rootAtom\n * @param {object} [options={}]\n * @param {boolean} [options.isTagged] - Specify is the atom is already tagged\n * @param {number} [options.minSphereSize=0] - Smallest hose code sphere\n * @param {number} [options.maxSphereSize=4] - Largest hose code sphere\n * @param {number} [options.kind=FULL_HOSE_CODE] - Kind of hose code, default usual sphere\n */\nexport function getHoseCodesForAtom(originalMolecule, rootAtom, options = {}) {\n    return getHoseCodesForAtoms(originalMolecule, [rootAtom], options);\n}\n//# sourceMappingURL=getHoseCodesForAtom.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { getHoseCodesForAtomsInternal } from './getHoseCodesForAtomsInternal.js';\n/**\n * Returns the hose code for a specific marked atom\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} options\n */\nexport function getHoseCodesFromDiastereotopicID(molecule, options = {}) {\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    return getHoseCodesForAtomsInternal(molecule, options);\n}\n//# sourceMappingURL=getHoseCodesFromDiastereotopicID.js.map","import { ensureHeterotopicChiralBonds } from '../diastereotopic/ensureHeterotopicChiralBonds.js';\nimport { makeRacemic } from '../util/makeRacemic.js';\nimport { tagAtom } from '../util/tagAtom.js';\nlet fragment;\n/**\n * Returns the hose code for a specific atom number\n * @param {import('openchemlib').Molecule} molecule\n * @param from\n * @param to\n * @param maxLength\n */\nexport function getHoseCodesForPath(molecule, from, to, maxLength) {\n    const OCL = molecule.getOCL();\n    const originalFrom = from;\n    const originalTo = to;\n    molecule = molecule.getCompactCopy();\n    const originalAtoms = []; // path before renumbering\n    molecule.getPath(originalAtoms, from, to, maxLength + 1);\n    let torsion;\n    if (originalAtoms.length === 4) {\n        torsion = molecule.calculateTorsion(originalAtoms);\n    }\n    const tag1 = tagAtom(molecule, from);\n    const tag2 = tagAtom(molecule, to);\n    molecule.addImplicitHydrogens();\n    ensureHeterotopicChiralBonds(molecule);\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    from = -1;\n    to = -1;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (tag1 === tag2) {\n            if (molecule.getAtomCustomLabel(i) === tag1) {\n                if (from === -1) {\n                    from = i;\n                }\n                else {\n                    to = i;\n                }\n            }\n        }\n        else {\n            if (tag1 === molecule.getAtomCustomLabel(i)) {\n                from = i;\n            }\n            if (tag2 === molecule.getAtomCustomLabel(i)) {\n                to = i;\n            }\n        }\n    }\n    if (!fragment)\n        fragment = new OCL.Molecule(0, 0);\n    const atoms = [];\n    molecule.getPath(atoms, from, to, maxLength + 1);\n    let min = 0;\n    let max = 0;\n    const atomMask = new Array(molecule.getAllAtoms()).fill(false);\n    const atomList = new Array(molecule.getAllAtoms()).fill(-1);\n    const hoses = [];\n    for (let sphere = 0; sphere <= 2; sphere++) {\n        if (max === 0) {\n            for (const atom of atoms) {\n                atomMask[atom] = true;\n                atomList[max++] = atom;\n            }\n        }\n        else {\n            let newMax = max;\n            for (let i = min; i < max; i++) {\n                const atom = atomList[i];\n                for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                    const connAtom = molecule.getConnAtom(atom, j);\n                    if (!atomMask[connAtom]) {\n                        atomMask[connAtom] = true;\n                        atomList[newMax++] = connAtom;\n                    }\n                }\n            }\n            min = max;\n            max = newMax;\n        }\n        const atomMap = [];\n        molecule.copyMoleculeByAtoms(fragment, atomMask, true, atomMap);\n        makeRacemic(fragment);\n        const oclID = fragment.getCanonizedIDCode(OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS);\n        hoses.push({\n            sphere,\n            oclID,\n        });\n    }\n    return {\n        atoms: originalAtoms,\n        from: originalFrom,\n        to: originalTo,\n        torsion,\n        hoses,\n        length: originalAtoms.length - 1,\n    };\n}\n//# sourceMappingURL=getHoseCodesForPath.js.map","/**\n * Create a polymer from a unit, alpha and omega groups\n * A unit must contain a R1 and a R2\n * An alpha end group must contain a R1\n * An omega end group must contain a R2\n * @param {import('openchemlib').Molecule} unit - an instance of OCL.Molecule\n * @param {object} options\n * @param {number} [options.count=10] - number of units\n * @param {boolean} [options.markMonomer=false] - mark the different units of the polymer in the atom map\n * @param {import('openchemlib').Molecule} [options.alpha] - alpha end group, default is an hydrogen\n * @param {import('openchemlib').Molecule} [options.gamma] - omega end group, default is an hydrogen\n */\nexport function createPolymer(unit, options = {}) {\n    const { count = 10 } = options;\n    checkEntity(unit, 'unit');\n    const { Molecule } = unit.getOCL();\n    const { alpha, gamma } = getAlphaGamma(unit, options);\n    checkEntity(alpha, 'alpha');\n    checkEntity(gamma, 'gamma');\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    const polymer = alpha.getCompactCopy();\n    polymer.addMolecule(getUnit(unit, 1, options));\n    addBond(polymer, r1AtomicNo, r1AtomicNo);\n    for (let i = 0; i < count - 1; i++) {\n        polymer.addMolecule(getUnit(unit, i + 2, options));\n        addBond(polymer, r2AtomicNo, r1AtomicNo);\n    }\n    polymer.addMolecule(gamma);\n    addBond(polymer, r2AtomicNo, r2AtomicNo);\n    polymer.ensureHelperArrays(Molecule.cHelperNeighbours);\n    // encoding directly in atomNapNo didn't work out because it was removed when deleting atoms\n    for (let i = 0; i < polymer.getAtoms(); i++) {\n        polymer.setAtomMapNo(i, (polymer.getAtomCustomLabel(i) || '').replace(/monomer_/, ''));\n        polymer.setAtomCustomLabel(i, '');\n    }\n    return polymer;\n}\nfunction getUnit(unit, index, options) {\n    const { markMonomer = false } = options;\n    if (markMonomer) {\n        unit = unit.getCompactCopy();\n        unit.ensureHelperArrays(unit.getOCL().Molecule.cHelperNeighbours);\n        for (let j = 0; j < unit.getAtoms(); j++) {\n            unit.setAtomCustomLabel(j, `monomer_${index}`);\n        }\n    }\n    return unit;\n}\nfunction addBond(molecule, firstAtomicNo, secondAtomicNo) {\n    molecule.ensureHelperArrays(molecule.getOCL().Molecule.cHelperNeighbours);\n    let i, j;\n    loop: for (i = 0; i < molecule.getAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === firstAtomicNo) {\n            for (j = i + 1; j < molecule.getAtoms(); j++) {\n                if (molecule.getAtomicNo(j) === secondAtomicNo) {\n                    molecule.addBond(molecule.getConnAtom(i, 0), molecule.getConnAtom(j, 0), 1);\n                    break loop;\n                }\n            }\n        }\n    }\n    molecule.deleteAtoms([i, j]);\n}\nfunction checkEntity(unit, kind) {\n    let nbR1 = 1;\n    let nbR2 = 1;\n    switch (kind) {\n        case 'unit':\n            break;\n        case 'alpha':\n            nbR2 = 0;\n            break;\n        case 'gamma':\n            nbR1 = 0;\n            break;\n        default:\n            throw new Error('Unknown kind');\n    }\n    if (!unit) {\n        throw new Error('unit is required');\n    }\n    const { Molecule } = unit.getOCL();\n    // unit must contain ONE R1 and ONE R2\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    let r1Count = 0;\n    let r2Count = 0;\n    for (let i = 0; i < unit.getAtoms(); i++) {\n        if (unit.getAtomicNo(i) === r1AtomicNo) {\n            r1Count++;\n        }\n        if (unit.getAtomicNo(i) === r2AtomicNo) {\n            r2Count++;\n        }\n    }\n    if (r1Count !== nbR1) {\n        throw new Error(`${kind} must contain ${nbR1} R1`);\n    }\n    if (r2Count !== nbR2) {\n        throw new Error(`${kind} must contain ${nbR2} R2`);\n    }\n}\nfunction getAlphaGamma(unit, options) {\n    let { alpha, gamma } = options;\n    const { Molecule } = unit.getOCL();\n    const { r1AtomicNo, r2AtomicNo } = getR1R2AtomicNo(Molecule);\n    if (!alpha) {\n        alpha = Molecule.fromSmiles('CC');\n        alpha.setAtomicNo(0, r1AtomicNo);\n        alpha.setAtomicNo(1, 1);\n    }\n    if (!gamma) {\n        gamma = Molecule.fromSmiles('CC');\n        gamma.setAtomicNo(0, r2AtomicNo);\n        gamma.setAtomicNo(1, 1);\n    }\n    return { alpha, gamma };\n}\nfunction getR1R2AtomicNo(Molecule) {\n    const r1AtomicNo = Molecule.getAtomicNoFromLabel('R1', Molecule.cPseudoAtomsRGroups);\n    const r2AtomicNo = Molecule.getAtomicNoFromLabel('R2', Molecule.cPseudoAtomsRGroups);\n    return { r1AtomicNo, r2AtomicNo };\n}\n//# sourceMappingURL=createPolymer.js.map","const MAX_R = 10;\n/**\n * Generate molecules and calculate predicted properties form a list of smiles and fragments\n * @param {string} coreSmiles\n * @param {Array} fragments - Array of {smiles,R1,R2,...}\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {object} [options={}] - Options\n * @param {Function} [options.onStep] - method to execute each new molecules\n * @param {boolean} [options.complexity] - returns only the number of molecules to evaluate\n * @returns {Promise<any>} promise that resolves to molecules or complexity as a number\n */\nexport async function combineSmiles(coreSmiles, fragments, OCL, options = {}) {\n    const { complexity = false } = options;\n    const core = getCore(coreSmiles);\n    const rGroups = getRGroups(core, fragments);\n    if (complexity) {\n        return getComplexity(rGroups);\n    }\n    return generate(core, rGroups, OCL, options);\n}\nfunction getComplexity(rGroups) {\n    let complexity = 1;\n    for (const rGroup of rGroups) {\n        complexity *= rGroup.smiles.length;\n    }\n    return complexity;\n}\nasync function generate(core, rGroups, OCL, options = {}) {\n    const { onStep } = options;\n    const molecules = {};\n    const sizes = new Array(rGroups.length);\n    const currents = new Array(rGroups.length);\n    for (let i = 0; i < rGroups.length; i++) {\n        sizes[i] = rGroups[i].smiles.length - 1;\n        currents[i] = 0;\n    }\n    let position = 0;\n    let counter = 0;\n    while (true) {\n        counter++;\n        while (position < currents.length) {\n            if (currents[position] < sizes[position]) {\n                if (onStep) {\n                    // eslint-disable-next-line no-await-in-loop\n                    await onStep(counter);\n                }\n                appendMolecule(molecules, core, rGroups, currents, OCL);\n                currents[position]++;\n                for (let i = 0; i < position; i++) {\n                    currents[i] = 0;\n                }\n                position = 0;\n            }\n            else {\n                position++;\n            }\n        }\n        if ((position = currents.length)) {\n            if (onStep) {\n                // eslint-disable-next-line no-await-in-loop\n                await onStep(counter);\n            }\n            appendMolecule(molecules, core, rGroups, currents, OCL);\n            break;\n        }\n    }\n    return Object.keys(molecules)\n        .map((key) => molecules[key])\n        .sort((m1, m2) => m1.mw - m2.mw);\n}\nfunction appendMolecule(molecules, core, rGroups, currents, OCL) {\n    let newSmiles = core.smiles;\n    for (let i = 0; i < currents.length; i++) {\n        newSmiles += `.${rGroups[i].smiles[currents[i]]}`;\n    }\n    const currentMol = OCL.Molecule.fromSmiles(newSmiles);\n    const idCode = currentMol.getIDCode();\n    if (!molecules[idCode]) {\n        const molecule = {};\n        molecules[idCode] = molecule;\n        molecule.smiles = currentMol.toSmiles();\n        molecule.combinedSmiles = newSmiles;\n        molecule.idCode = idCode;\n        molecule.molfile = currentMol.toMolfile();\n        const props = new OCL.MoleculeProperties(currentMol);\n        molecule.nbHAcceptor = props.acceptorCount;\n        molecule.nbHDonor = props.donorCount;\n        molecule.logP = props.logP;\n        molecule.logS = props.logS;\n        molecule.PSA = props.polarSurfaceArea;\n        molecule.nbRottable = props.rotatableBondCount;\n        molecule.nbStereoCenter = props.stereoCenterCount;\n        const mf = currentMol.getMolecularFormula();\n        molecule.mf = mf.formula;\n        molecule.mw = mf.relativeWeight;\n    }\n}\nfunction getCore(coreSmiles) {\n    const core = {\n        originalSmiles: coreSmiles,\n        smiles: coreSmiles.replaceAll(/\\[R(?<group>[1-4])]/g, '%5$<group>'),\n    };\n    for (let i = 0; i < MAX_R; i++) {\n        if (core.originalSmiles.includes(`[R${i}]`))\n            core[`R${i}`] = true;\n    }\n    return core;\n}\nfunction getRGroups(core, fragments) {\n    const rGroups = {};\n    for (const fragment of fragments) {\n        if (fragment.smiles) {\n            const smiles = updateRPosition(fragment.smiles);\n            for (let i = 0; i < MAX_R; i++) {\n                if (core[`R${i}`] && // we only consider the R that are in the core\n                    fragment[`R${i}`]) {\n                    if (!rGroups[`R${i}`]) {\n                        rGroups[`R${i}`] = {\n                            group: `R${i}`,\n                            smiles: [],\n                        };\n                    }\n                    rGroups[`R${i}`].smiles.push(smiles.replace(/\\[R]/, `(%5${i})`));\n                }\n            }\n        }\n    }\n    return Object.keys(rGroups).map((key) => rGroups[key]);\n}\nfunction updateRPosition(smiles) {\n    // R group should not be at the beginning\n    if (smiles.indexOf('[R]') !== 0)\n        return smiles;\n    if (smiles.length === 3)\n        return '[H][R]';\n    // we are in trouble ... we need to move the R\n    const newSmiles = smiles.replace('[R]', '');\n    // we need to check where we should put the R group\n    let level = 0;\n    for (let j = 0; j < newSmiles.length; j++) {\n        const currentChar = newSmiles.charAt(j);\n        const currentSubstring = newSmiles.slice(j);\n        if (currentChar === '(') {\n            level++;\n        }\n        else if (currentChar === ')') {\n            level--;\n        }\n        else if (level === 0) {\n            if (currentSubstring.match(/^[a-z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 1))}([R])${newSmiles.slice(j + 1)}`;\n            }\n            else if (currentSubstring.match(/^[A-Z][a-z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 2))}([R])${newSmiles.slice(j + 2)}`;\n            }\n            else if (currentSubstring.match(/^[A-Z]/)) {\n                return `${newSmiles.slice(0, Math.max(0, j + 1))}([R])${newSmiles.slice(j + 1)}`;\n            }\n        }\n    }\n    return smiles;\n}\n//# sourceMappingURL=combineSmiles.js.map","/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","import isutf8 from 'isutf8';\n/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","/**\n * Converts a string to camel case.\n * @param {string} name\n * @returns {string}\n */\nexport function getCamelCase(name) {\n    return name.replaceAll(/[ -][a-z]/g, (string) => string[1].toUpperCase());\n}\n//# sourceMappingURL=getCamelCase.js.map","import { getCamelCase } from './getCamelCase.js';\nexport function getParts(text) {\n    const lines = text.split(/\\r?\\n/);\n    const parts = { data: [] };\n    let currentPart = parts.data;\n    let currentLabel = '';\n    for (const line of lines) {\n        if (line.startsWith('</')) {\n            // close existing part\n            if (currentLabel !== line.slice(2, -1)) {\n                throw new Error('This should not happen');\n            }\n            currentLabel = '';\n            currentPart = parts.data;\n        }\n        else if (line.startsWith('<') && !line.includes('=')) {\n            // open new part\n            if (currentLabel) {\n                throw new Error('This should not happen');\n            }\n            currentLabel = line.slice(1, -1);\n            const target = getCamelCase(currentLabel);\n            parts[target] = [];\n            currentPart = parts[target];\n        }\n        else if (currentLabel) {\n            // add line to current part\n            currentPart.push(line);\n        }\n        else {\n            //data lines\n            currentPart.push(line);\n        }\n    }\n    return parts;\n}\n//# sourceMappingURL=getParts.js.map","export function parseColumnbProperties(lines) {\n    lines = lines.map((line) => {\n        const [key, value] = line.slice(1, -1).split('=');\n        return { key, value: value.slice(1, -1) };\n    });\n    const columnProperties = {};\n    let currentColumnName = '';\n    for (const line of lines) {\n        switch (line.key) {\n            case 'columnName':\n                currentColumnName = line.value;\n                columnProperties[currentColumnName] = {};\n                break;\n            case 'columnProperty':\n                {\n                    if (!currentColumnName) {\n                        throw new Error('This should not happen');\n                    }\n                    const [key, value] = line.value.split('\\t');\n                    columnProperties[currentColumnName][key] = value;\n                }\n                break;\n            default:\n                throw new Error('This should not happen');\n        }\n    }\n    for (const key in columnProperties) {\n        const columnPropery = columnProperties[key];\n        if (columnProperties[key].parent) {\n            const target = columnProperties[columnPropery.parent];\n            if (!target) {\n                throw new Error('Parent column not found');\n            }\n            if (!target.related) {\n                target.related = {};\n            }\n            target.related[columnPropery.specialType] = key;\n        }\n    }\n    return columnProperties;\n}\n//# sourceMappingURL=parseColumnbProperties.js.map","export function parseData(lines, options = {}) {\n    lines = lines.filter((line) => !line.match(/^\\s*$/));\n    const { columnProperties = {} } = options;\n    const headers = lines\n        .shift()\n        .split('\\t')\n        .map((header) => {\n        if (columnProperties[header]) {\n            return { label: header, ...columnProperties[header] };\n        }\n        return { label: header };\n    });\n    const entries = [];\n    const rawEntries = [];\n    for (const line of lines) {\n        const fields = line.split('\\t');\n        const rawEntry = {};\n        for (const [index, header] of headers.entries()) {\n            rawEntry[header.label] = fields[index];\n        }\n        rawEntries.push(rawEntry);\n        const entry = {};\n        for (const header of headers) {\n            if (header.parent)\n                continue;\n            entry[header.label] = valueEhnhancer(header, rawEntry);\n        }\n        entries.push(entry);\n    }\n    return { entries, rawEntries };\n}\nfunction valueEhnhancer(header, rawEntry) {\n    if (header?.specialType === 'rxncode') {\n        return `${rawEntry[header.label]}#${rawEntry[header.related.atomMapping]}#${rawEntry[header.related.idcoordinates2D]}`;\n    }\n    return rawEntry[header.label];\n}\n/*\nentry.rxnCode =\n*/\n//# sourceMappingURL=parseData.js.map","import { ensureString } from 'ensure-string';\nimport { getParts } from './utils/getParts.js';\nimport { parseColumnbProperties } from './utils/parseColumnbProperties.js';\nimport { parseData } from './utils/parseData.js';\n/**\n * Convert a DataWarrior database into a JSON object\n * @param {string} text\n * @returns\n */\nexport function parseDwar(text) {\n    text = ensureString(text);\n    const parts = getParts(text);\n    improveParts(parts);\n    return parts;\n}\nfunction improveParts(parts) {\n    for (const key in parts) {\n        switch (key) {\n            case 'columnProperties':\n                parts[key] = parseColumnbProperties(parts[key]);\n                break;\n            case 'data':\n                break;\n            default:\n                parts[key] = parseDefault(parts[key]);\n        }\n    }\n    const data = parseData(parts.data, {\n        columnProperties: parts.columnProperties,\n    });\n    parts.data = data.entries;\n    parts.rawData = data.rawEntries;\n}\nfunction parseDefault(lines) {\n    const result = {};\n    for (const line of lines) {\n        const [key, value] = line.slice(1, -1).split('=');\n        result[key] = value.slice(1, -1);\n    }\n    return result;\n}\n//# sourceMappingURL=parseDwar.js.map","import { getDiastereotopicAtomIDs } from '../diastereotopic/getDiastereotopicAtomIDs.js';\n/**\n * Returns various information about atoms in the molecule\n * @param {import('openchemlib').Molecule} [molecule]\n */\nexport function getAtomsInfo(molecule) {\n    const OCL = molecule.getOCL();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperRings);\n    const diaIDs = getDiastereotopicAtomIDs(molecule);\n    const results = [];\n    for (let i = 0; i < diaIDs.length; i++) {\n        const result = {\n            oclID: diaIDs[i],\n            extra: {\n                singleBonds: 0,\n                doubleBonds: 0,\n                tripleBonds: 0,\n                aromaticBonds: 0,\n                cnoHybridation: 0, // should be 1 (sp), 2 (sp2) or 3 (sp3)\n            },\n        };\n        const extra = result.extra;\n        results.push(result);\n        result.abnormalValence = molecule.getAtomAbnormalValence(i); // -1 is normal otherwise specified\n        result.charge = molecule.getAtomCharge(i);\n        result.cipParity = molecule.getAtomCIPParity(i);\n        result.color = molecule.getAtomColor(i);\n        result.customLabel = molecule.getAtomCustomLabel(i);\n        //        result.esrGroup=molecule.getAtomESRGroup(i);\n        //        result.esrType=molecule.getAtomESRType(i);\n        result.atomicNo = molecule.getAtomicNo(i);\n        result.label = molecule.getAtomLabel(i);\n        //        result.list=molecule.getAtomList(i);\n        //        result.listString=molecule.getAtomListString(i);\n        //        result.mapNo=molecule.getAtomMapNo(i);\n        result.mass = molecule.getAtomMass(i);\n        //        result.parity=molecule.getAtomParity(i);\n        //        result.pi=molecule.getAtomPi(i);\n        //        result.preferredStereoBond=molecule.getAtomPreferredStereoBond(i);\n        //        result.queryFeatures=molecule.getAtomQueryFeatures(i);\n        result.radical = molecule.getAtomRadical(i);\n        result.ringBondCount = molecule.getAtomRingBondCount(i);\n        //        result.ringCount=molecule.getAtomRingCount(i);\n        result.ringSize = molecule.getAtomRingSize(i);\n        result.x = molecule.getAtomX(i);\n        result.y = molecule.getAtomY(i);\n        result.z = molecule.getAtomZ(i);\n        result.allHydrogens = molecule.getAllHydrogens(i);\n        result.connAtoms = molecule.getConnAtoms(i);\n        result.allConnAtoms = molecule.getAllConnAtoms(i);\n        result.implicitHydrogens =\n            result.allHydrogens + result.connAtoms - result.allConnAtoms;\n        result.isAromatic = molecule.isAromaticAtom(i);\n        result.isAllylic = molecule.isAllylicAtom(i);\n        result.isStereoCenter = molecule.isAtomStereoCenter(i);\n        result.isRing = molecule.isRingAtom(i);\n        result.isSmallRing = molecule.isSmallRingAtom(i);\n        result.isStabilized = molecule.isStabilizedAtom(i);\n        // todo HACK to circumvent bug in OCL that consider than an hydrogen is connected to itself\n        result.extra.singleBonds =\n            result.atomicNo === 1 ? 0 : result.implicitHydrogens;\n        for (let j = 0; j < molecule.getAllConnAtoms(i); j++) {\n            const bond = molecule.getConnBond(i, j);\n            const bondOrder = molecule.getBondOrder(bond);\n            if (molecule.isAromaticBond(bond)) {\n                extra.aromaticBonds++;\n            }\n            else if (bondOrder === 1) {\n                // not an hydrogen\n                extra.singleBonds++;\n            }\n            else if (bondOrder === 2) {\n                extra.doubleBonds++;\n            }\n            else if (bondOrder === 3) {\n                extra.tripleBonds++;\n            }\n        }\n        result.extra.totalBonds =\n            result.extra.singleBonds +\n                result.extra.doubleBonds +\n                result.extra.tripleBonds +\n                result.extra.aromaticBonds;\n        if (result.atomicNo === 6) {\n            result.extra.cnoHybridation = result.extra.totalBonds - 1;\n        }\n        else if (result.atomicNo === 7) {\n            result.extra.cnoHybridation = result.extra.totalBonds;\n        }\n        else if (result.atomicNo === 8) {\n            result.extra.cnoHybridation = result.extra.totalBonds + 1;\n        }\n        else if (result.atomicNo === 1) {\n            const connectedAtom = molecule.getAllConnAtoms(i) === 0\n                ? 0\n                : molecule.getAtomicNo(molecule.getConnAtom(i, 0));\n            result.extra.hydrogenOnAtomicNo = connectedAtom;\n            if (connectedAtom === 7 || connectedAtom === 8) {\n                result.extra.labileHydrogen = true;\n            }\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=getAtomsInfo.js.map","export function getImplicitHydrogensCount(molecule, atomID) {\n    return molecule.getImplicitHydrogens(atomID);\n}\n//# sourceMappingURL=getImplicitHydrogensCount.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.atomSorter = atomSorter;\n/**\n * Implementation of the Hill system for sorting atoms\n * https://en.wikipedia.org/wiki/Chemical_formula#Hill_system\n * @param a - first atom to compare\n * @param b - second atom to compare\n * @returns A value suitable for use in Array.prototype.sort.\n */\nfunction atomSorter(a, b) {\n    if (a === b)\n        return 0;\n    if (a === 'C')\n        return -1;\n    if (b === 'C')\n        return 1;\n    if (a === 'H')\n        return -1;\n    if (b === 'H')\n        return 1;\n    if (a < b)\n        return -1;\n    return 1;\n}\n//# sourceMappingURL=index.js.map","import { atomSorter } from 'atom-sorter';\n/**\n * Calculate the molecular formula in 'chemcalc' notation taking into account fragments, isotopes and charges\n * @param {import('openchemlib').Molecule} molecule - an instance of OCL.Molecule\n * @returns {object}\n */\nexport function getMF(molecule) {\n    const entries = molecule.getFragments();\n    const result = {};\n    let parts = [];\n    const allAtoms = [];\n    for (const entry of entries) {\n        const mf = getFragmentMF(entry, allAtoms);\n        parts.push(mf);\n    }\n    const counts = {};\n    for (const part of parts) {\n        if (!counts[part])\n            counts[part] = 0;\n        counts[part]++;\n    }\n    parts = [];\n    for (const key of Object.keys(counts).sort()) {\n        if (counts[key] > 1) {\n            parts.push(counts[key] + key);\n        }\n        else {\n            parts.push(key);\n        }\n    }\n    result.parts = parts;\n    result.mf = toMFString(allAtoms);\n    return result;\n}\nfunction getFragmentMF(molecule, allAtoms) {\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const atom = {};\n        atom.charge = molecule.getAtomCharge(i);\n        atom.label = molecule.getAtomLabel(i);\n        atom.mass = molecule.getAtomMass(i);\n        atom.implicitHydrogens = molecule.getImplicitHydrogens(i);\n        if (atom.label === '?')\n            atom.label = 'R';\n        atoms.push(atom);\n        allAtoms.push(atom);\n    }\n    return toMFString(atoms);\n}\nfunction toMFString(atoms) {\n    let charge = 0;\n    const mfs = {};\n    for (const atom of atoms) {\n        let label = atom.label;\n        charge += atom.charge;\n        if (atom.mass) {\n            label = `[${atom.mass}${label}]`;\n        }\n        const mfAtom = mfs[label];\n        if (!mfAtom) {\n            mfs[label] = 0;\n        }\n        mfs[label] += 1;\n        if (atom.implicitHydrogens) {\n            if (!mfs.H)\n                mfs.H = 0;\n            mfs.H += atom.implicitHydrogens;\n        }\n    }\n    let mf = '';\n    const keys = Object.keys(mfs).sort(atomSorter);\n    for (const key of keys) {\n        mf += key;\n        if (mfs[key] > 1)\n            mf += mfs[key];\n    }\n    if (charge > 0) {\n        mf += `(+${charge > 1 ? charge : ''})`;\n    }\n    else if (charge < 0) {\n        mf += `(${charge < -1 ? charge : '-'})`;\n    }\n    return mf;\n}\n//# sourceMappingURL=getMF.js.map","/**\n * Returns the charge of a molecule\n * @param {import('openchemlib').Molecule} molecule - an instance of OCL.Molecule\n * @returns {number}\n */\nexport function getCharge(molecule) {\n    let charge = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        charge += molecule.getAtomCharge(i);\n    }\n    return charge;\n}\n//# sourceMappingURL=getCharge.js.map","/**\n * We have 2 molfiles and we would like to map the atom number from one to the other.\n * We expect that both molfiles contain the same atoms that can be in a different order.\n * @param {typeof import('openchemlib')} OCL - openchemlib library\n * @param {string} from\n * @param {string} to\n * @returns {{fromTo: number[], toFrom: number[]}} - fromTo is an array of the same length as the number of atoms in the from molfile. Each element is the index of the corresponding atom in the to molfile. toFrom is the opposite.\n */\nexport function getMolfilesMapping(OCL, from, to) {\n    const { Molecule } = OCL;\n    const fromF = from.replaceAll(' H ', ' X ');\n    const toF = to.replaceAll(' H ', ' X ');\n    // we may ignore mapping because we should not have hydrogens anymore\n    const fromMoleculeF = Molecule.fromMolfile(fromF);\n    const toMoleculeF = Molecule.fromMolfile(toF);\n    if (fromMoleculeF.getIDCode() !== toMoleculeF.getIDCode()) {\n        // only a problem of hydrogens ?\n        const fromMolecule = Molecule.fromMolfile(from);\n        const toMolecule = Molecule.fromMolfile(to);\n        if (fromMolecule.getIDCode() === toMolecule.getIDCode()) {\n            throw new Error('Molecules do not have the same explicit hydrogens');\n        }\n        else {\n            throw new Error('Molecules are different');\n        }\n    }\n    const fromFinalRanks = [...fromMoleculeF.getFinalRanks()];\n    const toFinalRanks = [...toMoleculeF.getFinalRanks()];\n    // need now to create the mapping\n    const fromTo = [];\n    const toFrom = [];\n    for (let i = 0; i < fromFinalRanks.length; i++) {\n        const fromRank = fromFinalRanks[i];\n        const toRank = toFinalRanks.indexOf(fromRank);\n        if (toRank === -1) {\n            throw new Error('Rank not found. This should never happen.');\n        }\n        fromTo[i] = toRank;\n        toFrom[toRank] = i;\n    }\n    return { fromTo, toFrom };\n}\n//# sourceMappingURL=getMolfilesMapping.js.map","const unsaturationsObject = {\n    O: 0,\n    N: 1,\n    H: -1,\n    C: 2,\n    F: -1,\n    Si: 2,\n    Cl: -1,\n    Br: -1,\n    I: -1,\n};\n/**\n * Simplified version of the calculation in mf-parser\n * @param {string} mf\n * @returns\n */\nexport function getUnsaturation(mf) {\n    if (!mf)\n        return undefined;\n    // split a molecular formula into its elements\n    const elements = mf.match(/[A-Z][a-z]*\\d*/g);\n    if (!elements || elements.length === 0)\n        return undefined;\n    let unsaturation = 0;\n    for (let i = 0; i < elements.length; i++) {\n        const element = elements[i];\n        const matches = element.match(/([A-Z][a-z]?)(\\d*)/);\n        const symbol = matches[1];\n        const count = matches[2] ? Number.parseInt(matches[2], 10) : 1;\n        const elementObject = unsaturationsObject[symbol];\n        if (elementObject === undefined) {\n            return undefined;\n        }\n        unsaturation += unsaturationsObject[symbol] * count;\n    }\n    return unsaturation / 2 + 1;\n}\n//# sourceMappingURL=getUnsaturation.js.map","// this page allows to debug the hints: https://my.cheminfo.org/?viewURL=https%3A%2F%2Fmyviews.cheminfo.org%2Fdb%2Fvisualizer%2Fentry%2F108024089da99d0cb70a57724486d0c6%2Fview.json\nimport { TopicMolecule } from '../topic/TopicMolecule.js';\nimport { getUnsaturation } from './getUnsaturation.js';\nconst defaultPossibleHints = [\n    {\n        idCode: String.raw `eF@Hp\\pcc`,\n        message: 'What about a non-aromatic ring?',\n    },\n    {\n        idCode: 'eF@HpZpk|X`',\n        message: 'You should consider an aromatic ring.',\n    },\n    {\n        idCode: 'gFp@DiTt@@B',\n        message: 'Did you think about benzene derivatives?',\n    },\n    {\n        idCode: 'eFHBLFLYpB@QVE_cD',\n        message: 'An aromatic cycle can be an heterocycle.',\n    },\n    {\n        idCode: 'eMHJN`q[N@PBGN@PBJhjU~JU@',\n        anyMatches: ['gFx@@eJf`@@P', 'gKP@Di\\\\YZ@qas`D@`'],\n        message: 'There could be more than one heteroatom in an aromatic cycle.',\n    },\n    {\n        idCode: 'gFp@DiTvjhCYbKFuXUEIVTUUWxlTeZMX',\n        anyMatches: ['gKP@Di\\\\Zj@vhbqkPjJRlhj?FbdkQ`'],\n        message: 'Aromatic cycles can have 5 or 6 atoms.',\n        remarks: 'Proposed 5 and it is 6',\n    },\n    {\n        idCode: 'gKP@Di\\\\Zj@vhbqkPjJRlhj?FbdkQ`',\n        anyMatches: ['gFp@DiTvjhCYbKFuXUEIVTUUWxlTeZMX'],\n        message: 'Aromatic cycles can have 5 or 6 atoms.',\n        remarks: 'Proposed 6 and it is 5',\n    },\n    {\n        idCode: 'gFx@@eJf`@@P',\n        message: 'Did you think about pyridine derivatives?',\n    },\n    {\n        idCode: 'gNp@LdbLjj@vdrpqSdm_qhXiKT',\n        message: 'I would consider bicyclo products.',\n        remarks: 'One atom bridge',\n    },\n    {\n        idCode: 'eFHBJD',\n        message: 'Adding a carbonyl could help.',\n    },\n    {\n        idCode: 'eMHAIhMi}EqfFBmN?vP',\n        message: 'You should consider an alcohol.',\n    },\n    {\n        idCode: 'eMB@HRZCBKSFXXJt{?Y@',\n        message: 'You should consider a thiol.',\n    },\n    {\n        idCode: 'gJQ@@eKU@[KFJtLAa`sAUR]g_zlP',\n        message: 'You should consider an ether.',\n    },\n    {\n        idCode: 'gJQ@@eKU@[KFJtLAa`r`q?EAcuX`',\n        anyMatches: ['gJQ@@eKU@[KFJtLAa`?uX`'],\n        message: 'An ether can be in a cycle.',\n    },\n    {\n        idCode: 'gJPH@DIRuPFrqbmC@XXLpUTgYw~kD',\n        message: 'You should consider a thioether.',\n    },\n    {\n        idCode: 'gJPH@DIRuPFrqbmC@XXLhL_qPX}VH',\n        anyMatches: ['gJPH@DIRuPFrqbmC@XXO}VH'],\n        message: 'A thioether can be in a cycle.',\n    },\n    {\n        idCode: 'eM`AIhLHmLYa`kSo}d',\n        message: 'You should consider a primary amine.',\n        remarks: 'primary',\n    },\n    {\n        idCode: 'gJX@@eKU@XPVVLUhXCCAUIv]?jq@',\n        message: 'You should consider a secondary amine.',\n        remarks: 'secondary',\n    },\n    {\n        idCode: 'gNx@@eRmUPFDElZxxppVFAppUv\\\\WUw~xu`',\n        message: 'You should consider a tertiary amine.',\n        remarks: 'tertiary',\n    },\n    {\n        idCode: 'gJX@@eKU@XPVVLUhXCCAeAcUIv]~JCGjq@',\n        anyMatches: ['gJX@@eKU@XPVVLUhXCCAfBjd{N?uX`'],\n        message: 'A secondary amine can be in a cycle.',\n        remarks: 'secondary cyclic amine',\n    },\n    {\n        idCode: 'gNx@@eRmUPFDElZxxppVFAppYPXuv\\\\WUwxhL^xu`',\n        anyMatches: ['gNx@@eRmUPFDElZxxppVFAppY`j{NKj{?\\\\Zp'],\n        message: 'A tertiary amine can be in a cycle.',\n        remarks: 'tertiary cyclic amine',\n    },\n    {\n        idCode: 'gGP`@df]j`MekEZFBppUa]?ju@',\n        message: 'What about an ester?',\n    },\n    {\n        idCode: 'gGP`@df]j`MekEZFBppYdZpn?FQzmP',\n        anyMatches: ['gGP`@df]j`MekEZFBppUa]?ju@'],\n        message: 'An ester can be in a cycle.',\n    },\n    {\n        idCode: 'gGY@DDf]j`MekEZFBppUa]?ju@',\n        message: 'There is an amide function in the molecule.',\n    },\n    {\n        idCode: 'gGY@DDf]j`MekEZFBppYdZpn?FQzmP',\n        anyMatches: ['gGY@DDf]j`MekEZFBppUa]?ju@@'],\n        message: 'An amide can be in a cycle.',\n    },\n    {\n        idCode: 'gCi@DDfZ@~btl',\n        message: 'There is a primary amide in the molecule.',\n    },\n    {\n        idCode: 'gC``@dfZ@~bl',\n        message: 'You should think about carboxylic acids. The OH signal may be very wide.',\n    },\n    {\n        idCode: String.raw `eF@Hh\\q@`,\n        message: 'What about having an olefin?',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqC^LmV[m`',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'meta',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB~LmWkM`',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'para',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB^JoV[m',\n        anyMatches: ['gFp@DiTt@@CBqXwd@'],\n        message: 'Did you think about disubstituted aromatic rings?',\n        remarks: 'ortho',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB^JoV[m',\n        anyMatches: ['gFp@DiTt@@CqC^LmV[m`', 'gFp@DiTt@@CqB~LmWkM`'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'ortho',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqC^LmV[m`',\n        anyMatches: ['gFp@DiTt@@CqB^JoV[m', 'gFp@DiTt@@CqB~LmWkM`'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'meta',\n    },\n    {\n        idCode: 'gFp@DiTt@@CqB~LmWkM`',\n        anyMatches: ['gFp@DiTt@@CqC^LmV[m`', 'gFp@DiTt@@CqB^JoV[m'],\n        message: 'Disubstituted aromatic ring can be ortho (1,2), meta (1,3) or para (1,4).',\n        remarks: 'para',\n    },\n    {\n        idCode: 'gGP`@df]j`H',\n        anyMatches: ['gGP`@dfUj`H'],\n        message: 'You should check the orientation of the ester.',\n    },\n    {\n        idCode: String.raw `gOq@@drm\\@@Aa@`,\n        message: 'Alcohols on aromatic ring may have surprising chemical shifts.',\n    },\n    {\n        idCode: String.raw `gOx@@drm\\@@A}A@`,\n        message: 'NH on aromatic ring may have surprising chemical shifts.',\n    },\n    {\n        idCode: 'eFHBJGuP',\n        message: 'Hydrogens on a carbonyl have very high chemical shifts.',\n    },\n];\n/**\n *\n * @param {import('openchemlib').Molecule} correct\n * @param {import('openchemlib').Molecule} proposed\n * @param {Record<string,any>} [options ={}]\n * @param {Array} [options.possibleHints=defaultPossibleHints]\n * @returns\n */\nexport function getNMRHints(correct, proposed, options = {}) {\n    const hints = [\n        ...checkMF(correct, proposed),\n        ...checkUnsaturation(correct, proposed),\n        ...checkStereoAndTautomer(correct, proposed),\n    ];\n    const { possibleHints = defaultPossibleHints } = options;\n    const OCL = correct.getOCL();\n    const searcherCorrect = new OCL.SSSearcher();\n    searcherCorrect.setMolecule(correct);\n    const searcherAnswer = new OCL.SSSearcher();\n    searcherAnswer.setMolecule(proposed);\n    for (const possibleHint of possibleHints) {\n        const { anyMatches } = possibleHint;\n        if (anyMatches) {\n            // we filter the molecules so they match at least one of the anyMatches\n            let match = false;\n            for (const anyMatch of anyMatches) {\n                const matchFragment = OCL.Molecule.fromIDCode(anyMatch);\n                searcherAnswer.setFragment(matchFragment);\n                if (searcherAnswer.isFragmentInMolecule()) {\n                    match = true;\n                    break;\n                }\n            }\n            if (!match)\n                continue;\n        }\n        const fragment = OCL.Molecule.fromIDCode(possibleHint.idCode);\n        searcherCorrect.setFragment(fragment);\n        searcherAnswer.setFragment(fragment);\n        if (searcherCorrect.isFragmentInMolecule() &&\n            !searcherAnswer.isFragmentInMolecule()) {\n            hints.push(possibleHint);\n        }\n    }\n    // we suggest symmetry only if MF is correct\n    if (isMFCorrect(correct, proposed)) {\n        hints.push(...checkSymmetry(correct, proposed));\n    }\n    return hints.map((hint) => ({\n        ...hint,\n        hash: getHash(JSON.stringify(hint)),\n    }));\n}\nfunction isMFCorrect(correct, answer) {\n    const mfCorrect = correct.getMolecularFormula().formula;\n    const mfAnswer = answer.getMolecularFormula().formula;\n    return mfCorrect === mfAnswer;\n}\nfunction checkMF(correct, answer) {\n    if (isMFCorrect(correct, answer))\n        return [];\n    return [\n        {\n            message: 'You should check the molecular formula.',\n        },\n    ];\n}\nfunction checkUnsaturation(correct, answer) {\n    const mfCorrect = correct.getMolecularFormula().formula;\n    const mfAnswer = answer.getMolecularFormula().formula;\n    if (mfCorrect !== mfAnswer) {\n        const unsaturationCorrect = getUnsaturation(mfCorrect);\n        const unsaturationAnswer = getUnsaturation(mfAnswer);\n        if (unsaturationCorrect === unsaturationAnswer ||\n            unsaturationAnswer === undefined ||\n            unsaturationCorrect === undefined) {\n            return [];\n        }\n        if (unsaturationCorrect > unsaturationAnswer) {\n            return [\n                {\n                    message: 'The proposed molecule has a double bond equivalent (DBE) that is too low.',\n                },\n            ];\n        }\n        else {\n            return [\n                {\n                    message: 'The proposed molecule has a double bond equivalent (DBE) that is too high.',\n                },\n            ];\n        }\n    }\n    return [];\n}\nfunction checkStereoAndTautomer(correct, answer) {\n    if (correct.getIDCode() === answer.getIDCode())\n        return [];\n    if (getNoStereoIDCode(correct) === getNoStereoIDCode(answer)) {\n        return [\n            {\n                message: 'There is only a problem with stereochemistry.',\n            },\n        ];\n    }\n    if (getTautomerIDCode(correct) === getTautomerIDCode(answer)) {\n        return [\n            {\n                message: \"Weird, you didn't draw the expected tautomer.\",\n            },\n        ];\n    }\n    return [];\n}\nfunction checkSymmetry(correct, answer) {\n    const nbCorrectRanks = Object.keys(new TopicMolecule(correct).getDiaIDsObject()).length;\n    const nbAnswerRanks = Object.keys(new TopicMolecule(answer).getDiaIDsObject()).length;\n    if (nbCorrectRanks === nbAnswerRanks)\n        return [];\n    if (nbCorrectRanks > nbAnswerRanks) {\n        return [\n            {\n                message: 'The proposed molecule is too symmetric.',\n            },\n        ];\n    }\n    else {\n        return [\n            {\n                message: 'The proposed molecule is not symmetric enough.',\n            },\n        ];\n    }\n}\nfunction getTautomerIDCode(molecule) {\n    const OCL = molecule.getOCL();\n    return OCL.CanonizerUtil.getIDCode(molecule, OCL.CanonizerUtil.TAUTOMER);\n}\nfunction getNoStereoIDCode(molecule) {\n    const OCL = molecule.getOCL();\n    return OCL.CanonizerUtil.getIDCode(molecule, OCL.CanonizerUtil.NOSTEREO);\n}\n/*\n    https://github.com/bryc/code/blob/master/jshash/experimental/cyrb53.js\n    cyrb53a (c) 2023 bryc (github.com/bryc)\n    License: Public domain. Attribution appreciated.\n    The original cyrb53 has a slight mixing bias in the low bits of h1.\n    This shouldn't be a huge problem, but I want to try to improve it.\n    This new version should have improved avalanche behavior, but\n    it is not quite final, I may still find improvements.\n    So don't expect it to always produce the same output.\n*/\nfunction getHash(str, seed = 0) {\n    let h1 = 0xdeadbeef ^ seed;\n    let h2 = 0x41c6ce57 ^ seed;\n    for (let i = 0, ch; i < str.length; i++) {\n        ch = str.codePointAt(i);\n        h1 = Math.imul(h1 ^ ch, 0x85ebca77);\n        h2 = Math.imul(h2 ^ ch, 0xc2b2ae3d);\n    }\n    h1 ^= Math.imul(h1 ^ (h2 >>> 15), 0x735a2d97);\n    h2 ^= Math.imul(h2 ^ (h1 >>> 15), 0xcaf649a9);\n    h1 ^= h2 >>> 16;\n    h2 ^= h1 >>> 16;\n    return 2097152 * (h2 >>> 0) + (h1 >>> 11);\n}\n//# sourceMappingURL=getNMRHints.js.map","import { getNMRHints } from './getNMRHints.js';\n/**\n *\n * @param {import('openchemlib').Molecule} correct\n * @param {import('openchemlib').Molecule} proposed\n * @param {Array} providedHints\n */\nexport function getNextNMRHint(correct, proposed, providedHints) {\n    const hints = getNMRHints(correct, proposed);\n    const possibleHints = hints.filter((possibleHint) => !providedHints.some((providedHint) => possibleHint.hash === providedHint.hash));\n    if (possibleHints.length === 0)\n        return undefined;\n    return {\n        ...possibleHints[0],\n        idCode: proposed.getIDCode(),\n    };\n}\n//# sourceMappingURL=getNextNMRHint.js.map","let toxicityPredictor;\nlet druglikenessPredictor;\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {boolean} [options.includeToxicities=false]\n * @param {boolean} [options.includeDruglikeness=false]\n */\nexport function getProperties(molecule, options = {}) {\n    const { includeToxicities = false, includeDruglikeness = false } = options;\n    const OCL = molecule.getOCL();\n    if (!OCL.MoleculeProperties) {\n        throw new Error('OCL.MoleculeProperties is not defined');\n    }\n    const props = new OCL.MoleculeProperties(molecule);\n    const moleculeFormula = molecule.getMolecularFormula();\n    const result = {\n        acceptorCount: props.acceptorCount,\n        donorCount: props.donorCount,\n        logP: props.logP,\n        logS: props.logS,\n        polarSurfaceArea: props.polarSurfaceArea,\n        rotatableBondCount: props.rotatableBondCount,\n        stereoCenterCount: props.stereoCenterCount,\n        mw: moleculeFormula.relativeWeight,\n        mf: moleculeFormula.formula,\n    };\n    if (includeToxicities) {\n        const { ToxicityPredictor } = molecule.getOCL();\n        if (!ToxicityPredictor) {\n            throw new Error('OCL.ToxicityPredictor is not defined');\n        }\n        if (!toxicityPredictor) {\n            toxicityPredictor = new ToxicityPredictor();\n        }\n        result.mutagenic = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_MUTAGENIC);\n        result.tumorigenic = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_TUMORIGENIC);\n        result.irritant = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_IRRITANT);\n        result.reproductiveEffective = toxicityPredictor.assessRisk(molecule, ToxicityPredictor.TYPE_REPRODUCTIVE_EFFECTIVE);\n    }\n    if (includeDruglikeness) {\n        const { DruglikenessPredictor } = molecule.getOCL();\n        if (!DruglikenessPredictor) {\n            throw new Error('OCL.DruglikenessPredictor is not defined');\n        }\n        if (!druglikenessPredictor) {\n            druglikenessPredictor = new DruglikenessPredictor();\n        }\n        result.drugLikeness = druglikenessPredictor.assessDruglikeness(molecule);\n    }\n    if (result.drugLikeness !== undefined && result.mutagenic !== undefined) {\n        result.drugScore = OCL.DrugScoreCalculator.calculate(result.logP, result.polarSurfaceArea, result.mw, result.drugLikeness, [\n            result.mutagenic,\n            result.tumurogenic,\n            result.irritant,\n            result.reproductiveEffective,\n        ]);\n    }\n    return result;\n}\n//# sourceMappingURL=getProperties.js.map","/**\n * Calculate the molecular formula in 'chemcalc' notation taking into account fragments, isotopes and charges\n * @param {OCL.Molecule} [molecule] - an instance of OCL.Molecule\n * @returns {}\n */\nexport function getAtoms(molecule) {\n    const entries = molecule.getFragments();\n    const atoms = {};\n    const result = { atoms, parts: [] };\n    for (const entry of entries) {\n        const part = {};\n        result.parts.push(part);\n        appendAtomPart(entry, atoms, part);\n    }\n    return result;\n}\nfunction appendAtomPart(molecule, atoms, part) {\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const label = molecule.getAtomLabel(i);\n        if (!atoms[label]) {\n            atoms[label] = 0;\n        }\n        atoms[label] += 1;\n        if (!part[label]) {\n            part[label] = 0;\n        }\n        part[label] += 1;\n        const implicitHydrogens = molecule.getImplicitHydrogens(i);\n        if (implicitHydrogens) {\n            if (!atoms.H) {\n                atoms.H = 0;\n            }\n            atoms.H += implicitHydrogens;\n            if (!part.H) {\n                part.H = 0;\n            }\n            part.H += implicitHydrogens;\n        }\n    }\n}\n//# sourceMappingURL=getAtoms.js.map","/**\n * Return the number of Hydroxyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Hydroxyl groups'\n */\nexport function nbOH(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let carbonyl = false;\n            let hydroxyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 1 &&\n                        molecule.getAllHydrogens(neighbourAtom) > 0) {\n                        // If there is more than a Hydroxyl in the same carbon atome they are not couted as Hydroxyl groups\n                        if (hydroxyl) {\n                            hydroxyl = false;\n                            break;\n                        }\n                        hydroxyl = true;\n                    }\n                    else if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is Carbonyl group on the same carbon atom it is not couted as Hydroxyl group\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Hydroxyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (!carbonyl && hydroxyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbOH.js.map","/**\n * Return the number of Carboxyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Carboxyl groups'\n */\nexport function nbCOOH(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let carbonyl = false;\n            let hydroxyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 1 &&\n                        molecule.getAllHydrogens(neighbourAtom) > 0) {\n                        // If there is more than a Hydroxyl in the same carbon atom it is not couted as Carboxyl group\n                        if (hydroxyl) {\n                            hydroxyl = false;\n                            break;\n                        }\n                        hydroxyl = true;\n                    }\n                    else if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is more than one carbonyl in the same carbon atom it is not count as Carboxyl group\n                        if (carbonyl) {\n                            carbonyl = false;\n                            break;\n                        }\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Carboxyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (carbonyl && hydroxyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCOOH.js.map","/**\n * Return the number of Carbonyl groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Carbonyl groups'\n */\nexport function nbCHO(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        // if there is not at least one hydrogen in the carbon atom there can not be a carbonyl group\n        if (molecule.getAtomicNo(i) === 6 && molecule.getAllHydrogens(i) > 0) {\n            let carbonyl = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 8) {\n                    if (molecule.getBondOrder(neighbourBond) === 2) {\n                        // If there is more than one carbonyl group on the same carbon atom they are not counted as carbonyl groups\n                        if (carbonyl) {\n                            carbonyl = false;\n                            break;\n                        }\n                        carbonyl = true;\n                    }\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Carbonyl group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (carbonyl && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCHO.js.map","/**\n * Return the number of Primary amine groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Primary amine groups'\n */\nexport function nbNH2(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let amine = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 7 &&\n                    molecule.getBondOrder(neighbourBond) === 1 &&\n                    molecule.getAllHydrogens(neighbourAtom) > 1) {\n                    // If there is more than a Primary amine in the same carbon atom they are not couted as Primary amines groups\n                    if (amine) {\n                        amine = false;\n                        break;\n                    }\n                    amine = true;\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Primary amine group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (amine && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbNH2.js.map","/**\n * Return the number of Nitrile groups in a molecule or fragment\n * @param {import('openchemlib').Molecule} molecule\n * @returns {number} 'Number of Nitrile groups'\n */\nexport function nbCN(molecule) {\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (molecule.getAtomicNo(i) === 6) {\n            let cn = false;\n            let carbonOrHydrogen = true;\n            for (let neighbour = 0; neighbour < molecule.getConnAtoms(i); neighbour++) {\n                const neighbourAtom = molecule.getConnAtom(i, neighbour);\n                const neighbourBond = molecule.getConnBond(i, neighbour);\n                if (molecule.getAtomicNo(neighbourAtom) === 7 &&\n                    molecule.getBondOrder(neighbourBond) === 3) {\n                    // If there is more than one Nitrile group in the same carbon atome they are not counted as Nitrile groups\n                    if (cn) {\n                        cn = false;\n                        break;\n                    }\n                    cn = true;\n                }\n                else if (\n                // If there is not at least one carbon or hydrogen as neighbour atom it is not counted as Nitrile group\n                molecule.getAtomicNo(neighbourAtom) !== 6 &&\n                    molecule.getAtomicNo(neighbourAtom) !== 1) {\n                    carbonOrHydrogen = false;\n                }\n            }\n            if (cn && carbonOrHydrogen)\n                counter++;\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbCN.js.map","/**\n * Return the number of labile protons being either on O, N, Br, Cl, F, I or S\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {Array<number>} [options.atomicNumbers=[7, 8, 9, 16, 17, 35, 53]] - atomic numbers of the labile protons\n * @returns {number} 'Number of labile protons'\n */\nexport function nbLabileH(molecule, options = {}) {\n    const { atomicNumbers = [7, 8, 9, 16, 17, 35, 53] } = options;\n    let counter = 0;\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        if (atomicNumbers.includes(molecule.getAtomicNo(i))) {\n            counter += molecule.getAllHydrogens(i);\n        }\n    }\n    return counter;\n}\n//# sourceMappingURL=nbLabileH.js.map","/**\n * Toggle presence of implicity hydrogens on/off\n * @param molecule\n * @param atomID\n */\nexport function toggleHydrogens(molecule, atomID) {\n    if (molecule.getImplicitHydrogens(atomID) === 0) {\n        const atomsToDelete = [];\n        for (let i = 0; i < molecule.getAllConnAtoms(atomID); i++) {\n            const connectedAtom = molecule.getConnAtom(atomID, i);\n            if (molecule.getAtomicNo(connectedAtom) === 1) {\n                atomsToDelete.push(connectedAtom);\n            }\n        }\n        molecule.deleteAtoms(atomsToDelete);\n    }\n    else {\n        molecule.addImplicitHydrogens(atomID);\n    }\n}\n//# sourceMappingURL=toggleHydrogens.js.map","import { getDiastereotopicAtomIDsAndH } from '../diastereotopic/getDiastereotopicAtomIDsAndH.js';\nimport { getGroupedDiastereotopicAtomIDs } from '../diastereotopic/getGroupedDiastereotopicAtomIDs.js';\nexport function toVisualizerMolfile(molecule, options = {}) {\n    const { diastereotopic, heavyAtomHydrogen } = options;\n    let highlight = [];\n    let atoms = {};\n    if (diastereotopic) {\n        const hydrogenInfo = {};\n        const extendedIDs = getDiastereotopicAtomIDsAndH(molecule);\n        for (const line of extendedIDs) {\n            hydrogenInfo[line.oclID] = line;\n        }\n        const diaIDs = getGroupedDiastereotopicAtomIDs(molecule);\n        for (const diaID of diaIDs) {\n            atoms[diaID.oclID] = diaID.atoms;\n            highlight.push(diaID.oclID);\n            if (heavyAtomHydrogen &&\n                hydrogenInfo[diaID.oclID] &&\n                hydrogenInfo[diaID.oclID].nbHydrogens > 0) {\n                for (const id of hydrogenInfo[diaID.oclID].hydrogenOCLIDs) {\n                    highlight.push(id);\n                    atoms[id] = diaID.atoms;\n                }\n            }\n        }\n    }\n    else {\n        const size = molecule.getAllAtoms();\n        highlight = new Array(size).fill(0).map((a, index) => index);\n        atoms = highlight.map((a) => [a]);\n    }\n    const molfile = {\n        type: 'mol2d',\n        value: molecule.toMolfile(),\n        _highlight: highlight,\n        _atoms: atoms,\n    };\n    return molfile;\n}\n//# sourceMappingURL=toVisualizerMolfile.js.map","/**\n * Calculates the path between 2 atoms\n * @param {import('openchemlib').Molecule} molecule\n * @param {number} from - index of the first atom\n * @param {number} to - index of the end atom\n * @param {number} maxLength - maximal length of the path\n */\nexport function getPathAndTorsion(molecule, from, to, maxLength) {\n    const originalAtoms = []; // path before renumbering\n    molecule.getPath(originalAtoms, from, to, maxLength + 1);\n    let torsion;\n    if (originalAtoms.length === 4) {\n        torsion = molecule.calculateTorsion(originalAtoms);\n    }\n    return {\n        atoms: originalAtoms,\n        from,\n        to,\n        torsion,\n        length: originalAtoms.length - 1,\n    };\n}\n//# sourceMappingURL=getPathAndTorsion.js.map","import { getHoseCodesForPath } from '../hose/getHoseCodesForPath.js';\nimport { getAtomsInfo } from '../util/getAtomsInfo.js';\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix.js';\nimport { getPathAndTorsion } from './getPathAndTorsion.js';\nlet fragment;\n/**\n *\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [options.fromLabel='H']\n * @param {string} [options.toLabel='H']\n * @param {number} [options.minLength=1]\n * @param {number} [options.maxLength=4]\n * @param {boolean} [options.withHOSES=false]\n */\nexport function getPathsInfo(molecule, options = {}) {\n    const { fromLabel = 'H', toLabel = 'H', minLength = 1, maxLength = 4, withHOSES = false, } = options;\n    const OCL = molecule.getOCL();\n    if (!fragment) {\n        fragment = new OCL.Molecule(0, 0);\n    }\n    const fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n    const toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n    // we need to find all the atoms 'fromLabel' and 'toLabel'\n    const atomsInfo = getAtomsInfo(molecule);\n    const pathLengthMatrix = getConnectivityMatrix(molecule, {\n        pathLength: true,\n    });\n    for (let from = 0; from < molecule.getAllAtoms(); from++) {\n        atomsInfo[from].paths = [];\n        for (let to = 0; to < molecule.getAllAtoms(); to++) {\n            if (from !== to &&\n                molecule.getAtomicNo(from) === fromAtomicNumber &&\n                molecule.getAtomicNo(to) === toAtomicNumber) {\n                const pathLength = pathLengthMatrix[from][to];\n                if (pathLength >= minLength && pathLength <= maxLength) {\n                    if (withHOSES) {\n                        atomsInfo[from].paths.push(getHoseCodesForPath(molecule, from, to, pathLength));\n                    }\n                    else {\n                        atomsInfo[from].paths.push(getPathAndTorsion(molecule, from, to, pathLength));\n                    }\n                }\n            }\n        }\n    }\n    return atomsInfo;\n}\n//# sourceMappingURL=getPathsInfo.js.map","/**\n * Get the shortest path between each pair of atoms in the molecule\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [opions.fromLabel='H']\n * @param {string} [opions.toLabel='H']\n * @param {string} [opions.maxLength=4]\n * @returns {Array<Array>} A matrix containing on each cell (i,j) the shortest path from atom i to atom j\n */\nexport function getShortestPaths(molecule, options = {}) {\n    const OCL = molecule.getOCL();\n    const { fromLabel = '', toLabel = '', maxLength = 3 } = options;\n    const fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n    const toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n    const nbAtoms = molecule.getAllAtoms();\n    const allShortestPaths = new Array(nbAtoms);\n    for (let i = 0; i < nbAtoms; i++) {\n        allShortestPaths[i] = new Array(nbAtoms);\n    }\n    for (let from = 0; from < nbAtoms; from++) {\n        allShortestPaths[from][from] = [from];\n        for (let to = from + 1; to < nbAtoms; to++) {\n            if ((fromAtomicNumber === 0 ||\n                molecule.getAtomicNo(from) === fromAtomicNumber) &&\n                (toAtomicNumber === 0 || molecule.getAtomicNo(to) === toAtomicNumber)) {\n                const path = [];\n                molecule.getPath(path, from, to, maxLength);\n                if (path.length > 0) {\n                    allShortestPaths[from][to] = path.slice();\n                    allShortestPaths[to][from] = path.reverse();\n                }\n                else {\n                    allShortestPaths[from][to] = null;\n                    allShortestPaths[to][from] = null;\n                }\n            }\n            else {\n                allShortestPaths[from][to] = null;\n                allShortestPaths[to][from] = null;\n            }\n        }\n    }\n    return allShortestPaths;\n}\n//# sourceMappingURL=getShortestPaths.js.map","/* @license\nPapa Parse\nv5.5.2\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=w(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0<i){let e=this._config.newline;e||(r=this._config.quoteChar||'\"',e=this._handle.guessLineEndings(t,r)),t=[...t.split(e).slice(i)].join(e)}this.isFirstChunk&&U(this._config.beforeFirstChunk)&&void 0!==(r=this._config.beforeFirstChunk(t))&&(t=r),this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+t,r=(this._partialLine=\"\",this._handle.parse(i,this._baseIndex,!this._finished));if(!this._handle.paused()&&!this._handle.aborted()){t=r.meta.cursor,i=(this._finished||(this._partialLine=i.substring(t-this._baseIndex),this._baseIndex=t),r&&r.data&&(this._rowCount+=r.data.length),this._finished||this._config.preview&&this._rowCount>=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(U(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!U(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input,t=(this._config.chunkSize&&(t=Math.min(this._start+this._config.chunkSize,this._input.size),e=r.call(e,this._start,t)),i.readAsText(e,this._config.encoding));n||this._chunkLoaded({target:{result:t}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+v.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e<p.data.length;e++)p.data[e].forEach(t);p.data.splice(0,1)}else p.data.forEach(t);function t(e,t){U(m.transformHeader)&&(e=m.transformHeader(e,t)),c.push(e)}}function i(e,t){for(var i=m.header?{}:[],r=0;r<e.length;r++){var n=r,s=e[r],s=((e,t)=>(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h<e&&e<o)return 1}})(t)?parseFloat(t):d.test(t)?new Date(t):\"\"===t?null:t):t)(n=m.header?r>=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,f+t):r<c.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+c.length+\" fields but parsed \"+r,f+t)),i}var r;p&&(m.header||m.dynamicTyping||m.transform)&&(r=1,!p.data.length||Array.isArray(p.data[0])?(p.data=p.data.map(i),r=p.data.length):p.data=i(p.data,0),m.header&&p.meta&&(p.meta.fields=c),f+=r)}function _(){return m.header&&0===c.length}function k(e,t,i,r){e={type:e,code:t,message:i};void 0!==r&&(e.row=r),p.errors.push(e)}U(m.step)&&(t=m.step,m.step=function(e){p=e,_()?g():(g(),0!==p.data.length&&(r+=e.data.length,m.preview&&r>m.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?U(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u<n.length;u++){for(var d,f=n[u],l=0,c=0,p=0,g=(o=void 0,new E({comments:r,delimiter:f,newline:t,preview:10}).parse(e)),_=0;_<g.data.length;_++)i&&y(g.data[_])?p++:(d=g.data[_].length,c+=d,void 0===o?o=d:0<d&&(l+=Math.abs(d-o),o=d));0<g.data.length&&(c/=g.data.length-p),(void 0===a||l<=a)&&(void 0===h||h<c)&&1.99<c&&(a=l,s=f,h=c)}return{successful:!!(m.delimiter=s),bestDelimiter:s}})(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess)).successful?m.delimiter=r.bestDelimiter:(a=!0,m.delimiter=v.DefaultDelimiter),p.meta.delimiter=m.delimiter),w(m));return m.preview&&m.header&&r.preview++,n=e,s=new E(r),p=s.parse(n,t,i),g(),l?{meta:{paused:!0}}:p||{meta:{paused:!1}}},this.paused=function(){return l},this.pause=function(){l=!0,s.abort(),n=U(m.chunk)?\"\":n.substring(s.getCharIndex())},this.resume=function(){i.streamer._halted?(l=!1,i.streamer.parseChunk(n,!0)):setTimeout(i.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,s.abort(),p.meta.aborted=!0,U(m.complete)&&m.complete(p),n=\"\"},this.guessLineEndings=function(e,t){e=e.substring(0,1048576);var t=new RegExp(P(t)+\"([^]*?)\"+P(t),\"gm\"),i=(e=e.replace(t,\"\")).split(\"\\r\"),t=e.split(\"\\n\"),e=1<t.length&&t[0].length<i[0].length;if(1===i.length||e)return\"\\n\";for(var r=0,n=0;n<i.length;n++)\"\\n\"===i[n][0]&&r++;return r>=i.length/2?\"\\r\\n\":\"\\r\"}}function P(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),(\"string\"!=typeof S||-1<v.BAD_DELIMITERS.indexOf(S))&&(S=\",\"),x===S)throw new Error(\"Comment character same as delimiter\");!0===x?x=\"#\":(\"string\"!=typeof x||-1<v.BAD_DELIMITERS.indexOf(x))&&(x=!1),\"\\n\"!==O&&\"\\r\"!==O&&\"\\r\\n\"!==O&&(O=\"\\n\");var z=0,M=!1;this.parse=function(i,t,r){if(\"string\"!=typeof i)throw new Error(\"Input must be a string\");var n=i.length,e=S.length,s=O.length,a=x.length,o=U(I),h=[],u=[],d=[],f=z=0;if(!i)return b();if(T||!1!==T&&-1===i.indexOf(F)){for(var l=i.split(O),c=0;c<l.length;c++){if(d=l[c],z+=d.length,c!==l.length-1)z+=O.length;else if(r)return b();if(!x||d.substring(0,a)!==x){if(o){if(h=[],k(d.split(S)),R(),M)return b()}else k(d.split(S));if(A&&A<=c)return h=h.slice(0,A),b(!0)}}return b()}for(var p=i.indexOf(S,z),g=i.indexOf(O,z),_=new RegExp(P(j)+P(F),\"g\"),m=i.indexOf(F,z);;)if(i[z]===F)for(m=z,z++;;){if(-1===(m=i.indexOf(F,m+1)))return r||u.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:h.length,index:z}),E();if(m===n-1)return E(i.substring(z,m).replace(_,F));if(F===j&&i[m+1]===j)m++;else if(F===j||0===m||i[m-1]!==j){-1!==p&&p<m+1&&(p=i.indexOf(S,m+1));var y=v(-1===(g=-1!==g&&g<m+1?i.indexOf(O,m+1):g)?p:Math.min(p,g));if(i.substr(m+1+y,e)===S){d.push(i.substring(z,m).replace(_,F)),i[z=m+1+y+e]!==F&&(m=i.indexOf(F,z)),p=i.indexOf(S,z),g=i.indexOf(O,z);break}y=v(g);if(i.substring(m+1+y,m+1+y+s)===O){if(d.push(i.substring(z,m).replace(_,F)),w(m+1+y+s),p=i.indexOf(S,z),m=i.indexOf(F,z),o&&(R(),M))return b();if(A&&h.length>=A)return b(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return b();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p<g||-1===g))d.push(i.substring(z,p)),z=p+e,p=i.indexOf(S,z);else{if(-1===g)break;if(d.push(i.substring(z,g)),w(g+s),o&&(R(),M))return b();if(A&&h.length>=A)return b(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),b()}function w(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function b(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a={},o=new Set(s);let n=!1;for(let r=0;r<s.length;r++){let i=s[r];if(a[i=U(C.transformHeader)?C.transformHeader(i,r):i]){let e,t=a[i];for(;e=i+\"_\"+t,t++,o.has(e););o.add(e),s[r]=e,a[i]++,n=!0,(D=null===D?{}:D)[e]=i}else a[i]=1,s[r]=i;o.add(i)}n&&console.warn(\"Duplicate headers found and renamed.\"),L=!0}return{data:h,errors:u,meta:{delimiter:S,linebreak:O,aborted:M,truncated:!!e,cursor:f+(t||0),renamedHeaders:D}}}function R(){I(b()),h=[],u=[]}},this.abort=function(){M=!0},this.getCharIndex=function(){return z}}function g(e){var t=e.data,i=o[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:m,resume:m};if(U(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else U(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&_(t.workerId,t.results)}function _(e,t){var i=o[e];U(i.userComplete)&&i.userComplete(t),i.terminate(),delete o[e]}function m(){throw new Error(\"Not implemented.\")}function w(e){if(\"object\"!=typeof e||null===e)return e;var t,i=Array.isArray(e)?[]:{};for(t in e)i[t]=w(e[t]);return i}function y(e,t){return function(){e.apply(t,arguments)}}function U(e){return\"function\"==typeof e}return v.parse=function(e,t){var i=(t=t||{}).dynamicTyping||!1;U(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!U(t.transform)&&t.transform,!t.worker||!v.WORKERS_SUPPORTED)return i=null,v.NODE_STREAM_INPUT,\"string\"==typeof e?(e=(e=>65279!==e.charCodeAt(0)?e:e.slice(1))(e),i=new(t.download?f:c)(t)):!0===e.readable&&U(e.read)&&U(e.on)?i=new p(t):(n.File&&e instanceof File||e instanceof Object)&&(i=new l(t)),i.stream(e);(i=(()=>{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var n=!1,_=!0,m=\",\",y=\"\\r\\n\",s='\"',a=s+s,i=!1,r=null,o=!1,h=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(n=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(s=t.quoteChar),\"boolean\"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s),t.escapeFormulae instanceof RegExp?o=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(o=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(P(s),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if(\"object\"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function u(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0<e.length),s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(r+=m),r+=k(e[a],a);0<t.length&&(r+=y)}for(var o=0;o<t.length;o++){var h=(n?e:t[o]).length,u=!1,d=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u=\"greedy\"===i?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===i&&n){for(var f=[],l=0;l<h;l++){var c=s?e[l]:l;f.push(t[o][c])}u=\"\"===f.join(\"\").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!d&&(r+=m);var g=n&&s?e[p]:p;r+=k(t[o][g],p)}o<t.length-1&&(!i||0<h&&!d)&&(r+=y)}}return r}function k(e,t){var i,r;return null==e?\"\":e.constructor===Date?JSON.stringify(e).slice(1,25):(r=!1,o&&\"string\"==typeof e&&o.test(e)&&(e=\"'\"+e,r=!0),i=e.toString().replace(h,a),(r=r||!0===n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||((e,t)=>{for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1})(i,v.BAD_DELIMITERS)||-1<i.indexOf(m)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1))?s+i+s:i)}},v.RECORD_SEP=String.fromCharCode(30),v.UNIT_SEP=String.fromCharCode(31),v.BYTE_ORDER_MARK=\"\\ufeff\",v.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',v.BYTE_ORDER_MARK],v.WORKERS_SUPPORTED=!s&&!!n.Worker,v.NODE_STREAM_INPUT=1,v.LocalChunkSize=10485760,v.RemoteChunkSize=5242880,v.DefaultDelimiter=\",\",v.Parser=E,v.ParserHandle=i,v.NetworkStreamer=f,v.FileStreamer=l,v.StringStreamer=c,v.ReadableStreamStreamer=p,n.jQuery&&((d=n.jQuery).fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&n.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0===h.length)U(o.complete)&&o.complete();else{var e,t,i,r,n=h[0];if(U(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,i=n.inputElem,r=s.reason,void(U(o.error)&&o.error({name:e},t,i,r));if(\"skip\"===s.action)return void u();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){U(a)&&a(e,n.file,n.inputElem),u()},v.parse(n.file,n.instanceConfig)}}function u(){h.splice(0,1),e()}}),a&&(n.onmessage=function(e){e=e.data;void 0===v.WORKER_ID&&e&&(v.WORKER_ID=e.workerId);\"string\"==typeof e.input?n.postMessage({workerId:v.WORKER_ID,results:v.parse(e.input,e.config),finished:!0}):(n.File&&e.input instanceof File||e.input instanceof Object)&&(e=v.parse(e.input,e.config))&&n.postMessage({workerId:v.WORKER_ID,results:e,finished:!0})}),(f.prototype=Object.create(u.prototype)).constructor=f,(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(c.prototype)).constructor=c,(p.prototype=Object.create(u.prototype)).constructor=p,v});","export default function getMoleculeCreators(OCL) {\n    const fields = new Map();\n    fields.set('oclid', OCL.Molecule.fromIDCode);\n    fields.set('idcode', OCL.Molecule.fromIDCode);\n    fields.set('smiles', OCL.Molecule.fromSmiles);\n    fields.set('molfile', OCL.Molecule.fromMolfile);\n    fields.set('smarts', (smarts) => {\n        const smilesParser = new OCL.SmilesParser({ smartsMode: 'smarts' });\n        return smilesParser.parseMolecule(smarts);\n    });\n    return fields;\n}\n//# sourceMappingURL=getMoleculeCreators.js.map","import { ensureString } from 'ensure-string';\nimport Papa from 'papaparse';\nimport getMoleculeCreators from './getMoleculeCreators.js';\nconst defaultCSVOptions = {\n    header: true,\n    dynamicTyping: true,\n    skipEmptyLines: true,\n};\nexport default async function appendCSV(moleculesDB, csv, options = {}) {\n    const { onStep } = options;\n    csv = ensureString(csv);\n    const moleculeCreators = getMoleculeCreators(moleculesDB.OCL);\n    if (typeof csv !== 'string') {\n        throw new TypeError('csv must be a string');\n    }\n    options = { ...defaultCSVOptions, ...options };\n    const parsed = Papa.parse(csv, options);\n    const fields = parsed.meta.fields;\n    const stats = new Array(fields.length);\n    const firstElement = parsed.data[0];\n    let moleculeCreator, moleculeField;\n    for (let i = 0; i < fields.length; i++) {\n        stats[i] = {\n            label: fields[i],\n            isNumeric: typeof firstElement[fields[i]] === 'number',\n        };\n        const lowerField = fields[i].toLowerCase();\n        if (moleculeCreators.has(lowerField)) {\n            moleculeCreator = moleculeCreators.get(lowerField);\n            moleculeField = fields[i];\n        }\n    }\n    if (!moleculeCreator) {\n        throw new Error('this document does not contain any molecule field');\n    }\n    for (let i = 0; i < parsed.data.length; i++) {\n        moleculesDB.pushEntry(moleculeCreator(parsed.data[i][moleculeField]), parsed.data[i]);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, parsed.data.length);\n        }\n    }\n}\n//# sourceMappingURL=appendCSV.js.map","export default function appendColor(moleculesDB, options = {}) {\n    const { dataLabel, propertyLabel, minValue, maxValue, minHue = 0, maxHue = 360, saturation = 65, lightness = 65, colorLabel = 'color', } = options;\n    const db = moleculesDB.getDB();\n    let values;\n    if (dataLabel) {\n        values = db.flatMap((result) => result.data.map((datum) => ({ value: datum[dataLabel], data: datum })));\n    }\n    else if (propertyLabel) {\n        values = db.flatMap((result) => result.data.map((datum) => ({\n            value: result.properties[propertyLabel],\n            data: datum,\n        })));\n    }\n    else {\n        values = db.flatMap((result) => result.data.map((datum) => ({ value: undefined, data: datum })));\n    }\n    if (minValue !== undefined) {\n        for (const value of values) {\n            if (value.value !== undefined && value.value < minValue) {\n                value.value = minValue;\n            }\n        }\n    }\n    if (maxValue !== undefined) {\n        for (const value of values) {\n            if (value.value !== undefined && value.value > maxValue) {\n                value.value = maxValue;\n            }\n        }\n    }\n    const definedValues = values.filter((value) => value.value !== undefined);\n    const min = Math.min(...definedValues.map((value) => value.value));\n    const max = Math.max(...definedValues.map((value) => value.value));\n    for (const value of values) {\n        if (value.value !== undefined) {\n            value.data[colorLabel] = `hsl(${Math.floor(((value.value - min) / (max - min)) * (maxHue - minHue) + minHue)},${saturation}%,${lightness}%)`;\n        }\n        else {\n            value.data.color = 'black';\n        }\n    }\n}\n//# sourceMappingURL=appendColor.js.map","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// index.ts\nvar isObject = /* @__PURE__ */ __name((v) => v !== null && typeof v === \"object\", \"isObject\");\nvar join = /* @__PURE__ */ __name((segs, joinChar, options) => {\n  if (typeof options.join === \"function\") {\n    return options.join(segs);\n  }\n  return segs[0] + joinChar + segs[1];\n}, \"join\");\nvar split = /* @__PURE__ */ __name((path, splitChar, options) => {\n  if (typeof options.split === \"function\") {\n    return options.split(path);\n  }\n  return path.split(splitChar);\n}, \"split\");\nvar isValid = /* @__PURE__ */ __name((key, target = {}, options) => {\n  if (typeof options?.isValid === \"function\") {\n    return options.isValid(key, target);\n  }\n  return true;\n}, \"isValid\");\nvar isValidObject = /* @__PURE__ */ __name((v) => {\n  return isObject(v) || typeof v === \"function\";\n}, \"isValidObject\");\nvar getValue = /* @__PURE__ */ __name((target, path, options = {}) => {\n  if (!isObject(options)) {\n    options = { default: options };\n  }\n  if (!isValidObject(target)) {\n    return typeof options.default !== \"undefined\" ? options.default : target;\n  }\n  if (typeof path === \"number\") {\n    path = String(path);\n  }\n  const pathIsArray = Array.isArray(path);\n  const pathIsString = typeof path === \"string\";\n  const splitChar = options.separator || \".\";\n  const joinChar = options.joinChar || (typeof splitChar === \"string\" ? splitChar : \".\");\n  if (!pathIsString && !pathIsArray) {\n    return target;\n  }\n  if (target[path] !== void 0) {\n    return isValid(path, target, options) ? target[path] : options.default;\n  }\n  const segs = pathIsArray ? path : split(path, splitChar, options);\n  const len = segs.length;\n  let idx = 0;\n  do {\n    let prop = segs[idx];\n    if (typeof prop !== \"string\") {\n      prop = String(prop);\n    }\n    while (prop && prop.slice(-1) === \"\\\\\") {\n      prop = join([prop.slice(0, -1), segs[++idx] || \"\"], joinChar, options);\n    }\n    if (target[prop] !== void 0) {\n      if (!isValid(prop, target, options)) {\n        return options.default;\n      }\n      target = target[prop];\n    } else {\n      let hasProp = false;\n      let n = idx + 1;\n      while (n < len) {\n        prop = join([prop, segs[n++]], joinChar, options);\n        if (hasProp = target[prop] !== void 0) {\n          if (!isValid(prop, target, options)) {\n            return options.default;\n          }\n          target = target[prop];\n          idx = n - 1;\n          break;\n        }\n      }\n      if (!hasProp) {\n        return options.default;\n      }\n    }\n  } while (++idx < len && isValidObject(target));\n  if (idx === len) {\n    return target;\n  }\n  return options.default;\n}, \"getValue\");\nvar index_default = getValue;\nexport {\n  index_default as default\n};\n/*!\n * get-value <https://github.com/jonschlinkert/get-value>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n//# sourceMappingURL=index.mjs.map","import get from 'get-value';\n/**\n * Append an array of entries to the current database. An entry is an object that by default should contain a 'ocl' property containing idCode and optionally index and coordinates\n * @param {*} moleculesDB\n * @param {object[]} entries\n * @param {object} [options={}]\n * @param {string} [options.idCodePath='ocl.idCode']\n * @param {string} [options.indexPath='ocl.index']\n * @param {string} [options.coordinatesPath='ocl.coordinates']\n * @param {string} [options.mwPath='mw']\n * @param {string} [options.smilesPath]\n * @param {string} [options.molfilePath]\n * @param {Function} [options.onStep] - call back to execute after each molecule\n * @returns\n */\nexport default async function appendEntries(moleculesDB, entries, options = {}) {\n    const { onStep, idCodePath = 'ocl.idCode', indexPath = 'ocl.index', coordinatesPath = 'ocl.coordinates', mwPath = 'mw', smilesPath, molfilePath, } = options;\n    const Molecule = moleculesDB.OCL.Molecule;\n    for (let i = 0; i < entries.length; i++) {\n        let idCode;\n        const entry = entries[i];\n        let molecule;\n        if (smilesPath) {\n            molecule = Molecule.fromSmiles(get(entry, smilesPath));\n        }\n        if (molfilePath && !molecule) {\n            molecule = Molecule.fromMolfile(get(entry, molfilePath));\n        }\n        if (!molecule) {\n            idCode = get(entry, idCodePath);\n            if (idCode) {\n                const coordinates = get(entry, coordinatesPath);\n                molecule = Molecule.fromIDCode(idCode, coordinates || false);\n            }\n        }\n        const index = get(entry, indexPath);\n        const mw = get(entry, mwPath);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, entries.length);\n        }\n        if (!moleculesDB.keepEmptyMolecules &&\n            (!molecule || molecule.getAllAtoms() === 0)) {\n            continue;\n        }\n        else if (!molecule) {\n            molecule = new moleculesDB.OCL.Molecule(0, 0);\n        }\n        if (molecule) {\n            moleculesDB.pushEntry(molecule, entry, { index, mw });\n        }\n    }\n}\n//# sourceMappingURL=appendEntries.js.map","/**\n *\n * @param {*} string\n * @param {*} substring\n * @param {*} eol\n * @returns\n */\nexport function getEntriesBoundaries(string, substring, eol) {\n  const res = [];\n  let previous = 0;\n  let next = 0;\n  while (next !== -1) {\n    next = string.indexOf(substring, previous);\n    if (next !== -1) {\n      res.push([previous, next]);\n      const nextMatch = string.indexOf(eol, next + substring.length);\n      if (nextMatch === -1) {\n        next = -1;\n      } else {\n        previous = nextMatch + eol.length;\n        next = previous;\n      }\n    } else {\n      res.push([previous, string.length]);\n    }\n  }\n  return res;\n}\n","/**\n * Parse the molfile and the properties with > < labels >\n * @param {string} sdfPart\n * @param {*} labels\n * @param {*} currentLabels\n * @param {object} options\n * @returns\n */\nexport function getMolecule(sdfPart, labels, currentLabels, options) {\n  let parts = sdfPart.split(`${options.eol}>`);\n  if (parts.length === 0 || parts[0].length <= 5) return;\n  let molecule = {};\n  molecule.molfile = parts[0] + options.eol;\n  for (let j = 1; j < parts.length; j++) {\n    let lines = parts[j].split(options.eol);\n    let from = lines[0].indexOf('<');\n    let to = lines[0].indexOf('>');\n    let label = lines[0].slice(from + 1, to);\n    currentLabels.push(label);\n    if (!labels[label]) {\n      labels[label] = {\n        counter: 0,\n        isNumeric: options.dynamicTyping,\n        keep: false,\n      };\n      if (\n        (!options.exclude || !options.exclude.includes(label)) &&\n        (!options.include || options.include.includes(label))\n      ) {\n        labels[label].keep = true;\n        if (options.modifiers[label]) {\n          labels[label].modifier = options.modifiers[label];\n        }\n        if (options.forEach[label]) {\n          labels[label].forEach = options.forEach[label];\n        }\n      }\n    }\n    if (labels[label].keep) {\n      for (let k = 1; k < lines.length - 1; k++) {\n        if (molecule[label]) {\n          molecule[label] += options.eol + lines[k];\n        } else {\n          molecule[label] = lines[k];\n        }\n      }\n      if (labels[label].modifier) {\n        let modifiedValue = labels[label].modifier(molecule[label]);\n        if (modifiedValue === undefined || modifiedValue === null) {\n          delete molecule[label];\n        } else {\n          molecule[label] = modifiedValue;\n        }\n      }\n      if (\n        labels[label].isNumeric &&\n        (!Number.isFinite(+molecule[label]) || molecule[label].match(/^0[0-9]/))\n      ) {\n        labels[label].isNumeric = false;\n      }\n    }\n  }\n  return molecule;\n}\n","import { ensureString } from 'ensure-string';\n\nimport { getEntriesBoundaries } from './getEntriesBoundaries';\nimport { getMolecule } from './util/getMolecule';\n/**\n *  Parse a SDF file\n * @param {string|ArrayBuffer|Uint8Array} sdf - SDF file to parse\n * @param {object} [options={}]\n * @param {string[]} [options.include] - List of fields to include\n * @param {string[]} [options.exclude] - List of fields to exclude\n * @param {Function} [options.filter] - Callback allowing to filter the molecules\n * @param {boolean} [options.dynamicTyping] - Dynamically type the data\n * @param {object} [options.modifiers] - Object containing callbacks to apply on some specific fields\n * @param {boolean} [options.mixedEOL=false] - Set to true if you know there is a mixture between \\r\\n and \\n\n * @param {string} [options.eol] - Specify the end of line character. Default will be the one found in the file\n * @returns {object} - Object containing the molecules, the labels and the statistics\n */\nexport function parse(sdf, options = {}) {\n  options = { ...options };\n  if (options.modifiers === undefined) options.modifiers = {};\n  if (options.forEach === undefined) options.forEach = {};\n  if (options.dynamicTyping === undefined) options.dynamicTyping = true;\n\n  sdf = ensureString(sdf);\n  if (typeof sdf !== 'string') {\n    throw new TypeError('Parameter \"sdf\" must be a string');\n  }\n\n  if (options.eol === undefined) {\n    options.eol = '\\n';\n    if (options.mixedEOL) {\n      sdf = sdf.replaceAll('\\r\\n', '\\n');\n      sdf = sdf.replaceAll('\\r', '\\n');\n    } else {\n      // we will find the delimiter in order to be much faster and not use regular expression\n      let header = new Set(sdf.slice(0, 1000));\n      if (header.has('\\r\\n')) {\n        options.eol = '\\r\\n';\n      } else if (header.has('\\r')) {\n        options.eol = '\\r';\n      }\n    }\n  }\n\n  let entriesBoundaries = getEntriesBoundaries(\n    sdf,\n    `${options.eol}$$$$`,\n    options.eol,\n  );\n  let molecules = [];\n  let labels = {};\n\n  let start = Date.now();\n\n  for (let i = 0; i < entriesBoundaries.length; i++) {\n    let sdfPart = sdf.slice(...entriesBoundaries[i]);\n    if (sdfPart.length < 40) continue;\n    let currentLabels = [];\n    const molecule = getMolecule(sdfPart, labels, currentLabels, options);\n    if (!molecule) continue;\n    if (!options.filter || options.filter(molecule)) {\n      molecules.push(molecule);\n      // only now we can increase the counter\n      for (let j = 0; j < currentLabels.length; j++) {\n        labels[currentLabels[j]].counter++;\n      }\n    }\n  }\n  // all numeric fields should be converted to numbers\n  for (let label in labels) {\n    let currentLabel = labels[label];\n    if (currentLabel.isNumeric) {\n      currentLabel.minValue = Infinity;\n      currentLabel.maxValue = -Infinity;\n      for (let j = 0; j < molecules.length; j++) {\n        if (molecules[j][label]) {\n          let value = Number.parseFloat(molecules[j][label]);\n          molecules[j][label] = value;\n          if (value > currentLabel.maxValue) {\n            currentLabel.maxValue = value;\n          }\n          if (value < currentLabel.minValue) {\n            currentLabel.minValue = value;\n          }\n        }\n      }\n    }\n  }\n\n  // we check that a label is in all the records\n  for (let key in labels) {\n    if (labels[key].counter === molecules.length) {\n      labels[key].always = true;\n    } else {\n      labels[key].always = false;\n    }\n  }\n\n  let statistics = [];\n  for (let key in labels) {\n    let statistic = labels[key];\n    statistic.label = key;\n    statistics.push(statistic);\n  }\n\n  return {\n    time: Date.now() - start,\n    molecules,\n    labels: Object.keys(labels),\n    statistics,\n  };\n}\n","import { ensureString } from 'ensure-string';\nimport { parse } from 'sdf-parser';\nexport default async function appendSDF(moleculesDB, sdf, options = {}) {\n    const { onStep, dynamicTyping, mixedEOL = true, eol } = options;\n    sdf = ensureString(sdf);\n    if (typeof sdf !== 'string') {\n        throw new TypeError('sdf must be a string');\n    }\n    const parsed = parse(sdf, { dynamicTyping, mixedEOL, eol });\n    for (let i = 0; i < parsed.molecules.length; i++) {\n        const molecule = parsed.molecules[i];\n        moleculesDB.pushEntry(moleculesDB.OCL.Molecule.fromMolfile(molecule.molfile), molecule);\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, parsed.molecules.length);\n        }\n    }\n}\n//# sourceMappingURL=appendSDF.js.map","import { ensureString } from 'ensure-string';\nexport default async function appendSmilesList(moleculesDB, text, options = {}) {\n    const { onStep } = options;\n    text = ensureString(text);\n    if (typeof text !== 'string') {\n        throw new TypeError('text must be a string');\n    }\n    const smilesArray = text\n        .split(/\\r?\\n/)\n        .map((line) => line.trim())\n        .filter(Boolean);\n    for (let i = 0; i < smilesArray.length; i++) {\n        const oneSmiles = smilesArray[i];\n        moleculesDB.pushEntry(moleculesDB.OCL.Molecule.fromSmiles(oneSmiles));\n        if (onStep) {\n            // eslint-disable-next-line no-await-in-loop\n            await onStep(i + 1, smilesArray.length);\n        }\n    }\n}\n//# sourceMappingURL=appendSmilesList.js.map","var IDX=256, HEX=[], BUFFER;\nwhile (IDX--) HEX[IDX] = (IDX + 256).toString(16).substring(1);\n\nexport function v4() {\n\tvar i=0, num, out='';\n\n\tif (!BUFFER || ((IDX + 16) > 256)) {\n\t\tBUFFER = Array(i=256);\n\t\twhile (i--) BUFFER[i] = 256 * Math.random() | 0;\n\t\ti = IDX = 0;\n\t}\n\n\tfor (; i < 16; i++) {\n\t\tnum = BUFFER[IDX + i];\n\t\tif (i==6) out += HEX[num & 15 | 64];\n\t\telse if (i==8) out += HEX[num & 63 | 128];\n\t\telse out += HEX[num];\n\n\t\tif (i & 1 && i > 1 && i < 11) out += '-';\n\t}\n\n\tIDX++;\n\treturn out;\n}\n","import { v4 } from '@lukeed/uuid';\n/**\n *\n * @param {MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} molecule\n * @param {object} data\n * @param {object} [moleculeInfo]\n * @param {string} [moleculeInfo.idCode]\n * @param {number[]} [moleculeInfo.index]\n */\nexport default function pushEntry(moleculesDB, molecule, data = {}, moleculeInfo = {}) {\n    // the following line could be the source of problems if the idCode version\n    // changes\n    const moleculeIDCode = getMoleculeIDCode(molecule, moleculeInfo);\n    const id = moleculeIDCode || v4();\n    let entry = moleculesDB.db[id];\n    if (!entry) {\n        // a new molecule\n        // ensure helper arrays needed for substructure search\n        molecule.ensureHelperArrays(moleculesDB.OCL.Molecule.cHelperRings);\n        let index;\n        if (!moleculeInfo.index) {\n            index = molecule.getIndex();\n        }\n        else {\n            index = moleculeInfo.index;\n        }\n        const molecularFormula = molecule.getMolecularFormula();\n        entry = {\n            molecule,\n            properties: {\n                mw: molecularFormula.relativeWeight,\n                em: molecularFormula.absoluteWeight,\n                mf: molecularFormula.formula,\n            },\n            data: [],\n            idCode: moleculeIDCode,\n            index,\n        };\n        moleculesDB.db[id] = entry;\n        if (moleculesDB.computeProperties) {\n            const properties = new moleculesDB.OCL.MoleculeProperties(molecule);\n            entry.properties = {\n                ...entry.properties,\n                acceptorCount: properties.acceptorCount,\n                donorCount: properties.donorCount,\n                logP: properties.logP,\n                logS: properties.logS,\n                polarSurfaceArea: properties.polarSurfaceArea,\n                rotatableBondCount: properties.rotatableBondCount,\n                stereoCenterCount: properties.stereoCenterCount,\n            };\n        }\n        updateStatistics(moleculesDB.calculatedStatistics, entry.properties);\n    }\n    entry.data.push(data);\n    updateStatistics(moleculesDB.dataStatistics, data);\n}\nfunction updateStatistics(statistics, data) {\n    for (const key in data) {\n        const value = data[key];\n        if (!statistics.has(key)) {\n            statistics.set(key, {\n                counter: 0,\n                kind: typeof value,\n            });\n        }\n        const stat = statistics.get(key);\n        stat.counter++;\n        if (stat.kind !== typeof value) {\n            stat.kind = 'mixed';\n        }\n    }\n}\nfunction getMoleculeIDCode(molecule, moleculeInfo) {\n    let idCode = moleculeInfo.idCode;\n    if (!idCode) {\n        idCode = molecule.getIDCode();\n    }\n    if (idCode === 'd@')\n        return ''; // empty molecule\n    return idCode;\n}\n//# sourceMappingURL=pushEntry.js.map","export default function pushMoleculeInfo(moleculesDB, moleculeInfo, data = {}) {\n    if (typeof moleculeInfo !== 'object') {\n        throw new Error('pushMoleculeInfo requires an object as first parameter');\n    }\n    const Molecule = moleculesDB.OCL.Molecule;\n    let molecule;\n    if (moleculeInfo.molfile) {\n        molecule = Molecule.fromMolfile(moleculeInfo.molfile);\n    }\n    if (moleculeInfo.smiles)\n        molecule = Molecule.fromSmiles(moleculeInfo.smiles);\n    if (moleculeInfo.idCode) {\n        if (moleculesDB.db[moleculeInfo.idCode]) {\n            molecule = moleculesDB.db[moleculeInfo.idCode].molecule;\n        }\n        else {\n            molecule = Molecule.fromIDCode(moleculeInfo.idCode, moleculeInfo.coordinates || false);\n        }\n    }\n    if (molecule) {\n        moleculesDB.pushEntry(molecule, data, moleculeInfo);\n    }\n}\n//# sourceMappingURL=pushMoleculeInfo.js.map","export async function noWait() {\n    return new Promise((resolve) => {\n        if (typeof setImmediate === 'function') {\n            setImmediate(() => resolve());\n        }\n        else {\n            // didn't find a better way to do it in the browser\n            setTimeout(() => resolve(), 0);\n        }\n    });\n}\n//# sourceMappingURL=noWait.js.map","import { noWait } from '../../util/noWait.js';\nimport { MoleculesDB } from '../MoleculesDB.js';\nimport getMoleculeCreators from './getMoleculeCreators.js';\nclass AbortError extends Error {\n    name = 'AbortError';\n    code = 20;\n}\nfunction getQuery(moleculesDB, query, options) {\n    const { format = 'idCode' } = options;\n    if (typeof query === 'string') {\n        const moleculeCreators = getMoleculeCreators(moleculesDB.OCL);\n        query = moleculeCreators.get(format.toLowerCase())(query);\n    }\n    else if (!(query instanceof moleculesDB.OCL.Molecule)) {\n        throw new TypeError('toSearch must be a Molecule or string');\n    }\n    return query;\n}\n/**\n * Internal function to search in the database\n * @param {MoleculesDB} moleculesDB\n * @param {string} query\n * @param {Record<string, any>} [options={}]\n * @param {'exact'|'substructure'|'substructureOR'|'similarity'} [options.mode='substructure']\n * @returns\n */\nexport function search(moleculesDB, query = '', options = {}) {\n    const { mode = 'substructure' } = options;\n    query = getQuery(moleculesDB, query, options);\n    let result;\n    switch (mode.toLowerCase()) {\n        case 'exact':\n            result = exactSearch(moleculesDB, query);\n            break;\n        case 'substructure':\n            result = substructureSearch(moleculesDB, query);\n            break;\n        case 'substructureor':\n            result = substructureSearchOR(moleculesDB, query);\n            break;\n        case 'similarity':\n            result = similaritySearch(moleculesDB, query);\n            break;\n        default:\n            throw new Error(`unknown search mode: ${options.mode}`);\n    }\n    return processResult(result, options);\n}\nexport async function searchAsync(moleculesDB, query = '', options = {}) {\n    const { mode = 'substructure' } = options;\n    query = getQuery(moleculesDB, query, options);\n    let result;\n    switch (mode.toLowerCase()) {\n        case 'exact':\n            result = exactSearch(moleculesDB, query);\n            break;\n        case 'substructure':\n            result = await subStructureSearchAsync(moleculesDB, query, options);\n            break;\n        case 'substructureor':\n            result = substructureSearchOR(moleculesDB, query);\n            break;\n        case 'similarity':\n            result = similaritySearch(moleculesDB, query);\n            break;\n        default:\n            throw new Error(`unknown search mode: ${options.mode}`);\n    }\n    return processResult(result, options);\n}\nfunction exactSearch(moleculesDB, query) {\n    query = query.getCompactCopy();\n    query.setFragment(false);\n    const queryIDCode = query.getIDCode();\n    const searchResult = moleculesDB.db[queryIDCode]\n        ? [moleculesDB.db[queryIDCode]]\n        : [];\n    return searchResult;\n}\n/**\n * No atoms in the query, we return all the molecules\n * @param {MoleculesDB} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearchBegin(moleculesDB, query) {\n    const searchResult = [];\n    if (query.getAllAtoms() === 0) {\n        for (const idCode in moleculesDB.db) {\n            searchResult.push(moleculesDB.db[idCode]);\n        }\n    }\n    return { searchResult };\n}\nfunction substructureSearchEnd(searchResult, queryMW) {\n    searchResult.sort((a, b) => {\n        return (Math.abs(queryMW - a.properties.mw) - Math.abs(queryMW - b.properties.mw));\n    });\n    return searchResult;\n}\n/**\n * Search by substructure in the database\n * If the substructure is composed of many fragments all the fragments must be present\n * @param {*} moleculesDB\n * @param {*} query\n * @returns\n */\nfunction substructureSearch(moleculesDB, query) {\n    const queryMW = getMW(query);\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    if (searchResult.length === 0) {\n        query = query.getCompactCopy();\n        query.setFragment(true);\n        const queryIndex = query.getIndex();\n        const searcher = moleculesDB.searcher;\n        searcher.setFragment(query, queryIndex);\n        for (const idCode in moleculesDB.db) {\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            if (searcher.isFragmentInMolecule()) {\n                searchResult.push(entry);\n            }\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\n/**\n * Search by substructure in the database\n * If the substructure is composed of many fragments only one fragment must be present\n * @param {*} moleculesDB\n * @param {import('openchemlib').Molecule} query\n * @returns\n */\nfunction substructureSearchOR(moleculesDB, query) {\n    const queryMW = getMW(query);\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    if (searchResult.length === 0) {\n        query = query.getCompactCopy();\n        query.setFragment(true);\n        const queries = [];\n        for (const fragment of query.getFragments()) {\n            queries.push({\n                fragment,\n                queryIndex: fragment.getIndex(),\n            });\n        }\n        const searcher = moleculesDB.searcher;\n        molecule: for (const idCode in moleculesDB.db) {\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            for (const { fragment, queryIndex } of queries) {\n                searcher.setFragment(fragment, queryIndex);\n                if (searcher.isFragmentInMolecule()) {\n                    searchResult.push(entry);\n                    continue molecule;\n                }\n            }\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\nasync function subStructureSearchAsync(moleculesDB, query, options = {}) {\n    const queryMW = getMW(query); // we\n    query = query.getCompactCopy();\n    query.setFragment(true);\n    const { interval = 100, onStep, controller } = options;\n    let shouldAbort = false;\n    if (controller) {\n        const abortEventListener = () => {\n            shouldAbort = true;\n        };\n        controller.signal.addEventListener('abort', abortEventListener);\n    }\n    const { searchResult } = substructureSearchBegin(moleculesDB, query);\n    let begin = performance.now();\n    if (searchResult.length === 0) {\n        const queryIndex = query.getIndex();\n        const searcher = moleculesDB.searcher;\n        searcher.setFragment(query, queryIndex);\n        let index = 0;\n        const length = Object.keys(moleculesDB.db).length;\n        for (const idCode in moleculesDB.db) {\n            if (shouldAbort) {\n                throw new AbortError('Query aborted');\n            }\n            const entry = moleculesDB.db[idCode];\n            searcher.setMolecule(entry.molecule, entry.index);\n            if (searcher.isFragmentInMolecule()) {\n                searchResult.push(entry);\n            }\n            if ((onStep || controller) && performance.now() - begin >= interval) {\n                begin = performance.now();\n                if (onStep) {\n                    onStep(index, length);\n                }\n                if (controller && !onStep) {\n                    // eslint-disable-next-line no-await-in-loop\n                    await noWait();\n                }\n            }\n            index++;\n        }\n    }\n    return substructureSearchEnd(searchResult, queryMW);\n}\nfunction similaritySearch(moleculesDB, query) {\n    const queryIndex = query.getIndex();\n    const queryMW = getMW(query);\n    const queryIdCode = query.getIDCode();\n    const searchResult = [];\n    let similarity;\n    for (const idCode in moleculesDB.db) {\n        const entry = moleculesDB.db[idCode];\n        if (entry.idCode === queryIdCode) {\n            similarity = Number.MAX_SAFE_INTEGER;\n        }\n        else {\n            similarity =\n                moleculesDB.OCL.SSSearcherWithIndex.getSimilarityTanimoto(queryIndex, entry.index) *\n                    1000000 -\n                    Math.abs(queryMW - entry.properties.mw) / 10000;\n        }\n        searchResult.push({ similarity, entry });\n    }\n    searchResult.sort((a, b) => {\n        return b.similarity - a.similarity;\n    });\n    return searchResult.map((entry) => entry.entry);\n}\nfunction getMW(query) {\n    const copy = query.getCompactCopy();\n    copy.setFragment(false);\n    return copy.getMolecularFormula().relativeWeight;\n}\nfunction processResult(entries, options = {}) {\n    const { flattenResult = true, keepMolecule = false, limit = Number.MAX_SAFE_INTEGER, } = options;\n    const results = [];\n    if (flattenResult) {\n        for (const entry of entries) {\n            for (const data of entry.data) {\n                const result = {\n                    data,\n                    idCode: entry.idCode,\n                    properties: entry.properties,\n                };\n                if (keepMolecule) {\n                    result.molecule = entry.molecule;\n                }\n                results.push(result);\n            }\n        }\n    }\n    else {\n        for (const entry of entries) {\n            results.push({\n                data: entry.data,\n                idCode: entry.idCode,\n                properties: entry.properties,\n                molecule: keepMolecule ? entry.molecule : undefined,\n            });\n        }\n    }\n    if (limit < results.length)\n        results.length = limit;\n    return results;\n}\n//# sourceMappingURL=search.js.map","import appendCSV from './utils/appendCSV.js';\nimport appendColor from './utils/appendColor.js';\nimport appendEntries from './utils/appendEntries.js';\nimport appendSDF from './utils/appendSDF.js';\nimport appendSmilesList from './utils/appendSmilesList.js';\nimport pushEntry from './utils/pushEntry.js';\nimport pushMoleculeInfo from './utils/pushMoleculeInfo.js';\nimport { search, searchAsync } from './utils/search.js';\n/*\n * @typedef {object} InternalStatistics\n * @property {number} counter - number of entries\n * @property {'number'|'boolean'|'string'|'object'|'mixed'} kind - kind of value\n */\n/**\n * this.db is an object with properties 'oclID' that has as value\n * an object that contains the following properties:\n * molecule: an OCL molecule instance\n * index: OCL index used for substructure searching\n * properties: all the calculates properties\n * data: array containing free data associated with this molecule\n */\nexport class MoleculesDB {\n    /**\n     * Creates an instance of MoleculesDB.\n     * @param {typeof import('openchemlib')} OCL - openchemlib library\n     * @param {object} [options={}] - Options.\n     * @param {boolean} [options.computeProperties=false]\n     * @param {boolean} [options.keepEmptyMolecules=false]\n     */\n    constructor(OCL, options = {}) {\n        const { computeProperties = false, keepEmptyMolecules = false } = options;\n        this.OCL = OCL;\n        this.db = {};\n        /**\n         * @type {Map<string, InternalStatistics>}\n         */\n        this.dataStatistics = new Map();\n        /**\n         * @type {Map<string, InternalStatistics>}\n         */\n        this.calculatedStatistics = new Map();\n        this.computeProperties = computeProperties;\n        this.keepEmptyMolecules = keepEmptyMolecules;\n        this.searcher = new OCL.SSSearcherWithIndex();\n    }\n    clear() {\n        this.db = {};\n        this.dataStatistics.clear();\n        this.calculatedStatistics.clear();\n    }\n    get nbMolecules() {\n        return Object.keys(this.db).length;\n    }\n    get nbData() {\n        let number = 0;\n        for (const entry of Object.values(this.db)) {\n            number += entry.data.length;\n        }\n        return number;\n    }\n    get statistics() {\n        const nbData = this.nbData;\n        const nbMolecules = this.nbMolecules;\n        const statistics = {\n            data: [],\n            calculated: [],\n        };\n        for (const [key, value] of this.dataStatistics.entries()) {\n            const statistic = {\n                label: key,\n                counter: value.counter,\n                kind: value.kind,\n                always: value.counter === nbData,\n                isNumber: false,\n            };\n            statistics.data.push(statistic);\n            // if kind is numeric, add minValue and maxValue. Need to go through all the values\n            if (value.kind === 'number') {\n                statistic.isNumeric = true;\n                statistic.minValue = Number.POSITIVE_INFINITY;\n                statistic.maxValue = Number.NEGATIVE_INFINITY;\n                for (const entry of Object.values(this.db)) {\n                    for (const data of entry.data) {\n                        if (data[key] < statistic.minValue) {\n                            statistic.minValue = data[key];\n                        }\n                        if (data[key] > statistic.maxValue) {\n                            statistic.maxValue = data[key];\n                        }\n                    }\n                }\n            }\n        }\n        for (const [key, value] of this.calculatedStatistics.entries()) {\n            const statistic = {\n                label: key,\n                counter: value.counter,\n                kind: value.kind,\n                always: value.counter === nbMolecules,\n                isNumeric: false,\n            };\n            statistics.calculated.push(statistic);\n            // if kind is numeric, add minValue and maxValue. Need to go through all the values\n            if (value.kind === 'number') {\n                statistic.isNumeric = true;\n                statistic.minValue = Number.POSITIVE_INFINITY;\n                statistic.maxValue = Number.NEGATIVE_INFINITY;\n                for (const entry of Object.values(this.db)) {\n                    if (entry.properties[key] < statistic.minValue) {\n                        statistic.minValue = entry.properties[key];\n                    }\n                    if (entry.properties[key] > statistic.maxValue) {\n                        statistic.maxValue = entry.properties[key];\n                    }\n                }\n            }\n        }\n        return statistics;\n    }\n    /**\n     * Append an array of entries to the current database. An entry is an object that by default should contain a 'ocl' property containing idCode and optionally index and coordinates\n     * @param {*} moleculesDB\n     * @param {object[]} entries\n     * @param {object} [options={}]\n     * @param {string} [options.idCodePath='ocl.idCode']\n     * @param {string} [options.indexPath='ocl.index']\n     * @param {string} [options.coordinatesPath='ocl.coordinates']\n     * @param {string} [options.mwPath='mw']\n     * @param {string} [options.smilesPath]\n     * @param {string} [options.molfilePath]\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendEntries(entries, options) {\n        return appendEntries(this, entries, {\n            computeProperties: this.computeProperties,\n            ...options,\n        });\n    }\n    /**\n     * append to the current database a CSV file\n     * @param {string|ArrayBuffer} csv - text file containing the comma separated value file\n     * @param {object} [options={}] - options.\n     * @param {boolean} [options.header=true] - if the first line of the file is a header\n     * @param {boolean} [options.dynamicTyping=true] - dynamically type the data (convert values to number of boolean if possible)\n     * @param {boolean} [options.skipEmptyLines=true] - skip empty lines\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendCSV(csv, options) {\n        return appendCSV(this, csv, options);\n    }\n    /**\n     * Append a SDF to the current database\n     * @param {string|ArrayBuffer} sdf - text file containing the sdf\n     * @param {object} [options={}] - options\n     * @param {Function} [options.onStep] - callback to execute after each molecule\n     * @param {boolean} [options.dynamicTyping=true] - Dynamically type the data\n     * @param {boolean} [options.mixedEOL=false] - Set to true if you know there is a mixture between \\r\\n and \\n\n     * @param {string} [options.eol] - Specify the end of line character. Default will be the one found in the file\n     * @returns {Promise<void>}\n     */\n    appendSDF(sdf, options) {\n        return appendSDF(this, sdf, options);\n    }\n    /**\n     * Append a list of SMILES to the current database.\n     * @param {string|ArrayBuffer} smiles - text file containing a list of smiles\n     * @param {object} [options={}] - Options\n     * @param {Function} [options.onStep] - call back to execute after each molecule\n     * @returns {Promise<void>}\n     */\n    appendSmilesList(smiles, options) {\n        return appendSmilesList(this, smiles, options);\n    }\n    /**\n     * Add a molecule to the current database.\n     * @param {import('openchemlib').Molecule} molecule - The molecule to append.\n     * @param {object} [data={}] - Options.\n     * @param {object} [moleculeInfo={}] - May contain precalculated index and mw.\n     */\n    pushEntry(molecule, data, moleculeInfo) {\n        pushEntry(this, molecule, data, moleculeInfo);\n    }\n    /**\n     * Add an entry in the database.\n     * @param {object} moleculeInfo - a molecule as a JSON that may contain the following properties: molfile, smiles, idCode, mf, index\n     * @param {object} [data={}]\n     */\n    pushMoleculeInfo(moleculeInfo, data) {\n        return pushMoleculeInfo(this, moleculeInfo, data);\n    }\n    /**\n     * Search in a MoleculesDB\n     * Inside the database all the same molecules are group together\n     * @param {string|import('openchemlib').Molecule} [query] - smiles, molfile, idlCode or instance of Molecule to look for\n     * @param {object} [options={}] - Options\n     * @param {'smiles'|'idCode'|'smarts'|'molfile'} [options.format='idCode'] - query format\n     * @param {string} [options.mode='substructure'] - search by 'substructure', 'exact' or 'similarity'\n     * @param {boolean} [options.flattenResult=true] - The database group the data for the same product. This allows to flatten the result\n     * @param {boolean} [options.keepMolecule=false] - keep the OCL.Molecule object in the result\n     * @param {number} [options.limit=Number.MAX_SAFE_INTEGER] - maximal number of result\n     * @returns {Array} array of object of the type {(molecule), idCode, data, properties}\n     */\n    search(query, options) {\n        return search(this, query, options);\n    }\n    /**\n     * Search in a MoleculesDB\n     * Inside the database all the same molecules are group together\n     * @param {string|import('openchemlib').Molecule} [query] - smiles, molfile, idCode or instance of Molecule to look for\n     * @param {object} [options={}] - Options.\n     * @param {'smiles'|'idCode'|'smarts'|'molfile'} [options.format='idCode'] - query format\n     * @param {string} [options.mode='substructure'] - search by 'substructure', 'exact' or 'similarity'\n     * @param {boolean} [options.flattenResult=true] - The database group the data for the same product. This allows to flatten the result\n     * @param {boolean} [options.keepMolecule=false] - keep the OCL.Molecule object in the result\n     * @param {number} [options.limit=Number.MAX_SAFE_INTEGER] - maximal number of result\n     * @param {number} [options.interval=100] - interval in ms to call the onStep callback\n     * @param {Function} [options.onStep] - callback to execute after each interval\n     * @param {AbortController} [options.controler] - callback to execute to check if the search should be aborted\n     * @returns {Promise<Array>} array of object of the type {(molecule), idCode, data, properties}\n     */\n    searchAsync(query, options) {\n        return searchAsync(this, query, options);\n    }\n    /**\n     * Returns an array with the current database\n     * @returns\n     */\n    getDB() {\n        return Object.keys(this.db).map((key) => this.db[key]);\n    }\n    /**\n     * Append the property `data.color` to each entry based on a data or property label\n     * {object} [options={}]\n     * {string} [options.dataLabel] name of the property from `data` to use\n     * {string} [options.propertyLabel] name of the property from `properties` to use\n     * {number} [options.colorLabel='color'] name of the property to add in data that will contain the color\n     * {number} [options.minValue]\n     * {number} [options.maxValue]\n     * {number} [options.minHue=0]\n     * {number} [options.maxHue=360]\n     * {number} [options.saturation=65] percent of color saturation\n     * {number} [options.lightness=65] percent of color lightness\n     * @param options\n     */\n    appendColor(options) {\n        appendColor(this, options);\n    }\n}\n//# sourceMappingURL=MoleculesDB.js.map","import { makeRacemic } from '../util/makeRacemic.js';\nexport function getAtomFeatures(originalMolecule, options = {}) {\n    const OCL = originalMolecule.getOCL();\n    const { sphere = 1 } = options;\n    const fragment = new OCL.Molecule(0, 0);\n    const results = [];\n    for (let rootAtom = 0; rootAtom < originalMolecule.getAllAtoms(); rootAtom++) {\n        let min = 0;\n        let max = 0;\n        const atomMask = new Array(originalMolecule.getAtoms());\n        const atomList = new Array(originalMolecule.getAtoms());\n        const molecule = originalMolecule.getCompactCopy();\n        for (let currentSphere = 0; currentSphere <= sphere; currentSphere++) {\n            if (max === 0) {\n                atomList[max] = rootAtom;\n                atomMask[rootAtom] = true;\n                max++;\n            }\n            else {\n                let newMax = max;\n                for (let i = min; i < max; i++) {\n                    const atom = atomList[i];\n                    for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n                        const connAtom = molecule.getConnAtom(atom, j);\n                        if (!atomMask[connAtom]) {\n                            atomMask[connAtom] = true;\n                            atomList[newMax++] = connAtom;\n                        }\n                    }\n                }\n                min = max;\n                max = newMax;\n            }\n            molecule.copyMoleculeByAtoms(fragment, atomMask, true, null);\n            if (currentSphere === sphere) {\n                makeRacemic(fragment);\n                results.push(fragment.getCanonizedIDCode());\n            }\n        }\n    }\n    const atoms = {};\n    for (const result of results) {\n        if (!atoms[result]) {\n            atoms[result] = 1;\n        }\n        else {\n            atoms[result]++;\n        }\n    }\n    return atoms;\n}\n//# sourceMappingURL=getAtomFeatures.js.map","let rAtomicNumber = 0;\n/**\n * Returns the atomic number of the X atom\n * @param {import('openchemlib').Molecule} molecule - An instance of a molecule\n * @returns\n */\nexport function getRAtomicNumber(molecule) {\n    if (!rAtomicNumber) {\n        const OCL = molecule.getOCL();\n        rAtomicNumber = OCL.Molecule.getAtomicNoFromLabel('R', OCL.Molecule.cPseudoAtomR);\n    }\n    return rAtomicNumber;\n}\n//# sourceMappingURL=getRAtomicNumber.js.map","import { getMF } from '../util/getMF.js';\nimport { getRAtomicNumber } from '../util/getRAtomicNumber.js';\nexport function fragmentAcyclicSingleBonds(molecule) {\n    const OCL = molecule.getOCL();\n    const atoms = [];\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n        const atom = {};\n        atoms.push(atom);\n        atom.i = i;\n        atom.links = []; // we will store connected atoms of broken bonds\n    }\n    const bonds = [];\n    for (let i = 0; i < molecule.getAllBonds(); i++) {\n        const bond = {};\n        bonds.push(bond);\n        bond.i = i;\n        bond.order = molecule.getBondOrder(i);\n        bond.atom1 = molecule.getBondAtom(0, i);\n        bond.atom2 = molecule.getBondAtom(1, i);\n        bond.type = molecule.getBondType(i);\n        bond.isAromatic = molecule.isAromaticBond(i);\n        bond.isRingBond = molecule.isRingBond(i);\n        if (!bond.isAromatic && (bond.type & 0b11) === 1 && !bond.isRingBond) {\n            bond.selected = true;\n            atoms[bond.atom1].links.push(bond.atom2);\n            atoms[bond.atom2].links.push(bond.atom1);\n        }\n    }\n    const brokenMolecule = molecule.getCompactCopy();\n    for (const bond of bonds) {\n        if (bond.selected) {\n            brokenMolecule.markBondForDeletion(bond.i);\n        }\n    }\n    brokenMolecule.deleteMarkedAtomsAndBonds();\n    const fragmentMap = [];\n    const nbFragments = brokenMolecule.getFragmentNumbers(fragmentMap);\n    const results = [];\n    for (let i = 0; i < nbFragments; i++) {\n        const result = {};\n        result.atomMap = [];\n        const includeAtom = fragmentMap.map((id) => {\n            return id === i;\n        });\n        const fragment = new OCL.Molecule(0, 0);\n        const atomMap = [];\n        brokenMolecule.copyMoleculeByAtoms(fragment, includeAtom, false, atomMap);\n        // we will add some R groups at the level of the broken bonds\n        for (let j = 0; j < atomMap.length; j++) {\n            if (atomMap[j] > -1) {\n                result.atomMap.push(j);\n                if (atoms[j].links.length > 0) {\n                    for (let k = 0; k < atoms[j].links.length; k++) {\n                        fragment.addBond(atomMap[j], fragment.addAtom(getRAtomicNumber(brokenMolecule)), 1);\n                    }\n                }\n            }\n        }\n        fragment.setFragment(false);\n        result.idCode = fragment.getIDCode();\n        result.mf = getMF(fragment).mf.replace(/R[1-9]?/, '');\n        results.push(result);\n    }\n    return results;\n}\n//# sourceMappingURL=fragmentAcyclicSingleBonds.js.map","/**\n * @description Append the OCL reaction to the reaction object\n * @param {Array} reactions - array of reactions objects with rxnCode and label\n * @param {typeof import('openchemlib')} OCL - OCL object\n * @param {object} [options={}]\n * @param {import('cheminfo-types').Logger} [options.logger]\n * @returns {Array} array of reactions objects with rxnCode, label and oclReaction (a decoded version of rxnCode reaction)\n */\nexport function appendOCLReaction(reactions, OCL, options = {}) {\n    const { logger } = options;\n    const newReactions = [];\n    for (const reaction of reactions) {\n        if (reaction.rxnCode) {\n            newReactions.push({\n                ...reaction,\n                oclReaction: OCL.ReactionEncoder.decode(reaction.rxnCode),\n            });\n        }\n        else if (logger) {\n            logger.warn(reaction, 'Reaction without rxnCode');\n        }\n    }\n    return newReactions;\n}\n//# sourceMappingURL=appendOCLReaction.js.map","/**\n *\n * @param {*} processedMolecules\n * @param {import('openchemlib').Molecule|string} molecule\n * @param {*} options\n * @returns\n */\nexport function checkIfExistsOrAddInfo(processedMolecules, molecule, options) {\n    const { moleculeInfoCallback, asReagent, asProduct } = options;\n    const idCode = typeof molecule === 'string' ? idCode : molecule.getIDCode();\n    if (processedMolecules.has(idCode)) {\n        const entry = processedMolecules.get(idCode);\n        let exists = false;\n        if (asReagent) {\n            if (entry.asReagent) {\n                exists = true;\n            }\n            else {\n                entry.asReagent = true;\n            }\n        }\n        if (asProduct) {\n            if (entry.asProduct) {\n                exists = true;\n            }\n            else {\n                entry.asProduct = true;\n            }\n        }\n        return { exists, info: entry };\n    }\n    else {\n        let info = {\n            idCode,\n            asReagent,\n            asProduct,\n            info: {},\n        };\n        if (moleculeInfoCallback) {\n            info.info = moleculeInfoCallback(molecule);\n        }\n        processedMolecules.set(idCode, info);\n        return { exists: false, info };\n    }\n}\n//# sourceMappingURL=checkIfExistsOrAddInfo.js.map","import { checkIfExistsOrAddInfo } from './checkIfExistsOrAddInfo.js';\n/**\n * @description apply one reaction to one reactant\n * @param {import('openchemlib').Molecule[]} reactants\n * @param tree\n * @param {Array<object>} reactions - rxnCode of the reaction\n * @param {object} options - options to apply the reaction\n * @param {number} options.currentDepth - current depth of the recursion\n * @param {number} options.maxDepth - max depth of the recursion\n * @param {number} options.maxCurrentDepth - max depth of the recursion for this set of reactions\n * @param {number} options.limitReactions - limit the number of reactions\n * @param {object} options.stats - stats of the recursion\n * @param {number} options.stats.counter - number of reactions\n * @param {Map} options.processedMolecules - set of processed molecules\n * @param {Array} options.trees - array of trees of previous recursions\n * @param {object} options.OCL - OCL object\n * @returns {Array} array of results\n */\nexport function applyOneReactantReactions(tree, reactions, options) {\n    const { currentDepth, maxDepth, maxCurrentDepth, processedMolecules, OCL, logger, } = options;\n    if (tree.molecules.length !== 1) {\n        logger?.warn('applyOneReactantReactions:tree.reactants.length!==1', tree.reactants.length);\n        return [];\n    }\n    const reactant = OCL.Molecule.fromIDCode(tree.molecules[0].idCode);\n    const todoNextDepth = [];\n    // if the current depth is greater than the max depth, we stop the recursion and return an empty array\n    if (currentDepth > maxCurrentDepth || tree.depth >= maxDepth) {\n        return [];\n    }\n    const existsAndInfo = checkIfExistsOrAddInfo(processedMolecules, reactant, {\n        ...options,\n        asReagent: true,\n    });\n    // check if the reactant has already been processed\n    if (existsAndInfo.exists) {\n        return [];\n    }\n    for (const reaction of reactions) {\n        if (options.stats.counter >= options.limitReactions) {\n            return [];\n        }\n        const reactor = new OCL.Reactor(reaction.oclReaction);\n        // isMatching is true if the reactant is matching the reaction else we continue to the next reaction\n        const isMatching = Boolean(reactor.setReactant(0, reactant));\n        if (isMatching) {\n            options.stats.counter++;\n            // get the products of the reaction\n            const oneReactionProducts = reactor.getProducts();\n            for (const oneReactionProduct of oneReactionProducts) {\n                for (const reactionProduct of oneReactionProduct) {\n                    // get the info of the product (idCode, mf)\n                    const productExistsAndInfo = checkIfExistsOrAddInfo(processedMolecules, reactionProduct, { ...options, asProduct: true });\n                    // if the product has not been processed yet, we add it to the list of products and we add it to the list of todoNextDepth\n                    if (!productExistsAndInfo.exists) {\n                        // eslint-disable-next-line no-unused-vars\n                        const { oclReaction, needToBeCharged, ...reactionWithoutOCL } = reaction;\n                        const oneReaction = {\n                            reaction: reactionWithoutOCL,\n                            depth: tree.depth + 1,\n                            isValid: true,\n                            currentDepth,\n                            molecules: [\n                                checkIfExistsOrAddInfo(processedMolecules, reactionProduct, options).info,\n                            ],\n                        };\n                        if (!tree.children)\n                            tree.children = [];\n                        tree.children.push(oneReaction);\n                        todoNextDepth.push(() => {\n                            return applyOneReactantReactions(oneReaction, reactions, {\n                                ...options,\n                                currentDepth: options.currentDepth + 1,\n                            });\n                        });\n                    }\n                }\n            }\n        }\n    }\n    // by returning todoNextDepth, we make sure that the recursion will continue\n    return todoNextDepth;\n}\n//# sourceMappingURL=applyOneReactantReactions.js.map","export function getFilteredTrees(reactions, options = {}) {\n    const { filter = () => true } = options;\n    const nodesToKeep = reactions.getNodes().filter(filter);\n    const parentMap = reactions.getParentMap();\n    for (let currentNode of nodesToKeep) {\n        const parent = parentMap.get(currentNode);\n        if (parent && nodesToKeep.includes(parent) === false) {\n            nodesToKeep.push(parent);\n        }\n    }\n    return getValidChildren(reactions.trees, { nodesToKeep });\n}\nfunction getValidChildren(nodes, options) {\n    const { nodesToKeep } = options;\n    const validNodes = nodes\n        .filter((node) => nodesToKeep.includes(node))\n        .map((node) => ({ ...node }));\n    for (const node of validNodes) {\n        if (node.children) {\n            const validChildren = node.children.filter((child) => nodesToKeep.includes(child));\n            if (validChildren.length > 0) {\n                node.children = getValidChildren(validChildren, { nodesToKeep });\n            }\n            else {\n                delete node.children;\n            }\n        }\n    }\n    return validNodes;\n}\n//# sourceMappingURL=getFilteredTrees.js.map","export function getLeaves(trees) {\n    const leaves = [];\n    for (const tree of trees) {\n        appendLeavesSS(leaves, tree);\n    }\n    return leaves;\n}\nfunction appendLeavesSS(leaves, currentBranch) {\n    if (!currentBranch.children || currentBranch.children.length === 0) {\n        leaves.push(currentBranch);\n        return;\n    }\n    for (const child of currentBranch.children) {\n        appendLeavesSS(leaves, child);\n    }\n}\n//# sourceMappingURL=getLeaves.js.map","export function getNodes(trees) {\n    const nodes = [];\n    for (const tree of trees) {\n        getNodesSS(nodes, tree);\n    }\n    return nodes;\n}\nfunction getNodesSS(nodes, currentBranch) {\n    nodes.push(currentBranch);\n    for (const child of currentBranch?.children || []) {\n        getNodesSS(nodes, child);\n    }\n}\n//# sourceMappingURL=getNodes.js.map","import { appendOCLReaction } from './utils/appendOCLReaction.js';\nimport { applyOneReactantReactions } from './utils/applyOneReactantReactions.js';\nimport { checkIfExistsOrAddInfo } from './utils/checkIfExistsOrAddInfo.js';\nimport { getFilteredTrees } from './utils/getFilteredTrees.js';\nimport { getLeaves } from './utils/getLeaves.js';\nimport { getNodes } from './utils/getNodes.js';\nexport class Reactions {\n    /**\n     *\n     * @param OCL\n     * @param {object} [options={}]\n     * @param {import('cheminfo-types').Logger} logger\n     * @param {number} [options.maxDepth=5]\n     * @param {Function} [options.moleculeInfoCallback]\n     * @param {boolean} [options.skipProcessed=true]\n     */\n    constructor(OCL, options = {}) {\n        this.moleculeInfoCallback = options.moleculeInfoCallback;\n        this.maxDepth = options.maxDepth ?? 5;\n        this.limitReactions = options.limitReactions ?? 200;\n        this.skipProcessed = options.skipProcessed ?? true;\n        this.logger = options.logger;\n        this.processedMolecules = new Map();\n        this.OCL = OCL;\n        this.trees = [];\n        this.moleculeInfo = {}; // a cache containing molecule information like mw, etc.\n    }\n    /**\n     * We need to call this method for all the reactants on which we want to apply the reactions.\n     * If there is only one reactant, we call this method with an array of one reactant.\n     * If there are multiple reactants, we call this method with an array of the reactants.\n     * This method has to be called for all the reactants\n     * @param {import('openchemlib').Molecule[]|string[]} molecules\n     * @param moleculesOrIDCodes\n     */\n    appendHead(moleculesOrIDCodes) {\n        if (!Array.isArray(moleculesOrIDCodes)) {\n            throw new TypeError('reactants must be an array');\n        }\n        const molecules = moleculesOrIDCodes.map((molecule) => checkIfExistsOrAddInfo(this.processedMolecules, molecule, {\n            moleculeInfoCallback: this.moleculeInfoCallback,\n        }).info);\n        const tree = {\n            molecules,\n            depth: 0,\n            isValid: true, // this node could be implied in reactions\n        };\n        this.trees.push(tree);\n    }\n    /**\n     * Returns all the leaves of the trees\n     * @returns\n     */\n    getLeaves() {\n        return getLeaves(this.trees);\n    }\n    /**\n     * Returns all the nodes of the trees\n     * @returns\n     */\n    getNodes() {\n        return getNodes(this.trees);\n    }\n    getParentMap() {\n        const parentMap = new Map();\n        const nodes = this.getNodes();\n        for (const node of nodes) {\n            if (node.children) {\n                for (const child of node.children) {\n                    parentMap.set(child, node);\n                }\n            }\n        }\n        return parentMap;\n    }\n    /**\n     * When applying reactions some branches may be dead because it can not be implied in any reaction.\n     * This is the case when we specify a 'min' reaction depth.\n     * This will returno only the valid nodes\n     * @returns\n     */\n    getValidNodes() {\n        return this.getNodes().filter((node) => node.isValid);\n    }\n    /**\n     *\n     * @param {object} [options={}]\n     * @param {(object):boolean} [options.filter] - a function that will be called for each node and return true if the node should be kept\n     */\n    getFilteredReactions(options = {}) {\n        const filteredReactions = new Reactions();\n        filteredReactions.moleculeInfoCallback = this.moleculeInfoCallback;\n        filteredReactions.maxDepth = this.maxDepth;\n        filteredReactions.limitReactions = this.limitReactions;\n        filteredReactions.skipProcessed = this.skipProcessed;\n        filteredReactions.logger = this.logger;\n        filteredReactions.processedMolecules = this.processedMolecules;\n        filteredReactions.OCL = this.OCL;\n        filteredReactions.moleculeInfo = this.moleculeInfo; // a cache containing molecule information like mw, etc.\n        filteredReactions.trees = getFilteredTrees(this, options);\n        return filteredReactions;\n    }\n    /**\n     *\n     * @param {object[]} reactions - array of reactions that should be applied\n     * @param {object} [options={}]\n     * @param {number} [options.min=0] - min depth of the reaction\n     * @param {number} [options.max=3] - max depth of the reaction\n     */\n    applyOneReactantReactions(reactions, options = {}) {\n        const { min = 0, max = 3 } = options;\n        clearAsFromProcessedMolecules(this.processedMolecules);\n        const nodes = this.getNodes().filter((node) => node.isValid);\n        for (const node of nodes) {\n            node.currentDepth = 0;\n        }\n        reactions = appendOCLReaction(reactions, this.OCL);\n        const stats = { counter: 0 };\n        // Start the recursion by applying the first level of reactions\n        for (const node of nodes) {\n            let todoCurrentLevel = applyOneReactantReactions(node, reactions, {\n                OCL: this.OCL,\n                currentDepth: 1,\n                processedMolecules: this.processedMolecules,\n                moleculeInfoCallback: this.moleculeInfoCallback,\n                maxDepth: this.maxDepth,\n                maxCurrentDepth: max,\n                stats,\n                limitReactions: this.limitReactions,\n            });\n            do {\n                const nexts = [];\n                for (const todo of todoCurrentLevel) {\n                    nexts.push(todo());\n                }\n                todoCurrentLevel = nexts.flat();\n            } while (todoCurrentLevel.length > 0);\n        }\n        const newNodes = this.getNodes().filter((node) => node.isValid);\n        for (const node of newNodes) {\n            if (node.currentDepth < min || node.currentDepth > max) {\n                node.isValid = false;\n            }\n            delete node.currentDepth;\n        }\n    }\n}\nfunction clearAsFromProcessedMolecules(processedMolecules) {\n    for (const [, value] of processedMolecules) {\n        if (value.asReagent) {\n            value.asReagent = false;\n        }\n        if (value.asProduct) {\n            value.asProduct = false;\n        }\n    }\n}\n//# sourceMappingURL=Reactions.js.map"],"names":["xAtomicNumber","getXAtomicNumber","molecule","OCL","getOCL","Molecule","getAtomicNoFromLabel","cPseudoAtomX","isCsp3","atomID","getAtomicNo","getAtomCharge","getImplicitHydrogens","getConnAtoms","makeRacemic","ensureHelperArrays","cHelperCIP","i","getAllAtoms","getAtomParity","cAtomParityNone","setAtomESR","cESRTypeAnd","tagAtom","iAtom","customLabel","getAtomLabel","setAtomCustomLabel","setAtomicNo","setAtomMass","getAtomMass","FULL_HOSE_CODE","HOSE_CODE_CUT_C_SP3_SP3","getHoseCodesForAtomsInternal","options","fragments","getHoseCodesForAtomsAsFragments","hoses","fragment","push","getCanonizedIDCode","CANONIZER_ENCODE_ATOM_CUSTOM_LABELS","allowedCustomLabels","minSphereSize","maxSphereSize","kind","tagAtoms","tagAtomFct","rootAtoms","slice","getCompactCopy","length","internalTagAtoms","cHelperNeighbours","j","includes","getAtomCustomLabel","mappings","min","max","atomMask","Uint8Array","atomList","sphere","rootAtom","newMax","atom","getAllConnAtoms","connAtom","getConnAtom","Error","copyMoleculeByAtoms","setAtomMapNo","indexOf","removeExplicitHydrogens","addQueryFeaturesAndRemoveMapNo","mapping","getAtomMapNo","isAromatic","isAromaticAtom","setAtomQueryFeature","cAtomQFAromatic","cAtomQFNotAromatic","smallestRing","getAtomRingSize","cAtomQFRingSize3","cAtomQFRingSize4","cAtomQFRingSize5","cAtomQFRingSize6","cAtomQFRingSize7","cAtomQFRingSizeLarge","nbHydrogens","getAllHydrogens","cAtomQFNot0Hydrogen","cAtomQFNot1Hydrogen","cAtomQFNot2Hydrogen","cAtomQFNot3Hydrogen","Int32Array","getAllAtomsPaths","maxPathLength","allAtomsPaths","oneAtomPaths","atomPaths","path","pathLength","nextIndexes","nextAtoms","currentIndexes","currentAtoms","index","previousPath","conn","connectedAtom","toString","Object","prototype","isAnyArray","value","tag","call","endsWith","input","arguments","undefined","TypeError","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Number","isInteger","maxValue","minValue","rescale","output","Array","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","defineProperty","matrix","require$$0","require$$1","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","inspectData","rows","columns","maxI","Math","maxJ","result","loop","get","line","formatNumber","join","num","formatNumber2","padEnd","len","str","fix","toFixed","startsWith","exp","toExponential","installMathOperations","AbstractMatrix","Matrix","add","addS","addM","set","checkMatrix","newMatrix","sub","subS","subM","subtract","subtractS","subtractM","mul","mulS","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","ceil","clz32","cos","cosh","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","checkNumber","newArray","array","checkNonEmpty","isEmpty","sumByRow","sum","sumByColumn","sumAll","v","productByRow","productByColumn","productAll","varianceByRow","unbiased","mean","cols","variance","sum1","sum2","x","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","row","column","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","interval","eye","diag","data","l","matrix1","matrix2","isMatrix","klass","apply","callback","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","reducedEchelonForm","m","n","maxRow","p","pivot","setSubMatrix","neg","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","NEGATIVE_INFINITY","maxIndex","idx","POSITIVE_INFINITY","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","dot","cumulativeSum","vector2","vector1","mmul","other","Bcolj","Float64Array","s","mpow","scalar","bb","e","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","m6","m7","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","m20","m21","m22","m23","c02","c12","c20","c21","c22","mmulStrassen","y","r1","c1","r2","c2","console","warn","embed","mat","r","c","resultat","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","from","to","entries","product","standardDeviation","center","Symbol","iterator","col","values","for","isArrayOfNumbers","every","element","randomInt","diagonal","identity","negate","tensorProduct","#initData","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","compactLength","BaseView","MatrixColumnView","MatrixColumnSelectionView","MatrixFlipColumnView","MatrixFlipRowView","MatrixRowView","MatrixRowSelectionView","MatrixSelectionView","MatrixSubView","MatrixTransposeView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","wrap","LuDecomposition","lu","pivotVector","pivotSign","t","LUcolj","kmax","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","useSVD","leftHandSide","rightHandSide","d","subMatrix0","subMatrix1","subMatrix2","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","linearDependencies","results","Abis","svd","pseudoInverse","svdSolution","covariance","xMatrix","yMatrix","yIsSame","cov","correlation","sdx","sdy","corr","EigenvalueDecomposition","assumeSymmetric","tred2","tql2","H","ort","orthes","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","hh","dl1","c3","el1","s2","tst1","low","high","nn","exshift","z","iter","w","ra","sa","vr","vi","notlast","cdivres","cdiv","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","diff","tOld","counter","xResidual","residual","yResidual","betas","CHO","EVD","Matrix_1","NIPALS","Nipals","SVD","_default","default","floydWarshall","adjMatrix","numVertices","distMatrix","val","is","dist","getConnectivityMatrix","nbAtoms","map","atomicNo","negativeAtomicNo","mass","cRoundedMass","sdt","getConnBondOrder","sdta","bondNumber","getConnBond","isAromaticBond","getCanonizedDiaIDs","diaMol","logger","maxNbAtoms","moleculeWithH","heterotopicSymmetryRanks","finalRanks","canonizedDiaIDs","cHelperSymmetryStereoHeterotopicity","cache","diaID","tempMolecule","getCanonizedHoseCodes","topicMolecule","canonizedHoseCodes","getDiaIDsAndInfo","newDiaIDs","counts","newDiaID","idCode","attachedHydrogensIDCodes","attachedHydrogens","nbAttachedHydrogens","atomLabel","nbEquivalentAtoms","heavyAtom","atomMapNo","hydrogenDiaID","getHeterotopicSymmetryRanks","xMolecule","symmetryRanks","getSymmetryRank","getFinalRanks","getChiralOrHeterotopicCarbons","internalMolecule","addImplicitHydrogens","addPossibleChiralBonds","atoms","neighbourSymmetries","getNeighbourSymmetries","getAtoms","getStereoBond","stereoBond","getAtomPreferredStereoBond","setBondType","cBondTypeUp","getBondAtom","setBondAtom","symmetryRank","ensureHeterotopicChiralBonds","esrType","atLeastThreeAtoms","cHelperBitNeighbours","heterotopicCarbons","getMoleculeWithH","getXMolecule","xAtomNumber","TopicMolecule","originalMolecule","getIDCode","setAtomNoInMapNo","molecules","ensureMapNo","existingMapNo","mapNo","nextMapNo","getHoseFragment","sphereSize","getAtomPathsFrom","minPathLength","toAtomicNo","atomsPaths","paths","atomPath","at","getAtomPaths","atom1","atom2","minDistance","maxDistance","toMolfile","version","toMolfileV3","getMolecule","fromMolecule","diaIDs","getDiaIDsObject","groupDiastereotopicAtomIDsAsObject","hoseCodes","distanceMatrix","diaIDsAndInfo","toMolfileWithH","toMolfileWithoutH","atomsToDelete","getExplicitHydrogens","deleteAtoms","getGroupedDiastereotopicAtomIDs","groupDiastereotopicAtomIDs","getDiaIDsMapping","originalDiaIDs","filter","destinationDiaIDs","destinationDiaID","originalDiaID","find","newIDCode","oldIDCode","oldHydrogenIDCode","newHydrogenIDCode","diaIDsObject","keys","key","oclID","heavyAtoms","existingAtoms","connected","getSymmetryRanks","getDiastereotopicAtomIDs","numberAtoms","ids","getDiastereotopicAtomIDsAndH","hydrogenOCLIDs","getDiastereotopicAtomIDsFromMolfile","molfile","fromMolfileWithAtomMap","diaIDsArray","source","destination","toDiastereotopicSVG","width","height","prefix","heavyAtomHydrogen","svg","hydrogenInfo","groupedDiaIDs","id","toSVG","replaceAll","getHoseCodes","atomLabels","atomicNumbers","label","getHoseCodesAndInfo","calculateDiastereotopicIDs","newMolfile","newMolfileWithH","hose","molfileWithH","moleculeWithHydrogens","getHoseCodesForAtoms","getHoseCodesForAtom","getHoseCodesFromDiastereotopicID","getHoseCodesForPath","maxLength","originalFrom","originalTo","originalAtoms","getPath","torsion","calculateTorsion","tag1","tag2","atomMap","createPolymer","unit","checkEntity","gamma","getAlphaGamma","r1AtomicNo","r2AtomicNo","getR1R2AtomicNo","polymer","addMolecule","getUnit","addBond","replace","markMonomer","firstAtomicNo","secondAtomicNo","nbR1","nbR2","r1Count","r2Count","fromSmiles","cPseudoAtomsRGroups","MAX_R","combineSmiles","coreSmiles","complexity","core","getCore","rGroups","getRGroups","getComplexity","generate","rGroup","smiles","onStep","sizes","currents","position","appendMolecule","mw","newSmiles","currentMol","toSmiles","combinedSmiles","props","MoleculeProperties","nbHAcceptor","acceptorCount","nbHDonor","donorCount","logP","logS","PSA","polarSurfaceArea","nbRottable","rotatableBondCount","nbStereoCenter","stereoCenterCount","mf","getMolecularFormula","formula","relativeWeight","originalSmiles","updateRPosition","group","level","currentChar","charAt","currentSubstring","match","isUtf8","buf","ensureString","blob","ArrayBuffer","isView","encoding","guessEncoding","decoder","TextDecoder","decode","uint8","buffer","byteOffset","byteLength","isutf8","getCamelCase","string","toUpperCase","getParts","text","lines","split","parts","currentPart","currentLabel","target","parseColumnbProperties","columnProperties","currentColumnName","columnPropery","parent","related","specialType","parseData","headers","header","rawEntries","fields","rawEntry","entry","valueEhnhancer","atomMapping","idcoordinates2D","parseDwar","improveParts","parseDefault","rawData","getAtomsInfo","cHelperRings","extra","singleBonds","doubleBonds","tripleBonds","aromaticBonds","cnoHybridation","abnormalValence","getAtomAbnormalValence","charge","cipParity","getAtomCIPParity","color","getAtomColor","radical","getAtomRadical","ringBondCount","getAtomRingBondCount","ringSize","getAtomX","getAtomY","getAtomZ","allHydrogens","connAtoms","allConnAtoms","implicitHydrogens","isAllylic","isAllylicAtom","isStereoCenter","isAtomStereoCenter","isRing","isRingAtom","isSmallRing","isSmallRingAtom","isStabilized","isStabilizedAtom","bond","bondOrder","getBondOrder","totalBonds","hydrogenOnAtomicNo","labileHydrogen","getImplicitHydrogensCount","atomSorter","getMF","getFragments","allAtoms","getFragmentMF","part","toMFString","mfs","mfAtom","getCharge","getMolfilesMapping","fromF","toF","fromMoleculeF","fromMolfile","toMoleculeF","toMolecule","fromFinalRanks","toFinalRanks","fromTo","toFrom","fromRank","toRank","unsaturationsObject","O","N","C","F","Si","Cl","Br","I","getUnsaturation","elements","unsaturation","matches","symbol","elementObject","defaultPossibleHints","String","raw","message","anyMatches","remarks","getNMRHints","correct","proposed","hints","checkMF","checkUnsaturation","checkStereoAndTautomer","possibleHints","searcherCorrect","SSSearcher","setMolecule","searcherAnswer","possibleHint","anyMatch","matchFragment","fromIDCode","setFragment","isFragmentInMolecule","isMFCorrect","checkSymmetry","hint","hash","getHash","answer","mfCorrect","mfAnswer","unsaturationCorrect","unsaturationAnswer","getNoStereoIDCode","getTautomerIDCode","nbCorrectRanks","nbAnswerRanks","CanonizerUtil","TAUTOMER","NOSTEREO","seed","h1","h2","ch","codePointAt","imul","getNextNMRHint","providedHints","some","providedHint","toxicityPredictor","druglikenessPredictor","getProperties","includeToxicities","includeDruglikeness","moleculeFormula","ToxicityPredictor","mutagenic","assessRisk","TYPE_MUTAGENIC","tumorigenic","TYPE_TUMORIGENIC","irritant","TYPE_IRRITANT","reproductiveEffective","TYPE_REPRODUCTIVE_EFFECTIVE","DruglikenessPredictor","drugLikeness","assessDruglikeness","drugScore","DrugScoreCalculator","calculate","tumurogenic","appendAtomPart","nbOH","carbonyl","hydroxyl","carbonOrHydrogen","neighbour","neighbourAtom","neighbourBond","nbCOOH","nbCHO","nbNH2","amine","nbCN","cn","nbLabileH","toggleHydrogens","toVisualizerMolfile","diastereotopic","highlight","extendedIDs","_highlight","_atoms","getPathAndTorsion","getPathsInfo","fromLabel","toLabel","minLength","withHOSES","fromAtomicNumber","toAtomicNumber","atomsInfo","pathLengthMatrix","getShortestPaths","allShortestPaths","module","exports","this","self","window","document","postMessage","IS_PAPA_WORKER","o","_handle","_finished","_completed","_halted","_input","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","errors","meta","chunkSize","step","chunk","streamer","_config","parseChunk","skipFirstNLines","newline","quoteChar","guessLineEndings","beforeFirstChunk","parse","paused","aborted","cursor","substring","preview","workerId","WORKER_ID","finished","concat","complete","_sendError","RemoteChunkSize","_readChunk","_chunkLoaded","stream","XMLHttpRequest","withCredentials","onload","onerror","_chunkError","open","downloadRequestBody","downloadRequestHeaders","setRequestHeader","send","status","readyState","responseText","getResponseHeader","lastIndexOf","statusText","LocalChunkSize","FileReader","webkitSlice","mozSlice","FileReaderSync","readAsText","pause","resume","on","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","removeListener","skipEmptyLines","trim","DefaultDelimiter","_","isArray","forEach","transformHeader","dynamicTypingFunction","dynamicTyping","test","parseFloat","Date","transform","code","abort","delimiter","RECORD_SEP","UNIT_SEP","E","comments","successful","bestDelimiter","delimitersToGuess","getCharIndex","setTimeout","RegExp","P","S","A","T","fastMode","D","escapeChar","BAD_DELIMITERS","M","R","substr","Set","has","linebreak","truncated","renamedHeaders","userError","file","userStep","userChunk","userComplete","terminate","worker","WORKERS_SUPPORTED","NODE_STREAM_INPUT","charCodeAt","download","readable","read","File","URL","webkitURL","BLOB_URL","createObjectURL","Blob","Worker","onmessage","config","unparse","quotes","escapeFormulae","fromCharCode","BYTE_ORDER_MARK","Parser","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","fn","each","prop","attr","toLowerCase","files","inputElem","instanceConfig","extend","before","action","reason","create","getMoleculeCreators","Map","smarts","smilesParser","SmilesParser","smartsMode","parseMolecule","defaultCSVOptions","appendCSV","moleculesDB","csv","moleculeCreators","parsed","Papa","stats","firstElement","moleculeCreator","moleculeField","isNumeric","lowerField","pushEntry","appendColor","dataLabel","propertyLabel","minHue","maxHue","saturation","lightness","colorLabel","db","getDB","flatMap","datum","properties","definedValues","__defProp","__name","configurable","isObject","segs","joinChar","splitChar","isValid","isValidObject","getValue","pathIsArray","pathIsString","separator","hasProp","index_default","appendEntries","idCodePath","indexPath","coordinatesPath","mwPath","smilesPath","molfilePath","coordinates","keepEmptyMolecules","getEntriesBoundaries","eol","res","previous","next","nextMatch","sdfPart","labels","currentLabels","keep","exclude","include","modifiers","modifier","modifiedValue","sdf","mixedEOL","entriesBoundaries","start","now","Infinity","always","statistics","statistic","time","appendSDF","appendSmilesList","smilesArray","oneSmiles","IDX","HEX","BUFFER","v4","out","moleculeInfo","moleculeIDCode","getMoleculeIDCode","getIndex","molecularFormula","em","absoluteWeight","computeProperties","updateStatistics","calculatedStatistics","dataStatistics","stat","pushMoleculeInfo","noWait","Promise","resolve","setImmediate","AbortError","getQuery","query","format","search","mode","exactSearch","substructureSearch","substructureSearchOR","similaritySearch","processResult","searchAsync","subStructureSearchAsync","queryIDCode","searchResult","substructureSearchBegin","substructureSearchEnd","queryMW","getMW","queryIndex","searcher","queries","controller","shouldAbort","abortEventListener","signal","addEventListener","begin","performance","queryIdCode","similarity","MAX_SAFE_INTEGER","SSSearcherWithIndex","getSimilarityTanimoto","flattenResult","keepMolecule","limit","MoleculesDB","clear","nbMolecules","nbData","number","calculated","isNumber","getAtomFeatures","currentSphere","rAtomicNumber","getRAtomicNumber","cPseudoAtomR","fragmentAcyclicSingleBonds","links","bonds","getAllBonds","order","getBondType","isRingBond","selected","brokenMolecule","markBondForDeletion","deleteMarkedAtomsAndBonds","fragmentMap","nbFragments","getFragmentNumbers","includeAtom","addAtom","appendOCLReaction","reactions","newReactions","reaction","rxnCode","oclReaction","ReactionEncoder","checkIfExistsOrAddInfo","processedMolecules","moleculeInfoCallback","asReagent","asProduct","exists","info","applyOneReactantReactions","tree","currentDepth","maxDepth","maxCurrentDepth","reactants","reactant","todoNextDepth","depth","existsAndInfo","limitReactions","reactor","Reactor","isMatching","setReactant","oneReactionProducts","getProducts","oneReactionProduct","reactionProduct","productExistsAndInfo","needToBeCharged","reactionWithoutOCL","oneReaction","children","getFilteredTrees","nodesToKeep","getNodes","parentMap","getParentMap","currentNode","getValidChildren","trees","nodes","validNodes","node","validChildren","child","getLeaves","leaves","appendLeavesSS","currentBranch","getNodesSS","Reactions","skipProcessed","appendHead","moleculesOrIDCodes","getValidNodes","getFilteredReactions","filteredReactions","clearAsFromProcessedMolecules","todoCurrentLevel","nexts","todo","flat","newNodes"],"mappings":"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","x_google_ignoreList":[6,7,8,9,10,11,12,38,39,47,67,71,73,74,75,78]}