{
 "about": {
  "date": "2026-10-24",
  "python": "3.12.14",
  "oracle": "Python fractions (exact): the feed hand-off's schedule with units (mass flow, h/min and L/mL, volume and substrate mass fed) over A2's pump sheets; the programme a feed recipe carries, its stop and total fed, and refused incomplete programmes; the CSO's exact-identity substrate match with exact conversions to g/L and every refusal",
  "method": {
   "id": "feed-handoff"
  },
  "ruling": "docs/board/memos/2026-10-24-cso-bioreactor-stage.md, addition A3; docs/board/memos/2026-10-24-cso-bioreactor-h28-placement.md, ruling 2; docs/board/memos/2026-10-24-cso-bioreactor-h27-notice.md, sections 1, 2 and 5",
  "generator": "pipeline/bioreactor-simulator/reference-feed-handoff.py",
  "generatorSha256": "40c6298205ccaef0aa94700551278353911631ff22236ffce59634ae4da5042e",
  "schedules": {
   "from": "pipeline/bioreactor-simulator/fixtures/feed-0.7.0.json",
   "sha256": "298bda5a8157cbb12daaa246ce5698842d4311575f77b110b515e11837ccd2d9",
   "version": "0.7.0"
  },
  "identity": {
   "rule": "bioreactor-substrate-identity@1",
   "table": "src/lib/hosts/substrate-identity@1.json",
   "tableHash": "sha256:55c64e2019a44c0070f3a931d2c6c1475975da5331f52ae374533b7878528365",
   "rulings": [
    "docs/board/memos/2026-10-24-cso-bioreactor-h27-substrate-identity.md",
    "docs/board/memos/2026-10-24-cso-bioreactor-h27-substrate-identity-2.md",
    "docs/board/memos/2026-10-24-cto-bioreactor-h27-substrate-identity.md"
   ],
   "refusals": [
    "identity-not-ruled",
    "feed-needs-fed-batch-run",
    "target-not-declared",
    "ref-not-canonical",
    "no-component-matches",
    "several-components-match",
    "unit-not-convertible",
    "concentration-not-positive",
    "concentration-out-of-range"
   ],
   "molarMass": {
    "glucose": 180.156,
    "methanol": 32.042
   },
   "monohydrateFactor": 0.9090936615347351,
   "monohydrateFactorDigits": "9.09093661534735152973946742964e-1",
   "snapshot": {
    "path": "pipeline/bioreactor-simulator/fixtures/pubchem-substrate-inchi-2026-10-24.csv",
    "sha256": "804199ceaa75bd24ba42283682c5680d8d0d845b5b18ae7257a97b1f8a8e8c77",
    "rows": 13,
    "refusedCids": [
     2724488,
     206,
     21909914,
     53393508,
     5988,
     753
    ]
   },
   "rdkit": "2026.3.6",
   "requirements": {
    "path": "pipeline/lab-calculators/requirements.txt",
    "sha256": "8215844f5b19242a16f0bb3c27bc8c8c61d68bb66706c4f035029bc62b27fa95"
   },
   "keysRecomputed": "Every snapshot key equals Chem.InchiToInchiKey of its InChI; the table is the snapshot's ruled rows; no refused key ships."
  },
  "tolerance": {
   "relative": 1e-12,
   "absoluteFloor": 1e-15
  }
 },
 "schedules": [
  {
   "id": "constant-sf-500",
   "feedId": "constant",
   "description": "A2's 'constant' pump sheet with a feed of 500 g/L.",
   "sfGPerL": 500,
   "rows": [
    {
     "t": 4.0,
     "fromStart": 0.0,
     "rate": 0.05,
     "fedSoFar": 0.0
    },
    {
     "t": 6.0,
     "fromStart": 2.0,
     "rate": 0.05,
     "fedSoFar": 0.1
    },
    {
     "t": 8.0,
     "fromStart": 4.0,
     "rate": 0.05,
     "fedSoFar": 0.2
    },
    {
     "t": 10.0,
     "fromStart": 6.0,
     "rate": 0.05,
     "fedSoFar": 0.3
    },
    {
     "t": 12.0,
     "fromStart": 8.0,
     "rate": 0.05,
     "fedSoFar": 0.4
    },
    {
     "t": 14.0,
     "fromStart": 10.0,
     "rate": 0.05,
     "fedSoFar": 0.5
    },
    {
     "t": 16.0,
     "fromStart": 12.0,
     "rate": 0.05,
     "fedSoFar": 0.6
    },
    {
     "t": 18.0,
     "fromStart": 14.0,
     "rate": 0.05,
     "fedSoFar": 0.7
    },
    {
     "t": 20.0,
     "fromStart": 16.0,
     "rate": 0.0,
     "fedSoFar": 0.8
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 4.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 6.0,
      "fromStart": 2.0,
      "fromStartMin": 120.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.1,
      "fedMl": 100.0,
      "massFedG": 50.0
     },
     {
      "t": 8.0,
      "fromStart": 4.0,
      "fromStartMin": 240.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.2,
      "fedMl": 200.0,
      "massFedG": 100.0
     },
     {
      "t": 10.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.3,
      "fedMl": 300.0,
      "massFedG": 150.0
     },
     {
      "t": 12.0,
      "fromStart": 8.0,
      "fromStartMin": 480.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.4,
      "fedMl": 400.0,
      "massFedG": 200.0
     },
     {
      "t": 14.0,
      "fromStart": 10.0,
      "fromStartMin": 600.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.5,
      "fedMl": 500.0,
      "massFedG": 250.0
     },
     {
      "t": 16.0,
      "fromStart": 12.0,
      "fromStartMin": 720.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.6,
      "fedMl": 600.0,
      "massFedG": 300.0
     },
     {
      "t": 18.0,
      "fromStart": 14.0,
      "fromStartMin": 840.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.7,
      "fedMl": 700.0,
      "massFedG": 350.0
     },
     {
      "t": 20.0,
      "fromStart": 16.0,
      "fromStartMin": 960.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 0.8,
      "fedMl": 800.0,
      "massFedG": 400.0
     }
    ],
    "totals": {
     "volumeL": 0.8,
     "volumeMl": 800.0,
     "massG": 400.0
    },
    "totalsDigits": {
     "volumeL": "8.00000000000000000000000000000e-1",
     "volumeMl": "8.00000000000000000000000000000e2",
     "massG": "4.00000000000000000000000000000e2"
    }
   }
  },
  {
   "id": "constant-sf-250.5",
   "feedId": "constant",
   "description": "A2's 'constant' pump sheet with a feed of 250.5 g/L.",
   "sfGPerL": 250.5,
   "rows": [
    {
     "t": 4.0,
     "fromStart": 0.0,
     "rate": 0.05,
     "fedSoFar": 0.0
    },
    {
     "t": 6.0,
     "fromStart": 2.0,
     "rate": 0.05,
     "fedSoFar": 0.1
    },
    {
     "t": 8.0,
     "fromStart": 4.0,
     "rate": 0.05,
     "fedSoFar": 0.2
    },
    {
     "t": 10.0,
     "fromStart": 6.0,
     "rate": 0.05,
     "fedSoFar": 0.3
    },
    {
     "t": 12.0,
     "fromStart": 8.0,
     "rate": 0.05,
     "fedSoFar": 0.4
    },
    {
     "t": 14.0,
     "fromStart": 10.0,
     "rate": 0.05,
     "fedSoFar": 0.5
    },
    {
     "t": 16.0,
     "fromStart": 12.0,
     "rate": 0.05,
     "fedSoFar": 0.6
    },
    {
     "t": 18.0,
     "fromStart": 14.0,
     "rate": 0.05,
     "fedSoFar": 0.7
    },
    {
     "t": 20.0,
     "fromStart": 16.0,
     "rate": 0.0,
     "fedSoFar": 0.8
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 4.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 12.525,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 6.0,
      "fromStart": 2.0,
      "fromStartMin": 120.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 12.525,
      "fedL": 0.1,
      "fedMl": 100.0,
      "massFedG": 25.05
     },
     {
      "t": 8.0,
      "fromStart": 4.0,
      "fromStartMin": 240.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 12.525,
      "fedL": 0.2,
      "fedMl": 200.0,
      "massFedG": 50.1
     },
     {
      "t": 10.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 12.525,
      "fedL": 0.3,
      "fedMl": 300.0,
      "massFedG": 75.15
     },
     {
      "t": 12.0,
      "fromStart": 8.0,
      "fromStartMin": 480.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 12.525,
      "fedL": 0.4,
      "fedMl": 400.0,
      "massFedG": 100.2
     },
     {
      "t": 14.0,
      "fromStart": 10.0,
      "fromStartMin": 600.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 12.525,
      "fedL": 0.5,
      "fedMl": 500.0,
      "massFedG": 125.25
     },
     {
      "t": 16.0,
      "fromStart": 12.0,
      "fromStartMin": 720.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 12.525,
      "fedL": 0.6,
      "fedMl": 600.0,
      "massFedG": 150.3
     },
     {
      "t": 18.0,
      "fromStart": 14.0,
      "fromStartMin": 840.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 12.525,
      "fedL": 0.7,
      "fedMl": 700.0,
      "massFedG": 175.35
     },
     {
      "t": 20.0,
      "fromStart": 16.0,
      "fromStartMin": 960.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 0.8,
      "fedMl": 800.0,
      "massFedG": 200.4
     }
    ],
    "totals": {
     "volumeL": 0.8,
     "volumeMl": 800.0,
     "massG": 200.4
    },
    "totalsDigits": {
     "volumeL": "8.00000000000000000000000000000e-1",
     "volumeMl": "8.00000000000000000000000000000e2",
     "massG": "2.00400000000000000000000000000e2"
    }
   }
  },
  {
   "id": "constant-vmax-sf-500",
   "feedId": "constant-vmax",
   "description": "A2's 'constant-vmax' pump sheet with a feed of 500 g/L.",
   "sfGPerL": 500,
   "rows": [
    {
     "t": 4.0,
     "fromStart": 0.0,
     "rate": 0.05,
     "fedSoFar": 0.0
    },
    {
     "t": 6.5,
     "fromStart": 2.5,
     "rate": 0.05,
     "fedSoFar": 0.125
    },
    {
     "t": 9.0,
     "fromStart": 5.0,
     "rate": 0.05,
     "fedSoFar": 0.25
    },
    {
     "t": 11.5,
     "fromStart": 7.5,
     "rate": 0.05,
     "fedSoFar": 0.375
    },
    {
     "t": 14.0,
     "fromStart": 10.0,
     "rate": 0.05,
     "fedSoFar": 0.5
    },
    {
     "t": 16.0,
     "fromStart": 12.0,
     "rate": 0.0,
     "fedSoFar": 0.6
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 4.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 6.5,
      "fromStart": 2.5,
      "fromStartMin": 150.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.125,
      "fedMl": 125.0,
      "massFedG": 62.5
     },
     {
      "t": 9.0,
      "fromStart": 5.0,
      "fromStartMin": 300.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.25,
      "fedMl": 250.0,
      "massFedG": 125.0
     },
     {
      "t": 11.5,
      "fromStart": 7.5,
      "fromStartMin": 450.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.375,
      "fedMl": 375.0,
      "massFedG": 187.5
     },
     {
      "t": 14.0,
      "fromStart": 10.0,
      "fromStartMin": 600.0,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.5,
      "fedMl": 500.0,
      "massFedG": 250.0
     },
     {
      "t": 16.0,
      "fromStart": 12.0,
      "fromStartMin": 720.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 0.6,
      "fedMl": 600.0,
      "massFedG": 300.0
     }
    ],
    "totals": {
     "volumeL": 0.6,
     "volumeMl": 600.0,
     "massG": 300.0
    },
    "totalsDigits": {
     "volumeL": "6.00000000000000000000000000000e-1",
     "volumeMl": "6.00000000000000000000000000000e2",
     "massG": "3.00000000000000000000000000000e2"
    }
   }
  },
  {
   "id": "constant-horizon-sf-400",
   "feedId": "constant-horizon",
   "description": "A2's 'constant-horizon' pump sheet with a feed of 400 g/L.",
   "sfGPerL": 400,
   "rows": [
    {
     "t": 2.0,
     "fromStart": 0.0,
     "rate": 0.03,
     "fedSoFar": 0.0
    },
    {
     "t": 2.75,
     "fromStart": 0.75,
     "rate": 0.03,
     "fedSoFar": 0.0225
    },
    {
     "t": 3.5,
     "fromStart": 1.5,
     "rate": 0.03,
     "fedSoFar": 0.045
    },
    {
     "t": 4.25,
     "fromStart": 2.25,
     "rate": 0.03,
     "fedSoFar": 0.0675
    },
    {
     "t": 5.0,
     "fromStart": 3.0,
     "rate": 0.03,
     "fedSoFar": 0.09
    },
    {
     "t": 5.75,
     "fromStart": 3.75,
     "rate": 0.03,
     "fedSoFar": 0.1125
    },
    {
     "t": 6.5,
     "fromStart": 4.5,
     "rate": 0.03,
     "fedSoFar": 0.135
    },
    {
     "t": 7.25,
     "fromStart": 5.25,
     "rate": 0.03,
     "fedSoFar": 0.1575
    },
    {
     "t": 8.0,
     "fromStart": 6.0,
     "rate": 0.03,
     "fedSoFar": 0.18
    },
    {
     "t": 8.75,
     "fromStart": 6.75,
     "rate": 0.03,
     "fedSoFar": 0.2025
    },
    {
     "t": 9.0,
     "fromStart": 7.0,
     "rate": 0.0,
     "fedSoFar": 0.21
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 2.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 2.75,
      "fromStart": 0.75,
      "fromStartMin": 45.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.0225,
      "fedMl": 22.5,
      "massFedG": 9.0
     },
     {
      "t": 3.5,
      "fromStart": 1.5,
      "fromStartMin": 90.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.045,
      "fedMl": 45.0,
      "massFedG": 18.0
     },
     {
      "t": 4.25,
      "fromStart": 2.25,
      "fromStartMin": 135.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.0675,
      "fedMl": 67.5,
      "massFedG": 27.0
     },
     {
      "t": 5.0,
      "fromStart": 3.0,
      "fromStartMin": 180.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.09,
      "fedMl": 90.0,
      "massFedG": 36.0
     },
     {
      "t": 5.75,
      "fromStart": 3.75,
      "fromStartMin": 225.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.1125,
      "fedMl": 112.5,
      "massFedG": 45.0
     },
     {
      "t": 6.5,
      "fromStart": 4.5,
      "fromStartMin": 270.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.135,
      "fedMl": 135.0,
      "massFedG": 54.0
     },
     {
      "t": 7.25,
      "fromStart": 5.25,
      "fromStartMin": 315.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.1575,
      "fedMl": 157.5,
      "massFedG": 63.0
     },
     {
      "t": 8.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.18,
      "fedMl": 180.0,
      "massFedG": 72.0
     },
     {
      "t": 8.75,
      "fromStart": 6.75,
      "fromStartMin": 405.0,
      "rateLPerH": 0.03,
      "rateMlPerMin": 0.5,
      "massFlowGPerH": 12.0,
      "fedL": 0.2025,
      "fedMl": 202.5,
      "massFedG": 81.0
     },
     {
      "t": 9.0,
      "fromStart": 7.0,
      "fromStartMin": 420.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 0.21,
      "fedMl": 210.0,
      "massFedG": 84.0
     }
    ],
    "totals": {
     "volumeL": 0.21,
     "volumeMl": 210.0,
     "massG": 84.0
    },
    "totalsDigits": {
     "volumeL": "2.10000000000000000000000000000e-1",
     "volumeMl": "2.10000000000000000000000000000e2",
     "massG": "8.40000000000000000000000000000e1"
    }
   }
  },
  {
   "id": "exponential-sf-500",
   "feedId": "exponential",
   "description": "A2's 'exponential' pump sheet with a feed of 500 g/L.",
   "sfGPerL": 500,
   "rows": [
    {
     "t": 6.0,
     "fromStart": 0.0,
     "rate": 0.012946739418262649,
     "fedSoFar": 0.0
    },
    {
     "t": 7.0,
     "fromStart": 1.0,
     "rate": 0.0150419651878176,
     "fedSoFar": 0.012946739418262649
    },
    {
     "t": 8.0,
     "fromStart": 2.0,
     "rate": 0.017476270233133258,
     "fedSoFar": 0.027988704606080248
    },
    {
     "t": 9.0,
     "fromStart": 3.0,
     "rate": 0.020304529192027212,
     "fedSoFar": 0.0454649748392135
    },
    {
     "t": 10.0,
     "fromStart": 4.0,
     "rate": 0.023590497297773256,
     "fedSoFar": 0.06576950403124072
    },
    {
     "t": 11.0,
     "fromStart": 5.0,
     "rate": 0.027408247563541998,
     "fedSoFar": 0.08936000132901398
    },
    {
     "t": 12.0,
     "fromStart": 6.0,
     "rate": 0.03184384055249713,
     "fedSoFar": 0.11676824889255598
    },
    {
     "t": 13.0,
     "fromStart": 7.0,
     "rate": 0.03699726437387069,
     "fedSoFar": 0.1486120894450531
    },
    {
     "t": 14.0,
     "fromStart": 8.0,
     "rate": 0.04298468863683415,
     "fedSoFar": 0.1856093538189238
    },
    {
     "t": 15.0,
     "fromStart": 9.0,
     "rate": 0.04994108317128724,
     "fedSoFar": 0.22859404245575796
    },
    {
     "t": 16.0,
     "fromStart": 10.0,
     "rate": 0.05802326054734271,
     "fedSoFar": 0.2785351256270452
    },
    {
     "t": 17.0,
     "fromStart": 11.0,
     "rate": 0.06741341097864778,
     "fedSoFar": 0.3365583861743879
    },
    {
     "t": 18.0,
     "fromStart": 12.0,
     "rate": 0.07832320929410778,
     "fedSoFar": 0.40397179715303566
    },
    {
     "t": 19.0,
     "fromStart": 13.0,
     "rate": 0.09099858655826853,
     "fedSoFar": 0.48229500644714346
    },
    {
     "t": 20.0,
     "fromStart": 14.0,
     "rate": 0.10572527390327005,
     "fedSoFar": 0.573293593005412
    },
    {
     "t": 21.0,
     "fromStart": 15.0,
     "rate": 0.12283524354264608,
     "fedSoFar": 0.6790188669086821
    },
    {
     "t": 22.0,
     "fromStart": 16.0,
     "rate": 0.14271419216171444,
     "fedSoFar": 0.8018541104513282
    },
    {
     "t": 23.0,
     "fromStart": 17.0,
     "rate": 0.16581023537678416,
     "fedSoFar": 0.9445683026130426
    },
    {
     "t": 24.0,
     "fromStart": 18.0,
     "rate": 0.0,
     "fedSoFar": 1.1103785379898268
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 6.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.012946739418262649,
      "rateMlPerMin": 0.21577899030437747,
      "massFlowGPerH": 6.473369709131324,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 7.0,
      "fromStart": 1.0,
      "fromStartMin": 60.0,
      "rateLPerH": 0.0150419651878176,
      "rateMlPerMin": 0.25069941979696,
      "massFlowGPerH": 7.5209825939088,
      "fedL": 0.012946739418262649,
      "fedMl": 12.946739418262649,
      "massFedG": 6.473369709131324
     },
     {
      "t": 8.0,
      "fromStart": 2.0,
      "fromStartMin": 120.0,
      "rateLPerH": 0.017476270233133258,
      "rateMlPerMin": 0.29127117055222096,
      "massFlowGPerH": 8.738135116566628,
      "fedL": 0.027988704606080248,
      "fedMl": 27.988704606080248,
      "massFedG": 13.994352303040124
     },
     {
      "t": 9.0,
      "fromStart": 3.0,
      "fromStartMin": 180.0,
      "rateLPerH": 0.020304529192027212,
      "rateMlPerMin": 0.3384088198671202,
      "massFlowGPerH": 10.152264596013605,
      "fedL": 0.0454649748392135,
      "fedMl": 45.4649748392135,
      "massFedG": 22.73248741960675
     },
     {
      "t": 10.0,
      "fromStart": 4.0,
      "fromStartMin": 240.0,
      "rateLPerH": 0.023590497297773256,
      "rateMlPerMin": 0.3931749549628876,
      "massFlowGPerH": 11.795248648886629,
      "fedL": 0.06576950403124072,
      "fedMl": 65.76950403124071,
      "massFedG": 32.88475201562036
     },
     {
      "t": 11.0,
      "fromStart": 5.0,
      "fromStartMin": 300.0,
      "rateLPerH": 0.027408247563541998,
      "rateMlPerMin": 0.4568041260590333,
      "massFlowGPerH": 13.704123781770999,
      "fedL": 0.08936000132901398,
      "fedMl": 89.36000132901398,
      "massFedG": 44.68000066450699
     },
     {
      "t": 12.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.03184384055249713,
      "rateMlPerMin": 0.5307306758749522,
      "massFlowGPerH": 15.921920276248565,
      "fedL": 0.11676824889255598,
      "fedMl": 116.76824889255597,
      "massFedG": 58.38412444627799
     },
     {
      "t": 13.0,
      "fromStart": 7.0,
      "fromStartMin": 420.0,
      "rateLPerH": 0.03699726437387069,
      "rateMlPerMin": 0.6166210728978448,
      "massFlowGPerH": 18.498632186935346,
      "fedL": 0.1486120894450531,
      "fedMl": 148.6120894450531,
      "massFedG": 74.30604472252655
     },
     {
      "t": 14.0,
      "fromStart": 8.0,
      "fromStartMin": 480.0,
      "rateLPerH": 0.04298468863683415,
      "rateMlPerMin": 0.7164114772805692,
      "massFlowGPerH": 21.492344318417075,
      "fedL": 0.1856093538189238,
      "fedMl": 185.6093538189238,
      "massFedG": 92.8046769094619
     },
     {
      "t": 15.0,
      "fromStart": 9.0,
      "fromStartMin": 540.0,
      "rateLPerH": 0.04994108317128724,
      "rateMlPerMin": 0.8323513861881207,
      "massFlowGPerH": 24.97054158564362,
      "fedL": 0.22859404245575796,
      "fedMl": 228.59404245575797,
      "massFedG": 114.29702122787899
     },
     {
      "t": 16.0,
      "fromStart": 10.0,
      "fromStartMin": 600.0,
      "rateLPerH": 0.05802326054734271,
      "rateMlPerMin": 0.9670543424557119,
      "massFlowGPerH": 29.011630273671354,
      "fedL": 0.2785351256270452,
      "fedMl": 278.5351256270452,
      "massFedG": 139.2675628135226
     },
     {
      "t": 17.0,
      "fromStart": 11.0,
      "fromStartMin": 660.0,
      "rateLPerH": 0.06741341097864778,
      "rateMlPerMin": 1.1235568496441297,
      "massFlowGPerH": 33.70670548932389,
      "fedL": 0.3365583861743879,
      "fedMl": 336.5583861743879,
      "massFedG": 168.27919308719396
     },
     {
      "t": 18.0,
      "fromStart": 12.0,
      "fromStartMin": 720.0,
      "rateLPerH": 0.07832320929410778,
      "rateMlPerMin": 1.305386821568463,
      "massFlowGPerH": 39.16160464705389,
      "fedL": 0.40397179715303566,
      "fedMl": 403.97179715303565,
      "massFedG": 201.98589857651783
     },
     {
      "t": 19.0,
      "fromStart": 13.0,
      "fromStartMin": 780.0,
      "rateLPerH": 0.09099858655826853,
      "rateMlPerMin": 1.5166431093044754,
      "massFlowGPerH": 45.499293279134264,
      "fedL": 0.48229500644714346,
      "fedMl": 482.29500644714346,
      "massFedG": 241.14750322357173
     },
     {
      "t": 20.0,
      "fromStart": 14.0,
      "fromStartMin": 840.0,
      "rateLPerH": 0.10572527390327005,
      "rateMlPerMin": 1.762087898387834,
      "massFlowGPerH": 52.862636951635025,
      "fedL": 0.573293593005412,
      "fedMl": 573.293593005412,
      "massFedG": 286.646796502706
     },
     {
      "t": 21.0,
      "fromStart": 15.0,
      "fromStartMin": 900.0,
      "rateLPerH": 0.12283524354264608,
      "rateMlPerMin": 2.0472540590441013,
      "massFlowGPerH": 61.41762177132304,
      "fedL": 0.6790188669086821,
      "fedMl": 679.0188669086821,
      "massFedG": 339.50943345434104
     },
     {
      "t": 22.0,
      "fromStart": 16.0,
      "fromStartMin": 960.0,
      "rateLPerH": 0.14271419216171444,
      "rateMlPerMin": 2.3785698693619075,
      "massFlowGPerH": 71.35709608085722,
      "fedL": 0.8018541104513282,
      "fedMl": 801.8541104513282,
      "massFedG": 400.9270552256641
     },
     {
      "t": 23.0,
      "fromStart": 17.0,
      "fromStartMin": 1020.0,
      "rateLPerH": 0.16581023537678416,
      "rateMlPerMin": 2.7635039229464025,
      "massFlowGPerH": 82.90511768839208,
      "fedL": 0.9445683026130426,
      "fedMl": 944.5683026130426,
      "massFedG": 472.2841513065213
     },
     {
      "t": 24.0,
      "fromStart": 18.0,
      "fromStartMin": 1080.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 1.1103785379898268,
      "fedMl": 1110.3785379898268,
      "massFedG": 555.1892689949134
     }
    ],
    "totals": {
     "volumeL": 1.1103785379898268,
     "volumeMl": 1110.3785379898268,
     "massG": 555.1892689949134
    },
    "totalsDigits": {
     "volumeL": "1.11037853798982680000000000000e0",
     "volumeMl": "1.11037853798982680000000000000e3",
     "massG": "5.55189268994913400000000000000e2"
    }
   }
  },
  {
   "id": "exponential-sf-790",
   "feedId": "exponential",
   "description": "A2's 'exponential' pump sheet with a feed of 790 g/L.",
   "sfGPerL": 790,
   "rows": [
    {
     "t": 6.0,
     "fromStart": 0.0,
     "rate": 0.012946739418262649,
     "fedSoFar": 0.0
    },
    {
     "t": 7.0,
     "fromStart": 1.0,
     "rate": 0.0150419651878176,
     "fedSoFar": 0.012946739418262649
    },
    {
     "t": 8.0,
     "fromStart": 2.0,
     "rate": 0.017476270233133258,
     "fedSoFar": 0.027988704606080248
    },
    {
     "t": 9.0,
     "fromStart": 3.0,
     "rate": 0.020304529192027212,
     "fedSoFar": 0.0454649748392135
    },
    {
     "t": 10.0,
     "fromStart": 4.0,
     "rate": 0.023590497297773256,
     "fedSoFar": 0.06576950403124072
    },
    {
     "t": 11.0,
     "fromStart": 5.0,
     "rate": 0.027408247563541998,
     "fedSoFar": 0.08936000132901398
    },
    {
     "t": 12.0,
     "fromStart": 6.0,
     "rate": 0.03184384055249713,
     "fedSoFar": 0.11676824889255598
    },
    {
     "t": 13.0,
     "fromStart": 7.0,
     "rate": 0.03699726437387069,
     "fedSoFar": 0.1486120894450531
    },
    {
     "t": 14.0,
     "fromStart": 8.0,
     "rate": 0.04298468863683415,
     "fedSoFar": 0.1856093538189238
    },
    {
     "t": 15.0,
     "fromStart": 9.0,
     "rate": 0.04994108317128724,
     "fedSoFar": 0.22859404245575796
    },
    {
     "t": 16.0,
     "fromStart": 10.0,
     "rate": 0.05802326054734271,
     "fedSoFar": 0.2785351256270452
    },
    {
     "t": 17.0,
     "fromStart": 11.0,
     "rate": 0.06741341097864778,
     "fedSoFar": 0.3365583861743879
    },
    {
     "t": 18.0,
     "fromStart": 12.0,
     "rate": 0.07832320929410778,
     "fedSoFar": 0.40397179715303566
    },
    {
     "t": 19.0,
     "fromStart": 13.0,
     "rate": 0.09099858655826853,
     "fedSoFar": 0.48229500644714346
    },
    {
     "t": 20.0,
     "fromStart": 14.0,
     "rate": 0.10572527390327005,
     "fedSoFar": 0.573293593005412
    },
    {
     "t": 21.0,
     "fromStart": 15.0,
     "rate": 0.12283524354264608,
     "fedSoFar": 0.6790188669086821
    },
    {
     "t": 22.0,
     "fromStart": 16.0,
     "rate": 0.14271419216171444,
     "fedSoFar": 0.8018541104513282
    },
    {
     "t": 23.0,
     "fromStart": 17.0,
     "rate": 0.16581023537678416,
     "fedSoFar": 0.9445683026130426
    },
    {
     "t": 24.0,
     "fromStart": 18.0,
     "rate": 0.0,
     "fedSoFar": 1.1103785379898268
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 6.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.012946739418262649,
      "rateMlPerMin": 0.21577899030437747,
      "massFlowGPerH": 10.227924140427493,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 7.0,
      "fromStart": 1.0,
      "fromStartMin": 60.0,
      "rateLPerH": 0.0150419651878176,
      "rateMlPerMin": 0.25069941979696,
      "massFlowGPerH": 11.883152498375903,
      "fedL": 0.012946739418262649,
      "fedMl": 12.946739418262649,
      "massFedG": 10.227924140427493
     },
     {
      "t": 8.0,
      "fromStart": 2.0,
      "fromStartMin": 120.0,
      "rateLPerH": 0.017476270233133258,
      "rateMlPerMin": 0.29127117055222096,
      "massFlowGPerH": 13.806253484175274,
      "fedL": 0.027988704606080248,
      "fedMl": 27.988704606080248,
      "massFedG": 22.111076638803397
     },
     {
      "t": 9.0,
      "fromStart": 3.0,
      "fromStartMin": 180.0,
      "rateLPerH": 0.020304529192027212,
      "rateMlPerMin": 0.3384088198671202,
      "massFlowGPerH": 16.0405780617015,
      "fedL": 0.0454649748392135,
      "fedMl": 45.4649748392135,
      "massFedG": 35.91733012297866
     },
     {
      "t": 10.0,
      "fromStart": 4.0,
      "fromStartMin": 240.0,
      "rateLPerH": 0.023590497297773256,
      "rateMlPerMin": 0.3931749549628876,
      "massFlowGPerH": 18.63649286524087,
      "fedL": 0.06576950403124072,
      "fedMl": 65.76950403124071,
      "massFedG": 51.95790818468017
     },
     {
      "t": 11.0,
      "fromStart": 5.0,
      "fromStartMin": 300.0,
      "rateLPerH": 0.027408247563541998,
      "rateMlPerMin": 0.4568041260590333,
      "massFlowGPerH": 21.65251557519818,
      "fedL": 0.08936000132901398,
      "fedMl": 89.36000132901398,
      "massFedG": 70.59440104992105
     },
     {
      "t": 12.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.03184384055249713,
      "rateMlPerMin": 0.5307306758749522,
      "massFlowGPerH": 25.15663403647273,
      "fedL": 0.11676824889255598,
      "fedMl": 116.76824889255597,
      "massFedG": 92.24691662511923
     },
     {
      "t": 13.0,
      "fromStart": 7.0,
      "fromStartMin": 420.0,
      "rateLPerH": 0.03699726437387069,
      "rateMlPerMin": 0.6166210728978448,
      "massFlowGPerH": 29.227838855357845,
      "fedL": 0.1486120894450531,
      "fedMl": 148.6120894450531,
      "massFedG": 117.40355066159195
     },
     {
      "t": 14.0,
      "fromStart": 8.0,
      "fromStartMin": 480.0,
      "rateLPerH": 0.04298468863683415,
      "rateMlPerMin": 0.7164114772805692,
      "massFlowGPerH": 33.957904023098976,
      "fedL": 0.1856093538189238,
      "fedMl": 185.6093538189238,
      "massFedG": 146.6313895169498
     },
     {
      "t": 15.0,
      "fromStart": 9.0,
      "fromStartMin": 540.0,
      "rateLPerH": 0.04994108317128724,
      "rateMlPerMin": 0.8323513861881207,
      "massFlowGPerH": 39.45345570531692,
      "fedL": 0.22859404245575796,
      "fedMl": 228.59404245575797,
      "massFedG": 180.5892935400488
     },
     {
      "t": 16.0,
      "fromStart": 10.0,
      "fromStartMin": 600.0,
      "rateLPerH": 0.05802326054734271,
      "rateMlPerMin": 0.9670543424557119,
      "massFlowGPerH": 45.83837583240074,
      "fedL": 0.2785351256270452,
      "fedMl": 278.5351256270452,
      "massFedG": 220.0427492453657
     },
     {
      "t": 17.0,
      "fromStart": 11.0,
      "fromStartMin": 660.0,
      "rateLPerH": 0.06741341097864778,
      "rateMlPerMin": 1.1235568496441297,
      "massFlowGPerH": 53.256594673131744,
      "fedL": 0.3365583861743879,
      "fedMl": 336.5583861743879,
      "massFedG": 265.88112507776646
     },
     {
      "t": 18.0,
      "fromStart": 12.0,
      "fromStartMin": 720.0,
      "rateLPerH": 0.07832320929410778,
      "rateMlPerMin": 1.305386821568463,
      "massFlowGPerH": 61.875335342345146,
      "fedL": 0.40397179715303566,
      "fedMl": 403.97179715303565,
      "massFedG": 319.13771975089816
     },
     {
      "t": 19.0,
      "fromStart": 13.0,
      "fromStartMin": 780.0,
      "rateLPerH": 0.09099858655826853,
      "rateMlPerMin": 1.5166431093044754,
      "massFlowGPerH": 71.88888338103214,
      "fedL": 0.48229500644714346,
      "fedMl": 482.29500644714346,
      "massFedG": 381.01305509324334
     },
     {
      "t": 20.0,
      "fromStart": 14.0,
      "fromStartMin": 840.0,
      "rateLPerH": 0.10572527390327005,
      "rateMlPerMin": 1.762087898387834,
      "massFlowGPerH": 83.52296638358334,
      "fedL": 0.573293593005412,
      "fedMl": 573.293593005412,
      "massFedG": 452.9019384742755
     },
     {
      "t": 21.0,
      "fromStart": 15.0,
      "fromStartMin": 900.0,
      "rateLPerH": 0.12283524354264608,
      "rateMlPerMin": 2.0472540590441013,
      "massFlowGPerH": 97.0398423986904,
      "fedL": 0.6790188669086821,
      "fedMl": 679.0188669086821,
      "massFedG": 536.4249048578589
     },
     {
      "t": 22.0,
      "fromStart": 16.0,
      "fromStartMin": 960.0,
      "rateLPerH": 0.14271419216171444,
      "rateMlPerMin": 2.3785698693619075,
      "massFlowGPerH": 112.74421180775441,
      "fedL": 0.8018541104513282,
      "fedMl": 801.8541104513282,
      "massFedG": 633.4647472565492
     },
     {
      "t": 23.0,
      "fromStart": 17.0,
      "fromStartMin": 1020.0,
      "rateLPerH": 0.16581023537678416,
      "rateMlPerMin": 2.7635039229464025,
      "massFlowGPerH": 130.99008594765948,
      "fedL": 0.9445683026130426,
      "fedMl": 944.5683026130426,
      "massFedG": 746.2089590643036
     },
     {
      "t": 24.0,
      "fromStart": 18.0,
      "fromStartMin": 1080.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 1.1103785379898268,
      "fedMl": 1110.3785379898268,
      "massFedG": 877.1990450119632
     }
    ],
    "totals": {
     "volumeL": 1.1103785379898268,
     "volumeMl": 1110.3785379898268,
     "massG": 877.1990450119632
    },
    "totalsDigits": {
     "volumeL": "1.11037853798982680000000000000e0",
     "volumeMl": "1.11037853798982680000000000000e3",
     "massG": "8.77199045011963172000000000000e2"
    }
   }
  },
  {
   "id": "exponential-pump-limit-sf-500",
   "feedId": "exponential-pump-limit",
   "description": "A2's 'exponential-pump-limit' pump sheet with a feed of 500 g/L.",
   "sfGPerL": 500,
   "rows": [
    {
     "t": 6.0,
     "fromStart": 0.0,
     "rate": 0.013994352303040124,
     "fedSoFar": 0.0
    },
    {
     "t": 8.0,
     "fromStart": 2.0,
     "rate": 0.018890399712580237,
     "fedSoFar": 0.027988704606080248
    },
    {
     "t": 10.0,
     "fromStart": 4.0,
     "rate": 0.025499372430657627,
     "fedSoFar": 0.06576950403124072
    },
    {
     "t": 12.0,
     "fromStart": 6.0,
     "rate": 0.034420552463183915,
     "fedSoFar": 0.11676824889255598
    },
    {
     "t": 14.0,
     "fromStart": 8.0,
     "rate": 0.0464628859040607,
     "fedSoFar": 0.1856093538189238
    },
    {
     "t": 16.0,
     "fromStart": 10.0,
     "rate": 0.06271833576299525,
     "fedSoFar": 0.2785351256270452
    },
    {
     "t": 18.0,
     "fromStart": 12.0,
     "rate": 0.07623796930925004,
     "fedSoFar": 0.40397179715303566
    },
    {
     "t": 18.647466565905876,
     "fromStart": 12.647466565905875,
     "rate": 0.08,
     "fedSoFar": 0.4533333333333333
    },
    {
     "t": 20.0,
     "fromStart": 14.0,
     "rate": 0.08,
     "fedSoFar": 0.5615360080608633
    },
    {
     "t": 22.0,
     "fromStart": 16.0,
     "rate": 0.08,
     "fedSoFar": 0.7215360080608633
    },
    {
     "t": 24.0,
     "fromStart": 18.0,
     "rate": 0.08,
     "fedSoFar": 0.8815360080608633
    },
    {
     "t": 26.0,
     "fromStart": 20.0,
     "rate": 0.08,
     "fedSoFar": 1.0415360080608633
    },
    {
     "t": 28.0,
     "fromStart": 22.0,
     "rate": 0.08,
     "fedSoFar": 1.2015360080608632
    },
    {
     "t": 30.0,
     "fromStart": 24.0,
     "rate": 0.0,
     "fedSoFar": 1.3615360080608634
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 6.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.013994352303040124,
      "rateMlPerMin": 0.23323920505066872,
      "massFlowGPerH": 6.997176151520062,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 8.0,
      "fromStart": 2.0,
      "fromStartMin": 120.0,
      "rateLPerH": 0.018890399712580237,
      "rateMlPerMin": 0.3148399952096706,
      "massFlowGPerH": 9.445199856290118,
      "fedL": 0.027988704606080248,
      "fedMl": 27.988704606080248,
      "massFedG": 13.994352303040124
     },
     {
      "t": 10.0,
      "fromStart": 4.0,
      "fromStartMin": 240.0,
      "rateLPerH": 0.025499372430657627,
      "rateMlPerMin": 0.42498954051096044,
      "massFlowGPerH": 12.749686215328813,
      "fedL": 0.06576950403124072,
      "fedMl": 65.76950403124071,
      "massFedG": 32.88475201562036
     },
     {
      "t": 12.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.034420552463183915,
      "rateMlPerMin": 0.5736758743863986,
      "massFlowGPerH": 17.21027623159196,
      "fedL": 0.11676824889255598,
      "fedMl": 116.76824889255597,
      "massFedG": 58.38412444627799
     },
     {
      "t": 14.0,
      "fromStart": 8.0,
      "fromStartMin": 480.0,
      "rateLPerH": 0.0464628859040607,
      "rateMlPerMin": 0.774381431734345,
      "massFlowGPerH": 23.23144295203035,
      "fedL": 0.1856093538189238,
      "fedMl": 185.6093538189238,
      "massFedG": 92.8046769094619
     },
     {
      "t": 16.0,
      "fromStart": 10.0,
      "fromStartMin": 600.0,
      "rateLPerH": 0.06271833576299525,
      "rateMlPerMin": 1.045305596049921,
      "massFlowGPerH": 31.359167881497626,
      "fedL": 0.2785351256270452,
      "fedMl": 278.5351256270452,
      "massFedG": 139.2675628135226
     },
     {
      "t": 18.0,
      "fromStart": 12.0,
      "fromStartMin": 720.0,
      "rateLPerH": 0.07623796930925004,
      "rateMlPerMin": 1.270632821820834,
      "massFlowGPerH": 38.11898465462502,
      "fedL": 0.40397179715303566,
      "fedMl": 403.97179715303565,
      "massFedG": 201.98589857651783
     },
     {
      "t": 18.647466565905876,
      "fromStart": 12.647466565905875,
      "fromStartMin": 758.8479939543525,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 0.4533333333333333,
      "fedMl": 453.3333333333333,
      "massFedG": 226.66666666666666
     },
     {
      "t": 20.0,
      "fromStart": 14.0,
      "fromStartMin": 840.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 0.5615360080608633,
      "fedMl": 561.5360080608633,
      "massFedG": 280.76800403043165
     },
     {
      "t": 22.0,
      "fromStart": 16.0,
      "fromStartMin": 960.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 0.7215360080608633,
      "fedMl": 721.5360080608633,
      "massFedG": 360.76800403043165
     },
     {
      "t": 24.0,
      "fromStart": 18.0,
      "fromStartMin": 1080.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 0.8815360080608633,
      "fedMl": 881.5360080608633,
      "massFedG": 440.76800403043165
     },
     {
      "t": 26.0,
      "fromStart": 20.0,
      "fromStartMin": 1200.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 1.0415360080608633,
      "fedMl": 1041.5360080608632,
      "massFedG": 520.7680040304316
     },
     {
      "t": 28.0,
      "fromStart": 22.0,
      "fromStartMin": 1320.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 1.2015360080608632,
      "fedMl": 1201.5360080608632,
      "massFedG": 600.7680040304316
     },
     {
      "t": 30.0,
      "fromStart": 24.0,
      "fromStartMin": 1440.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 1.3615360080608634,
      "fedMl": 1361.5360080608634,
      "massFedG": 680.7680040304317
     }
    ],
    "totals": {
     "volumeL": 1.3615360080608634,
     "volumeMl": 1361.5360080608634,
     "massG": 680.7680040304317
    },
    "totalsDigits": {
     "volumeL": "1.36153600806086340000000000000e0",
     "volumeMl": "1.36153600806086340000000000000e3",
     "massG": "6.80768004030431700000000000000e2"
    }
   }
  },
  {
   "id": "exponential-vmax-growing-sf-600",
   "feedId": "exponential-vmax-growing",
   "description": "A2's 'exponential-vmax-growing' pump sheet with a feed of 600 g/L.",
   "sfGPerL": 600,
   "rows": [
    {
     "t": 5.0,
     "fromStart": 0.0,
     "rate": 0.023323920505066875,
     "fedSoFar": 0.0
    },
    {
     "t": 6.5,
     "fromStart": 1.5,
     "rate": 0.03148399952096706,
     "fedSoFar": 0.03498588075760031
    },
    {
     "t": 8.0,
     "fromStart": 3.0,
     "rate": 0.04249895405109604,
     "fedSoFar": 0.0822118800390509
    },
    {
     "t": 9.5,
     "fromStart": 4.5,
     "rate": 0.05736758743863986,
     "fedSoFar": 0.14596031111569496
    },
    {
     "t": 11.0,
     "fromStart": 6.0,
     "rate": 0.07743814317343449,
     "fedSoFar": 0.23201169227365476
    },
    {
     "t": 12.5,
     "fromStart": 7.5,
     "rate": 0.10453055960499208,
     "fedSoFar": 0.3481689070338065
    },
    {
     "t": 14.0,
     "fromStart": 9.0,
     "rate": 0.14110149654364693,
     "fedSoFar": 0.5049647464412946
    },
    {
     "t": 15.5,
     "fromStart": 10.5,
     "rate": 0.19025680137935044,
     "fedSoFar": 0.716616991256765
    },
    {
     "t": 16.98947636399185,
     "fromStart": 11.989476363991853,
     "rate": 0.0,
     "fedSoFar": 1.0
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 5.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.023323920505066875,
      "rateMlPerMin": 0.38873200841778127,
      "massFlowGPerH": 13.994352303040126,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 6.5,
      "fromStart": 1.5,
      "fromStartMin": 90.0,
      "rateLPerH": 0.03148399952096706,
      "rateMlPerMin": 0.524733325349451,
      "massFlowGPerH": 18.890399712580237,
      "fedL": 0.03498588075760031,
      "fedMl": 34.98588075760031,
      "massFedG": 20.991528454560186
     },
     {
      "t": 8.0,
      "fromStart": 3.0,
      "fromStartMin": 180.0,
      "rateLPerH": 0.04249895405109604,
      "rateMlPerMin": 0.7083159008516007,
      "massFlowGPerH": 25.499372430657623,
      "fedL": 0.0822118800390509,
      "fedMl": 82.2118800390509,
      "massFedG": 49.32712802343054
     },
     {
      "t": 9.5,
      "fromStart": 4.5,
      "fromStartMin": 270.0,
      "rateLPerH": 0.05736758743863986,
      "rateMlPerMin": 0.9561264573106644,
      "massFlowGPerH": 34.42055246318392,
      "fedL": 0.14596031111569496,
      "fedMl": 145.96031111569496,
      "massFedG": 87.57618666941697
     },
     {
      "t": 11.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.07743814317343449,
      "rateMlPerMin": 1.2906357195572415,
      "massFlowGPerH": 46.46288590406069,
      "fedL": 0.23201169227365476,
      "fedMl": 232.01169227365477,
      "massFedG": 139.20701536419287
     },
     {
      "t": 12.5,
      "fromStart": 7.5,
      "fromStartMin": 450.0,
      "rateLPerH": 0.10453055960499208,
      "rateMlPerMin": 1.7421759934165346,
      "massFlowGPerH": 62.718335762995245,
      "fedL": 0.3481689070338065,
      "fedMl": 348.1689070338065,
      "massFedG": 208.9013442202839
     },
     {
      "t": 14.0,
      "fromStart": 9.0,
      "fromStartMin": 540.0,
      "rateLPerH": 0.14110149654364693,
      "rateMlPerMin": 2.351691609060782,
      "massFlowGPerH": 84.66089792618816,
      "fedL": 0.5049647464412946,
      "fedMl": 504.9647464412946,
      "massFedG": 302.97884786477675
     },
     {
      "t": 15.5,
      "fromStart": 10.5,
      "fromStartMin": 630.0,
      "rateLPerH": 0.19025680137935044,
      "rateMlPerMin": 3.1709466896558407,
      "massFlowGPerH": 114.15408082761026,
      "fedL": 0.716616991256765,
      "fedMl": 716.616991256765,
      "massFedG": 429.970194754059
     },
     {
      "t": 16.98947636399185,
      "fromStart": 11.989476363991853,
      "fromStartMin": 719.3685818395112,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 1.0,
      "fedMl": 1000.0,
      "massFedG": 600.0
     }
    ],
    "totals": {
     "volumeL": 1.0,
     "volumeMl": 1000.0,
     "massG": 600.0
    },
    "totalsDigits": {
     "volumeL": "1.00000000000000000000000000000e0",
     "volumeMl": "1.00000000000000000000000000000e3",
     "massG": "6.00000000000000000000000000000e2"
    }
   }
  },
  {
   "id": "exponential-vmax-at-limit-sf-500",
   "feedId": "exponential-vmax-at-limit",
   "description": "A2's 'exponential-vmax-at-limit' pump sheet with a feed of 500 g/L.",
   "sfGPerL": 500,
   "rows": [
    {
     "t": 6.0,
     "fromStart": 0.0,
     "rate": 0.015154991613071168,
     "fedSoFar": 0.0
    },
    {
     "t": 9.0,
     "fromStart": 3.0,
     "rate": 0.023767758017780822,
     "fedSoFar": 0.0454649748392135
    },
    {
     "t": 12.0,
     "fromStart": 6.0,
     "rate": 0.037275264521067324,
     "fedSoFar": 0.11676824889255598
    },
    {
     "t": 15.0,
     "fromStart": 9.0,
     "rate": 0.05845925156575925,
     "fedSoFar": 0.22859404245575796
    },
    {
     "t": 18.0,
     "fromStart": 12.0,
     "rate": 0.07623796930925004,
     "fedSoFar": 0.40397179715303566
    },
    {
     "t": 18.647466565905876,
     "fromStart": 12.647466565905875,
     "rate": 0.08,
     "fedSoFar": 0.4533333333333333
    },
    {
     "t": 21.0,
     "fromStart": 15.0,
     "rate": 0.08,
     "fedSoFar": 0.6415360080608633
    },
    {
     "t": 24.0,
     "fromStart": 18.0,
     "rate": 0.08,
     "fedSoFar": 0.8815360080608633
    },
    {
     "t": 27.0,
     "fromStart": 21.0,
     "rate": 0.08,
     "fedSoFar": 1.1215360080608634
    },
    {
     "t": 27.98079989923921,
     "fromStart": 21.98079989923921,
     "rate": 0.0,
     "fedSoFar": 1.2
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 6.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.015154991613071168,
      "rateMlPerMin": 0.25258319355118614,
      "massFlowGPerH": 7.577495806535584,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 9.0,
      "fromStart": 3.0,
      "fromStartMin": 180.0,
      "rateLPerH": 0.023767758017780822,
      "rateMlPerMin": 0.396129300296347,
      "massFlowGPerH": 11.88387900889041,
      "fedL": 0.0454649748392135,
      "fedMl": 45.4649748392135,
      "massFedG": 22.73248741960675
     },
     {
      "t": 12.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.037275264521067324,
      "rateMlPerMin": 0.6212544086844554,
      "massFlowGPerH": 18.63763226053366,
      "fedL": 0.11676824889255598,
      "fedMl": 116.76824889255597,
      "massFedG": 58.38412444627799
     },
     {
      "t": 15.0,
      "fromStart": 9.0,
      "fromStartMin": 540.0,
      "rateLPerH": 0.05845925156575925,
      "rateMlPerMin": 0.9743208594293208,
      "massFlowGPerH": 29.229625782879626,
      "fedL": 0.22859404245575796,
      "fedMl": 228.59404245575797,
      "massFedG": 114.29702122787899
     },
     {
      "t": 18.0,
      "fromStart": 12.0,
      "fromStartMin": 720.0,
      "rateLPerH": 0.07623796930925004,
      "rateMlPerMin": 1.270632821820834,
      "massFlowGPerH": 38.11898465462502,
      "fedL": 0.40397179715303566,
      "fedMl": 403.97179715303565,
      "massFedG": 201.98589857651783
     },
     {
      "t": 18.647466565905876,
      "fromStart": 12.647466565905875,
      "fromStartMin": 758.8479939543525,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 0.4533333333333333,
      "fedMl": 453.3333333333333,
      "massFedG": 226.66666666666666
     },
     {
      "t": 21.0,
      "fromStart": 15.0,
      "fromStartMin": 900.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 0.6415360080608633,
      "fedMl": 641.5360080608633,
      "massFedG": 320.76800403043165
     },
     {
      "t": 24.0,
      "fromStart": 18.0,
      "fromStartMin": 1080.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 0.8815360080608633,
      "fedMl": 881.5360080608633,
      "massFedG": 440.76800403043165
     },
     {
      "t": 27.0,
      "fromStart": 21.0,
      "fromStartMin": 1260.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 40.0,
      "fedL": 1.1215360080608634,
      "fedMl": 1121.5360080608634,
      "massFedG": 560.7680040304317
     },
     {
      "t": 27.98079989923921,
      "fromStart": 21.98079989923921,
      "fromStartMin": 1318.8479939543527,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 1.2,
      "fedMl": 1200.0,
      "massFedG": 600.0
     }
    ],
    "totals": {
     "volumeL": 1.2,
     "volumeMl": 1200.0,
     "massG": 600.0
    },
    "totalsDigits": {
     "volumeL": "1.20000000000000000000000000000e0",
     "volumeMl": "1.20000000000000000000000000000e3",
     "massG": "6.00000000000000000000000000000e2"
    }
   }
  },
  {
   "id": "exponential-starts-at-limit-sf-300",
   "feedId": "exponential-starts-at-limit",
   "description": "A2's 'exponential-starts-at-limit' pump sheet with a feed of 300 g/L.",
   "sfGPerL": 300,
   "rows": [
    {
     "t": 3.0,
     "fromStart": 0.0,
     "rate": 0.08,
     "fedSoFar": 0.0
    },
    {
     "t": 4.0,
     "fromStart": 1.0,
     "rate": 0.08,
     "fedSoFar": 0.08
    },
    {
     "t": 5.0,
     "fromStart": 2.0,
     "rate": 0.08,
     "fedSoFar": 0.16
    },
    {
     "t": 6.0,
     "fromStart": 3.0,
     "rate": 0.08,
     "fedSoFar": 0.24
    },
    {
     "t": 7.0,
     "fromStart": 4.0,
     "rate": 0.08,
     "fedSoFar": 0.32
    },
    {
     "t": 8.0,
     "fromStart": 5.0,
     "rate": 0.08,
     "fedSoFar": 0.4
    },
    {
     "t": 9.0,
     "fromStart": 6.0,
     "rate": 0.0,
     "fedSoFar": 0.48
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 3.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 24.0,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 4.0,
      "fromStart": 1.0,
      "fromStartMin": 60.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 24.0,
      "fedL": 0.08,
      "fedMl": 80.0,
      "massFedG": 24.0
     },
     {
      "t": 5.0,
      "fromStart": 2.0,
      "fromStartMin": 120.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 24.0,
      "fedL": 0.16,
      "fedMl": 160.0,
      "massFedG": 48.0
     },
     {
      "t": 6.0,
      "fromStart": 3.0,
      "fromStartMin": 180.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 24.0,
      "fedL": 0.24,
      "fedMl": 240.0,
      "massFedG": 72.0
     },
     {
      "t": 7.0,
      "fromStart": 4.0,
      "fromStartMin": 240.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 24.0,
      "fedL": 0.32,
      "fedMl": 320.0,
      "massFedG": 96.0
     },
     {
      "t": 8.0,
      "fromStart": 5.0,
      "fromStartMin": 300.0,
      "rateLPerH": 0.08,
      "rateMlPerMin": 1.3333333333333333,
      "massFlowGPerH": 24.0,
      "fedL": 0.4,
      "fedMl": 400.0,
      "massFedG": 120.0
     },
     {
      "t": 9.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 0.48,
      "fedMl": 480.0,
      "massFedG": 144.0
     }
    ],
    "totals": {
     "volumeL": 0.48,
     "volumeMl": 480.0,
     "massG": 144.0
    },
    "totalsDigits": {
     "volumeL": "4.80000000000000000000000000000e-1",
     "volumeMl": "4.80000000000000000000000000000e2",
     "massG": "1.44000000000000000000000000000e2"
    }
   }
  },
  {
   "id": "rescue-cap-sf-500",
   "feedId": "rescue-cap",
   "description": "A2's 'rescue-cap' pump sheet with a feed of 500 g/L.",
   "sfGPerL": 500,
   "rows": [
    {
     "t": 6.0,
     "fromStart": 0.0,
     "rate": 0.013994352303040124,
     "fedSoFar": 0.0
    },
    {
     "t": 8.0,
     "fromStart": 2.0,
     "rate": 0.018890399712580237,
     "fedSoFar": 0.027988704606080248
    },
    {
     "t": 10.0,
     "fromStart": 4.0,
     "rate": 0.021034183615129525,
     "fedSoFar": 0.06576950403124072
    },
    {
     "t": 12.0,
     "fromStart": 6.0,
     "rate": 0.023246368016904443,
     "fedSoFar": 0.10783787126149977
    },
    {
     "t": 14.0,
     "fromStart": 8.0,
     "rate": 0.025691209883166654,
     "fedSoFar": 0.15433060729530865
    },
    {
     "t": 16.0,
     "fromStart": 10.0,
     "rate": 0.028393178013053442,
     "fedSoFar": 0.20571302706164196
    },
    {
     "t": 18.0,
     "fromStart": 12.0,
     "rate": 0.03137931461177156,
     "fedSoFar": 0.26249938308774884
    },
    {
     "t": 20.0,
     "fromStart": 14.0,
     "rate": 0.034679505938076165,
     "fedSoFar": 0.325258012311292
    },
    {
     "t": 22.0,
     "fromStart": 16.0,
     "rate": 0.03832678141599351,
     "fedSoFar": 0.3946170241874443
    },
    {
     "t": 24.0,
     "fromStart": 18.0,
     "rate": 0.042357644204398213,
     "fedSoFar": 0.4712705870194313
    },
    {
     "t": 26.0,
     "fromStart": 20.0,
     "rate": 0.04681243653289641,
     "fedSoFar": 0.5559858754282277
    },
    {
     "t": 28.0,
     "fromStart": 22.0,
     "rate": 0.049594934291613046,
     "fedSoFar": 0.6496107484940206
    },
    {
     "t": 28.325814637483102,
     "fromStart": 22.325814637483102,
     "rate": 0.05,
     "fedSoFar": 0.6657695040312407
    },
    {
     "t": 30.0,
     "fromStart": 24.0,
     "rate": 0.0,
     "fedSoFar": 0.7494787721570857
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 6.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.013994352303040124,
      "rateMlPerMin": 0.23323920505066872,
      "massFlowGPerH": 6.997176151520062,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 8.0,
      "fromStart": 2.0,
      "fromStartMin": 120.0,
      "rateLPerH": 0.018890399712580237,
      "rateMlPerMin": 0.3148399952096706,
      "massFlowGPerH": 9.445199856290118,
      "fedL": 0.027988704606080248,
      "fedMl": 27.988704606080248,
      "massFedG": 13.994352303040124
     },
     {
      "t": 10.0,
      "fromStart": 4.0,
      "fromStartMin": 240.0,
      "rateLPerH": 0.021034183615129525,
      "rateMlPerMin": 0.35056972691882543,
      "massFlowGPerH": 10.517091807564762,
      "fedL": 0.06576950403124072,
      "fedMl": 65.76950403124071,
      "massFedG": 32.88475201562036
     },
     {
      "t": 12.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.023246368016904443,
      "rateMlPerMin": 0.38743946694840736,
      "massFlowGPerH": 11.623184008452222,
      "fedL": 0.10783787126149977,
      "fedMl": 107.83787126149977,
      "massFedG": 53.918935630749885
     },
     {
      "t": 14.0,
      "fromStart": 8.0,
      "fromStartMin": 480.0,
      "rateLPerH": 0.025691209883166654,
      "rateMlPerMin": 0.4281868313861109,
      "massFlowGPerH": 12.845604941583327,
      "fedL": 0.15433060729530865,
      "fedMl": 154.33060729530865,
      "massFedG": 77.16530364765433
     },
     {
      "t": 16.0,
      "fromStart": 10.0,
      "fromStartMin": 600.0,
      "rateLPerH": 0.028393178013053442,
      "rateMlPerMin": 0.4732196335508907,
      "massFlowGPerH": 14.196589006526722,
      "fedL": 0.20571302706164196,
      "fedMl": 205.71302706164195,
      "massFedG": 102.85651353082098
     },
     {
      "t": 18.0,
      "fromStart": 12.0,
      "fromStartMin": 720.0,
      "rateLPerH": 0.03137931461177156,
      "rateMlPerMin": 0.5229885768628594,
      "massFlowGPerH": 15.68965730588578,
      "fedL": 0.26249938308774884,
      "fedMl": 262.49938308774887,
      "massFedG": 131.24969154387443
     },
     {
      "t": 20.0,
      "fromStart": 14.0,
      "fromStartMin": 840.0,
      "rateLPerH": 0.034679505938076165,
      "rateMlPerMin": 0.5779917656346027,
      "massFlowGPerH": 17.339752969038084,
      "fedL": 0.325258012311292,
      "fedMl": 325.258012311292,
      "massFedG": 162.629006155646
     },
     {
      "t": 22.0,
      "fromStart": 16.0,
      "fromStartMin": 960.0,
      "rateLPerH": 0.03832678141599351,
      "rateMlPerMin": 0.6387796902665585,
      "massFlowGPerH": 19.163390707996754,
      "fedL": 0.3946170241874443,
      "fedMl": 394.6170241874443,
      "massFedG": 197.30851209372216
     },
     {
      "t": 24.0,
      "fromStart": 18.0,
      "fromStartMin": 1080.0,
      "rateLPerH": 0.042357644204398213,
      "rateMlPerMin": 0.7059607367399702,
      "massFlowGPerH": 21.178822102199106,
      "fedL": 0.4712705870194313,
      "fedMl": 471.2705870194313,
      "massFedG": 235.63529350971564
     },
     {
      "t": 26.0,
      "fromStart": 20.0,
      "fromStartMin": 1200.0,
      "rateLPerH": 0.04681243653289641,
      "rateMlPerMin": 0.7802072755482735,
      "massFlowGPerH": 23.406218266448207,
      "fedL": 0.5559858754282277,
      "fedMl": 555.9858754282277,
      "massFedG": 277.99293771411385
     },
     {
      "t": 28.0,
      "fromStart": 22.0,
      "fromStartMin": 1320.0,
      "rateLPerH": 0.049594934291613046,
      "rateMlPerMin": 0.8265822381935508,
      "massFlowGPerH": 24.79746714580652,
      "fedL": 0.6496107484940206,
      "fedMl": 649.6107484940206,
      "massFedG": 324.8053742470103
     },
     {
      "t": 28.325814637483102,
      "fromStart": 22.325814637483102,
      "fromStartMin": 1339.548878248986,
      "rateLPerH": 0.05,
      "rateMlPerMin": 0.8333333333333334,
      "massFlowGPerH": 25.0,
      "fedL": 0.6657695040312407,
      "fedMl": 665.7695040312407,
      "massFedG": 332.88475201562034
     },
     {
      "t": 30.0,
      "fromStart": 24.0,
      "fromStartMin": 1440.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 0.7494787721570857,
      "fedMl": 749.4787721570857,
      "massFedG": 374.73938607854285
     }
    ],
    "totals": {
     "volumeL": 0.7494787721570857,
     "volumeMl": 749.4787721570857,
     "massG": 374.73938607854285
    },
    "totalsDigits": {
     "volumeL": "7.49478772157085700000000000000e-1",
     "volumeMl": "7.49478772157085700000000000000e2",
     "massG": "3.74739386078542850000000000000e2"
    }
   }
  },
  {
   "id": "rescue-cap-unresolved-sf-500",
   "feedId": "rescue-cap-unresolved",
   "description": "A2's 'rescue-cap-unresolved' pump sheet with a feed of 500 g/L.",
   "sfGPerL": 500,
   "rows": [
    {
     "t": 6.0,
     "fromStart": 0.0,
     "rate": 0.013994352303040124,
     "fedSoFar": 0.0
    },
    {
     "t": 8.0,
     "fromStart": 2.0,
     "rate": 0.018890399712580237,
     "fedSoFar": 0.027988704606080248
    },
    {
     "t": 10.0,
     "fromStart": 4.0,
     "rate": 0.0,
     "fedSoFar": 0.06576950403124072
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 6.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.013994352303040124,
      "rateMlPerMin": 0.23323920505066872,
      "massFlowGPerH": 6.997176151520062,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 8.0,
      "fromStart": 2.0,
      "fromStartMin": 120.0,
      "rateLPerH": 0.018890399712580237,
      "rateMlPerMin": 0.3148399952096706,
      "massFlowGPerH": 9.445199856290118,
      "fedL": 0.027988704606080248,
      "fedMl": 27.988704606080248,
      "massFedG": 13.994352303040124
     },
     {
      "t": 10.0,
      "fromStart": 4.0,
      "fromStartMin": 240.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 0.06576950403124072,
      "fedMl": 65.76950403124071,
      "massFedG": 32.88475201562036
     }
    ],
    "totals": {
     "volumeL": 0.06576950403124072,
     "volumeMl": 65.76950403124071,
     "massG": 32.88475201562036
    },
    "totalsDigits": {
     "volumeL": "6.57695040312407200000000000000e-2",
     "volumeMl": "6.57695040312407200000000000000e1",
     "massG": "3.28847520156203600000000000000e1"
    }
   }
  },
  {
   "id": "rescue-cap-before-start-sf-450",
   "feedId": "rescue-cap-before-start",
   "description": "A2's 'rescue-cap-before-start' pump sheet with a feed of 450 g/L.",
   "sfGPerL": 450,
   "rows": [
    {
     "t": 6.0,
     "fromStart": 0.0,
     "rate": 0.015616325189054729,
     "fedSoFar": 0.0
    },
    {
     "t": 8.0,
     "fromStart": 2.0,
     "rate": 0.01691696312190969,
     "fedSoFar": 0.031232650378109458
    },
    {
     "t": 10.0,
     "fromStart": 4.0,
     "rate": 0.018325927374298962,
     "fedSoFar": 0.06506657662192884
    },
    {
     "t": 12.0,
     "fromStart": 6.0,
     "rate": 0.019852240127728574,
     "fedSoFar": 0.10171843137052676
    },
    {
     "t": 14.0,
     "fromStart": 8.0,
     "rate": 0.0,
     "fedSoFar": 0.14142291162598392
    }
   ],
   "expected": {
    "rows": [
     {
      "t": 6.0,
      "fromStart": 0.0,
      "fromStartMin": 0.0,
      "rateLPerH": 0.015616325189054729,
      "rateMlPerMin": 0.2602720864842455,
      "massFlowGPerH": 7.027346335074628,
      "fedL": 0.0,
      "fedMl": 0.0,
      "massFedG": 0.0
     },
     {
      "t": 8.0,
      "fromStart": 2.0,
      "fromStartMin": 120.0,
      "rateLPerH": 0.01691696312190969,
      "rateMlPerMin": 0.2819493853651615,
      "massFlowGPerH": 7.612633404859361,
      "fedL": 0.031232650378109458,
      "fedMl": 31.232650378109458,
      "massFedG": 14.054692670149256
     },
     {
      "t": 10.0,
      "fromStart": 4.0,
      "fromStartMin": 240.0,
      "rateLPerH": 0.018325927374298962,
      "rateMlPerMin": 0.3054321229049827,
      "massFlowGPerH": 8.246667318434532,
      "fedL": 0.06506657662192884,
      "fedMl": 65.06657662192885,
      "massFedG": 29.279959479867976
     },
     {
      "t": 12.0,
      "fromStart": 6.0,
      "fromStartMin": 360.0,
      "rateLPerH": 0.019852240127728574,
      "rateMlPerMin": 0.3308706687954762,
      "massFlowGPerH": 8.933508057477859,
      "fedL": 0.10171843137052676,
      "fedMl": 101.71843137052676,
      "massFedG": 45.77329411673704
     },
     {
      "t": 14.0,
      "fromStart": 8.0,
      "fromStartMin": 480.0,
      "rateLPerH": 0.0,
      "rateMlPerMin": 0.0,
      "massFlowGPerH": 0.0,
      "fedL": 0.14142291162598392,
      "fedMl": 141.42291162598391,
      "massFedG": 63.640310231692766
     }
    ],
    "totals": {
     "volumeL": 0.14142291162598392,
     "volumeMl": 141.42291162598391,
     "massG": 63.640310231692766
    },
    "totalsDigits": {
     "volumeL": "1.41422911625983920000000000000e-1",
     "volumeMl": "1.41422911625983920000000000000e2",
     "massG": "6.36403102316927640000000000000e1"
    }
   }
  },
  {
   "id": "vessel-full-sf-500",
   "feedId": "vessel-full",
   "description": "A2's 'vessel-full' pump sheet with a feed of 500 g/L.",
   "sfGPerL": 500,
   "rows": [],
   "expected": {
    "rows": [],
    "totals": {
     "volumeL": 0.0,
     "volumeMl": 0.0,
     "massG": 0.0
    },
    "totalsDigits": {
     "volumeL": "0",
     "volumeMl": "0",
     "massG": "0"
    }
   }
  }
 ],
 "programmes": [
  {
   "id": "constant",
   "description": "A constant 0.05 L/h from 4 h to tEnd 20 h, asked to 24 h, rows every 2 h.",
   "feed": {
    "law": "constant",
    "start": 4,
    "V0": 5,
    "F": 0.05,
    "muSet": null,
    "F0": null,
    "Fmax": null,
    "tEnd": 20,
    "Vmax": null,
    "cap": null
   },
   "until": 24,
   "expected": {
    "ok": true,
    "program": {
     "start": 4,
     "v0": 5,
     "tend": 20,
     "f": 0.05
    },
    "stop": {
     "at": 20.0,
     "reason": "tEnd"
    },
    "totalFedL": 0.8,
    "totalFedDigits": "8.00000000000000000000000000000e-1"
   }
  },
  {
   "id": "constant-vmax",
   "description": "As constant with Vmax 5.6 L: the vessel fills at 16 h, before tEnd; rows every 2.5 h.",
   "feed": {
    "law": "constant",
    "start": 4,
    "V0": 5,
    "F": 0.05,
    "muSet": null,
    "F0": null,
    "Fmax": null,
    "tEnd": 20,
    "Vmax": 5.6,
    "cap": null
   },
   "until": 24,
   "expected": {
    "ok": true,
    "program": {
     "start": 4,
     "v0": 5,
     "tend": 20,
     "vmax": 5.6,
     "f": 0.05
    },
    "stop": {
     "at": 16.0,
     "reason": "Vmax"
    },
    "totalFedL": 0.6,
    "totalFedDigits": "6.00000000000000000000000000000e-1"
   }
  },
  {
   "id": "constant-horizon",
   "description": "A constant 0.03 L/h from 2 h with no stop, asked only to 9 h: the pieces end at the horizon and no stop is reported; rows every 0.75 h.",
   "feed": {
    "law": "constant",
    "start": 2,
    "V0": 3,
    "F": 0.03,
    "muSet": null,
    "F0": null,
    "Fmax": null,
    "tEnd": null,
    "Vmax": null,
    "cap": null
   },
   "until": 9,
   "expected": {
    "ok": true,
    "program": {
     "start": 2,
     "v0": 3,
     "f": 0.03
    },
    "stop": {
     "at": 9.0,
     "reason": "runEnd"
    },
    "totalFedL": 0.21,
    "totalFedDigits": "2.10000000000000000000000000000e-1"
   }
  },
  {
   "id": "exponential",
   "description": "Exponential from F0 0.012 L/h at 0.15 per hour from 6 h to tEnd 24 h, asked to 30 h; rows every hour.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": null,
    "tEnd": 24,
    "Vmax": null,
    "cap": null
   },
   "until": 30,
   "expected": {
    "ok": true,
    "program": {
     "start": 6,
     "v0": 7,
     "tend": 24,
     "muset": 0.15,
     "f0": 0.012
    },
    "stop": {
     "at": 24.0,
     "reason": "tEnd"
    },
    "totalFedL": 1.1103785379898268,
    "totalFedDigits": "1.11037853798982680000000000000e0"
   }
  },
  {
   "id": "exponential-pump-limit",
   "description": "As exponential with Fmax 0.08 L/h: the limit is reached at 6 + ln(0.08/0.012)/0.15 h, then held; rows every 2 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": 0.08,
    "tEnd": 30,
    "Vmax": null,
    "cap": null
   },
   "until": 30,
   "expected": {
    "ok": true,
    "program": {
     "start": 6,
     "v0": 7,
     "tend": 30,
     "muset": 0.15,
     "f0": 0.012,
     "fmax": 0.08
    },
    "stop": {
     "at": 30.0,
     "reason": "tEnd"
    },
    "totalFedL": 1.3615360080608634,
    "totalFedDigits": "1.36153600806086340000000000000e0"
   }
  },
  {
   "id": "exponential-vmax-growing",
   "description": "Exponential from 0.02 L/h at 0.2 per hour from 5 h with Vmax 8 L from 7 L: the vessel fills during growth (the cut time from ln(1 + mu W/F)/mu); rows every 1.5 h.",
   "feed": {
    "law": "exponential",
    "start": 5,
    "V0": 7,
    "F": null,
    "muSet": 0.2,
    "F0": 0.02,
    "Fmax": null,
    "tEnd": 40,
    "Vmax": 8,
    "cap": null
   },
   "until": 40,
   "expected": {
    "ok": true,
    "program": {
     "start": 5,
     "v0": 7,
     "tend": 40,
     "vmax": 8,
     "muset": 0.2,
     "f0": 0.02
    },
    "stop": {
     "at": 16.98947636399185,
     "reason": "Vmax"
    },
    "totalFedL": 1.0,
    "totalFedDigits": "1.00000000000000000000000000000e0"
   }
  },
  {
   "id": "exponential-vmax-at-limit",
   "description": "Exponential from 0.012 L/h at 0.15 per hour, Fmax 0.08 L/h, Vmax 8.2 L from 7 L: the vessel fills while the pump is at its limit; rows every 3 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": 0.08,
    "tEnd": 48,
    "Vmax": 8.2,
    "cap": null
   },
   "until": 48,
   "expected": {
    "ok": true,
    "program": {
     "start": 6,
     "v0": 7,
     "tend": 48,
     "vmax": 8.2,
     "muset": 0.15,
     "f0": 0.012,
     "fmax": 0.08
    },
    "stop": {
     "at": 27.98079989923921,
     "reason": "Vmax"
    },
    "totalFedL": 1.2,
    "totalFedDigits": "1.20000000000000000000000000000e0"
   }
  },
  {
   "id": "exponential-starts-at-limit",
   "description": "Exponential from 0.1 L/h with Fmax 0.08 L/h: at the limit throughout, from 3 h to tEnd 9 h; rows every hour.",
   "feed": {
    "law": "exponential",
    "start": 3,
    "V0": 4,
    "F": null,
    "muSet": 0.1,
    "F0": 0.1,
    "Fmax": 0.08,
    "tEnd": 9,
    "Vmax": null,
    "cap": null
   },
   "until": 12,
   "expected": {
    "ok": true,
    "program": {
     "start": 3,
     "v0": 4,
     "tend": 9,
     "muset": 0.1,
     "f0": 0.1,
     "fmax": 0.08
    },
    "stop": {
     "at": 9.0,
     "reason": "tEnd"
    },
    "totalFedL": 0.48,
    "totalFedDigits": "4.80000000000000000000000000000e-1"
   }
  },
  {
   "id": "rescue-cap",
   "description": "Exponential from 0.012 L/h at 0.15 per hour from 6 h, Fmax 0.05 L/h, with the rescue's cap at 10 h: 0.02 L/h growing at 0.05 per hour until the limit; tEnd 30 h; rows every 2 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": 0.05,
    "tEnd": 30,
    "Vmax": null,
    "cap": {
     "capAt": 10,
     "muCap": 0.05,
     "Fcap": 0.02
    }
   },
   "until": 30,
   "expected": {
    "ok": true,
    "program": {
     "start": 6,
     "v0": 7,
     "tend": 30,
     "muset": 0.15,
     "f0": 0.012,
     "fmax": 0.05,
     "capat": 10,
     "mucap": 0.05,
     "fcap": 0.02
    },
    "stop": {
     "at": 30.0,
     "reason": "tEnd"
    },
    "totalFedL": 0.7494787721570857,
    "totalFedDigits": "7.49478772157085700000000000000e-1"
   }
  },
  {
   "id": "rescue-cap-unresolved",
   "description": "As rescue-cap before the run has resolved Fcap: the pieces stop at the cap's time, 10 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": 0.05,
    "tEnd": 30,
    "Vmax": null,
    "cap": {
     "capAt": 10,
     "muCap": 0.05,
     "Fcap": null
    }
   },
   "until": 30,
   "expected": {
    "ok": false,
    "reason": "capNotReached"
   }
  },
  {
   "id": "rescue-cap-before-start",
   "description": "A cap timed at 2 h on a feed that starts at 6 h: the cap applies from the feed's start; 0.015 L/h growing at 0.04 per hour to tEnd 14 h; rows every 2 h.",
   "feed": {
    "law": "exponential",
    "start": 6,
    "V0": 7,
    "F": null,
    "muSet": 0.15,
    "F0": 0.012,
    "Fmax": null,
    "tEnd": 14,
    "Vmax": null,
    "cap": {
     "capAt": 2,
     "muCap": 0.04,
     "Fcap": 0.015
    }
   },
   "until": 20,
   "expected": {
    "ok": true,
    "program": {
     "start": 6,
     "v0": 7,
     "tend": 14,
     "muset": 0.15,
     "f0": 0.012,
     "capat": 2,
     "mucap": 0.04,
     "fcap": 0.015
    },
    "stop": {
     "at": 14.0,
     "reason": "tEnd"
    },
    "totalFedL": 0.14142291162598392,
    "totalFedDigits": "1.41422911625983920000000000000e-1"
   }
  },
  {
   "id": "vessel-full",
   "description": "Vmax 7 L with the vessel already at 7.5 L: no feed; the stop is at the feed's start.",
   "feed": {
    "law": "constant",
    "start": 4,
    "V0": 7.5,
    "F": 0.05,
    "muSet": null,
    "F0": null,
    "Fmax": null,
    "tEnd": null,
    "Vmax": 7,
    "cap": null
   },
   "until": 24,
   "expected": {
    "ok": false,
    "reason": "noFeed"
   }
  },
  {
   "id": "exponential-no-start-rate",
   "description": "An exponential feed whose F0 is not finite (Sf no higher than the broth at the start).",
   "feed": {
    "law": "exponential",
    "start": 5,
    "V0": 5,
    "F": null,
    "muSet": 0.2,
    "F0": "NaN",
    "Fmax": null,
    "tEnd": 20,
    "Vmax": null,
    "cap": null
   },
   "until": 24,
   "expected": {
    "ok": false,
    "reason": "start"
   }
  },
  {
   "id": "cap-no-design",
   "description": "A cap whose Fcap is not finite (Sf no higher than the broth at the cap).",
   "feed": {
    "law": "exponential",
    "start": 5,
    "V0": 5,
    "F": null,
    "muSet": 0.2,
    "F0": 0.01,
    "Fmax": null,
    "tEnd": 20,
    "Vmax": null,
    "cap": {
     "capAt": 10,
     "muCap": 0.05,
     "Fcap": "NaN"
    }
   },
   "until": 24,
   "expected": {
    "ok": false,
    "reason": "capNoDesign"
   }
  },
  {
   "id": "starts-after-run",
   "description": "A constant feed that starts at 30 h in a 24 h run: it feeds nothing.",
   "feed": {
    "law": "constant",
    "start": 30,
    "V0": 5,
    "F": 0.05,
    "muSet": null,
    "F0": null,
    "Fmax": null,
    "tEnd": null,
    "Vmax": null,
    "cap": null
   },
   "until": 24,
   "expected": {
    "ok": false,
    "reason": "noFeed"
   }
  }
 ],
 "matches": [
  {
   "id": "d-glucose",
   "description": "D-glucose by InChIKey among a salt and an unidentified trace solution.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Ammonium sulfate",
     "amount": {
      "value": 5,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:BFNBIHQBYMNNAN-UHFFFAOYSA-N"
    },
    {
     "name": "D-glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    },
    {
     "name": "Trace elements",
     "amount": {
      "value": 1,
      "unit": "mL/L"
     }
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 600.0,
    "valueDigits": "6.00000000000000000000000000000e2",
    "index": 1,
    "name": "D-glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "none",
    "molarMass": null
   }
  },
  {
   "id": "alpha-percent",
   "description": "The alpha pyranose at 50 %w/v.",
   "substrate": "glucose",
   "components": [
    {
     "name": "alpha-D-glucose",
     "amount": {
      "value": 50,
      "unit": "%w/v"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-DVKNGEFBSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 500.0,
    "valueDigits": "5.00000000000000000000000000000e2",
    "index": 0,
    "name": "alpha-D-glucose",
    "key": "WQZGKKKJIJFFOK-DVKNGEFBSA-N",
    "cid": 79025,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-DVKNGEFBSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-DVKNGEFBSA-N",
    "converted": "percent-w-v",
    "molarMass": null
   }
  },
  {
   "id": "beta-mg-per-ml",
   "description": "The beta pyranose at 400 mg/mL.",
   "substrate": "glucose",
   "components": [
    {
     "name": "beta-D-glucose",
     "amount": {
      "value": 400,
      "unit": "mg/mL"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-VFUOTHLCSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 400.0,
    "valueDigits": "4.00000000000000000000000000000e2",
    "index": 0,
    "name": "beta-D-glucose",
    "key": "WQZGKKKJIJFFOK-VFUOTHLCSA-N",
    "cid": 64689,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-VFUOTHLCSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-VFUOTHLCSA-N",
    "converted": "unit",
    "molarMass": null
   }
  },
  {
   "id": "open-chain",
   "description": "Open-chain D-glucose (CID 107526) now counts.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 300,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:GZCGUPFRVQAUEE-SLPGGIOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 300.0,
    "valueDigits": "3.00000000000000000000000000000e2",
    "index": 0,
    "name": "D-glucose",
    "key": "GZCGUPFRVQAUEE-SLPGGIOYSA-N",
    "cid": 107526,
    "form": "match",
    "componentRef": "inchikey:GZCGUPFRVQAUEE-SLPGGIOYSA-N",
    "comparedRef": "inchikey:GZCGUPFRVQAUEE-SLPGGIOYSA-N",
    "converted": "none",
    "molarMass": null
   }
  },
  {
   "id": "ug-per-ml",
   "description": "D-glucose in micrograms per millilitre, by the micro sign.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 250000,
      "unit": "\u00b5g/mL"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 250.0,
    "valueDigits": "2.50000000000000000000000000000e2",
    "index": 0,
    "name": "D-glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "unit",
    "molarMass": null
   }
  },
  {
   "id": "kept-compound",
   "description": "A kept compound the store resolves to D-glucose's inchikey: ref.",
   "substrate": "glucose",
   "components": [
    {
     "name": "My glucose",
     "amount": {
      "value": 250.5,
      "unit": "g/L"
     },
     "compoundRef": "mine:compound/00000000-0000-4000-8000-00000000a001"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 250.5,
    "valueDigits": "2.50500000000000000000000000000e2",
    "index": 0,
    "name": "My glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "mine:compound/00000000-0000-4000-8000-00000000a001",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "none",
    "molarMass": null
   }
  },
  {
   "id": "kept-compound-unfolded",
   "description": "A kept compound with no structure: context, not a candidate.",
   "substrate": "glucose",
   "components": [
    {
     "name": "My glucose",
     "amount": {
      "value": 250,
      "unit": "g/L"
     },
     "compoundRef": "mine:compound/00000000-0000-4000-8000-00000000a002"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "kept-compound-mine",
   "description": "A kept compound that resolves to another mine: ref: not a candidate.",
   "substrate": "glucose",
   "components": [
    {
     "name": "My glucose",
     "amount": {
      "value": 250,
      "unit": "g/L"
     },
     "compoundRef": "mine:compound/00000000-0000-4000-8000-00000000a003"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "molar-glucose",
   "description": "D-glucose at 2.5 M, times the model's 180.156 g/mol.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 2.5,
      "unit": "M"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 450.39,
    "valueDigits": "4.50390000000000000000000000000e2",
    "index": 0,
    "name": "D-glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "molarity",
    "molarMass": 180.156
   }
  },
  {
   "id": "millimolar-glucose",
   "description": "D-glucose at 2775 mM.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 2775,
      "unit": "mM"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 499.9329,
    "valueDigits": "4.99932900000000000000000000000e2",
    "index": 0,
    "name": "D-glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "molarity",
    "molarMass": 180.156
   }
  },
  {
   "id": "monohydrate-molar",
   "description": "Glucose monohydrate at 1 mol/L: its moles are glucose's.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose monohydrate",
     "amount": {
      "value": 1,
      "unit": "mol/L"
     },
     "compoundRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 180.156,
    "valueDigits": "1.80156000000000000000000000000e2",
    "index": 0,
    "name": "Glucose monohydrate",
    "key": "SPFMQWBKVUQXJV-BTVCFUMJSA-N",
    "cid": 22814120,
    "form": "hydrate",
    "componentRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N",
    "comparedRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N",
    "converted": "molarity",
    "molarMass": 180.156
   }
  },
  {
   "id": "monohydrate-mass",
   "description": "Glucose monohydrate at 550 g/L, converted by formula mass.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose monohydrate",
     "amount": {
      "value": 550,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 500.00151384410435,
    "valueDigits": "5.00001513844104334135670708630e2",
    "index": 0,
    "name": "Glucose monohydrate",
    "key": "SPFMQWBKVUQXJV-BTVCFUMJSA-N",
    "cid": 22814120,
    "form": "hydrate",
    "componentRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N",
    "comparedRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N",
    "converted": "monohydrate",
    "molarMass": null
   }
  },
  {
   "id": "alpha-monohydrate-mass",
   "description": "Alpha-D-glucose monohydrate at 10 g/L: 9.09094 g/L glucose.",
   "substrate": "glucose",
   "components": [
    {
     "name": "alpha-D-glucose monohydrate",
     "amount": {
      "value": 10,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:OSNSWKAZFASRNG-WNFIKIDCSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 9.090936615347351,
    "valueDigits": "9.09093661534735152973946742964e0",
    "index": 0,
    "name": "alpha-D-glucose monohydrate",
    "key": "OSNSWKAZFASRNG-WNFIKIDCSA-N",
    "cid": 66370,
    "form": "hydrate",
    "componentRef": "inchikey:OSNSWKAZFASRNG-WNFIKIDCSA-N",
    "comparedRef": "inchikey:OSNSWKAZFASRNG-WNFIKIDCSA-N",
    "converted": "monohydrate",
    "molarMass": null
   }
  },
  {
   "id": "monohydrate-percent",
   "description": "Glucose monohydrate at 10 %w/v.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose monohydrate",
     "amount": {
      "value": 10,
      "unit": "%w/v"
     },
     "compoundRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 90.90936615347351,
    "valueDigits": "9.09093661534735152973946742964e1",
    "index": 0,
    "name": "Glucose monohydrate",
    "key": "SPFMQWBKVUQXJV-BTVCFUMJSA-N",
    "cid": 22814120,
    "form": "hydrate",
    "componentRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N",
    "comparedRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N",
    "converted": "monohydrate",
    "molarMass": null
   }
  },
  {
   "id": "alpha-monohydrate-percent",
   "description": "Alpha-D-glucose monohydrate at 55 %w/v.",
   "substrate": "glucose",
   "components": [
    {
     "name": "alpha-D-glucose monohydrate",
     "amount": {
      "value": 55,
      "unit": "%w/v"
     },
     "compoundRef": "inchikey:OSNSWKAZFASRNG-WNFIKIDCSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 500.00151384410435,
    "valueDigits": "5.00001513844104334135670708630e2",
    "index": 0,
    "name": "alpha-D-glucose monohydrate",
    "key": "OSNSWKAZFASRNG-WNFIKIDCSA-N",
    "cid": 66370,
    "form": "hydrate",
    "componentRef": "inchikey:OSNSWKAZFASRNG-WNFIKIDCSA-N",
    "comparedRef": "inchikey:OSNSWKAZFASRNG-WNFIKIDCSA-N",
    "converted": "monohydrate",
    "molarMass": null
   }
  },
  {
   "id": "methanol-mass",
   "description": "Methanol at 0.79 g/mL.",
   "substrate": "methanol",
   "components": [
    {
     "name": "Methanol",
     "amount": {
      "value": 0.79,
      "unit": "g/mL"
     },
     "compoundRef": "inchikey:OKKJLVBELUTLKV-UHFFFAOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 790.0,
    "valueDigits": "7.90000000000000000000000000000e2",
    "index": 0,
    "name": "Methanol",
    "key": "OKKJLVBELUTLKV-UHFFFAOYSA-N",
    "cid": 887,
    "form": "match",
    "componentRef": "inchikey:OKKJLVBELUTLKV-UHFFFAOYSA-N",
    "comparedRef": "inchikey:OKKJLVBELUTLKV-UHFFFAOYSA-N",
    "converted": "unit",
    "molarMass": null
   }
  },
  {
   "id": "methanol-molar",
   "description": "Methanol at 10 M, times 32.042 g/mol.",
   "substrate": "methanol",
   "components": [
    {
     "name": "Methanol",
     "amount": {
      "value": 10,
      "unit": "M"
     },
     "compoundRef": "inchikey:OKKJLVBELUTLKV-UHFFFAOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 320.42,
    "valueDigits": "3.20420000000000000000000000000e2",
    "index": 0,
    "name": "Methanol",
    "key": "OKKJLVBELUTLKV-UHFFFAOYSA-N",
    "cid": 887,
    "form": "match",
    "componentRef": "inchikey:OKKJLVBELUTLKV-UHFFFAOYSA-N",
    "comparedRef": "inchikey:OKKJLVBELUTLKV-UHFFFAOYSA-N",
    "converted": "molarity",
    "molarMass": 32.042
   }
  },
  {
   "id": "methanol-by-volume",
   "description": "Methanol at 100 %v/v: volumes do not add.",
   "substrate": "methanol",
   "components": [
    {
     "name": "Methanol",
     "amount": {
      "value": 100,
      "unit": "%v/v"
     },
     "compoundRef": "inchikey:OKKJLVBELUTLKV-UHFFFAOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "unit-not-convertible",
    "index": 0
   }
  },
  {
   "id": "methanol-ml-per-l",
   "description": "Methanol at 12 mL/L.",
   "substrate": "methanol",
   "components": [
    {
     "name": "Methanol",
     "amount": {
      "value": 12,
      "unit": "mL/L"
     },
     "compoundRef": "inchikey:OKKJLVBELUTLKV-UHFFFAOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "unit-not-convertible",
    "index": 0
   }
  },
  {
   "id": "percent-w-w",
   "description": "D-glucose at 50 %w/w.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 50,
      "unit": "%w/w"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "unit-not-convertible",
    "index": 0
   }
  },
  {
   "id": "percent-bare",
   "description": "D-glucose at 50 %.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 50,
      "unit": "%"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "unit-not-convertible",
    "index": 0
   }
  },
  {
   "id": "mass-only",
   "description": "D-glucose given as a mass, 55 g.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 55,
      "unit": "g"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "unit-not-convertible",
    "index": 0
   }
  },
  {
   "id": "zero",
   "description": "D-glucose at 0 g/L.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 0,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "concentration-not-positive",
    "index": 0
   }
  },
  {
   "id": "negative",
   "description": "D-glucose at -5 g/L.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": -5,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "concentration-not-positive",
    "index": 0
   }
  },
  {
   "id": "sf-above-range",
   "description": "D-glucose at 2500 g/L, above Sf's 2000.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 2500,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "concentration-out-of-range",
    "index": 0,
    "target": "sf",
    "value": 2500.0
   }
  },
  {
   "id": "sf-at-limit",
   "description": "D-glucose at 2000 g/L, Sf's limit.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 2000,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 2000.0,
    "valueDigits": "2.00000000000000000000000000000e3",
    "index": 0,
    "name": "D-glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "none",
    "molarMass": null
   }
  },
  {
   "id": "name-only",
   "description": "A component named D-glucose with no compound ref: context.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     }
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": true
   }
  },
  {
   "id": "cas-ref",
   "description": "A CAS number as a ref: not one the rule can read.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "cas:50-99-7"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "ref-not-canonical"
   }
  },
  {
   "id": "lowercase-key",
   "description": "D-glucose's key in lower case.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:wqzgkkkjijffok-gasjemhnsa-n"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "ref-not-canonical"
   }
  },
  {
   "id": "bare-key",
   "description": "D-glucose's key with no namespace.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "ref-not-canonical"
   }
  },
  {
   "id": "trailing-space",
   "description": "D-glucose's ref with a trailing space.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N "
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "ref-not-canonical"
   }
  },
  {
   "id": "first-block-only",
   "description": "The 14-character first block alone.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "ref-not-canonical"
   }
  },
  {
   "id": "protein-ref-beside-match",
   "description": "A protein ref beside a match refuses the recipe.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    },
    {
     "name": "Lysozyme",
     "amount": {
      "value": 1,
      "unit": "g/L"
     },
     "compoundRef": "uniprot:P00698"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "ref-not-canonical"
   }
  },
  {
   "id": "recipe-ref-beside-match",
   "description": "A kept recipe's ref as a compound ref, beside a match.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    },
    {
     "name": "Trace",
     "amount": {
      "value": 1,
      "unit": "g/L"
     },
     "compoundRef": "mine:recipe/00000000-0000-4000-8000-00000000b001"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "ref-not-canonical"
   }
  },
  {
   "id": "chembl-beside-match",
   "description": "A ChEMBL compound ref beside a match: context.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    },
    {
     "name": "Thiamine",
     "amount": {
      "value": 0.01,
      "unit": "g/L"
     },
     "compoundRef": "chembl:CHEMBL1547"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 600.0,
    "valueDigits": "6.00000000000000000000000000000e2",
    "index": 0,
    "name": "D-glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "none",
    "molarMass": null
   }
  },
  {
   "id": "protonation-changed",
   "description": "D-glucose's key with its last character changed.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-O"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "l-glucose",
   "description": "L-glucose (CID 2724488).",
   "substrate": "glucose",
   "components": [
    {
     "name": "L-glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-ZZWDRFIYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "hexose",
   "description": "Hexose, no stereo (CID 206).",
   "substrate": "glucose",
   "components": [
    {
     "name": "Hexose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-UHFFFAOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "monohydrate-no-stereo",
   "description": "'D-Glucose monohydrate' with no stereo (CID 21909914).",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose monohydrate",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:SPFMQWBKVUQXJV-UHFFFAOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "other-hexose-hydrate",
   "description": "Another configuration's hydrate (CID 53393508).",
   "substrate": "glucose",
   "components": [
    {
     "name": "Hexose hydrate",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:SPFMQWBKVUQXJV-WBHXJHRCSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "sucrose",
   "description": "Sucrose.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Sucrose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:CZMRCDWAGMRECN-UGDNZRGBSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "glycerol",
   "description": "Glycerol for a glucose run.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glycerol",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:PEDCQBHIVMGVHV-UHFFFAOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "glucose-for-methanol",
   "description": "D-glucose for a methanol run.",
   "substrate": "methanol",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "stereo-less-beside-match",
   "description": "A stereo-less glucose key beside a match: context, not refused.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 500,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    },
    {
     "name": "Hexose",
     "amount": {
      "value": 50,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-UHFFFAOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 500.0,
    "valueDigits": "5.00000000000000000000000000000e2",
    "index": 0,
    "name": "D-glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "none",
    "molarMass": null
   }
  },
  {
   "id": "two-forms",
   "description": "D-glucose and its alpha pyranose: never summed.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 300,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    },
    {
     "name": "alpha-D-glucose",
     "amount": {
      "value": 200,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-DVKNGEFBSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "several-components-match",
    "names": [
     "D-glucose",
     "alpha-D-glucose"
    ]
   }
  },
  {
   "id": "glucose-and-hydrate",
   "description": "D-glucose and glucose monohydrate: a hydrate counts.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 10,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    },
    {
     "name": "Glucose monohydrate",
     "amount": {
      "value": 5,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:SPFMQWBKVUQXJV-BTVCFUMJSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "several-components-match",
    "names": [
     "D-glucose",
     "Glucose monohydrate"
    ]
   }
  },
  {
   "id": "no-match",
   "description": "Only a salt, identified.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Ammonium sulfate",
     "amount": {
      "value": 5,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:BFNBIHQBYMNNAN-UHFFFAOYSA-N"
    }
   ],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "empty",
   "description": "No components.",
   "substrate": "glucose",
   "components": [],
   "mode": "fed-batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "no-component-matches",
    "unidentified": false
   }
  },
  {
   "id": "feed-in-batch",
   "description": "A feed recipe sent to a batch run.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "feed-needs-fed-batch-run"
   }
  },
  {
   "id": "feed-in-chemostat",
   "description": "A feed recipe sent to a chemostat run.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "chemostat",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "feed-needs-fed-batch-run"
   }
  },
  {
   "id": "no-block-no-target",
   "description": "A medium recipe with no target chosen.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 20,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "batch",
   "feedBlock": false,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "target-not-declared"
   }
  },
  {
   "id": "no-block-s0",
   "description": "A medium recipe applied to S0.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 20,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "batch",
   "feedBlock": false,
   "target": "s0",
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "s0",
    "value": 20.0,
    "valueDigits": "2.00000000000000000000000000000e1",
    "index": 0,
    "name": "D-glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "none",
    "molarMass": null
   }
  },
  {
   "id": "no-block-s0-above-range",
   "description": "A medium recipe at 1200 g/L for S0, above its 1000.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 1200,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "batch",
   "feedBlock": false,
   "target": "s0",
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "concentration-out-of-range",
    "index": 0,
    "target": "s0",
    "value": 1200.0
   }
  },
  {
   "id": "no-block-sf-chemostat",
   "description": "A medium recipe applied to Sf in a chemostat.",
   "substrate": "glucose",
   "components": [
    {
     "name": "D-glucose",
     "amount": {
      "value": 50,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "chemostat",
   "feedBlock": false,
   "target": "sf",
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": true,
    "target": "sf",
    "value": 50.0,
    "valueDigits": "5.00000000000000000000000000000e1",
    "index": 0,
    "name": "D-glucose",
    "key": "WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "cid": 5793,
    "form": "match",
    "componentRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "comparedRef": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "converted": "none",
    "molarMass": null
   }
  },
  {
   "id": "not-ruled",
   "description": "A substrate with no ruled list.",
   "substrate": "glycerol",
   "components": [
    {
     "name": "Glycerol",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "inchikey:PEDCQBHIVMGVHV-UHFFFAOYSA-N"
    }
   ],
   "mode": "batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "identity-not-ruled"
   }
  },
  {
   "id": "order-batch-before-ref",
   "description": "A bad ref in a batch run: the mode refuses first.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "batch",
   "feedBlock": true,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "feed-needs-fed-batch-run"
   }
  },
  {
   "id": "order-target-before-ref",
   "description": "A bad ref with no target: the target refuses first.",
   "substrate": "glucose",
   "components": [
    {
     "name": "Glucose",
     "amount": {
      "value": 600,
      "unit": "g/L"
     },
     "compoundRef": "WQZGKKKJIJFFOK-GASJEMHNSA-N"
    }
   ],
   "mode": "batch",
   "feedBlock": false,
   "target": null,
   "resolve": {
    "mine:compound/00000000-0000-4000-8000-00000000a001": "inchikey:WQZGKKKJIJFFOK-GASJEMHNSA-N",
    "mine:compound/00000000-0000-4000-8000-00000000a003": "mine:compound/00000000-0000-4000-8000-00000000a009"
   },
   "expected": {
    "ok": false,
    "code": "target-not-declared"
   }
  }
 ]
}
