{"version":3,"file":"openchemlib-utils.js","sources":["../src/OCL.js","../src/util/tagAtom.js","../src/diastereotopic/addDiastereotopicMissingChirality.js","../src/util/makeRacemic.js","../src/diastereotopic/getDiastereotopicAtomIDs.js","../src/diastereotopic/getDiastereotopicAtomIDsAndH.js","../src/diastereotopic/toDiastereotopicSVG.js","../src/diastereotopic/getGroupedDiastereotopicAtomIDs.js","../src/util/isCsp3.js","../src/hose/getHoseCodesForAtom.js","../src/hose/getHoseCodesFromDiastereotopicID.js","../src/hose/getHoseCodesAndDiastereotopicIDs.js","../src/util/combineSmiles.js","../src/util/getAtomsInfo.js","../node_modules/is-any-array/src/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/src/inspect.js","../node_modules/ml-matrix/src/mathOperations.js","../node_modules/ml-matrix/src/util.js","../node_modules/ml-matrix/src/stat.js","../node_modules/ml-matrix/src/matrix.js","../node_modules/ml-floyd-warshall/src/index.js","../src/util/getConnectivityMatrix.js","../node_modules/atom-sorter/src/index.js","../src/util/getMF.js","../src/hose/getHoseCodesForPath.js","../src/path/getPathsInfo.js","../src/path/getShortestPaths.js"],"sourcesContent":["let OCL;\n\nexport function getOCL() {\n  if (!OCL) {\n    throw new Error('OCL has to be initialized using initOCL(OCL)');\n  }\n  return OCL;\n}\n\nexport function initOCL(newOCL) {\n  if (OCL && OCL !== newOCL) {\n    throw new Error('OCL-utils was already initialized with a different OCL');\n  }\n  OCL = newOCL;\n}\n","import { getOCL } from '../OCL';\n\nlet xAtomicNumber = 0;\n\n/**\n * Tag an atom to be able to visualize it\n * @param {OCL.Molecule} molecule\n * @param {number} iAtom\n */\nexport function tagAtom(molecule, iAtom) {\n  let customLabel = `${molecule.getAtomLabel(iAtom)}*`;\n  molecule.setAtomCustomLabel(iAtom, customLabel);\n  if (molecule.getAtomicNo(iAtom) === 1) {\n    molecule.setAtomicNo(iAtom, getXAtomicNumber());\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\nfunction getXAtomicNumber() {\n  if (!xAtomicNumber) {\n    const OCL = getOCL();\n    xAtomicNumber = OCL.Molecule.getAtomicNoFromLabel('X');\n  }\n  return xAtomicNumber;\n}\n","import { getOCL } from '../OCL';\nimport { tagAtom } from '../util/tagAtom';\n\n/**\n * Add either missing chirality of diastereotopic missing chirality\n * The problem is that sometimes we need to add chiral bond that was not planned because it is the same group\n * This is the case for example for the valine where the 2 C of the methyl groups are diastereotopic\n * @param {OCL.Molecule} molecule\n * @param {object} [options={}]\n * @param {number} [options.esrType=cESRTypeAnd]\n */\nexport function addDiastereotopicMissingChirality(molecule, options = {}) {\n  const { Molecule } = getOCL();\n  const { esrType = Molecule.cESRTypeAnd } = options;\n\n  for (let iAtom = 0; iAtom < molecule.getAllAtoms(); iAtom++) {\n    let tempMolecule = molecule.getCompactCopy();\n    tagAtom(tempMolecule, iAtom);\n    // After copy, helpers must be recalculated\n    tempMolecule.ensureHelperArrays(Molecule.cHelperBitsStereo);\n    // We need to have >0 and not >1 because there could be unspecified chirality in racemate\n\n    for (let i = 0; i < tempMolecule.getAtoms(); i++) {\n      // changed from from handling below; TLS 9.Nov.2015\n      if (\n        tempMolecule.isAtomStereoCenter(i) &&\n        tempMolecule.getStereoBond(i) === -1\n      ) {\n        let stereoBond = tempMolecule.getAtomPreferredStereoBond(i);\n        if (stereoBond !== -1) {\n          molecule.setBondType(stereoBond, Molecule.cBondTypeUp);\n          if (molecule.getBondAtom(1, stereoBond) === i) {\n            let 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}\n","import { getOCL } from '../OCL';\n\n/**\n *\n * @param {OCL.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 } = getOCL();\n\n  // if we don't calculate this we have 2 epimers\n  molecule.ensureHelperArrays(Molecule.cHelperCIP);\n\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}\n","import { getOCL } from '../OCL';\nimport { makeRacemic } from '../util/makeRacemic';\nimport { tagAtom } from '../util/tagAtom';\n\nimport { addDiastereotopicMissingChirality } from './addDiastereotopicMissingChirality';\n\n/**\n * Returns an array of diastereotopic ID (as oclCode)\n * @param {OCL.Molecule} molecule\n */\nexport function getDiastereotopicAtomIDs(molecule) {\n  const OCL = getOCL();\n  addDiastereotopicMissingChirality(molecule);\n\n  let numberAtoms = molecule.getAllAtoms();\n  let ids = [];\n  for (let iAtom = 0; iAtom < numberAtoms; iAtom++) {\n    let 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(\n      OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS,\n    );\n  }\n  return ids;\n}\n","import { getOCL } from '../OCL';\n\nimport { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs';\n// Previously getExtendedDiastereotopicAtomIDs\n\n/**\n *\n * @param {OCL.Molecule} molecule\n */\nexport function getDiastereotopicAtomIDsAndH(originalMolecule) {\n  const OCL = getOCL();\n  const molecule = originalMolecule.getCompactCopy();\n  molecule.addImplicitHydrogens();\n  // TODO Temporary code ???\n  molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n\n  const diaIDs = getDiastereotopicAtomIDs(molecule);\n  const newDiaIDs = [];\n\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.indexOf(diaIDs[atom]) === -1) {\n          newDiaID.hydrogenOCLIDs.push(diaIDs[atom]);\n        }\n      }\n    }\n\n    newDiaIDs.push(newDiaID);\n  }\n\n  return newDiaIDs;\n}\n","import { getDiastereotopicAtomIDsAndH } from './getDiastereotopicAtomIDsAndH';\n\n/**\n * Returns a SVG\n * @param {*} molecule\n * @param {*} [options={}]\n */\nexport function toDiastereotopicSVG(molecule, options = {}) {\n  let {\n    width = 300,\n    height = 200,\n    prefix = 'ocl',\n    heavyAtomHydrogen = false,\n  } = options;\n  let svg = options.svg;\n  let diaIDs = [];\n\n  let hydrogenInfo = {};\n  getDiastereotopicAtomIDsAndH(molecule).forEach(function (line) {\n    hydrogenInfo[line.oclID] = line;\n  });\n\n  if (heavyAtomHydrogen) {\n    for (let i = 0; i < molecule.getAtoms(); i++) {\n      diaIDs.push([]);\n    }\n    let groupedDiaIDs = molecule.getGroupedDiastereotopicAtomIDs();\n    groupedDiaIDs.forEach(function (diaID) {\n      if (\n        hydrogenInfo[diaID.oclID] &&\n        hydrogenInfo[diaID.oclID].nbHydrogens > 0\n      ) {\n        diaID.atoms.forEach((atom) => {\n          hydrogenInfo[diaID.oclID].hydrogenOCLIDs.forEach((id) => {\n            if (!diaIDs[atom * 1].includes(id)) diaIDs[atom].push(id);\n          });\n        });\n      }\n    });\n  } else {\n    diaIDs = molecule.getDiastereotopicAtomIDs().map((a) => [a]);\n  }\n\n  if (!svg) svg = molecule.toSVG(width, height, prefix);\n\n  svg = svg.replace(/Atom:[0-9]+\"/g, function (value) {\n    let atom = value.replace(/[^0-9]/g, '');\n    return `${value} data-diaid=\"${diaIDs[atom].join(',')}\"`;\n  });\n\n  return svg;\n}\n","import { getDiastereotopicAtomIDs } from './getDiastereotopicAtomIDs';\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 {OCL.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 */\n\nexport function getGroupedDiastereotopicAtomIDs(molecule, options = {}) {\n  const { atomLabel } = options;\n  let diaIDs = getDiastereotopicAtomIDs(molecule, options);\n  let diaIDsObject = {};\n  for (let i = 0; i < diaIDs.length; i++) {\n    if (!atomLabel || molecule.getAtomLabel(i) === atomLabel) {\n      let 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\n  return Object.keys(diaIDsObject).map((key) => diaIDsObject[key]);\n}\n","/**\n * Check if a specific atom is a sp3 carbon\n * @param {OCL.Molecule} molecule\n * @param {number} atomID\n */\n\nexport function isCsp3(molecule, atomID) {\n  if (molecule.getAtomicNo(atomID) !== 6) return false;\n  if (molecule.getAtomCharge(atomID) !== 0) return false;\n  if (\n    molecule.getImplicitHydrogens(atomID) + molecule.getConnAtoms(atomID) !==\n    4\n  ) {\n    return false;\n  }\n  return true;\n}\n","import { getOCL } from '../OCL';\nimport { isCsp3 } from '../util/isCsp3';\nimport { makeRacemic } from '../util/makeRacemic';\nimport { tagAtom } from '../util/tagAtom';\n\nexport const FULL_HOSE_CODE = 1;\nexport const HOSE_CODE_CUT_C_SP3_SP3 = 2;\n\n/**\n * Returns the hose code for a specific atom number\n * @param {OCL.Molecule} originalMolecule\n * @param {number} rootAtom\n * @param {object} [options={}]\n * @param {boolean} [options.isTagged] Specify is the atom is already tagged\n */\nexport function getHoseCodesForAtom(originalMolecule, rootAtom, options = {}) {\n  const OCL = getOCL();\n  const {\n    minSphereSize = 0,\n    maxSphereSize = 4,\n    kind = FULL_HOSE_CODE,\n    isTagged = false,\n  } = options;\n\n  const molecule = originalMolecule.getCompactCopy();\n\n  if (!isTagged) {\n    let tag = tagAtom(molecule, rootAtom);\n    molecule.addImplicitHydrogens();\n    molecule.addMissingChirality();\n    molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n    // because ensuring helper reorder atoms we need to look again for it\n    for (let i = 0; i < molecule.getAllAtoms(); i++) {\n      if (tag === molecule.getAtomCustomLabel(i)) {\n        rootAtom = i;\n        break;\n      }\n    }\n  }\n\n  let fragment = new OCL.Molecule(0, 0);\n  let results = [];\n  let min = 0;\n  let max = 0;\n  let atomMask = new Array(molecule.getAllAtoms());\n  let atomList = new Array(molecule.getAllAtoms());\n\n  for (let sphere = 0; sphere <= maxSphereSize; sphere++) {\n    if (max === 0) {\n      atomList[0] = rootAtom;\n      atomMask[rootAtom] = true;\n      max = 1;\n    } else {\n      let newMax = max;\n      for (let i = min; i < max; i++) {\n        let atom = atomList[i];\n        for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n          let 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    molecule.copyMoleculeByAtoms(fragment, atomMask, true, null);\n    if (sphere >= minSphereSize) {\n      makeRacemic(fragment);\n      results.push(\n        fragment.getCanonizedIDCode(\n          OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS,\n        ),\n      );\n    }\n  }\n  return results;\n}\n","import { getOCL } from '../OCL';\n\nimport { getHoseCodesForAtom } from './getHoseCodesForAtom';\n/**\n * Returns the hose code for a specific marked atom\n * @param {string} diastereotopicID\n * @param {object} options\n */\n\nexport function getHoseCodesFromDiastereotopicID(\n  diastereotopicID,\n  options = {},\n) {\n  const OCL = getOCL();\n  const molecule = OCL.Molecule.fromIDCode(diastereotopicID);\n  molecule.addImplicitHydrogens();\n  molecule.addMissingChirality();\n\n  // One of the atom has to be marked !\n  let atomID = -1;\n  for (let i = 0; i < molecule.getAllAtoms(); i++) {\n    // we need to find the marked atom\n    const atomCustomLabel = molecule.getAtomCustomLabel(i);\n    if (atomCustomLabel != null && atomCustomLabel.endsWith('*')) {\n      atomID = i;\n      break;\n    }\n  }\n  if (atomID >= 0) {\n    options.isTagged = true;\n    return getHoseCodesForAtom(molecule, atomID, options);\n  }\n  return undefined;\n}\n","import { getDiastereotopicAtomIDs } from '../diastereotopic/getDiastereotopicAtomIDs';\n\nimport { getHoseCodesFromDiastereotopicID } from './getHoseCodesFromDiastereotopicID';\n/**\n * Returns an array containing one entry per atom containing\n * diaID and hose code\n * @param {OCL.Molecule} molecule\n * @param {object} options\n */\n\nexport function getHoseCodesAndDiastereotopicIDs(molecule, options) {\n  const diaIDs = getDiastereotopicAtomIDs(molecule).map((oclID) => ({\n    oclID,\n  }));\n  // TODO: seems like a very slow approach\n  diaIDs.forEach(function (diaID) {\n    const hoses = getHoseCodesFromDiastereotopicID(diaID.oclID, options);\n    diaID.hoses = [];\n    let sphere = 0;\n    for (const hose of hoses) {\n      diaID.hoses.push({\n        sphere: sphere++,\n        oclID: hose,\n      });\n    }\n  });\n  return diaIDs;\n}\n","import { getOCL } from '../OCL';\n\nconst MAX_R = 10;\n\n/**\n * Generate molecules and calcule predicted properties form a list of smiles and fragments\n * @param {string} [coreSmiles]\n * @param {array} [fragments] Array of {smiles,R1,R2,...}\n * @param {object} [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 * @return {Promise} promise that resolves to molecules or complexity as a number\n */\nexport async function combineSmiles(coreSmiles, fragments, 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, options);\n}\n\nfunction getComplexity(rGroups) {\n  let complexity = 1;\n  for (let rGroup of rGroups) {\n    complexity *= rGroup.smiles.length;\n  }\n  return complexity;\n}\n\nasync function generate(core, rGroups, 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\n  while (true) {\n    counter++;\n    while (position < currents.length) {\n      if (currents[position] < sizes[position]) {\n        if (onStep) {\n          await onStep(counter);\n        }\n        appendMolecule(molecules, core, rGroups, currents);\n        currents[position]++;\n        for (let i = 0; i < position; i++) {\n          currents[i] = 0;\n        }\n        position = 0;\n      } else {\n        position++;\n      }\n    }\n    if ((position = currents.length)) {\n      if (onStep) {\n        await onStep(counter);\n      }\n      appendMolecule(molecules, core, rGroups, currents);\n      break;\n    }\n  }\n  return Object.keys(molecules)\n    .map((key) => molecules[key])\n    .sort((m1, m2) => m1.mw - m2.mw);\n}\n\nfunction appendMolecule(molecules, core, rGroups, currents) {\n  let newSmiles = core.smiles;\n  for (let i = 0; i < currents.length; i++) {\n    newSmiles += `.${rGroups[i].smiles[currents[i]]}`;\n  }\n\n  const OCL = getOCL();\n\n  const currentMol = OCL.Molecule.fromSmiles(newSmiles);\n  const idCode = currentMol.getIDCode();\n\n  if (!molecules[idCode]) {\n    let molecule = {};\n    molecules[idCode] = molecule;\n    molecule.smiles = currentMol.toSmiles();\n    molecule.combinedSmiles = newSmiles;\n    molecule.idCode = idCode;\n    molecule.molfile = currentMol.toMolfile();\n\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    let mf = currentMol.getMolecularFormula();\n    molecule.mf = mf.formula;\n    molecule.mw = mf.relativeWeight;\n  }\n}\n\nfunction getCore(coreSmiles) {\n  let core = {\n    originalSmiles: coreSmiles,\n    smiles: coreSmiles.replace(/\\[R([1-4])\\]/g, '%5$1'),\n  };\n\n  for (let i = 0; i < MAX_R; i++) {\n    if (core.originalSmiles.indexOf(`[R${i}]`) > -1) core[`R${i}`] = true;\n  }\n  return core;\n}\n\nfunction getRGroups(core, fragments) {\n  let 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}`]) {\n          // we only consider the R that are in the core\n          if (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  }\n  return Object.keys(rGroups).map((key) => rGroups[key]);\n}\n\nfunction updateRPosition(smiles) {\n  // R group should not be at the beginning\n  if (smiles.indexOf('[R]') !== 0) return smiles;\n  if (smiles.length === 3) return '[H][R]';\n  // we are in trouble ... we need to move the R\n  let 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    let currentChar = newSmiles.charAt(j);\n    let currentSubstring = newSmiles.substr(j);\n    if (currentChar === '(') {\n      level++;\n    } else if (currentChar === ')') {\n      level--;\n    } else if (level === 0) {\n      if (currentSubstring.match(/^[a-z]/)) {\n        return `${newSmiles.substr(0, j + 1)}([R])${newSmiles.substr(j + 1)}`;\n      } else if (currentSubstring.match(/^[A-Z][a-z]/)) {\n        return `${newSmiles.substr(0, j + 2)}([R])${newSmiles.substr(j + 2)}`;\n      } else if (currentSubstring.match(/^[A-Z]/)) {\n        return `${newSmiles.substr(0, j + 1)}([R])${newSmiles.substr(j + 1)}`;\n      }\n    }\n  }\n  return smiles;\n}\n","import { getOCL } from '../OCL';\nimport { getDiastereotopicAtomIDs } from '../diastereotopic/getDiastereotopicAtomIDs';\n\n/**\n * Returns various information about atoms in the molecule\n * @param {OCL.Molecule} [molecule]\n */\nexport function getAtomsInfo(molecule) {\n  const OCL = getOCL();\n  molecule.ensureHelperArrays(OCL.Molecule.cHelperRings);\n\n  let diaIDs = getDiastereotopicAtomIDs(molecule);\n\n  let results = [];\n  for (let i = 0; i < diaIDs.length; i++) {\n    let 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    let 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\n    result.implicitHydrogens =\n      result.allHydrogens + result.connAtoms - result.allConnAtoms;\n\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\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      let bond = molecule.getConnBond(i, j);\n      let bondOrder = molecule.getBondOrder(bond);\n      if (molecule.isAromaticBond(bond)) {\n        extra.aromaticBonds++;\n      } else if (bondOrder === 1) {\n        // not an hydrogen\n        extra.singleBonds++;\n      } else if (bondOrder === 2) {\n        extra.doubleBonds++;\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\n    if (result.atomicNo === 6) {\n      result.extra.cnoHybridation = result.extra.totalBonds - 1;\n    } else if (result.atomicNo === 7) {\n      result.extra.cnoHybridation = result.extra.totalBonds;\n    } else if (result.atomicNo === 8) {\n      result.extra.cnoHybridation = result.extra.totalBonds + 1;\n    } else if (result.atomicNo === 1) {\n      let connectedAtom =\n        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","const toString = Object.prototype.toString;\n\nexport default function isAnyArray(object) {\n  return toString.call(object).endsWith('Array]');\n}\n","import isArray from 'is-any-array';\n\nfunction max(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(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 default max;\n","import isArray from 'is-any-array';\n\nfunction min(input) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (!isArray(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 default min;\n","import isArray 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 (!isArray(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 (!isArray(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 default rescale;\n","const indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\nexport function inspectMatrix() {\n  return inspectMatrixWithOptions(this);\n}\n\nexport function inspectMatrixWithOptions(matrix, options = {}) {\n  const { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options;\n  return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize) {\n  const { rows, columns } = matrix;\n  const maxI = Math.min(rows, maxRows);\n  const maxJ = Math.min(columns, maxColumns);\n  const result = [];\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));\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) {\n  const numStr = String(num);\n  if (numStr.length <= maxNumSize) {\n    return numStr.padEnd(maxNumSize, ' ');\n  }\n  const precise = num.toPrecision(maxNumSize - 2);\n  if (precise.length <= maxNumSize) {\n    return precise;\n  }\n  const exponential = num.toExponential(maxNumSize - 2);\n  const eIndex = exponential.indexOf('e');\n  const e = exponential.slice(eIndex);\n  return exponential.slice(0, maxNumSize - e.length) + e;\n}\n","export function 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, Math.pow(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, Math.pow(this.get(i, j), matrix.get(i, j)));\n      }\n    }\n    return this;\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 */\nexport function 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 */\nexport function 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 */\nexport function 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 */\nexport function 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\nexport function checkIndices(matrix, rowIndices, columnIndices) {\n  return {\n    row: checkRowIndices(matrix, rowIndices),\n    column: checkColumnIndices(matrix, columnIndices),\n  };\n}\n\nexport function checkRowIndices(matrix, rowIndices) {\n  if (typeof rowIndices !== 'object') {\n    throw new TypeError('unexpected type for row indices');\n  }\n\n  let rowOut = rowIndices.some((r) => {\n    return r < 0 || r >= matrix.rows;\n  });\n\n  if (rowOut) {\n    throw new RangeError('row indices are out of range');\n  }\n\n  if (!Array.isArray(rowIndices)) rowIndices = Array.from(rowIndices);\n\n  return rowIndices;\n}\n\nexport function checkColumnIndices(matrix, columnIndices) {\n  if (typeof columnIndices !== 'object') {\n    throw new TypeError('unexpected type for column indices');\n  }\n\n  let columnOut = columnIndices.some((c) => {\n    return c < 0 || c >= matrix.columns;\n  });\n\n  if (columnOut) {\n    throw new RangeError('column indices are out of range');\n  }\n  if (!Array.isArray(columnIndices)) columnIndices = Array.from(columnIndices);\n\n  return columnIndices;\n}\n\nexport function 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\nexport function 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\nexport function checkNonEmpty(matrix) {\n  if (matrix.isEmpty()) {\n    throw new Error('Empty matrix has no elements to index');\n  }\n}\n","import { newArray } from './util';\n\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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\nexport function 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 += Math.pow(matrix.get(i, j), 2) / (matrix.columns - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function 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\nexport function 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 += Math.pow(matrix.get(i, j), 2) / (matrix.rows - 1);\n    }\n    scale.push(Math.sqrt(sum));\n  }\n  return scale;\n}\n\nexport function 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\nexport function 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 += Math.pow(matrix.get(i, j), 2) / divider;\n    }\n  }\n  return Math.sqrt(sum);\n}\n\nexport function 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","import rescale from 'ml-array-rescale';\n\nimport { inspectMatrix, inspectMatrixWithOptions } from './inspect';\nimport { installMathOperations } from './mathOperations';\nimport {\n  sumByRow,\n  sumByColumn,\n  sumAll,\n  productByRow,\n  productByColumn,\n  productAll,\n  varianceByRow,\n  varianceByColumn,\n  varianceAll,\n  centerByRow,\n  centerByColumn,\n  centerAll,\n  scaleByRow,\n  scaleByColumn,\n  scaleAll,\n  getScaleByRow,\n  getScaleByColumn,\n  getScaleAll,\n} from './stat';\nimport {\n  checkRowVector,\n  checkRowIndex,\n  checkColumnIndex,\n  checkColumnVector,\n  checkRange,\n  checkIndices,\n  checkNonEmpty,\n} from './util';\n\nexport class 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  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() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(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        }\n      }\n    }\n    return v;\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() {\n    if (this.isEmpty()) {\n      return NaN;\n    }\n    let v = this.get(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        }\n      }\n    }\n    return v;\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    let result = 0;\n    if (type === 'max') {\n      return this.max();\n    } else if (type === 'frobenius') {\n      for (let i = 0; i < this.rows; i++) {\n        for (let j = 0; j < this.columns; j++) {\n          result = result + this.get(i, j) * this.get(i, j);\n        }\n      }\n      return Math.sqrt(result);\n    } else {\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  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 resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n      resultat = resultat.setSubMatrix(c11, 0, 0);\n      resultat = resultat.setSubMatrix(c12, c11.rows, 0);\n      resultat = resultat.setSubMatrix(c21, 0, c11.columns);\n      resultat = resultat.setSubMatrix(c22, c11.rows, c11.columns);\n      return resultat.subMatrix(0, rows - 1, 0, cols - 1);\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: min,\n          max: 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  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    let indices = checkIndices(this, rowIndices, columnIndices);\n    let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n    for (let i = 0; i < indices.row.length; i++) {\n      let rowIndex = indices.row[i];\n      for (let j = 0; j < indices.column.length; j++) {\n        let columnIndex = indices.column[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    let newMatrix = new Matrix(this.rows, this.columns);\n    for (let row = 0; row < this.rows; row++) {\n      for (let column = 0; column < this.columns; column++) {\n        newMatrix.set(row, column, this.get(row, column));\n      }\n    }\n    return newMatrix;\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 (!Array.isArray(mean)) {\n          throw new TypeError('mean must be an array');\n        }\n        return varianceByRow(this, unbiased, mean);\n      }\n      case 'column': {\n        if (!Array.isArray(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 (!Array.isArray(center)) {\n          throw new TypeError('center must be an array');\n        }\n        centerByRow(this, center);\n        return this;\n      }\n      case 'column': {\n        if (!Array.isArray(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 (!Array.isArray(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 (!Array.isArray(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\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n  AbstractMatrix.prototype[\n    Symbol.for('nodejs.util.inspect.custom')\n  ] = inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n  return a - b;\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\nexport default class Matrix extends AbstractMatrix {\n  constructor(nRows, nColumns) {\n    super();\n    if (Matrix.isMatrix(nRows)) {\n      // eslint-disable-next-line no-constructor-return\n      return nRows.clone();\n    } else if (Number.isInteger(nRows) && nRows >= 0) {\n      // Create an empty matrix\n      this.data = [];\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    } else if (Array.isArray(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      for (let i = 0; i < nRows; i++) {\n        if (arrayData[i].length !== nColumns) {\n          throw new RangeError('Inconsistent array dimensions');\n        }\n        this.data.push(Float64Array.from(arrayData[i]));\n      }\n    } else {\n      throw new TypeError(\n        'First argument must be a positive number or an array',\n      );\n    }\n    this.rows = nRows;\n    this.columns = nColumns;\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","import { Matrix } from 'ml-matrix';\n\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 default 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    } else {\n      let val = adjMatrix.get(row, column);\n\n      if (val) {\n        // edges values remain the same\n        distMatrix.set(row, column, val);\n      } else {\n        // 0 values become infinity\n        distMatrix.set(row, column, Number.POSITIVE_INFINITY);\n      }\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\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","import floydWarshall from 'ml-floyd-warshall';\nimport { Matrix } from 'ml-matrix';\n\nimport { getOCL } from '../OCL';\n\n/**\n * Returns a connectivity matrix\n * @param {OCL.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 = getOCL();\n  molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n  let nbAtoms = molecule.getAllAtoms();\n\n  let result = new Array(nbAtoms).fill();\n  result = result.map(() => new Array(nbAtoms).fill(0));\n\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    } else if (options.negativeAtomicNo) {\n      for (let i = 0; i < nbAtoms; i++) {\n        result[i][i] = -molecule.getAtomicNo(i);\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    } else {\n      for (let i = 0; i < nbAtoms; i++) {\n        result[i][i] = 1;\n      }\n    }\n  }\n\n  if (options.sdt) {\n    for (let i = 0; i < nbAtoms; i++) {\n      let 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  } else if (options.sdta) {\n    for (let i = 0; i < nbAtoms; i++) {\n      let l = molecule.getAllConnAtoms(i);\n      for (let j = 0; j < l; j++) {\n        let bondNumber = molecule.getConnBond(i, j);\n        if (molecule.isAromaticBond(bondNumber)) {\n          result[i][molecule.getConnAtom(i, j)] = 4;\n        } else {\n          result[i][molecule.getConnAtom(i, j)] = molecule.getConnBondOrder(\n            i,\n            j,\n          );\n        }\n      }\n    }\n  } else {\n    for (let i = 0; i < nbAtoms; i++) {\n      let l = molecule.getAllConnAtoms(i);\n      for (let j = 0; j < l; j++) {\n        result[i][molecule.getConnAtom(i, j)] = 1;\n      }\n    }\n  }\n\n  if (options.pathLength) {\n    result = floydWarshall(new Matrix(result)).to2DArray();\n  }\n  return result;\n}\n","'use strict';\n\nfunction atomSorter(a, b) {\n  if (a === b) return 0;\n  if (a === 'C') return -1;\n  if (b === 'C') return 1;\n  if (a === 'H') return -1;\n  if (b === 'H') return 1;\n  if (a < b) return -1;\n  return 1;\n}\n\nmodule.exports = atomSorter;\n","import atomSorter from 'atom-sorter';\n\n/**\n * Calculate the molecular formula in 'chemcalc' notation taking into account fragments, isotopes and charges\n * {OCL.Molecule} [molecule] an instance of OCL.Molecule\n * @returns {String}\n */\n\nexport function getMF(molecule) {\n  let entries = molecule.getFragments();\n  let result = {};\n  let parts = [];\n  let allAtoms = [];\n\n  entries.forEach(function (entry) {\n    let mf = getFragmentMF(entry, allAtoms);\n    parts.push(mf);\n  });\n\n  let counts = {};\n  for (let part of parts) {\n    if (!counts[part]) counts[part] = 0;\n    counts[part]++;\n  }\n  parts = [];\n  for (let key of Object.keys(counts).sort()) {\n    if (counts[key] > 1) {\n      parts.push(counts[key] + key);\n    } else {\n      parts.push(key);\n    }\n  }\n\n  result.parts = parts;\n  result.mf = toMFString(allAtoms);\n  return result;\n}\n\nfunction getFragmentMF(molecule, allAtoms) {\n  let atoms = [];\n  for (let i = 0; i < molecule.getAllAtoms(); i++) {\n    let 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    atoms.push(atom);\n    allAtoms.push(atom);\n  }\n  return toMFString(atoms);\n}\n\nfunction toMFString(atoms) {\n  let charge = 0;\n  let mfs = {};\n  for (let atom of atoms) {\n    let label = atom.label;\n    charge += atom.charge;\n    if (atom.mass) {\n      label = `[${atom.mass}${label}]`;\n    }\n    let mfAtom = mfs[label];\n    if (!mfAtom) {\n      mfs[label] = 0;\n    }\n    mfs[label] += 1;\n    if (atom.implicitHydrogens) {\n      if (!mfs.H) mfs.H = 0;\n      mfs.H += atom.implicitHydrogens;\n    }\n  }\n\n  let mf = '';\n  let keys = Object.keys(mfs).sort(atomSorter);\n  for (let key of keys) {\n    mf += key;\n    if (mfs[key] > 1) mf += mfs[key];\n  }\n\n  if (charge > 0) {\n    mf += `(+${charge > 1 ? charge : ''})`;\n  } else if (charge < 0) {\n    mf += `(${charge < -1 ? charge : '-'})`;\n  }\n  return mf;\n}\n","import { getOCL } from '../OCL';\nimport { makeRacemic } from '../util/makeRacemic';\nimport { tagAtom } from '../util/tagAtom';\n\nlet fragment;\n\n/**\n * Returns the hose code for a specific atom number\n * @param {OCL.Molecule} molecule\n */\nexport function getHoseCodesForPath(molecule, from, to, maxLength) {\n  const OCL = getOCL();\n  const originalFrom = from;\n  const originalTo = to;\n  molecule = molecule.getCompactCopy();\n\n  let 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\n  const tag1 = tagAtom(molecule, from);\n  const tag2 = tagAtom(molecule, to);\n\n  molecule.addImplicitHydrogens();\n  molecule.addMissingChirality();\n\n  molecule.ensureHelperArrays(OCL.Molecule.cHelperNeighbours);\n\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        } else {\n          to = i;\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\n  if (!fragment) fragment = new OCL.Molecule(0, 0);\n\n  let atoms = [];\n  molecule.getPath(atoms, from, to, maxLength + 1);\n\n  let min = 0;\n  let max = 0;\n  let atomMask = new Array(molecule.getAllAtoms()).fill(false);\n  let atomList = new Array(molecule.getAllAtoms()).fill(-1);\n  let hoses = [];\n\n  for (let sphere = 0; sphere <= 2; sphere++) {\n    if (max === 0) {\n      for (let atom of atoms) {\n        atomMask[atom] = true;\n        atomList[max++] = atom;\n      }\n    } else {\n      let newMax = max;\n      for (let i = min; i < max; i++) {\n        let atom = atomList[i];\n        for (let j = 0; j < molecule.getAllConnAtoms(atom); j++) {\n          let 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    let atomMap = [];\n\n    molecule.copyMoleculeByAtoms(fragment, atomMask, true, atomMap);\n    makeRacemic(fragment);\n    let oclID = fragment.getCanonizedIDCode(\n      OCL.Molecule.CANONIZER_ENCODE_ATOM_CUSTOM_LABELS,\n    );\n\n    hoses.push({\n      sphere,\n      oclID,\n    });\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","import { getOCL } from '../OCL';\nimport { getHoseCodesForPath } from '../hose/getHoseCodesForPath';\nimport { getAtomsInfo } from '../util/getAtomsInfo';\nimport { getConnectivityMatrix } from '../util/getConnectivityMatrix';\n\nlet fragment;\n\n/**\n *\n * @param {OCL.Molecule} molecule\n * @param {object} [options={}]\n * @param {string} [opions.fromLabel='H']\n * @param {string} [opions.toLabel='H']\n * @param {string} [opions.minLength=1]\n * @param {string} [opions.maxLength=4]\n\n */\nexport function getPathsInfo(molecule, options = {}) {\n  const {\n    fromLabel = 'H',\n    toLabel = 'H',\n    minLength = 1,\n    maxLength = 4,\n  } = options;\n\n  const OCL = getOCL();\n\n  if (!fragment) {\n    fragment = new OCL.Molecule(0, 0);\n  }\n\n  let fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n  let toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n\n  // we need to find all the atoms 'fromLabel' and 'toLabel'\n  let atomsInfo = getAtomsInfo(molecule);\n\n  let pathLengthMatrix = getConnectivityMatrix(molecule, {\n    pathLength: true,\n  });\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        if (molecule.getAtomicNo(from) === fromAtomicNumber) {\n          if (molecule.getAtomicNo(to) === toAtomicNumber) {\n            let pathLength = pathLengthMatrix[from][to];\n            if (pathLength >= minLength && pathLength <= maxLength) {\n              atomsInfo[from].paths.push(\n                getHoseCodesForPath(\n                  molecule,\n                  from,\n                  to,\n                  pathLength,\n                  atomsInfo[to].oclID,\n                ),\n              );\n            }\n          }\n        }\n      }\n    }\n  }\n\n  return atomsInfo;\n}\n","import { getOCL } from '../OCL';\n\n/**\n * Get the shortest path between each pair of atoms in the molecule\n * @param {OCL.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 = getOCL();\n  const { fromLabel = '', toLabel = '', maxLength = 3 } = options;\n\n  let fromAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(fromLabel);\n  let toAtomicNumber = OCL.Molecule.getAtomicNoFromLabel(toLabel);\n\n  const nbAtoms = molecule.getAllAtoms();\n  let allShortestPaths = new Array(nbAtoms);\n  for (let i = 0; i < nbAtoms; i++) {\n    allShortestPaths[i] = new Array(nbAtoms);\n  }\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 (\n        (fromAtomicNumber === 0 ||\n          molecule.getAtomicNo(from) === fromAtomicNumber) &&\n        (toAtomicNumber === 0 || molecule.getAtomicNo(to) === toAtomicNumber)\n      ) {\n        let path = [];\n        molecule.getPath(path, from, to, maxLength);\n        if (path.length) {\n          allShortestPaths[from][to] = path.slice();\n          allShortestPaths[to][from] = path.reverse();\n        } else {\n          allShortestPaths[from][to] = null;\n          allShortestPaths[to][from] = null;\n        }\n      } else {\n        allShortestPaths[from][to] = null;\n        allShortestPaths[to][from] = null;\n      }\n    }\n  }\n\n  return allShortestPaths;\n}\n"],"names":["OCL","getOCL","Error","initOCL","newOCL","xAtomicNumber","tagAtom","molecule","iAtom","customLabel","getAtomLabel","setAtomCustomLabel","getAtomicNo","setAtomicNo","getXAtomicNumber","setAtomMass","getAtomMass","Molecule","getAtomicNoFromLabel","addDiastereotopicMissingChirality","options","esrType","cESRTypeAnd","getAllAtoms","tempMolecule","getCompactCopy","ensureHelperArrays","cHelperBitsStereo","i","getAtoms","isAtomStereoCenter","getStereoBond","stereoBond","getAtomPreferredStereoBond","setBondType","cBondTypeUp","getBondAtom","connAtom","setBondAtom","setAtomESR","makeRacemic","cHelperCIP","getAtomParity","cAtomParityNone","getDiastereotopicAtomIDs","numberAtoms","ids","getCanonizedIDCode","CANONIZER_ENCODE_ATOM_CUSTOM_LABELS","getDiastereotopicAtomIDsAndH","originalMolecule","addImplicitHydrogens","cHelperNeighbours","diaIDs","newDiaIDs","length","diaID","newDiaID","oclID","hydrogenOCLIDs","nbHydrogens","atom","getConnAtom","heavyAtom","j","getAllConnAtoms","indexOf","push","toDiastereotopicSVG","width","height","prefix","heavyAtomHydrogen","svg","hydrogenInfo","forEach","line","groupedDiaIDs","getGroupedDiastereotopicAtomIDs","atoms","id","includes","map","a","toSVG","replace","value","join","atomLabel","diaIDsObject","counter","Object","keys","key","isCsp3","atomID","getAtomCharge","getImplicitHydrogens","getConnAtoms","FULL_HOSE_CODE","HOSE_CODE_CUT_C_SP3_SP3","getHoseCodesForAtom","rootAtom","minSphereSize","maxSphereSize","kind","isTagged","tag","addMissingChirality","getAtomCustomLabel","fragment","results","min","max","atomMask","Array","atomList","sphere","newMax","copyMoleculeByAtoms","getHoseCodesFromDiastereotopicID","diastereotopicID","fromIDCode","atomCustomLabel","endsWith","undefined","getHoseCodesAndDiastereotopicIDs","hoses","hose","MAX_R","combineSmiles","coreSmiles","fragments","complexity","core","getCore","rGroups","getRGroups","getComplexity","generate","rGroup","smiles","onStep","molecules","sizes","currents","position","appendMolecule","sort","m1","m2","mw","newSmiles","currentMol","fromSmiles","idCode","getIDCode","toSmiles","combinedSmiles","molfile","toMolfile","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","substr","match","getAtomsInfo","cHelperRings","result","extra","singleBonds","doubleBonds","tripleBonds","aromaticBonds","cnoHybridation","abnormalValence","getAtomAbnormalValence","charge","cipParity","getAtomCIPParity","color","getAtomColor","atomicNo","label","mass","radical","getAtomRadical","ringBondCount","getAtomRingBondCount","ringSize","getAtomRingSize","x","getAtomX","y","getAtomY","z","getAtomZ","allHydrogens","getAllHydrogens","connAtoms","allConnAtoms","implicitHydrogens","isAromatic","isAromaticAtom","isAllylic","isAllylicAtom","isStereoCenter","isRing","isRingAtom","isSmallRing","isSmallRingAtom","isStabilized","isStabilizedAtom","bond","getConnBond","bondOrder","getBondOrder","isAromaticBond","totalBonds","connectedAtom","hydrogenOnAtomicNo","labileHydrogen","toString","prototype","isAnyArray","object","call","input","arguments","isArray","TypeError","_options$fromIndex","fromIndex","_options$toIndex","toIndex","Number","isInteger","maxValue","minValue","rescale","output","currentMin","currentMax","RangeError","_options$min","autoMinMax","_options$max","factor","indent","repeat","indentData","inspectMatrix","inspectMatrixWithOptions","matrix","maxRows","maxColumns","maxNumSize","constructor","name","inspectData","rows","columns","maxI","Math","maxJ","formatNumber","get","num","numStr","String","padEnd","precise","toPrecision","exponential","toExponential","eIndex","e","slice","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","exp","expm1","floor","fround","log","log1p","log10","log2","round","sign","sin","sinh","sqrt","tan","tanh","trunc","pow","arg0","powS","powM","checkRowIndex","index","outer","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkIndices","rowIndices","columnIndices","row","checkRowIndices","column","checkColumnIndices","rowOut","some","r","from","columnOut","c","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","varianceByColumn","varianceAll","size","centerByRow","centerByColumn","centerAll","getScaleByRow","scale","scaleByRow","getScaleByColumn","scaleByColumn","getScaleAll","divider","scaleAll","from1DArray","newRows","newColumns","newData","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","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","NaN","maxIndex","idx","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","cumulativeSum","dot","vector2","vector1","mmul","other","Bcolj","Float64Array","s","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","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","r1","c1","r2","c2","console","warn","embed","mat","resultat","blockMult","b","halfRows","parseInt","halfCols","subMatrix","scaleRows","isFinite","scaleColumns","flipRows","middle","first","last","flipColumns","kroneckerProduct","q","transpose","sortRows","compareFunction","compareNumbers","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","by","product","standardDeviation","center","Symbol","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","arrayData","removeRow","splice","addRow","removeColumn","newRow","addColumn","floydWarshall","adjMatrix","numVertices","distMatrix","val","POSITIVE_INFINITY","dist","getConnectivityMatrix","nbAtoms","pathLength","negativeAtomicNo","cRoundedMass","sdt","getConnBondOrder","sdta","bondNumber","atomSorter","getMF","entries","getFragments","parts","allAtoms","entry","getFragmentMF","counts","part","toMFString","mfs","mfAtom","H","getHoseCodesForPath","to","maxLength","originalFrom","originalTo","originalAtoms","getPath","torsion","calculateTorsion","tag1","tag2","atomMap","getPathsInfo","fromLabel","toLabel","minLength","fromAtomicNumber","toAtomicNumber","atomsInfo","pathLengthMatrix","paths","getShortestPaths","allShortestPaths","path","reverse"],"mappings":"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"}