From 82dbf4c66b9aa3287a38ebce8c9f497a095ad4e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anna=20Br=C3=BCnisholz?= <162900871+AnnaBruenisholz@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:16:27 +0200 Subject: [PATCH] switch to range-based for loops (#7278) * switch to range-based for loops * Update Code/GraphMol/testChirality.cpp Co-authored-by: Greg Landrum * fix a leak in the new DCLV code (#7279) * fixes #7295 (#7303) * tag 2024.03 release (#7308) * tag release * attempt to solve constant MD5 problems * switch to getting the ComicNeue font from github instead of as a zip * open new release cycle (#7314) * restrict the application of 1,3- 1,5- conjugated cation normalization (#7287) * propagate yaehmop build status (#7316) * Fixes #7299 (#7304) * clean up of python and c++ for-loops * clang formatted testChirality * fix test file --------- Co-authored-by: Greg Landrum Co-authored-by: Riccardo Vianello --- .../DataStructs/Wrap/testDiscreteValueVect.py | 8 +- Code/GraphMol/testChirality.cpp | 82 +++++++++---------- ReleaseNotes.md | 1 + 3 files changed, 46 insertions(+), 45 deletions(-) diff --git a/Code/DataStructs/Wrap/testDiscreteValueVect.py b/Code/DataStructs/Wrap/testDiscreteValueVect.py index bb62d6523..387bf1e1e 100644 --- a/Code/DataStructs/Wrap/testDiscreteValueVect.py +++ b/Code/DataStructs/Wrap/testDiscreteValueVect.py @@ -32,7 +32,7 @@ class TestCase(unittest.TestCase): self.assertRaises(ValueError, lambda: v1.__setitem__(5, 2)) v1 = ds.DiscreteValueVect(ds.DiscreteValueType.TWOBITVALUE, 30) - for i in range(len(v1)): + for i, _ in enumerate(v1): v1[i] = i % 4 self.assertTrue(len(v1) == 30) @@ -42,7 +42,7 @@ class TestCase(unittest.TestCase): self.assertRaises(ValueError, lambda: v1.__setitem__(10, 6)) v1 = ds.DiscreteValueVect(ds.DiscreteValueType.FOURBITVALUE, 30) - for i in range(len(v1)): + for i, _ in enumerate(v1): v1[i] = i % 16 self.assertTrue(len(v1) == 30) @@ -53,7 +53,7 @@ class TestCase(unittest.TestCase): self.assertRaises(ValueError, lambda: v1.__setitem__(10, 16)) v1 = ds.DiscreteValueVect(ds.DiscreteValueType.EIGHTBITVALUE, 32) - for i in range(len(v1)): + for i, _ in enumerate(v1): v1[i] = i % 256 self.assertTrue(len(v1) == 32) @@ -64,7 +64,7 @@ class TestCase(unittest.TestCase): self.assertRaises(ValueError, lambda: v1.__setitem__(10, 256)) v1 = ds.DiscreteValueVect(ds.DiscreteValueType.SIXTEENBITVALUE, 300) - for i in range(len(v1)): + for i, _ in enumerate(v1): v1[i] = i % 300 self.assertTrue(len(v1) == 300) diff --git a/Code/GraphMol/testChirality.cpp b/Code/GraphMol/testChirality.cpp index 65f6d8967..f0793b17a 100644 --- a/Code/GraphMol/testChirality.cpp +++ b/Code/GraphMol/testChirality.cpp @@ -2651,8 +2651,8 @@ void stereochemTester(RWMol *m, std::string expectedCIP, TEST_ASSERT(!m->getAtomWithIdx(1)->hasProp(common_properties::_CIPCode)); TEST_ASSERT(m->getBondWithIdx(3)->getStereo() == Bond::STEREONONE); // the mol file parser assigned bond dirs, get rid of them - for (ROMol::BondIterator bIt = m->beginBonds(); bIt != m->endBonds(); ++bIt) { - (*bIt)->setBondDir(Bond::NONE); + for (const auto bond : m->bonds()) { + bond->setBondDir(Bond::NONE); } MolOps::assignStereochemistryFrom3D(*m); TEST_ASSERT(m->getAtomWithIdx(1)->hasProp(common_properties::_CIPCode)); @@ -2818,17 +2818,17 @@ class TestAssignChiralTypesFromMolParity { {Atom::CHI_UNSPECIFIED, 0}, {Atom::CHI_OTHER, 0}}; MolOps::assignChiralTypesFrom3D(*d_rwMol); - for (auto ai = d_rwMol->beginAtoms(); ai != d_rwMol->endAtoms(); ++ai) { - int parity = parityMap.at((*ai)->getChiralTag()); - (*ai)->setProp(common_properties::molParity, parity); - (*ai)->setChiralTag(Atom::CHI_UNSPECIFIED); + for (const auto atom : d_rwMol->atoms()) { + int parity = parityMap.at(atom->getChiralTag()); + (atom)->setProp(common_properties::molParity, parity); + (atom)->setChiralTag(Atom::CHI_UNSPECIFIED); } } void fillBondDefVect() { - for (auto bi = d_rwMol->beginBonds(); bi != d_rwMol->endBonds(); ++bi) { - d_bondDefVect.emplace_back(BondDef((*bi)->getBeginAtomIdx(), - (*bi)->getEndAtomIdx(), - (*bi)->getBondType())); + for (const auto bond : d_rwMol->bonds()) { + d_bondDefVect.emplace_back(BondDef((bond)->getBeginAtomIdx(), + (bond)->getEndAtomIdx(), + (bond)->getBondType())); } } void stripBonds() { @@ -3069,8 +3069,8 @@ void testGithub3314() { { // this one was working auto m = R"CTAB( - Mrv2014 07312010092D - + Mrv2014 07312010092D + 0 0 0 0 0 999 V3000 M V30 BEGIN CTAB M V30 COUNTS 7 6 0 0 1 @@ -3100,8 +3100,8 @@ M END)CTAB"_ctab; std::cerr << "--------------------------------------------------" << std::endl; auto m = R"CTAB( - Mrv2014 07312010092D - + Mrv2014 07312010092D + 0 0 0 0 0 999 V3000 M V30 BEGIN CTAB M V30 COUNTS 7 6 0 0 1 @@ -3137,7 +3137,7 @@ void testGithub4494() { << std::endl; auto molblock = R"CTAB( - MJ201500 + MJ201500 9 9 0 0 0 0 0 0 0 0999 V2000 -5.9375 1.9076 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 @@ -3204,32 +3204,32 @@ M END)CTAB"; } void testGithub7115() { - BOOST_LOG(rdInfoLog) << "-------------------------------------" << std::endl; - BOOST_LOG(rdInfoLog) - << "GitHub #7115: Quaternary nitrogens with hydrogens are not a candidate for stereo." - << std::endl; - - { - auto s = "C[C@]1(F)C[N@H+](O)C1"_smiles; - auto smi = MolToSmiles(*s); - TEST_ASSERT(smi == "C[C@]1(F)C[N@H+](O)C1"); - } - { - auto s = "C[C@]1(F)C[N@+]([H])(O)C1"_smiles; - auto smi = MolToSmiles(*s); - TEST_ASSERT(smi == "C[C@]1(F)C[N@H+](O)C1"); - } - { - auto insmi = "C[C@]1(F)C[N@+]([H])(O)C1"; - SmilesParserParams params; - params.removeHs = false; - std::unique_ptr s(SmilesToMol(insmi, params)); - auto smi = MolToSmiles(*s); - TEST_ASSERT(smi == "[H][N@+]1(O)C[C@](C)(F)C1"); - // round trip - std::unique_ptr s2(SmilesToMol(smi)); - TEST_ASSERT(MolToSmiles(*s2) == "C[C@]1(F)C[N@H+](O)C1"); - } + BOOST_LOG(rdInfoLog) << "-------------------------------------" << std::endl; + BOOST_LOG(rdInfoLog) + << "GitHub #7115: Quaternary nitrogens with hydrogens are not a candidate for stereo." + << std::endl; + + { + auto s = "C[C@]1(F)C[N@H+](O)C1"_smiles; + auto smi = MolToSmiles(*s); + TEST_ASSERT(smi == "C[C@]1(F)C[N@H+](O)C1"); + } + { + auto s = "C[C@]1(F)C[N@+]([H])(O)C1"_smiles; + auto smi = MolToSmiles(*s); + TEST_ASSERT(smi == "C[C@]1(F)C[N@H+](O)C1"); + } + { + auto insmi = "C[C@]1(F)C[N@+]([H])(O)C1"; + SmilesParserParams params; + params.removeHs = false; + std::unique_ptr s(SmilesToMol(insmi, params)); + auto smi = MolToSmiles(*s); + TEST_ASSERT(smi == "[H][N@+]1(O)C[C@](C)(F)C1"); + // round trip + std::unique_ptr s2(SmilesToMol(smi)); + TEST_ASSERT(MolToSmiles(*s2) == "C[C@]1(F)C[N@H+](O)C1"); + } } int main() { diff --git a/ReleaseNotes.md b/ReleaseNotes.md index af1ed8e14..2acf2045a 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -20,6 +20,7 @@ GitHub) ## Code removed in this release: ## Deprecated code (to be removed in a future release): + - AtomPairs.Utils.NumPiElectrons is deprecated in favor of Chem.GetNumPiElectrons. AtomPairs.Utils.NumPiElectrons failed if the atom had outgoing dative bonds (see Issue #7318).