* initial addition of MT support to MolStandardize
* do the other inplace functions
* add mt ops to python wrappers
including tests
* release the GIL
* remove exploratory code added during dev
* make normalizer thread safe
* refactor some repeated code
* reionizer and uncharger and normalizer can now operate in place
* add removeUnmatchedAtoms argument to in-place version of runReactant
When set to false atoms which are not explicitly removed by the reaction are preserved
* Fix a case where transforms were incorrectly updating atomic numbers
* add more inplace operations to MolStandardize
* support those in the Python layer
* support inplace for the rest of the python wrappers
* move a few more functions over to the inplace code
* First stab at disconnecting organometallics the Syngenta way.
* Add support for Li and Na compounds, with tests.
* Correct docstrings.
* Add -1 valence to sodium.
* Add changes from PR 5997.
* Move declaration of disconnectOrganometallics.
* Re-factor tests for disconnectOrganometallics to read V3000 files rather than hard-code in file.
* Add optional options to constructor.
* Python wrapping for disconnectOrganometallics.
* Python tests.
* Correct docString.
* Test using in place overload of disconnect free function.
* options_ should not be a reference.
* Re-work the wrappers.
* Added test MOL files.
* Correct charge on iron atoms.
* Fix tests for charged iron.
* Added some more test complexes.
* Port Marco's oxidation number Python to C++ Descriptor.
* Rename functions.
* Another test.
* Python wrappers.
* Comment in test.
* Throws exception if atom-based function called with non-kekulized parent.
* Fix typo.
* Allow potassium as well.
* Whole molecule calculations for oxidation number only.
Rename prop to OxidationNumber.
* Add OxidationNumber to common_properties.
* Extra comment.
* When deleting atom, update any ENDPTS props on bonds.
Copied in from stale PR ExtraDoc.
* Added hapticBondsToDative with python wrapper.
* Extra test.
* Re-factor endpts parsing.
* Typo.
* Add function for haptic end points inc. Python wrapper.
* Add dative bonds in separate step.
* C++ version of dativeBondstoHaptic.
* Update test mols.
* Python wrapper.
* Fix indents in Python test script.
* Corrected expected test result.
* Only do non-metal to metal conversion of single bond to dative if the explicit valence of the non-metal allows it.
* Fix test broken in a non-material way by previous change.
* Export for DLL.
* Remove redundant function declaration.
* Dave hates Windows.
* Move hapticBondEndpoints to Molops::details.
* And take it out of the Python wrappers.
* Run yapf on reformatted test script.
* Get the DLL builds going.
* addDativeBond -> addHapticBond.
* Batch edits.
* Position arithmetic.
* setQuery.
* Dummy positions for all confs.
* Fix tests for dummy positions for all confs.
* Move tests to catch_organometallics.cpp.
* Modern docString.
* Change member variable names.
* sProp length, bonus batchEdit.
* Add options object to disconnectOrganometallics.
* Tidied license.
Atom precondition.
* GetIntProp.
* Test opts aren't defaults.
* Python wrapper for disconnectOrganometallics with options.
* Minor edit.
* Slightly random attempt to fix Java build.
* Response to review.
* Another stab at the doc strings.
---------
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Swap to using a data structure for default normalization parameters
* bring the default fragment data into the code too
* cleanup
* add reionizer parameters via data
change fragment parse failures to ValueErrorExceptions
* tautomer parameters in the code
* got a little over-enthusiastic in that last cleanup
* use boost::flyweight to cache normalization and charge data params
* a bit more cleanup
* support reading params from JSON
* fragments from JSON
single-call for fragment removal
* add a one-liner for the canonical tautomer
* quick refactor
* Fixes#4115
* complete the parents
* docs
* move the definitions to a namespace and make them const
* see if switching to c++14 fixes the CI compile problems with g++ 5.5
* somewhat uglier way of solving the initalizer list problem
* - Added a TautomerEnumerator constructor which allows passing CleanupParameters
- Added three configurable parameters to CleanupParameters
- Added a callback to TautomerEnumerator
- Fixed a bug where the same tautomer could be mapped by both isomeric and non-isomeric SMILES
- TautomerEnumerator::enumerate() now returns a TautomerEnumeratorResult and does not take
dynamic_bitset pointers as optional parameters
- Added a missing transform from the Sitzmann paper
- General code cleanup and optimization
* - TautomerEnumeratorResult is now iterable in both C++ and Python
- further optimizations
- implemented a TautomerEnumerator.PickCanonical() Python wrapper
- added C++ and Python accessors to SMILES and SmilesTautomerMap
* - make sure the number of tautomers reported by rdLogger is correct and definitive
* make sure that if N maxTautomers are requested, N tautomers are returned if the theoretical number of tautomers is M>N
* avoid that sulfonic acids hit the formamidinesulfinic acid tautomerisation rule
* offer an option to allow the old API to still be used.
* Changes in response to review and following discussion with Gareth and Greg
* - made TautomerEnumeratorResult an enum class (was a plain C enum)
- made TautomerEnumeratorResult::const_iterator a bidirectional_iterator
- added tests to fully probe the TautomerEnumeratorResult::const_iterator functionality
* - change the difference_type definition
- added tests for the above
* - cosmetic change to improve code readability
Co-authored-by: greg landrum <greg.landrum@gmail.com>
* This commit fixes the bug "segmenation fault/core dump when chargeParent is run with skip_standardize set to true" mentioned in #2970
* Fixed memory leaks in MolStandardize and deleted variables which aren't required
* first pass at implementing molvs-style tautomer scoring
This isn't optimal in terms of performance, but all the MolVS tests pass.
* clang format
* A bit of refactoring of the tautomer stuff
* first pass at python wrappers
* allow specifying the tautomer scoring function from C++
* EFF: use boost::flyweight so SMARTS is only parsed once
* improve the python API
* switch to boost::function instead of using function pointers
* allow user-provided tautomer scoring functions
* documentation and scorer version
* change in response to review
* Fixes#2383 (tests coming in the next commit)
Minor typo fix
Fixes a "bug" in one of the default transforms
* Adds support for directly providing normalization parameter data
instead of requiring the use of a text file.
* allow fragment removers to be initialized with string data
* remove unicode
* allow the reionizer to be initialized from a stream
* modify the uncharger to be use a canonical atom ordering
* add doCanonical cleanup parameter
make canonical ordering the default
document the change
* Add neutralization of additonal negative groups (not just acids).
This may not be the right thing to do.
* expose the new parameter to python
* changes in response to review
* short test file for MolVS standardize_sm
* short test file for MolVS fragment
* short test file for MolVS metals
* short test file for MolVS normalize
* short test file for MolVS reionize
* short test file for MolVS tautomer
* short test file for MolVS validate
* long test file for MolVS standardize smiles
* long test file for MolVS fragment
* long test file for MolVS metals
* long test file for MolVS normalize
* long test file for MolVS reionize
* long test file for MolVS tautomer
* long test file for MolVS validate
* Unit tests for MolVS steps
* dropping support for Python2
* molvs/__init__.py
* molvs/charge.py
* molvs/errors.py
* molvs/fragment.py
* molvs/metal.py
* molvs/normalize.py
* molvs/resonance.py
* molvs/standardize.py
* molvs/tautomer.py
* molvs/utils.py
* molvs/validate.py
* molvs/validations.py
* molvs/cli.py
* adapted and renamed molvs/cli.py to work within $RDBASE/Contrib/MolVS/
* setup MolStandardize directories, source with empty cleanup function, header, CMake files
* corrections to empty source, header and test1.cpp
* adding empty functions and initializers to MolStandardize
* empty Metal source, header and added test
* added most of Metal.cpp functionality and made some more tests
* empty functions and initializers to Normalize
* empty functions and initializers to Validate
* added most code for RDKitDefault mode, along with some tests
* restructure for abstract base class ValidateMethod
* written in isNoneValidation for MolVSValidation
* took out isNoneValidation, put in noAtomValidation, neutralValidation, isotopeValidation for MolVSValidation
* added in AllowedAtoms
* added in disallowedAtoms
* corrections to Validate
* added code for FragmentRemover
* extended fragment functionality to include choose largest fragment, added in tests for fragment catalog, fragment remover. Also added fragmentValidation method in MolStandardize
* added another test to testValidate test_fragment
* corrections to fragment
* corrections to Metal
* added code for Normalize
* added normalize member function to MolStandardize and added tests
* added multi fragment functionality to Normalize.cpp and additional tests
* TransformCatalog
* tests for Normalize.cpp
* first bit of cleanup
* added most of Charge functionality and some tests
* some corrections to Charge.cpp and some more tests to testCharge.cpp
* corrections to Charge.cpp
* start of Tautomer Enumerate with some tests
* added BondType option to Tautomer Enumeration
* correcting for some memory leakage
* a few alterations to formatting
* sorting out some memory leaks
* sorting out some memory leaks
* some corrections for PCS test set
* redo tests with updated RDKit
* fixing memory leak
* more fixes after 100kPCS set testing
* using tab as delimiter in CSVs rather than comma
* tutorial for MolStandardize
* still working on Tautomer enumeration
* deleted some empty tests
* starting writing tautomer canonicalize
* rename test_data -> data (the source still needs to be updated)
* automatic source reformatting
* adjust to directory rename
* move the fragment catalog test into the MolStandardize directory
do not create separate library for FragmentCatalog
* stop building separate libraries for the catalogs
* move the CleanupParameters into the MolStandardize namespace
* first pass at python wrapper
* move the py module to the correct dir;
add some python tests;
add standardizeSmiles to python wrapper
* disabling the compareMolVSTest since that requires command line arguments to run
* get this building on windows
* put the python lib in the right place
* further work on python wrapper for rdMolStandardize
* added get and set functions to Metal and wrapped them
* added get and set functions to Metal and wrapped them
* changed construstor of Reionizer class and input args for reionize, wrapped this default
* overload Reionizer constructor so user can input own AcidBaseFile from python
* added Uncharger class to Charge and added test for Uncharger
* wrapped Fragment, fixed some memory leakage, changed some args and return types, added some tests
* wrapped Normalized and changed how Normalizer class is initiated
* changing MolVSValidation structure so user can choose which MolVS submethod they want
* starting to write Wrap for Validate
* now it compiles with Wrap/Validate.cpp
* a couple refactorings around validate
* move the validate code into the rdMolStandardize module
* make sure a valid pointer is returned for standardizeSmiles
* rdMolStandardize.MolVSValidation done and tests added
* half way through AllowedAtomsValidation
* finished AllowedAtomsValidation and DisallowedAtomsValidation
* moved charge, fragment, metal, normalize into the rdMolStandardize module
* changed tutorial to use wrapped code
* added copyrights
* added copyrights
* move the data files
* modify source files to adjust to the move
* added validateSmiles functionality
* removed std::cout
* redid some of the 100k PCS tests
* working on the tutorial
* adding some documentation
* deleting some comment lines
* some changes after pull review
* More changes after pull review
* start of trying to make java wrap
* remove some warnings, add some questions
* additional warning removals, a bit more reporting
* some test cleanups
* enable testing of the java code