{
 "about": {
  "method": "dna-mass-from-length@1.0.0",
  "recordedOn": "2026-10-21",
  "script": "pipeline/lab-calculators/dna_amounts_length_2_reference.py",
  "scriptSha256": "d103f1015e63a273a7bd99108d16ab2c8215035affdceb2cb90244d7a370d289",
  "source": "The CSO's rulings on the Cloning amounts screens, 21 October 2026, ruling 2 (docs/board/memos/2026-10-21-cso-cloning-screens.md); the residue table, estimate and bounds are dna_amounts_length_reference.py's",
  "display": "Double strands 4 significant figures, single strands 2; half away from zero; scientific notation (× 10 with a superscript exponent) when the integer part has more digits than the figures; otherwise en-GB grouping. The 650 Da per bp figure in the same notation; none for single strands.",
  "limits": {
   "single": "Estimated from length, assuming equal base composition; a single strand's weight varies with its sequence by up to about 7 percent; free acid, not the sodium salt.",
   "linearEnds": "Linear ends are taken as 5′-OH; a 5′-phosphate, as left by a restriction enzyme, adds about 80 g/mol per strand."
  },
  "tolerances": {
   "values": "within 1e-9 relative",
   "display": "exact strings",
   "refusals": "exact"
  },
  "bounds": "A weight on its bound is accepted, with a relative slack of at most 1e-12 for double rounding; one part in 10⁹ outside is refused."
 },
 "oracle": {
  "name": "Python fractions and decimal",
  "version": "3.13.16"
 },
 "count": 49,
 "recordedOn": "2026-10-21",
 "cases": [
  {
   "name": "display-puc19",
   "about": "2,686 bp double-stranded circular: 1.660 × 10⁶ g/mol (the CSO's example)",
   "kind": "display",
   "input": {
    "length": 2686,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH",
    "significantFigures": 4,
    "ng": 1000
   },
   "expected": {
    "mw": 1659676.714,
    "mwDisplay": "1.660 × 10⁶",
    "rule650Display": "1.746 × 10⁶",
    "pmol": 0.6025269810467437,
    "pmolDisplay": "0.6025"
   }
  },
  {
   "name": "display-ds-linear",
   "about": "1,500 bp double-stranded linear, 5′-OH",
   "kind": "display",
   "input": {
    "length": 1500,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "significantFigures": 4,
    "ng": 50
   },
   "expected": {
    "mw": 926724.572,
    "mwDisplay": "9.267 × 10⁵",
    "rule650Display": "9.750 × 10⁵",
    "pmol": 0.0539534631007928,
    "pmolDisplay": "0.05395"
   }
  },
  {
   "name": "display-ds-short",
   "about": "10 bp double-stranded linear: below 10⁴, a plain decimal",
   "kind": "display",
   "input": {
    "length": 10,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "significantFigures": 4
   },
   "expected": {
    "mw": 6055.062,
    "mwDisplay": "6,055",
    "rule650Display": "6,500"
   }
  },
  {
   "name": "display-ds-50000",
   "about": "50,000 bp double-stranded circular",
   "kind": "display",
   "input": {
    "length": 50000,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH",
    "significantFigures": 4,
    "ng": 1000
   },
   "expected": {
    "mw": 30894950.0,
    "mwDisplay": "3.089 × 10⁷",
    "rule650Display": "3.250 × 10⁷",
    "pmol": 0.03236774942183108,
    "pmolDisplay": "0.03237"
   }
  },
  {
   "name": "display-ss-20",
   "about": "20 nt single-stranded linear: 6.1 × 10³ g/mol, 2 significant figures, no 650 sentence",
   "kind": "display",
   "input": {
    "length": 20,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "OH",
    "significantFigures": 2,
    "ng": 100
   },
   "expected": {
    "mw": 6117.026,
    "mwDisplay": "6.1 × 10³",
    "rule650Display": null,
    "pmol": 16.34781346360143,
    "pmolDisplay": "16"
   }
  },
  {
   "name": "display-ss-short",
   "about": "3 nt single-stranded linear: 8.6 × 10², scientific because three integer digits exceed two figures",
   "kind": "display",
   "input": {
    "length": 3,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "OH",
    "significantFigures": 2
   },
   "expected": {
    "mw": 864.8845,
    "mwDisplay": "8.6 × 10²",
    "rule650Display": null
   }
  },
  {
   "name": "display-ss-m13",
   "about": "7,249 nt single-stranded circular",
   "kind": "display",
   "input": {
    "length": 7249,
    "strands": "single",
    "topology": "circular",
    "fivePrime": "OH",
    "significantFigures": 2,
    "ng": 100
   },
   "expected": {
    "mw": 2239574.9255,
    "mwDisplay": "2.2 × 10⁶",
    "rule650Display": null,
    "pmol": 0.04465133042051466,
    "pmolDisplay": "0.045"
   }
  },
  {
   "name": "homopolymer-double-circular-A",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "A x 30",
    "mw": 18522.15
   },
   "expected": {
    "accepted": true,
    "onBound": "lower"
   }
  },
  {
   "name": "homopolymer-double-circular-A-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "A x 30, one part in 10⁹ past the bound",
    "mw": 18522.14998147785
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-circular-C",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "C x 30",
    "mw": 18551.79
   },
   "expected": {
    "accepted": true,
    "onBound": "upper"
   }
  },
  {
   "name": "homopolymer-double-circular-C-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "C x 30, one part in 10⁹ past the bound",
    "mw": 18551.79001855179
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-circular-G",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "G x 30",
    "mw": 18551.79
   },
   "expected": {
    "accepted": true,
    "onBound": "upper"
   }
  },
  {
   "name": "homopolymer-double-circular-G-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "G x 30, one part in 10⁹ past the bound",
    "mw": 18551.79001855179
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-circular-T",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "T x 30",
    "mw": 18522.15
   },
   "expected": {
    "accepted": true,
    "onBound": "lower"
   }
  },
  {
   "name": "homopolymer-double-circular-T-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "T x 30, one part in 10⁹ past the bound",
    "mw": 18522.14998147785
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-linear-OH-A",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "A x 30",
    "mw": 18398.222
   },
   "expected": {
    "accepted": true,
    "onBound": "lower"
   }
  },
  {
   "name": "homopolymer-double-linear-OH-A-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "A x 30, one part in 10⁹ past the bound",
    "mw": 18398.22198160178
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-linear-OH-C",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "C x 30",
    "mw": 18427.862
   },
   "expected": {
    "accepted": true,
    "onBound": "upper"
   }
  },
  {
   "name": "homopolymer-double-linear-OH-C-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "C x 30, one part in 10⁹ past the bound",
    "mw": 18427.862018427862
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-linear-OH-G",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "G x 30",
    "mw": 18427.862
   },
   "expected": {
    "accepted": true,
    "onBound": "upper"
   }
  },
  {
   "name": "homopolymer-double-linear-OH-G-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "G x 30, one part in 10⁹ past the bound",
    "mw": 18427.862018427862
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-linear-OH-T",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "T x 30",
    "mw": 18398.222
   },
   "expected": {
    "accepted": true,
    "onBound": "lower"
   }
  },
  {
   "name": "homopolymer-double-linear-OH-T-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "T x 30, one part in 10⁹ past the bound",
    "mw": 18398.22198160178
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-linear-phosphate-A",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "A x 30",
    "mw": 18558.18
   },
   "expected": {
    "accepted": true,
    "onBound": "lower"
   }
  },
  {
   "name": "homopolymer-double-linear-phosphate-A-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "A x 30, one part in 10⁹ past the bound",
    "mw": 18558.17998144182
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-linear-phosphate-C",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "C x 30",
    "mw": 18587.82
   },
   "expected": {
    "accepted": true,
    "onBound": "upper"
   }
  },
  {
   "name": "homopolymer-double-linear-phosphate-C-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "C x 30, one part in 10⁹ past the bound",
    "mw": 18587.82001858782
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-linear-phosphate-G",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "G x 30",
    "mw": 18587.82
   },
   "expected": {
    "accepted": true,
    "onBound": "upper"
   }
  },
  {
   "name": "homopolymer-double-linear-phosphate-G-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "G x 30, one part in 10⁹ past the bound",
    "mw": 18587.82001858782
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-double-linear-phosphate-T",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "T x 30",
    "mw": 18558.18
   },
   "expected": {
    "accepted": true,
    "onBound": "lower"
   }
  },
  {
   "name": "homopolymer-double-linear-phosphate-T-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "T x 30, one part in 10⁹ past the bound",
    "mw": 18558.17998144182
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-single-circular-A",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "A x 30",
    "mw": 9396.3
   },
   "expected": {
    "accepted": true,
    "onBound": "inside"
   }
  },
  {
   "name": "homopolymer-single-circular-C",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "C x 30",
    "mw": 8675.52
   },
   "expected": {
    "accepted": true,
    "onBound": "lower"
   }
  },
  {
   "name": "homopolymer-single-circular-C-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "C x 30, one part in 10⁹ past the bound",
    "mw": 8675.51999132448
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-single-circular-G",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "G x 30",
    "mw": 9876.27
   },
   "expected": {
    "accepted": true,
    "onBound": "upper"
   }
  },
  {
   "name": "homopolymer-single-circular-G-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "G x 30, one part in 10⁹ past the bound",
    "mw": 9876.27000987627
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-single-circular-T",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "circular",
    "fivePrime": null,
    "sequence": "T x 30",
    "mw": 9125.85
   },
   "expected": {
    "accepted": true,
    "onBound": "inside"
   }
  },
  {
   "name": "homopolymer-single-linear-OH-A",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "A x 30",
    "mw": 9334.336
   },
   "expected": {
    "accepted": true,
    "onBound": "inside"
   }
  },
  {
   "name": "homopolymer-single-linear-OH-C",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "C x 30",
    "mw": 8613.556
   },
   "expected": {
    "accepted": true,
    "onBound": "lower"
   }
  },
  {
   "name": "homopolymer-single-linear-OH-C-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "C x 30, one part in 10⁹ past the bound",
    "mw": 8613.555991386444
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-single-linear-OH-G",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "G x 30",
    "mw": 9814.306
   },
   "expected": {
    "accepted": true,
    "onBound": "upper"
   }
  },
  {
   "name": "homopolymer-single-linear-OH-G-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "G x 30, one part in 10⁹ past the bound",
    "mw": 9814.306009814307
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-single-linear-OH-T",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "OH",
    "sequence": "T x 30",
    "mw": 9063.886
   },
   "expected": {
    "accepted": true,
    "onBound": "inside"
   }
  },
  {
   "name": "homopolymer-single-linear-phosphate-A",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "A x 30",
    "mw": 9414.315
   },
   "expected": {
    "accepted": true,
    "onBound": "inside"
   }
  },
  {
   "name": "homopolymer-single-linear-phosphate-C",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "C x 30",
    "mw": 8693.535
   },
   "expected": {
    "accepted": true,
    "onBound": "lower"
   }
  },
  {
   "name": "homopolymer-single-linear-phosphate-C-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "C x 30, one part in 10⁹ past the bound",
    "mw": 8693.534991306466
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-single-linear-phosphate-G",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "G x 30",
    "mw": 9894.285
   },
   "expected": {
    "accepted": true,
    "onBound": "upper"
   }
  },
  {
   "name": "homopolymer-single-linear-phosphate-G-outside",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "G x 30, one part in 10⁹ past the bound",
    "mw": 9894.285009894285
   },
   "expected": {
    "accepted": false,
    "problem": "mw-out-of-bounds"
   }
  },
  {
   "name": "homopolymer-single-linear-phosphate-T",
   "kind": "homopolymer",
   "input": {
    "length": 30,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "phosphate",
    "sequence": "T x 30",
    "mw": 9143.865
   },
   "expected": {
    "accepted": true,
    "onBound": "inside"
   }
  }
 ]
}
