{
 "about": {
  "method": "ki-cheng-prusoff-competitive",
  "recordedOn": "2026-10-10",
  "script": "pipeline/assay-analyser/oracles/ki_cheng_prusoff.py",
  "scriptSha256": "d54934cedb47b6540153bdda7b7d43816fe13d848e7192e0d8c848939de9e9ba",
  "reference": "Cheng Y, Prusoff WH (1973). Biochem Pharmacol 22:3099-3108. doi:10.1016/0006-2952(73)90196-2 (record and abstract read 10 October 2026)",
  "tolerances": {
   "ki": "within 1e-12 relative",
   "shown": "exact (four significant figures)",
   "refusals": "exact; no number"
  }
 },
 "oracle": {
  "engine": "Python fractions and decimal",
  "python": "3.11.15"
 },
 "cases": [
  {
   "name": "s-equals-km",
   "about": "[S] = Km halves the IC50",
   "ic50": {
    "value": "100",
    "unit": "nM"
   },
   "substrate": {
    "value": "50",
    "unit": "µM"
   },
   "km": {
    "value": "50",
    "unit": "µM"
   },
   "expected": {
    "ok": true,
    "ki": 50.0,
    "kiExact": "50/1",
    "unit": "nM",
    "ratio": 1.0,
    "shown": "50.00"
   }
  },
  {
   "name": "s-zero",
   "about": "[S] = 0 leaves Ki = IC50",
   "ic50": {
    "value": "250",
    "unit": "nM"
   },
   "substrate": {
    "value": "0",
    "unit": "µM"
   },
   "km": {
    "value": "12",
    "unit": "µM"
   },
   "expected": {
    "ok": true,
    "ki": 250.0,
    "kiExact": "250/1",
    "unit": "nM",
    "ratio": 0.0,
    "shown": "250.0"
   }
  },
  {
   "name": "s-four-km",
   "about": "[S] = 4 Km divides the IC50 by 5",
   "ic50": {
    "value": "1.5",
    "unit": "µM"
   },
   "substrate": {
    "value": "200",
    "unit": "µM"
   },
   "km": {
    "value": "50",
    "unit": "µM"
   },
   "expected": {
    "ok": true,
    "ki": 0.3,
    "kiExact": "3/10",
    "unit": "µM",
    "ratio": 4.0,
    "shown": "0.3000"
   }
  },
  {
   "name": "mixed-prefixes",
   "about": "[S] in mM and Km in µM convert exactly: 1 + 2.5/0.8",
   "ic50": {
    "value": "37",
    "unit": "nM"
   },
   "substrate": {
    "value": "2.5",
    "unit": "mM"
   },
   "km": {
    "value": "800",
    "unit": "µM"
   },
   "expected": {
    "ok": true,
    "ki": 8.969696969696969,
    "kiExact": "296/33",
    "unit": "nM",
    "ratio": 3.125,
    "shown": "8.970"
   }
  },
  {
   "name": "mass-substrate",
   "about": "A protein substrate in mg/mL with Km in µg/mL",
   "ic50": {
    "value": "8.2",
    "unit": "nM"
   },
   "substrate": {
    "value": "0.15",
    "unit": "mg/mL"
   },
   "km": {
    "value": "45",
    "unit": "µg/mL"
   },
   "expected": {
    "ok": true,
    "ki": 1.8923076923076922,
    "kiExact": "123/65",
    "unit": "nM",
    "ratio": 3.3333333333333335,
    "shown": "1.892"
   }
  },
  {
   "name": "repeating",
   "about": "A non-terminating ratio: 1 + 10/3",
   "ic50": {
    "value": "1",
    "unit": "µM"
   },
   "substrate": {
    "value": "10",
    "unit": "µM"
   },
   "km": {
    "value": "3",
    "unit": "µM"
   },
   "expected": {
    "ok": true,
    "ki": 0.23076923076923078,
    "kiExact": "3/13",
    "unit": "µM",
    "ratio": 3.3333333333333335,
    "shown": "0.2308"
   }
  },
  {
   "name": "refused-missing-km",
   "about": "No Km: no number",
   "ic50": {
    "value": "100",
    "unit": "nM"
   },
   "substrate": {
    "value": "50",
    "unit": "µM"
   },
   "km": null,
   "expected": {
    "ok": false,
    "problem": "incomplete"
   }
  },
  {
   "name": "refused-missing-s",
   "about": "No [S]: no number",
   "ic50": {
    "value": "100",
    "unit": "nM"
   },
   "substrate": {
    "value": null,
    "unit": "µM"
   },
   "km": {
    "value": "50",
    "unit": "µM"
   },
   "expected": {
    "ok": false,
    "problem": "incomplete"
   }
  },
  {
   "name": "refused-units",
   "about": "[S] molar against Km in mass concentration: refused, never converted",
   "ic50": {
    "value": "100",
    "unit": "nM"
   },
   "substrate": {
    "value": "50",
    "unit": "µM"
   },
   "km": {
    "value": "5",
    "unit": "µg/mL"
   },
   "expected": {
    "ok": false,
    "problem": "units"
   }
  },
  {
   "name": "refused-zero-km",
   "about": "Km of zero",
   "ic50": {
    "value": "100",
    "unit": "nM"
   },
   "substrate": {
    "value": "50",
    "unit": "µM"
   },
   "km": {
    "value": "0",
    "unit": "µM"
   },
   "expected": {
    "ok": false,
    "problem": "range"
   }
  },
  {
   "name": "refused-negative-s",
   "about": "A negative substrate concentration",
   "ic50": {
    "value": "100",
    "unit": "nM"
   },
   "substrate": {
    "value": "-1",
    "unit": "µM"
   },
   "km": {
    "value": "50",
    "unit": "µM"
   },
   "expected": {
    "ok": false,
    "problem": "range"
   }
  }
 ]
}
