{
 "about": {
  "method": "molar-from-mass",
  "recordedOn": "2026-10-13",
  "script": "pipeline/assay-analyser/oracles/units_molecule.py",
  "scriptSha256": "c67c3bb5c43bd2758e9e4093caeee8c3fe2f097704477248e8ffdc918af615e7",
  "origin": "Self-constructed cases; formulas of named compounds as commonly given; the insulin precursor sequence from src/lib/seq/fixtures/protparam.json (UniProt P01308, ExPASy's printed weight checked to 0.02 Da)",
  "environment": {
   "image": "ghcr.io/biotechmat/drybench/oracle-env:d6cd987911c17af3@sha256:9bea798f7e471b2df068093e01dc6cc5de71f7baa8e50218bda66c828f536f8a",
   "python": "3.11.15"
  },
  "tolerances": {
   "formula weight": "1e-4 g/mol",
   "protein, ProtParam": "0.02 Da",
   "protein, CIAAW 2021": "0.01 Da",
   "molar concentration, active enzyme and kcat": "1e-9 relative",
   "refusals and used formula": "exact"
  }
 },
 "oracle": {
  "arithmetic": "Python decimal at 40 digits from typed CIAAW 2021 and ExPASy ProtParam values, rounded once to binary64",
  "python": "3.11.15"
 },
 "cases": [
  {
   "name": "neutral-ng-per-ml",
   "about": "Imatinib free base, one part; ng/mL.",
   "kind": "compound",
   "input": {
    "formula": "C29H31N7O",
    "expressedAs": null,
    "value": 250,
    "unit": "ng/mL"
   },
   "expected": {
    "mass": 493.615,
    "massText": "493.615",
    "usedFormula": "C29H31N7O",
    "intervalElements": [
     "C",
     "H",
     "N",
     "O"
    ],
    "molar": 5.06467591138843e-07
   }
  },
  {
   "name": "pg-per-ml",
   "about": "Imatinib free base in pg/mL.",
   "kind": "compound",
   "input": {
    "formula": "C29H31N7O",
    "expressedAs": null,
    "value": 500,
    "unit": "pg/mL"
   },
   "expected": {
    "mass": 493.615,
    "massText": "493.615",
    "usedFormula": "C29H31N7O",
    "intervalElements": [
     "C",
     "H",
     "N",
     "O"
    ],
    "molar": 1.0129351822776861e-09
   }
  },
  {
   "name": "ug-per-ml",
   "about": "Clopidogrel (S and Cl) in µg/mL.",
   "kind": "compound",
   "input": {
    "formula": "C16H16ClNO2S",
    "expressedAs": null,
    "value": 1.5,
    "unit": "µg/mL"
   },
   "expected": {
    "mass": 321.819,
    "massText": "321.819",
    "usedFormula": "C16H16ClNO2S",
    "intervalElements": [
     "C",
     "Cl",
     "H",
     "N",
     "O",
     "S"
    ],
    "molar": 4.661005099139578e-06
   }
  },
  {
   "name": "mg-per-ml",
   "about": "Bromocriptine (Br) in mg/mL.",
   "kind": "compound",
   "input": {
    "formula": "C32H40BrN5O5",
    "expressedAs": null,
    "value": 0.2,
    "unit": "mg/mL"
   },
   "expected": {
    "mass": 654.606,
    "massText": "654.606",
    "usedFormula": "C32H40BrN5O5",
    "intervalElements": [
     "Br",
     "C",
     "H",
     "N",
     "O"
    ],
    "molar": 0.00030552729428083455
   }
  },
  {
   "name": "g-per-l",
   "about": "Imatinib free base in g/L.",
   "kind": "compound",
   "input": {
    "formula": "C29H31N7O",
    "expressedAs": null,
    "value": 0.01,
    "unit": "g/L"
   },
   "expected": {
    "mass": 493.615,
    "massText": "493.615",
    "usedFormula": "C29H31N7O",
    "intervalElements": [
     "C",
     "H",
     "N",
     "O"
    ],
    "molar": 2.025870364555372e-05
   }
  },
  {
   "name": "salt-whole",
   "about": "Gefitinib hydrochloride expressed as the whole salt.",
   "kind": "compound",
   "input": {
    "formula": "C22H24ClFN4O3·HCl",
    "expressedAs": "whole",
    "value": 100,
    "unit": "ng/mL"
   },
   "expected": {
    "mass": 483.365,
    "massText": "483.365",
    "usedFormula": "C22H24ClFN4O3·HCl",
    "intervalElements": [
     "C",
     "Cl",
     "H",
     "N",
     "O"
    ],
    "molar": 2.068829973208652e-07
   }
  },
  {
   "name": "salt-parent",
   "about": "Gefitinib hydrochloride expressed as the parent (free base).",
   "kind": "compound",
   "input": {
    "formula": "C22H24ClFN4O3·HCl",
    "expressedAs": "parent",
    "value": 100,
    "unit": "ng/mL"
   },
   "expected": {
    "mass": 446.907,
    "massText": "446.907",
    "usedFormula": "C22H24ClFN4O3",
    "intervalElements": [
     "C",
     "Cl",
     "H",
     "N",
     "O"
    ],
    "molar": 2.2376020066814795e-07
   }
  },
  {
   "name": "hydrate-whole",
   "about": "Amoxicillin trihydrate expressed as the whole hydrate; the multiplier counts three waters.",
   "kind": "compound",
   "input": {
    "formula": "C16H19N3O5S·3H2O",
    "expressedAs": "whole",
    "value": 10,
    "unit": "µg/mL"
   },
   "expected": {
    "mass": 419.449,
    "massText": "419.449",
    "usedFormula": "C16H19N3O5S·3H2O",
    "intervalElements": [
     "C",
     "H",
     "N",
     "O",
     "S"
    ],
    "molar": 2.384080066944968e-05
   }
  },
  {
   "name": "refused-form",
   "about": "A salt with no stated form: refused, no default.",
   "kind": "compound",
   "input": {
    "formula": "C22H24ClFN4O3·HCl",
    "expressedAs": null,
    "value": 100,
    "unit": "ng/mL"
   },
   "expected": {
    "refused": "form-required"
   }
  },
  {
   "name": "refused-no-formula",
   "about": "No formula: refused and named.",
   "kind": "compound",
   "input": {
    "formula": null,
    "expressedAs": null,
    "value": 100,
    "unit": "ng/mL"
   },
   "expected": {
    "refused": "no-formula"
   }
  },
  {
   "name": "refused-bare-mass",
   "about": "A bare typed MW for a compound: refused.",
   "kind": "compound",
   "input": {
    "formula": null,
    "typedMass": 446.9,
    "expressedAs": null,
    "value": 100,
    "unit": "ng/mL"
   },
   "expected": {
    "refused": "bare-mass"
   }
  },
  {
   "name": "protein-precursor-protparam",
   "about": "Insulin precursor (whole UniProt sequence), ProtParam table, per chain.",
   "kind": "protein",
   "input": {
    "accession": "P01308",
    "sequence": "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN",
    "table": "protparam",
    "range": null,
    "value": 5,
    "unit": "µg/mL"
   },
   "expected": {
    "mass": 11980.90854,
    "length": 110,
    "molar": 4.1733062090464804e-07
   }
  },
  {
   "name": "protein-precursor-ciaaw",
   "about": "Insulin precursor, residue formulas under CIAAW 2021.",
   "kind": "protein",
   "input": {
    "accession": "P01308",
    "sequence": "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN",
    "table": "ciaaw-2021",
    "range": null,
    "value": 5,
    "unit": "µg/mL"
   },
   "expected": {
    "mass": 11980.941,
    "length": 110,
    "molar": 4.173294902295237e-07
   }
  },
  {
   "name": "protein-chain-protparam",
   "about": "Insulin B chain (residues 25 to 54), ProtParam, per chain.",
   "kind": "protein",
   "input": {
    "accession": "P01308",
    "sequence": "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN",
    "table": "protparam",
    "range": {
     "start": 25,
     "end": 54
    },
    "value": 2,
    "unit": "µg/mL"
   },
   "expected": {
    "mass": 3429.95894,
    "length": 30,
    "molar": 5.830973591771335e-07
   }
  },
  {
   "name": "protein-chain-ciaaw",
   "about": "Insulin B chain (residues 25 to 54), CIAAW 2021.",
   "kind": "protein",
   "input": {
    "accession": "P01308",
    "sequence": "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN",
    "table": "ciaaw-2021",
    "range": {
     "start": 25,
     "end": 54
    },
    "value": 2,
    "unit": "µg/mL"
   },
   "expected": {
    "mass": 3429.968,
    "length": 30,
    "molar": 5.830958189697397e-07
   }
  },
  {
   "name": "oligomer-per-chain",
   "about": "A mass concentration of an oligomer is converted per polypeptide chain; a dimer's molar concentration would be half and is never given.",
   "kind": "protein",
   "input": {
    "accession": "P01308",
    "sequence": "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN",
    "table": "protparam",
    "range": {
     "start": 25,
     "end": 54
    },
    "value": 40,
    "unit": "ng/mL"
   },
   "expected": {
    "mass": 3429.95894,
    "length": 30,
    "molar": 1.166194718354267e-08
   }
  },
  {
   "name": "kcat-n2-f08",
   "about": "Vmax 12 µM/min, [E]total 50 nM, two sites per chain, active fraction 0.8.",
   "kind": "kcat",
   "input": {
    "vmax": 12,
    "rateUnit": "µM/min",
    "total": {
     "value": 50,
     "unit": "nM"
    },
    "sitesPerChain": 2,
    "activeFraction": 0.8
   },
   "expected": {
    "activeNM": 80.0,
    "kcat": 150.0,
    "per": "minute"
   }
  },
  {
   "name": "kcat-per-second",
   "about": "Vmax 0.6 µM/s, [E]total 20 nM, one site, fully active.",
   "kind": "kcat",
   "input": {
    "vmax": 0.6,
    "rateUnit": "µM/s",
    "total": {
     "value": 20,
     "unit": "nM"
    },
    "sitesPerChain": 1,
    "activeFraction": 1
   },
   "expected": {
    "activeNM": 20.0,
    "kcat": 30.0,
    "per": "second"
   }
  },
  {
   "name": "kcat-refused-zero-sites",
   "about": "Zero sites per chain: refused.",
   "kind": "kcat",
   "input": {
    "vmax": 12,
    "rateUnit": "µM/min",
    "total": {
     "value": 50,
     "unit": "nM"
    },
    "sitesPerChain": 0,
    "activeFraction": 1
   },
   "expected": {
    "refused": "sites-required"
   }
  },
  {
   "name": "kcat-mass-total",
   "about": "[E]total 5 µg/mL through the insulin B chain's ProtParam mass (a stand-in chain), two sites, f 0.8; Vmax 12 µM/min.",
   "kind": "kcat",
   "input": {
    "vmax": 12,
    "rateUnit": "µM/min",
    "total": {
     "value": 5,
     "unit": "µg/mL"
    },
    "chain": {
     "accession": "P01308",
     "sequence": "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN",
     "table": "protparam",
     "range": {
      "start": 25,
      "end": 54
     }
    },
    "sitesPerChain": 2,
    "activeFraction": 0.8
   },
   "expected": {
    "activeNM": 2332.389436708534,
    "kcat": 5.14493841,
    "per": "minute"
   }
  }
 ]
}
