* 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: = <=>
* Fixes a bug with chirality perception of T-shaped centers in very large rings
* remove those files from the chemdraw tests
should be added later once we figure out and fix what the problem on the chemdraw side is (it is not directly connected to this PR)
* be more systematic about the tolerance values
carry the same tolerances over into the bond wedging code
* re-enable those chemdraw tests
* typo
* Iterated interface to substructure search
* Add a test
* Add python unit test
* Expose the toTryChunkSize parameter to python
* Respect the maxHits parameter; sort the hitset
* Treat maxHits=-1 as infinite
* Add callback versions of fp and rascal search; conform to C++ style
* Add fp and rascal C++ tests
* maxHits=-1 tripped me up again
* Add fp and rascal python wrappers.
Changed the name of the callback-based method to have "Incremental"
in the name because the overloaded versions with default arguments
can't be reliably selected by the boost python runtime. Probably
better to have a different method name anyway since the return type
is None instead of a results object.
* Delete stray printf.
* Run clang-format
* Use std::int64_t instead of ssize_t for portability
* Make docstrings on callback-based methods more descriptive
* Stop incremental search if the callback returns true.
* Add an example of incremental synthon search to the getting started docs
* trivial commit to force CI rerun
* Reformat single line if statements.
* Make SearchResultsCallback take const ref input
* Fix another one-liner
* Oops - another one-liner
* Do not reset the ringInfo information when adding bonds
This call was inconsistent (for example, the version of addBond() in ROMol did not do it)
and is unnecessary since the standard assumption is molecules need
to be re-sanitized after adding atoms and bonds
* response to review
clear the property cache on atoms after adding a bond.
* add a property cache update to the reaction runner
* add something to the release notes
* When building RDKit as a static library, Ricardo found that the externs aren't
being resolved correctly causing a number of bad std::any casts. This is his
patch (which we apply in the context of the sketcher build) which moves the
definitions up from the types.cpp file, and make them static.
* Use inline keyword to avoid duplication overhead; this still allows the
use of the static keyword to resolve the issue with static libs
https://en.cppreference.com/w/cpp/language/inline.html
* static inline doesn't work in my static builds; inline only does though
* inline constexpr std::string_view
* casting
* inline-constexpr
* add string_view to python converter
* propagate string_view after static types
---------
Co-authored-by: Ric <ricrogz@gmail.com>
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* add option to track atoms involved in each bit for morgan FP
Needs test still
* support similarity maps using fingerprint generators
* support RDKit, AP, and TT
still need tests
* add some testing
* response to review
* added new attributes for scsr template as per BIOVIA doc 2003
* changed to allow any attributes for an SCSR Template def
* removed unneeded defs for TEMPLATE attribute names
* merge ABS groups on setStereoGroups
* warn/fail on multiple ABS groups on strict parsing
* add a test for setStereoGroups
* add a test for multiple ABS groups in mol blocks
* Drop the warning
* Allow the same core to match more than once in a molecule.
* Update annotation.
* Changes after review.
---------
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
* constexpr Point, Point2D, and Point3D
* constexpr Vector
* cleanup
* rollback overzealous constexpring
* dial back the constexpr to get windows builds working
the math stuff isn't constexpr with MSVC++
* add [[nodiscard]]
* do not remove hydrides by default
* add a minimal test
* add release note about behavior change
* require Hydrides to have degree 1
* also allow hydrides with degree 0 (ionic bond)
* suggested changes
---------
Co-authored-by: greg landrum <greg.landrum@gmail.com>