.molfile() outputs v3000 format instead of v2000 if wedge bonds present and chiral flag is 0 (since 1.9.0)
- Dominant language
- C++
- Stars
- 406
- Forks
- 134
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 24
Description
Since version 1.9.0 `.molfile()` outputs V3000 format in `auto` mode (if `molfile-saving-mode` is not set explicitly) if wedge bond present and the chiral flag is 0, however V3000 is not really needed. This introduced a breaking change since 1.9.0.
Here is a Python script to reproduce the problem:
```
import indigo
# chiral flag: 0, bond stereo: 1, wrong output
MOL = """
BAD
5 4 0 0 0 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 1 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END"""
# chiral flag: 0, bond stereo: 6, wrong output
MOL2 = """
BAD
5 4 0 0 0 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 6 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END"""
# chiral flag: 1, bond stereo: 1, OK output
MOL3 = """
OK
5 4 0 0 1 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 1 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END"""
# chiral flag: 1, bond stereo: 6, OK output
MOL4 = """
OK
5 4 0 0 1 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 6 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END"""
# chiral flag: 0, bond stereo: 0, OK output
MOL5 = """
OK
5 4 0 0 0 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 0 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END"""
def main():
for mol in [MOL, MOL2, MOL3, MOL4, MOL5]:
ind = indigo.Indigo()
imol = ind.loadMolecule(mol)
print(imol.molfile())
# ind2 = indigo.Indigo()
# ind2.setOption("molfile-saving-mode", 2000)
# imol2 = ind2.loadMolecule(mol)
# print(imol2.molfile())
main()
```
The output with version 1.12.0 (actually 1.9.0 and above) is:
(The output of the first two entries is in v3000 format)
```
-INDIGO-09062316012D
0 0 0 0 0 0 0 0 0 0 0 V3000
M V30 BEGIN CTAB
M V30 COUNTS 5 4 0 0 0
M V30 BEGIN ATOM
M V30 1 C 1.7412 -0.8598 0.0 0 CFG=1
M V30 2 F 1.0267 -1.2723 0.0 0
M V30 3 C 1.7412 -0.0348 0.0 0
M V30 4 C 2.4557 -1.2723 0.0 0
M V30 5 C 1.0267 0.3776 0.0 0
M V30 END ATOM
M V30 BEGIN BOND
M V30 1 1 1 3
M V30 2 1 1 4 CFG=1
M V30 3 1 2 1
M V30 4 1 3 5
M V30 END BOND
M V30 BEGIN COLLECTION
M V30 MDLV30/STERAC1 ATOMS=(1 1)
M V30 END COLLECTION
M V30 END CTAB
M END
-INDIGO-09062316012D
0 0 0 0 0 0 0 0 0 0 0 V3000
M V30 BEGIN CTAB
M V30 COUNTS 5 4 0 0 0
M V30 BEGIN ATOM
M V30 1 C 1.7412 -0.8598 0.0 0 CFG=2
M V30 2 F 1.0267 -1.2723 0.0 0
M V30 3 C 1.7412 -0.0348 0.0 0
M V30 4 C 2.4557 -1.2723 0.0 0
M V30 5 C 1.0267 0.3776 0.0 0
M V30 END ATOM
M V30 BEGIN BOND
M V30 1 1 1 3
M V30 2 1 1 4 CFG=3
M V30 3 1 2 1
M V30 4 1 3 5
M V30 END BOND
M V30 BEGIN COLLECTION
M V30 MDLV30/STERAC1 ATOMS=(1 1)
M V30 END COLLECTION
M V30 END CTAB
M END
-INDIGO-09062316012D
5 4 0 0 1 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 1 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END
-INDIGO-09062316012D
5 4 0 0 1 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 6 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END
-INDIGO-09062316012D
5 4 0 0 0 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 0 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END
```
The output with version 1.8.0 (and below) is:
```
-INDIGO-09062316022D
5 4 0 0 0 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 1 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END
-INDIGO-09062316022D
5 4 0 0 0 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 6 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END
-INDIGO-09062316022D
5 4 0 0 1 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 1 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END
-INDIGO-09062316022D
5 4 0 0 1 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 6 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END
-INDIGO-09062316022D
5 4 0 0 0 0 0 0 0 0999 V2000
1.7412 -0.8598 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 -1.2723 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
1.7412 -0.0348 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.4557 -1.2723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.0267 0.3776 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 3 1 0 0 0 0
1 4 1 0 0 0 0
2 1 1 0 0 0 0
3 5 1 0 0 0 0
M END
```
All outputs are in v2000 format.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the Python reproducer and the Indigo `.molfile()` entry point, comparing auto-mode output for MOL and MOL2 with the v2000 output shown for version 1.8.0. Done means the chiral-flag-0 cases with wedge bonds remain V2000 in auto mode while the existing chiral-flag-1 cases continue to produce their shown output.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, python
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100