Some work on TautomerEnumerator (#3327)

* - 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 is contained in:
Paolo Tosco
2020-09-24 23:00:03 +02:00
committed by GitHub
parent a19072fd87
commit 527a7adf99
12 changed files with 2330 additions and 991 deletions

View File

@@ -29,8 +29,8 @@ oxim/nitroso via phenol f [O!H0]-[N]=[C]-[C]=[C]-[C]=[OH0]
oxim/nitroso via phenol r [O!H0]-[c]=[c]-[c]=[c]-[N]=[OH0]
cyano/iso-cyanic acid f [O!H0]-[C]#[N] ==
cyano/iso-cyanic acid r [N!H0]=[C]=[O] #-
//formamidinesulfinic acid f [O,N;!H0]-[C]=[S,Se,Te]=[O] =-- // TODO: WAT!?
//formamidinesulfinic acid r [O!H0]-[S,Se,Te]-[C]=[O,N] =--
formamidinesulfinic acid f [O,N;!H0]-[C]=[S,Se,Te;v6]=[O] =--
formamidinesulfinic acid r [O!H0]-[S,Se,Te;v4]-[C]=[O,N] ==-
isocyanide f [C-0!H0]#[N+0] # -+
isocyanide r [N+!H0]#[C-] # -+
phosphonic acid f [OH]-[PH0] =