* Remove Dict::getData() for a strict abstraction boundary
Replace direct access to Dict's internal std::vector<Pair> with
encapsulated methods: size(), empty(), const iteration via
begin()/end(), appendPair(), markNonPOD(), and getRawVal().
This enables future changes to Dict's internal representation
without breaking callers.
Ref: rdkit/rdkit#9112
* Harden Dict::appendPair to take a populated Pair by move
appendPair(Pair&&) now auto-detects non-POD status via
RDValue::needsCleanup(), eliminating markNonPOD() and the
risk of dangling references or uninitialized entries.
needsCleanup() is placed next to destroy() on RDValue to
keep the POD/non-POD distinction in one place.
* Remove vestigial dictHasNonPOD param from streamReadProp
Both callers ignored the output. Non-POD detection is now handled
by Dict::appendPair via RDValue::needsCleanup().
* unbork java build
* Address PR review: bulk append, rename getRawVal, add custom data test
- Add Dict::append(vector<Pair>&&) for bulk insertion with reserve
- Use bulk append in streamReadProps to restore pre-allocation
- Rename getRawVal -> getRDValue per reviewer preference
- Add test verifying custom AnyTag data is destroyed through Dict lifecycle
* heed self-review
* don't manually implement vec.insert
* Add test: ExplicitBitVect round-trip through Dict serialization
Exercises the full streamWriteProps/streamReadProps path with an
ExplicitBitVect in an RDProps Dict, confirming the custom handler
is invoked and no memory is leaked (verified under valgrind).
* in anyTag test, assert destructors ran a specific number of times.
---------
Co-authored-by: bddap (Coding Agent) <andrew+bot@dirksen.com>
* 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
* 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: = <=>
* - Fix#8029
- avoid unnecessary rounding errors in the JSON writer
- remove a warning when compiling MinimalLib without SubstructLIbrary support
* changes in response to review
* changes in response to review
---------
Co-authored-by: ptosco <paolo.tosco@novartis.com>
* atropisomer handling added
* fixed non-used variables, linking directives
* BOOST LIB start/stop fixes, linking fix
* Fixes for RDKIT CI errors
* minimalLib fix
* changed vector<enum> for java builds
* check for extra chars in CIP labeling
* removed wrong deprecated message
* fix ostrstream output error?
* restored _ChiralAtomRank to lowercase first letter
* changes for merged master
* Fixed catch label for new Catch package
* update expected psql results
* get swig wrappers building
* restore MolFileStereochem to FileParsers
* fix java wrapper for reapplyMolBlockWedging
* some suggestions
* move a couple functions out of Bond
* Merge branch 'master' into pr/atropisomers2
* merged master
* Renamed setStereoanyFromSquiggleBond
* atropisomers in cdxml, rationalize atrop wedging, stereoGroups in drawMol
* fix for CI build
* attempt to fix java build in CI
* attempt to fix java build in CI #2
* New routine to remove non-explicit 3D-geneated chirality
* changed to use pair for atrop atoms and related bonds
* Changes as per PR reviews
* PR review respnses
* PR review reponse - more
* Fix merge from master
* fixing java ci after merge
* Updated the help doc for atripisomers
* update the atropisomer docs
* improve the images
* add the source CXSMILES
---------
Co-authored-by: greg landrum <greg.landrum@gmail.com>
* switch from boost::any to std::any
* changes in response to review
* handle the slightly different error messages from different compilers
* document changed error message
* try to use g++10 for the linux builds
* remove those CXX defns
* another spelling
* stupid typo
* bump all linux builds to g++-10
* some day this will be done
* small steps
* increase mac ci builds runtime
* un/signed comparisons in molops
* reference in loop in EmbeddedFrag.cpp
* un/signed comparison in filtercatalogtest.cpp
* un/signed comparison in Descriptors/catch_tests.cpp
* un/signed comparisons in DetermineBonds.cpp
* drop unused 'params' arg from static functions in MolInterchange/Writer.cpp
* un/signed comparisons in MolDraw2D/catch_tests.cpp
* unused var in SubgraphUtils.cpp
* 'move' preventing copy ellision in CDXMLParser.cpp
* fix infinite recursive call in SubstructLibraryWrap.cpp
* Change atom to metal bonds from single to dative if appropriate.
* Pedantic change whilst I was in the area.
* Reinstate all tests, leave in debugging writes to see failing tests.
* Re-did it. Failing tests now pass.
* Move any positive charge from the non-metal to the metal.
Fix expected test results.
* Write dative bond to JSON.
* Bump currentRDKitJSONVersion to 11, but allow parser to still read 10.
* Only move 1 unit of charge at a time from non-metal to metal.
* Greg's hack to not do it for O+ and N+ etc.
Explicitly exclude H, He, F, Ne from dative bonds.
Fix tests.
* Update expected PostGres json version to 11.
* suggestions for PR
* Correct comment.
---------
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
Co-authored-by: greg landrum <greg.landrum@gmail.com>
* write stereogroups
* Parse stereogroups
* add parameters to python wrappers
* more tests
* write substancegroups
* parse SubstanceGroups
* Fix a crashing bug with null molecules
* more testing
* add some docs
* update expected cffi results
* oh, this is delightful syntax
* adapt minimallib and the cartridge tests
some small cleanups
* stupid padding
* update expected
* changes in response to review
* start refactor query pickling
* further query pickling refactoring
* bit of modernization
* partial implementation of query writing
* serialize recursive queries
* new tests
* support QueryAtom and QueryBond with null queries
* more query cleanup
* tests pass
* switch from std::variant to boost::variant
* update clang version for CI
* explicit instantiation of templates
* get dll builds working on windows
* optionally skip h counts on parsing; more query tests
* change in response to review
* changes in response to review
If the property fails to stringify then just don't write the property to json rather than throwing an exception.
Co-authored-by: Jason Biggs <jasonb@wolfram.com>
* expose addRing to python
* backup commit
* basics of atom and bond loading
* basics of atom and bond loading
* do bond stereo too
* Loads of cleanups
Read conformers and molecule properties
Better tests
update one of the test values so that we aren't always testing ccw
* enable auto-download of rapidjson distrib
* reader now mostly done (still missing atomic/bond properties)
* a bit of optimization
* a bit of cleanup
* a bit more optimization
* backup
* test zero-order bonds
* prep work for writer (not done)
* add isotope support
* backup
* getting there with the writing
* progress on writing; still need to do the RDKit part though
* can now roundtrip, including chirality.
double bond stereo needs to wait for backend fixes
* add a timing test for benchmarking
* add a timing test for benchmarking
* add another template
* add parse params; optionally set bond types to aromatic; add python wrapper
* disable benchmark run by default
* write conformers
* refactoring
* docs
* port to commonchem
* switch representation
* start reading and writing properties
* fix a memory problem
* set a common_property for gasteiger charges
* parse partial charges
* add partial charge writing
* reformatting
* add support for disabling parts of the parsing
* remove the "name" property from files
* editing
* more post-review changes
* make the molinterchange build optional
* make them really optional