Skip to content

Commit e8afe08

Browse files
#1303 Return original format for convert and layout functions (#1315)
1 parent de85d68 commit e8afe08

File tree

16 files changed

+277
-80
lines changed

16 files changed

+277
-80
lines changed

api/c/indigo/indigo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ CEXPORT int indigoRemove(int item);
171171

172172
/* Molecules, query molecules, SMARTS */
173173

174+
CEXPORT const char* indigoGetOriginalFormat(int item);
175+
174176
CEXPORT int indigoCreateMolecule(void);
175177
CEXPORT int indigoCreateQueryMolecule(void);
176178

api/c/indigo/src/indigo_molecule.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3784,6 +3784,34 @@ CEXPORT int indigoCountComponentBonds(int molecule, int index)
37843784
INDIGO_END(-1);
37853785
}
37863786

3787+
CEXPORT const char* indigoGetOriginalFormat(int item)
3788+
{
3789+
INDIGO_BEGIN
3790+
{
3791+
IndigoObject& obj = self.getObject(item);
3792+
if (IndigoBaseMolecule::is(obj))
3793+
{
3794+
BaseMolecule& mol = obj.getBaseMolecule();
3795+
switch (mol.original_format)
3796+
{
3797+
case BaseMolecule::SMARTS:
3798+
return "chemical/x-daylight-smarts";
3799+
case BaseMolecule::SMILES:
3800+
return "chemical/x-daylight-smiles";
3801+
case BaseMolecule::MOL:
3802+
return "chemical/x-mdl-molfile";
3803+
case BaseMolecule::RXN:
3804+
return "chemical/x-mdl-rxnfile";
3805+
default:
3806+
return "unknown";
3807+
}
3808+
}
3809+
else
3810+
throw IndigoError("indigoSaveJson(): expected molecule, got %s", obj.debugInfo());
3811+
}
3812+
INDIGO_END(0);
3813+
}
3814+
37873815
CEXPORT int indigoCreateMolecule()
37883816
{
37893817
INDIGO_BEGIN

api/dotnet/src/IndigoLib.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ public unsafe class IndigoLib
9595
[DllImport("indigo"), SuppressUnmanagedCodeSecurity]
9696
public static extern int indigoClose(int item);
9797

98+
[DllImport("indigo"), SuppressUnmanagedCodeSecurity]
99+
public static extern byte* indigoGetOriginalFormat(int id);
100+
98101
[DllImport("indigo"), SuppressUnmanagedCodeSecurity]
99102
public static extern int indigoCreateMolecule();
100103

api/dotnet/src/IndigoObject.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ public string cml()
9292
return dispatcher.checkResult(IndigoLib.indigoCml(self));
9393
}
9494

95+
public string getOriginalFormat()
96+
{
97+
dispatcher.setSessionID();
98+
return dispatcher.checkResult(IndigoLib.indigoGetOriginalFormat(self));
99+
}
100+
95101
public string json()
96102
{
97103
dispatcher.setSessionID();

api/java/indigo/src/main/java/com/epam/indigo/IndigoLib.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ public interface IndigoLib extends Library {
8787

8888
int indigoRemove(int item);
8989

90+
Pointer indigoGetOriginalFormat(int item);
91+
9092
int indigoCreateMolecule();
9193

9294
int indigoCreateQueryMolecule();

api/java/indigo/src/main/java/com/epam/indigo/IndigoObject.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ public String molfile() {
7777
return Indigo.checkResultString(this, lib.indigoMolfile(self));
7878
}
7979

80+
public String getOriginalFormat() {
81+
dispatcher.setSessionID();
82+
return Indigo.checkResultString(this, lib.indigoGetOriginalFormat(self));
83+
}
84+
8085
public void saveMolfile(String filename) {
8186
dispatcher.setSessionID();
8287
Indigo.checkResult(this, lib.indigoSaveMolfileToFile(self, filename));

api/python/indigo/indigo/indigo_lib.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,8 @@ def __init__(self) -> None:
246246
IndigoLib.lib.indigoIndex.argtypes = [c_int]
247247
IndigoLib.lib.indigoRemove.restype = c_int
248248
IndigoLib.lib.indigoRemove.argtypes = [c_int]
249+
IndigoLib.lib.indigoGetOriginalFormat.restype = c_char_p
250+
IndigoLib.lib.indigoGetOriginalFormat.argtypes = [c_int]
249251
IndigoLib.lib.indigoSaveMolfileToFile.restype = c_int
250252
IndigoLib.lib.indigoSaveMolfileToFile.argtypes = [c_int, c_char_p]
251253
IndigoLib.lib.indigoMolfile.restype = c_char_p

api/python/indigo/indigo/indigo_object.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,17 @@ def remove(self):
236236

237237
return IndigoLib.checkResult(self._lib().indigoRemove(self.id))
238238

239+
def getOriginalFormat(self):
240+
"""Molecule method return format molecule loaded from
241+
242+
Returns:
243+
str: original format string
244+
"""
245+
246+
return IndigoLib.checkResultString(
247+
self._lib().indigoGetOriginalFormat(self.id)
248+
)
249+
239250
def saveMolfile(self, filename):
240251
"""Molecule method saves the structure into a Molfile
241252
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
****** Test get original format: smiles ***
2+
Molecule "N[CH](C)C(=O)O" : got "chemical/x-daylight-smiles" - OK
3+
****** Test get original format: smarts ***
4+
Molecule "([#6]1-[#6]-[#6]-1.[#6])" : got "chemical/x-daylight-smarts" - OK
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import os
2+
import sys
3+
4+
sys.path.append(
5+
os.path.normpath(
6+
os.path.join(os.path.abspath(__file__), "..", "..", "..", "common")
7+
)
8+
)
9+
from env_indigo import * # noqa
10+
11+
indigo = Indigo()
12+
13+
14+
def test_mol(molecule, mol, expected):
15+
original_format = mol.getOriginalFormat()
16+
if original_format == expected:
17+
print('Molecule "%s" : got "%s" - OK' % (molecule, expected))
18+
else:
19+
print(
20+
'Molecule "%s" failed: expected original format "%s", got "%s"'
21+
% (molecule, expected, original_format)
22+
)
23+
24+
25+
print("****** Test get original format: smiles ***")
26+
molecule = "N[CH](C)C(=O)O"
27+
mol = indigo.loadMolecule(molecule)
28+
test_mol(molecule, mol, "chemical/x-daylight-smiles")
29+
30+
print("****** Test get original format: smarts ***")
31+
molecule = "([#6]1-[#6]-[#6]-1.[#6])"
32+
mol = indigo.loadSmarts(molecule)
33+
test_mol(molecule, mol, "chemical/x-daylight-smarts")

0 commit comments

Comments
 (0)