* Fix deprecated literal operator syntax for C++14 compliance
Remove whitespace between "" and identifier in user-defined literal
operators to comply with C++14 standard. Fixes warnings with newer
compilers (emscripten 4.0+, clang 15+) that treat this as deprecated.
Changed operator"" _name to operator""_name for:
- SmilesParse.h: _smiles, _smarts
- ReactionParser.h: _rxnsmarts, _rxnsmiles
- FileParsers.h: _ctab, _mol2, _pdb
* Fix BOOST_CONTAINER_NO_LIB macro redefinition warnings
Add #ifndef guards before defining BOOST_CONTAINER_NO_LIB in Writer.cpp
and Parser.cpp to avoid redefinition warnings when the macro is already
defined via compiler flags in emscripten 4.0+ builds.
Warnings fixed:
- Writer.cpp:32: 'BOOST_CONTAINER_NO_LIB' macro redefined
- Parser.cpp:38: 'BOOST_CONTAINER_NO_LIB' macro redefined
BestAlignmentParams is an aggregate; paren-init (T(...)) is rejected by Apple Clang (Xcode) and only works on some compilers.
Use brace-init (T{...}) for portable initialization.
* move molzip to its own file
* basics working
* more testing
* another test
* minor
* fix doxygen comment format
* fix alignment with co-directional exit vectors;
some modernization
* JSON parsing
python wrapper
* response to review
* response to review
* explicitly test that the first frag does not move
---------
Co-authored-by: = <=>
* atropisomer bond atoms are checked explicitly for SP2 hybridization
before, we checked only on totalDegree = 2 or 3,
but this causes false positives for something like a chiral sulfoxide
since the S is tetrahedral (sp3) but has only 3 substituents.
the hybridization code relies on totalDegree,
but modified to include and making sure to include conjugation
so while this is more expensive per molecule, it is closer to intent
Closes#8973
* assert we got no warnings on sulfinamides
* cleanup
* bring back degree based check, quick pass so that we don't run expensive calc on all mols with wedge bonds
* bring conformer back
* refactor getting initial bond directions
* fix atom dir counts
* move lambdas to separate functions
* restore increments
These are ok: they mean how many double bonds care about this direction,
not just whether it has been set or not.
* Mostly working.
* Clear out debugging writes.
* Avoid a mol copy.
* Left some debugging in.
* Move the fix into fragmentOnBonds.
* Add test.
---------
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
* Add MolTransforms library.
* Transform to inertial frame of reference before overlay.
* Vital fix of typo in comment.
* Tidy up debugging cruft.
* Comment in CMakeLists.txt.
* Fix python wrappers.
* Extra tidy.
* Response to review.
* Tidy includes.
---------
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
* fix a bug in copySelectedAtomsAndBonds()
we need to clear computed properties on the atoms here
* prune back the atom properties written to CXSMILES
* update minimallib tests
* extra SSS match functions for atoms/bonds
initial implementation and testing
* add baseline to test
* add a functor for matching atom coords
* support the extra checks in python
* refactor the way the python callbacks are handled
* test tolerances
* expose the AtomCoordsMatcher to python
* allow the extra checks to override the default matching
---------
Co-authored-by: = <=>
* change count-type from pointer to ints to vector
* change type from pointer to ints to vector
* change type from pointer to ints to vector
* change type from pointer to ints to vector
* change type from pointer to ints to vector
* use std::fill only when necessary
* delete unnecessary includes
* reformat
* re-enable a test that was accidentally disabled a few years ago
* finish getting rid of the raw pointers
* include chrono
* changes from review
---------
Co-authored-by: Anna Brünisholz <anna.bruenisholz@gmail.com>
* Create a function to extract some specified atoms from a ROMol as a new ROMol by creating new graph (#8742)
This adds a new api, `RDKit::MolOps::ExtractMolFragment`, to allow efficient
extractions of mol fragments from large mols. Compared to the approach where
we delete "unwanted" atoms/bonds from the input mol, this api is faster for
small mols (about 2x faster) and at least 3x faster for big mols
(was 10x faster for "CCC"*1000).
* clang-format
* review comments
* cleanup
* Consolidate copying subsets of molecules
* Readd missing tests
* Update comment to restart build
* Remove missing test
* Remove debugging comment, fix warnings
* Fix warnings on gcc11
* Add docs
* Make vector<bool> dynamic_bitset<>
* Update copyright
* Add swig wrappers
* Use new designated constructor API
* Fix windows builds
* Change enum values from unsigned int to integer
* Fix unsigned int variable
* Update Code/GraphMol/Wrap/test_subset.py
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Update Code/GraphMol/Subset.cpp
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Update Code/JavaWrappers/gmwrapper/src-test/org/RDKit/ChemTransformsTests.java
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Reponse to review
* Fix documentation
* Remove comments
* Remove unnecessary comments
* Fix one liners
* Change assertion to be clearer (and not one-liners)
* Run clang-format
---------
Co-authored-by: Your Name <you@example.com>
Co-authored-by: Hussein Faara <hussein.faara@schrodinger.com>
Co-authored-by: Brian Kelley <bkelley@glysade.com>
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* try to reduce the number of valence combinations by checking neighbour valence and bonding
* fixed error message. Remove test that fails now because determineBondOrders finishes too quickly.
* cleanup
* adjust checking
* fix building
* add interrupt test back in but use a molecule that still takes a bit of time.
* improve error messaging
* change "test interrupt" to use xyz
* fix for atoms without valence information. and apply suggestions
* Update Code/GraphMol/DetermineBonds/DetermineBonds.cpp
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
---------
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* first pass at allowing Hs to be ignored in getBestRMS()
* add support in getAllConformersBestRMS()
* do getBestAlignmentTransform()
* cleanup, error checking, and a fix
* this is more painful than it seems like it should be
* add python wrappers and tests
* response to review
* some optimizations of AlignPoints()
still should do some benchmarking to see how much of a difference the changes make
* remove unused variable
---------
Co-authored-by: = <=>
* move test to catch2
* fix one broken test
* make some stuff constexpr
* refactor some checks involving exceptions
* replace CHECK_INVARIANT
* replace CHECK_INVARIANT
* clean up commented out debug logging
* initialize var
* remove redundant REQUIRE_MSG
* add function to convert embedParams to json
* add catch test
* add function to python wrapper
* test python function
* update copyright
* undo formatting and cleanup
* more cleanup
* remove the map flag and added round trip
* add bounds mat output
* run clang-format
* Add many new c++ catch2 performance benchmarks.
* inline splitmix64 from boost, splitmix64 is not always available in boost. fun fact, this version is ~twice as fast
* reduce intensity of memory pressure test, target 200MB usage.
* new bench compound; accept suggestion from code review
* bench MolToCXSmiles
* Update Code/Bench/stereo.cpp
* impl first part of the suggestions from code reveiw
* impl second part of the suggestions from code reveiw
* Enhance StereoisomerEnumerator to return original molecule when no flippers are available and add test for embedding behavior with input acceptance.
* Use std::make_unique for ROMol construction
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
---------
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* First pass at port
Mostly auto-converted using claude sonnet 4
Things are a bit slower in this initial port. Here's some timing data for molecules from SMILES (no coords) and from SDF (with coords)
# MASTER
## smiles
read: 50000 mols.
9.260000s wall, 8.650000s user + 0.600000s system = 9.250000s CPU (99.9%)
serialize
3.060000s wall, 2.400000s user + 0.660000s system = 3.060000s CPU (100.0%)
deserialize
1.350000s wall, 1.250000s user + 0.090000s system = 1.340000s CPU (99.3%)
## SDF
read: 50000 mols.
9.340000s wall, 8.930000s user + 0.400000s system = 9.330000s CPU (99.9%)
serialize
6.630000s wall, 5.960000s user + 0.680000s system = 6.640000s CPU (100.2%)
deserialize
1.450000s wall, 1.450000s user + 0.000000s system = 1.450000s CPU (100.0%)
# Boost::JSON
## smiles
read: 50000 mols.
9.250000s wall, 8.830000s user + 0.420000s system = 9.250000s CPU (100.0%)
serialize
4.770000s wall, 4.410000s user + 0.350000s system = 4.760000s CPU (99.8%)
deserialize
2.320000s wall, 2.100000s user + 0.230000s system = 2.330000s CPU (100.4%)
## SDF
read: 50000 mols.
9.500000s wall, 9.100000s user + 0.400000s system = 9.500000s CPU (100.0%)
serialize
8.760000s wall, 8.330000s user + 0.420000s system = 8.750000s CPU (99.9%)
deserialize
2.540000s wall, 2.330000s user + 0.210000s system = 2.540000s CPU (100.0%)
* some json parser optimization
* around the edges
* optimizations for the writer
* hopefully get things compiling
* convert the MinimalLib stuff to use boost::json
Again, a lot of the lifting here was done using Claude Sonnet 4 in VS Code Copilot
* fix Windows DLL build
* response to review
Co-authored-by: Paolo Tosco <paolo.tosco.mail@gmail.com>
* better not to blindly accept suggestions
* fix the problems in MinimalLib
---------
Co-authored-by: Paolo Tosco <paolo.tosco.mail@gmail.com>
Co-authored-by: = <=>