I'm trying to get SMILES chemical similarity using RDKIT. My dataframe "subs_df" contains 2 columns where one of them contains SMILES data.
import time
import random
import sys
from pathlib import Path
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from rdkit import Chem
from rdkit import DataStructs
from rdkit.ML.Cluster import Butina
from rdkit.Chem import Draw
from rdkit.Chem import rdFingerprintGenerator
from rdkit.Chem.Draw import SimilarityMaps
for _, smiles in subs_df[["SMILES"]].itertuples():
a=Chem.MolFromSmiles(smiles)
molecules.append((a))
# Defining a function to calculate similarities among the molecules
def pairwise_similarity(fingerprints_list):
global similarities
similarities = np.zeros((nfgrps, nfgrps))
for i in range(1, nfgrps):
similarity = DataStructs.BulkTanimotoSimilarity(fgrps[i], fgrps[:i])
similarities[i, :i] = similarity
similarities[:i, i] = similarity
return similarities
# Calculating similarities of molecules
pairwise_similarity(fgrps)
tri_lower_diag = np.tril(similarities, k=0)
The error occurs in the second block of code when DataStructs.BulkTanimotoSimilarity is called. Any leads to solving the above issue are appreciated.
The exact error popping up is:
ArgumentError: Python argument types in rdkit.DataStructs.cDataStructs.BulkTanimotoSimilarity(Mol, list) did not match C++ signature: BulkTanimotoSimilarity(RDKit::SparseIntVect v1, boost::python::list v2, bool returnDistance=False) BulkTanimotoSimilarity(RDKit::SparseIntVect v1, boost::python::list v2, bool returnDistance=False) BulkTanimotoSimilarity(RDKit::SparseIntVect v1, boost::python::list v2, bool returnDistance=False) BulkTanimotoSimilarity(RDKit::SparseIntVect v1, boost::python::list v2, bool returnDistance=False) BulkTanimotoSimilarity(ExplicitBitVect const* bv1, boost::python::api::object bvList, bool returnDistance=0) BulkTanimotoSimilarity(SparseBitVect const* bv1, boost::python::api::object bvList, bool returnDistance=0)