This page records the exact corpus and comparison boundary behind COSMolKit's
RDKit parity claims. RDKit 2026.03.1 is the current chemistry reference. A
feature is parity-covered only at the boundary listed here. Separate upstream
APIs outside that boundary are not claimed as implemented.
This scope distinction never permits a mismatching row inside a covered
boundary to be reclassified as unsupported.
The three corpus tiers are separate evidence sets. Their names must not be used interchangeably in tests or documentation.
| Tier | Corpus | Records | Primary use |
|---|---|---|---|
| Project small | testdata/smiles/corpus/smiles_small.smi |
152 | Fast daily parity, focused source-port regressions, and high-detail state checks |
| Maintained strict | testdata/smiles/corpus/smiles_5000.smi |
5,000 | Committed exhaustive profile matrices for surfaces not yet audited over ChEMBL 37 |
| Large stress | ChEMBL 37 structure table | 2,897,819 source; 2,897,804 mutually parseable | Large-scale parity, operation-order, batch, and concurrent-read stress auditing |
The complete ChEMBL 37 evidence inventory contains the 22-phase chemistry, composition, batch, and concurrency audit; the complete modern CIPLabeler, ordinary MolAlign, RDKFingerprint/Avalon, AtomPair, Pattern, Topological Torsion, Layered fingerprint, tautomer, and potential-stereo/stereoisomer enumeration audits; and the 15-phase execution recorded below. The chemistry/composition audit contains 2,816 tasks over 128 corpus shards, while the nine complete independent audit phases add 1,152 tasks over the same shards. Phases with a configured atom-count boundary evaluate 2,854,362 eligible records. Large subset phases select their stated number of records from the same ChEMBL 37 source; they are not separate corpora.
The repository-owned preparation, phase definitions, resumable runner, result
identity, and acceptance procedure are documented in
dev/tools/chembl_parity/README.md. The
current complete.json profile preserves the completed phases, adds four
configured phases for topology operations, fragments, direct 2D coordinates,
and binary roundtrips, and includes modern CIPLabeler, ordinary MolAlign, the
five complete fingerprint audit phases, tautomer enumeration, and
stereoisomer enumeration. The extended profile contains 35 phases and 4,480
shard tasks. The consolidated validation covers all additions over their
complete configured ChEMBL boundaries. Modern CIPLabeler, ordinary MolAlign,
fragments, direct 2D coordinates, topology operations, binary roundtrips,
tautomer enumeration, and stereoisomer enumeration each have a complete
accepted result with zero mismatch. The summary below reports this final
evidence boundary.
Corpus shards and run outputs remain uncommitted; code, profiles, source and
reference pins, and pass/fail rules are version controlled.
The complete ChEMBL 37 tautomer matrix processes all 2,897,819 inputs across 128 shards and covers 211,539,707 exact output and molecular-state observations. The accepted result has zero mismatch across parse behavior and all eight configured enumeration profiles.
The complete-corpus result is closed by exhaustive post-correction verification of every source row implicated during alignment and a deterministic 524,288-record regression selected across all 128 corpus shards. The cross-shard regression executes the same complete branch matrix and verifies that the source-level corrections preserve the previously matching corpus surface. Focused fixtures independently lock every discovered source boundary.
The consolidated validation record combines the 22-phase audit, the complete
modern CIPLabeler, ordinary MolAlign, RDKFingerprint/Avalon, AtomPair, Pattern,
Topological Torsion, Layered fingerprint, tautomer, and stereoisomer-enumeration
audits, and the 15-phase execution. The 15-phase execution used COSMolKit
0.2.12, pinned RDKit 2026.03.1, the same 2,897,819-record ChEMBL 37 source,
128 corpus shards, and 112 workers. All 15 phases and all 1,920 shard tasks
completed; every result artifact and checksum was independently revalidated.
Together with the nine independent complete audits, the consolidated evidence
table records 4,176,585,416 matching checks and zero blocking mismatch. Bounds
additionally traversed 2,757,910,995 matrix entries.
The first 15 rows summarize the consolidated chemistry and composition execution. The final nine rows are independent complete modern CIPLabeler, ordinary MolAlign, fingerprint, tautomer, and stereoisomer-enumeration audits over the same ChEMBL 37 source.
| Phase or independent audit | Records evaluated | Matching checks | Blocking mismatches | Status |
|---|---|---|---|---|
| Descriptors | 2,897,819 source; 2,897,804 mutually parseable | 987,273,647 | 0 | Pass |
| Morgan/MACCS | 2,897,819 | 89,831,720 | 0 | Pass |
| Explicit hydrogen | 2,854,362 | 11,417,448 | 0 | Pass |
| Topology operations | 2,854,376 | 45,669,848 | 0 | Pass |
| Connected fragments | 2,854,362 | 5,852,676 | 0 | Pass |
| Direct 2D coordinates | 2,854,362 | 14,271,810 | 0 | Pass |
| Binary roundtrip | 524,288 | 11,534,336 | 0 | Pass |
| Bounds | 2,854,362 | 2,854,362 | 0 | Pass |
| InChI parse branches | 2,854,362 | 11,417,448 | 0 | Pass |
| SMILES matrix | 2,854,362 | 2,192,150,016 | 0 | Pass |
| Final SVG | 2,854,362 | 2,854,362 | 0 | Pass |
| Molecular I/O | 524,288 | 12,559,920 | 0 | Pass |
| Scalar/batch composition | 1,027,660 | 20,561,265 | 0 | Pass |
| Fixed-seed conformer outcome | 524,288 | 524,288 | 0 | Pass |
| UFF/MMFF force fields | 524,288 | 3,139,761 | 0 | Pass |
| Modern CIPLabeler | 2,854,362 compared; 15 parser rejects; 43,442 over 80 atoms | 11,417,448 | 0 | Pass |
| Ordinary MolAlign and RMSD | 2,854,362 compared; 15 parser rejects; 43,442 over 80 atoms | 11,417,207 | 0 | Pass |
| RDKFingerprint/Avalon fingerprints | 2,897,819 source; 2,897,804 compared | 113,014,356 | 0 | Pass |
| AtomPair fingerprints | 2,897,819 source; 2,897,804 compared | 118,809,964 | 0 | Pass |
| Pattern fingerprints | 2,897,819 source; 2,897,804 compared | 28,978,040 | 0 | Pass |
| Topological Torsion fingerprints | 2,897,819 source; 2,897,804 compared | 127,503,376 | 0 | Pass |
| Layered fingerprints | 2,897,819 source; 2,897,804 compared | 52,160,472 | 0 | Pass |
| Tautomer enumeration | 2,897,819 source | 211,539,707 | 0 | Pass |
| Potential stereo and stereoisomer enumeration | 2,897,819 source; 2,897,804 accepted by both parsers | 89,831,939 | 0 | Pass |
The topology phase covers the RemoveHs(sanitize=false) value and in-place
branches, including RDKit's non-strict property-cache update before removal
and the surviving explicit-valence and implicit-H fields afterward. COSMolKit
migrates those cache rows through the declared topology mapping. The complete
128-shard result processed 2,854,376 records and produced 45,669,848 exact
matches with no mismatch or finding.
The binary phase requires validated valence, ring, aromaticity, and stereo state to survive both public deserialization entrypoints while preserving legacy and archive-v1.0 read compatibility. The complete configured boundary produced 11,534,336 matches and no mismatch or finding across 524,288 records.
The immutable identity and detailed acceptance record are in
dev/gap_reports/chembl37_complete_validation_summary_20260820.md.
The run validates the recorded extension and start-of-run repository snapshot.
Later uncommitted working-tree changes require a rebuilt extension and a new
identity before they can inherit this evidence.
The comparison count is the number of output values, states, matrices, or matrix entries actually compared, not merely the number of input molecules.
| Surface | Corpus | Records evaluated | Profiles or output branches | Comparisons |
|---|---|---|---|---|
| Core graph and default scalar APIs | ChEMBL 37 | 2,897,804 | 9 | 26,080,236 |
| Molecular descriptors | ChEMBL 37 | 2,897,804 | 29 established outputs + complete high-feasibility scalar/vector/contribution/cache matrix | 987,273,647 |
| Morgan and MACCS fingerprints | ChEMBL 37 | 2,897,804 | 31 configured | 89,831,720 completed |
| Topological Torsion fingerprints | ChEMBL 37 | 2,897,804 | 36 vectors + 8 provenance outputs | 127,503,376 |
| Layered fingerprints | ChEMBL 37 | 2,897,804 | 18 complete bit/count result profiles | 52,160,472 |
| Explicit-hydrogen graph/state | ChEMBL 37 | 2,854,362 | 4 | 11,417,448 |
| Distance-geometry bounds | ChEMBL 37 | 2,854,362 matrices | every matrix entry | 2,757,910,995 entries |
| InChI parse branches | ChEMBL 37 | 2,854,362 | 4 | 11,417,448 |
| InChI writer options and keys | ChEMBL 37 | 2,854,362 | 10 options x 2 outputs | 57,087,240 |
| SMILES writer matrix | ChEMBL 37 | 2,854,362 | 768 | 2,192,150,016 per run; 3 runs |
| Final SVG | ChEMBL 37 | 2,854,362 | 1 | 2,854,362 |
| MolBlock/SDF I/O | ChEMBL 37 subset | 524,288 | 16 writer + 8 state/coordinate | 12,559,920 completed |
| Scalar operation-order composition | ChEMBL 37 subset | 516,650 | 4 orders x 12 surfaces | 24,799,200 |
| Scalar-versus-batch execution | ChEMBL 37 subset | 1,027,660 | 2 job counts x 6 outputs | 12,331,920 |
| Shared-object concurrent reads | ChEMBL 37 subset | 64,524 | 16 values + 16 graph states | 2,064,768 per run; 2 runs |
| Fixed-seed conformer outcome | ChEMBL 37 subset | 524,288 | coordinate or matching failure status | 524,288 |
| UFF/MMFF parameter and optimizer paths | ChEMBL 37 subset | 516,096 | 4 parameter + 2 optimizer | 3,090,706 completed |
| RDKFingerprint/topological | ChEMBL 37 | 2,897,804 | 14 vectors + 2 provenance outputs | 46,364,864 |
| Avalon explicit-bit | ChEMBL 37 | 2,897,804 | 23 | 66,649,492 |
| AtomPair | ChEMBL 37 | 2,897,804 | 40 vectors + 1 provenance output | 118,809,964 |
| Pattern | ChEMBL 37 | 2,897,804 | 10 complete vectors | 28,978,040 |
| Modern CIPLabeler | ChEMBL 37 | 2,854,362 | full, selected atom, selected bond, empty selection | 11,417,448 |
| Ordinary MolAlign and RMSD | ChEMBL 37 | 2,854,362 | 6 rotated call families; transforms, maps, RMSD, coordinates, order, immutability | 11,417,207 |
| Tautomer enumeration | ChEMBL 37 | 2,897,819 | parse + 8 complete enumeration profiles | 211,539,707 |
| Potential stereo and stereoisomer enumeration | ChEMBL 37 | 2,897,819 source; 2,897,804 compared | 4 potential-stereo + 4 bounded enumeration profiles | 89,831,939 |
Except for the separately identified modern CIPLabeler, ordinary MolAlign, RDKFingerprint, Avalon, AtomPair, Pattern, Topological Torsion, Layered, tautomer, and stereoisomer-enumeration rows, the ChEMBL 37 figures above are the complete chemistry/composition audit counters. The acceptance model combines that full-corpus breadth with exact source-regression matrices for every covered branch: 10 descriptor rows, 3,092 fingerprint rows, one explicit-hydrogen row, 180 bounds matrices with 308,734 entries, 50 InChI rows with 200 parse-branch comparisons, 108 SMILES rows with 82,944 writer comparisons, 441 SVG rows, 160 I/O rows with 2,560 writer comparisons, seven conformer rows, and 262 force-field rows. Every listed regression matrix has exact pinned-RDKit agreement; no percentage threshold or unexplained mismatch is accepted. RDKFingerprint, Avalon, AtomPair, Pattern, Topological Torsion, Layered, and tautomer enumeration additionally have complete current full-corpus evidence.
The project-native value API covers typed, source-ordered potential-stereo
records and the pinned RDKit Python EnumerateStereoisomers behavior. Four
potential-stereo profiles span both cleanup and possible-center switches. Four
enumeration profiles cover default bounded output, assigned-center inclusion,
non-unique output, and deterministic seeded random generation. Comparisons
include parse acceptance, ordered records, affected molecule state,
theoretical counts, bounded flags, ordered full output state, source
preservation, and parser-rejection outcomes.
The complete 128-shard ChEMBL 37 execution processed all 2,897,819 records and fully compared 2,897,804 rows accepted by both parsers. The remaining 15 rows were rejected by both parsers at parse entry. It produced 89,831,939 exact observations with no blocking, informational, or other mismatch. Focused source fixtures, the 152-record project corpus, and the maintained 5,000-record corpus additionally cover option defaults, enhanced groups, random draw sequences, arbitrary-width counts, uniqueness, iterator errors, embedding outcomes, and full-state regressions. This boundary is the Python enumerator; it does not claim the separate newer C++ enumerator or atropisomer enumeration.
The 3,480 archived ChEMBL reference InChIs and 3,480 archived reference InChIKeys that differ from the current result are corpus-version differences: COSMolKit agrees with pinned RDKit on those rows. They are not COSMolKit parity failures.
The core graph comparison covers atom identity, charge, degree, hydrogens, radicals, hybridization, aromaticity, ring membership, bond type, bond stereo, conjugation, CIP rank/code, atom count, and bond count. The ChEMBL core phase also compares default SMILES and the four default InChI scalar surfaces. The explicit-hydrogen phase separately compares atom state, bond state, atom count, and bond count after the transform.
The 768-profile matrix is the Cartesian expansion of isomeric, kekule, canonical, clean-stereo, explicit-bond, explicit-H, dative-bond, and atom-map-ignore switches, with rooted output for no root, first atom, and last atom. Canonicalized SMILES are compared directly in canonical branches. The matrix was run three times to distinguish deterministic source differences from execution instability. Upstream writer options not enumerated by this matrix are separate capabilities outside the current parity claim; every enumerated branch remains subject to the zero-mismatch rule.
The four public scalar APIs are Molecule.to_inchi(),
Molecule.to_inchi_key(), top-level inchi_to_key(), and
Molecule.from_inchi(). Comparisons cover official return fields, diagnostics,
graph atom/bond/stereo/isotope/H/charge/radical state, ten writer option
profiles, cleanup, malformed input, source preservation, and concurrent calls.
Exact parity applies where official InChI v1.07.5 and RDKit 2026.03.1 define
behavior. The official NormalizeAndCompare initial-buffer allocation-failure
path is undefined C behavior; Rust returns a deterministic structured
allocation_failed error. MolBlock, SDF/V3000, IXA, AuxInfo, INCHIGEN, version
query, and extended-polymer APIs are separate upstream surfaces outside the
four-scalar-API claim.
The established 29 ChEMBL branches cover molecular weight, exact molecular weight, formula variants, H-bond donor/acceptor counts, fraction Csp3, Crippen LogP/MR option branches, TPSA with and without S/P contributions and force recomputation, aromatic-ring count, four rotatable-bond modes, and QED.
The complete high-feasibility matrix adds connectivity Chi orders 0 through 6, fixed valence and principal-quantum Chi projections, Hall-Kier alpha and atom contributions, Kappa/Phi, direct Lipinski and ring/stereo counts, every entry of the 42-component MQN vector, Labute ASA and atom/H contributions, and every default or custom SlogP/SMR VSA bin. It separately compares cold, warm, forced, and mixed-order cache results. These additions contribute 903,237,331 exact ChEMBL observations beyond the 84,036,316 established descriptor comparisons.
| Descriptor evidence | Input records | Mutually parseable records | Exact observations | Mismatches |
|---|---|---|---|---|
| Focused behavioral fixtures | 69 | 69 | 17,265 | 0 |
| Project small corpus | 152 | 140 | 40,224 | 0 |
| Maintained 5,000-row corpus | 5,000 | 5,000 | 1,588,749 | 0 |
| ChEMBL 37 | 2,897,819 | 2,897,804 | 903,237,331 | 0 |
Every finite floating-point leaf uses exact IEEE-754 binary64-bit comparison;
integer and string outputs use exact equality. Contribution arrays preserve
atom order, vectors compare every entry, and paired parser rejections do not
enter the descriptor-observation count. QED is pinned to
RDKit 2026.03.1 + CPython 3.13.12 because RDKit delegates reductions to
Python sum() and older CPython versions use a different floating-point
reduction algorithm. The implementation boundary and reproduction commands
are recorded in the descriptor validation report.
The tautomer audit compares parser acceptance and eight source-defined enumeration profiles: default and V1 catalogs, one-tautomer and one-transform limits, retained tetrahedral stereo, retained double-bond stereo, retained isotopic hydrogens, and disabled stereo reassignment. Every successful branch compares the ordered tautomer SMILES, complete molecule states, enumeration status, modified atom and bond sets, per-tautomer scores, canonical tautomer SMILES, and canonical molecule state; error outcomes are compared exactly.
The final source alignment preserves RDKit's separate legacy and modern tetrahedral-center predicates, ring-stereo cleanup order, canonical-writer traversal gate, and connected-component computed-property lifecycle. These are shared chemistry and writer paths rather than corpus-local tautomer branches. The focused fixture set locks each boundary, and the deterministic cross-shard regression covers all eight profiles over 524,288 ChEMBL 37 records.
The modern CIPLabeler audit uses the reproducible ChEMBL runner and the same 128 deterministic corpus shards as the other complete audits. Each of the 2,854,362 eligible records is compared after full assignment, selected-atom assignment, selected-bond assignment, and empty-selection dispatch. All 11,417,448 comparisons match pinned RDKit exactly; all 128 shards completed with zero mismatch or retained finding. Fifteen source records are rejected by both parsers, and 43,442 accepted records exceed the phase's configured 80-atom boundary.
Each comparison includes success or exact error state, molecule
_CIPComputed, atom and bond _CIPCode and _CIPNeighborOrder, atom
_CIPRank, computed-property membership, chiral tags, bond stereo, and stereo
atoms. The pinned source boundary covers tetrahedral, double-bond, and
atropisomeric configurations constructed by findConfigs; descriptor families
outside that dispatcher are separate capabilities. The immutable result and
reproduction command are recorded in the modern CIPLabeler validation
report.
The ordinary MolAlign audit rotates alignment-transform, best-alignment,
coordinate-frame RMSD, explicit value-style alignment, all-conformer best-RMS,
and conformer-alignment calls across stable ChEMBL row numbers. It compares
RMSD values and complete 4x4 transforms to 1e-8, atom maps and conformer-pair
order exactly, changed coordinates to 1e-8, and complete source/reference
coordinate snapshots for immutability.
All 2,854,362 eligible molecules produced 11,417,207 matching checks with zero mismatch across 128/128 shards. Fifteen source rows were rejected by both parsers and 43,442 accepted rows exceeded the configured 80-atom boundary. Focused, 152-row, and explicit exhaustive 5,000-row gates additionally cover weights, reflection, iteration limits, sparse conformer IDs, map validation, terminal-group symmetry, structured errors, and exact mutation separation. The MolAlign validation report records the source boundary and reproduction commands. O3A and its MMFF/Crippen scoring path are separate capabilities and are not included in ordinary MolAlign.
Morgan compares 15 parameter profiles as both the main vector and
AdditionalOutput; MACCS adds one output branch. The large-run counter omits
102 rows from each of two custom-bond-invariant output counters because of an
audit-harness accounting gap, not an accepted mismatch. Exact source
regressions cover both affected branches. The selected boundary is documented
in the Morgan/MACCS validation report.
RDKFingerprint comparisons include vector width, the complete on-bit set,
atomBits, and bitInfo. Avalon compares complete explicit-bit vectors across
23 profiles. Their combined 128-shard audit completed with zero mismatch or
failed task. Family-specific boundaries and reproducibility identities are in
the RDKFingerprint
and Avalon validation
reports.
AtomPair compares sparse-count, folded-count, sparse-bit, and explicit-bit
outputs. Its ten profiles cover chirality, count simulation and bounds,
distance bounds, atom selection and exclusion, custom atom invariants, and
numBitsPerFeature; the provenance profile compares atom-to-bit, atom-count,
and bit-info mappings. The source-aligned implementation also covers 2D and 3D
distance-cache reuse, conformer keys, invalidation, and concurrent cold/warm
reads. The full audit has zero mismatch, invalid profile, or retained finding;
details are in the AtomPair validation report.
The Pattern boundary is pinned to RDKit 2026.03.1 revision
351f8f378f8ad6bbd517980c38896e66bf907af8 and its 13 built-in Pattern SMARTS
queries in source order. The ChEMBL 37 execution completed all 128/128
deterministic shards against corpus SHA-256
ea6181ce8dc7af41974e35b92e1febb0c9dcbe2c62f7ccc4a5d983ac19f696e7.
Pattern compares exact width and the complete ordered on-bit set for default, tautomeric, widths 1 and 127, a collision-heavy seven-bit tautomeric profile, zeroed and pre-populated atom-count inputs, and all-zero, all-one, and sparse set-only masks. The latter two source arguments are size-validated but observably inert in the pinned ordinary overload; the port preserves that behavior instead of implementing the stale header description.
All 2,897,804 mutually parseable ChEMBL 37 records match across all ten
profiles, totaling 28,978,040 exact comparisons with zero mismatch. Focused,
small, and maintained 5,000-row gates use 11 branches because they additionally
execute the deterministic wrong-width setOnlyBits precondition error. They
also cover query-bearing graphs, validation errors, source screening
regressions, exact match-derived intermediates, scalar/batch composition, and
concurrent compile-once cache reuse. RDKit's MolBundle intersection overload
is outside COSMolKit's ordinary molecule and ordered batch model. Behavioral
parity is complete for the stated boundary, while the measured
1.508-3.104x warm runtime ratio is reported without claiming performance
parity. Details are in the Pattern validation
report.
Topological Torsion is distinct from the RDKFingerprint path/subgraph family. Its modern and legacy boundary covers live options, selections, chirality, path behavior, JSON, collisions, structured errors, and all four vector forms. Requested provenance compares atom counts, atom-to-bits, bit paths, atoms-per-bit, and the source-defined empty bit-info map.
Focused state tests additionally cover dynamic unfolded widths, zero live
numBitsPerFeature, empty live count bounds, zero live folded size, query and
dative graphs, hypervalent sulfur, explicit hydrogens, and the legacy boron
endpoint correction. Fingerprinting reads the source explicit-valence cache;
with_hydrogens() commits the source-defined transition needed by both modern
and legacy calls. The complete audit has zero mismatch, invalid profile, or
retained finding; details are in the Topological Torsion validation
report.
Layered fingerprint comparisons cover all six active source layers, active, default, substructure, zero, and inactive-high layer masks, two width/path configurations, branched and rooted-linear paths, rooted branched selections, bit masks, and seeded atom counts. Every successful profile compares the exact fingerprint width, complete ordered on-bit set, and complete optional atom-count vector. The complete 128-shard ChEMBL 37 audit evaluated all 18 profiles for every mutually parseable row, totaling 52,160,472 exact comparisons with zero mismatch, invalid profile, or retained finding; details and immutable run identity are in the Layered validation report.
Pinned RDKit's unrooted-linear call passes atom paths into code that consumes bond paths and can terminate the process. COSMolKit does not reproduce that crash: it returns the bond-path result documented by the source API and used by the valid rooted-linear branch. This process-safety difference is excluded from, rather than counted as part of, the zero-mismatch total.
Fingerprint families remain separate parity boundaries even when they share vector, hashing, distance, or generator infrastructure. Complete fingerprint audits process all 2,897,819 ChEMBL 37 source records: 2,897,804 are mutually parseable and 15 are rejected by both libraries.
The maintained 5,000-row gates consume all 14 RDKFingerprint, 23 Avalon, ten AtomPair, 11 Pattern branches, nine Topological Torsion, and 18 Layered profiles. Each active profile defines the vector forms and provenance it claims. Comparisons use exact equality, deterministic ordered collection, and validated manifests; there is no sampling, tolerance, skipped mismatch, approximate vector, similarity threshold, fallback fingerprint, or runtime RDKit dependency. Run identities and aggregate checksums remain in the linked validation reports instead of being repeated in this scope summary.
Bounds comparisons cover matrix shape and every lower/upper entry, including
topology, ring, macrocycle, amide, VDW, and triangle-smoothing effects. Entry
tolerance is 1e-8.
Conformer comparisons fix seeds and execution conditions. They cover
DG/KDG/ETDG/ETKDG presets, single-thread execution, random-coordinate
embedding, coordMap, custom pairwise terms, bounds-matrix handling,
timeout/max-iteration controls, multi-conformer generation, and sequential seed
policy. The ChEMBL subset produced 421,217 coordinate-bearing outcomes and
103,071 matching failure statuses. Successful seeded coordinates use a 1e-6
tolerance.
The ChEMBL force-field subset compares UFF/MMFF parameter availability with and
without explicit hydrogens plus optimizer outcomes. The project small tier also
contains 150 curated cases that compare seeded initial coordinates, initial
energy, every gradient component, single- and multi-conformer optimization,
result codes, final energies, and final coordinates. Energy, gradient, and
coordinate tolerance is 1e-6. Parameter availability over a large corpus is
not presented as equivalent to the curated full-gradient boundary.
MolBlock/SDF writer comparisons cover 16 V2000/V3000 branches over 2D and 3D sources, including stereochemistry, kekulization, SGroups, RGroups, aliases, value lines, and aromatic-bond bookkeeping. Reader comparisons cover topology, atom fields, bond fields, coordinates, marker- and coordinate-derived chirality, delayed sanitize/remove-H paths, and parsed-SMILES checks. This is broad CTAB/SDF coverage, not a claim for every extension.
MOL2 reading is source-ported for the exposed Tripos parser parameters, topology, atom/bond state, 3D coordinates, chirality, CORINA behavior, cleanup-substructure behavior, and SMILES output. XYZ reading compares atom identity, one 3D conformer, coordinates, and the absence of inferred bonds.
Prepared 2D drawing state covers depiction kekulization, chiral-H insertion, wedge bonds, atom order, 2D coordinates, bond order, aromatic flags, and bond directions. Final SVG text is compared after normalizing only tool namespace/prefix metadata. Link-node extraction, StereoGroup masking, atomRegions, and other separately named drawing extensions are outside this SVG boundary. PNG is checked as local SVG rasterization and is not claimed to have RDKit Cairo/Qt bit parity.
Four scalar operation orders each compare 12 named output/state surfaces,
including graph state, explicit hydrogens, bounds, descriptors, Morgan, MACCS,
SMILES, InChI/InChIKey, and SVG. Batch comparisons run add/remove-H, bounds,
Morgan, Morgan AdditionalOutput, SMILES, SVG, raw-graph sanitize, both
kekulize flag branches, and direct 2D coordinates with one and eight jobs while
checking scalar equality and input order. Shared-object tests read the same
molecule concurrently and compare both returned values and graph state; they
do not define separate chemistry semantics.
The extended profile adds strict structural-state comparisons for raw parse and full-state comparisons after sanitize, value and in-place kekulization with both aromatic-flag branches, AddHs followed by RemoveHs with both sanitize branches, connected fragments, and direct 2D coordinate generation. Graph comparisons retain atom valence and hydrogen-cache fields so unsanitized intermediate-state differences cannot be hidden by an equal final SMILES. Value-style calls additionally require the source molecule to remain byte-identical.
The raw topology entrance processes 2,854,376 records with at most 80 atoms. It deliberately includes 14 records outside the ordinary 2,854,362-record sanitized boundary so raw-success/sanitize-rejection parity is exercised.
The binary-roundtrip phase creates 2D coordinates and compares graph state, SMILES, descriptors, hash, fingerprint, coordinates, conformer count, and deterministic reserialization across both public deserialization entrypoints. This is a COSMolKit serialization invariant exercised on ChEMBL structures, not a claim that COSMolKit and RDKit share a binary representation.
The consolidated 15-phase validation covers these four phases across every configured shard with no blocking mismatch. The topology phase passes every value-style and in-place branch, including unsanitized valence/H state. The binary phase passes graph, SMILES, Kekule SMILES, hash, Morgan, descriptor, coordinate, conformer-count, and deterministic-byte observations through both deserialization entrypoints. Focused source regressions independently lock the corresponding state-transition behavior.
The project regression tier contains 77 fixed full-state oracle records for
with_chiral_tags_from_structure. They compare status/errors, selected
conformer, every atom chiral tag and permutation, _NonExplicit3DChirality,
_StereochemDone, complete atom/bond state, coordinates/dimensionality,
replacement behavior, environment-controlled non-tetrahedral assignment, and
unrelated properties. This covers assignChiralTypesFrom3D, not
assignStereochemistryFrom3D, 3D double-bond E/Z assignment, CIP orchestration,
or distinct-substituent validation.
Tetrahedral stereo geometry separately checks ordered-ligand orientation and
signed volume against seeded RDKit ETKDG geometries. SMARTS parsing, writing,
and direct query matching use one canonical ordinary-molecule query graph;
the pinned RDKit 2026.03.1 source corpus contains 91 distinct accepted parser
inputs, nine rejected inputs, and 62 matcher rows. It compares parser
acceptance, atom/bond counts, exact molecule SMARTS output, and exact ordered
atom mappings. Separate strict tests exercise atom/bond/fragment/CXSMARTS
composition, parser parameters, matcher parameters and callbacks, Python
conversion, and existing consumers; those tests are not conflated with the
162-row golden corpus. Reaction and database/container SMARTS remain outside
the claim. The Bison-specific debug_parse=true diagnostic stream is an
explicitly unsupported diagnostic mode, not a chemistry result inside this
parity boundary.
- Strict parity means 100% agreement on every covered case. A mismatch is work to investigate, not an accepted error rate.
- RNG-sensitive parity fixes seed and execution conditions before comparing coordinates or optimizer state.
- Final-output parity compares the serialized user-visible artifact directly.
- Outside scope means a separately identified upstream capability is not part of the claim. It never means that a failing input inside a covered branch is accepted or relabeled unsupported.
- Golden baselines are condition-bound artifacts. Changing corpus, RDKit version, branch matrix, normalization, RNG/coordinate settings, or compared fields requires a new profile directory or file name.