epam / epam/Indigo

.molfile() outputs v3000 format instead of v2000 if wedge bonds present and chiral flag is 0 (since 1.9.0)

Open
#1,253 0 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.