1.5.2 release notes

John May edited this page Jan 25, 2014 · 42 revisions

This is a development (unstable) release.

Summary of Changes

  • Multiple bug fixes bring the total failures and errors down to that of 1.4.x stable branch.

  • isEmpty method to test whether an AtomContainer has no atoms.

IAtomContainer container = ...;
if(container.isEmpty()) {
   // no atoms
  • Stereochemistry data model for double bonds - also in 1.4.15.
public interface IDoubleBondStereochemistry extends IStereoElement {
   enum Conformation {
        TOGETHER,  //  as in Z-but-2-ene
        OPPOSITE   //  as in E-but-2-ene
    IBond[] getBonds();
    IBond getStereoBond();
    Conformation getStereo();
  • Indicate whether to ignore aromatic bonds in the InChIGenerator. This is beneficial when clearly defined bond orders are available.
InChIGeneratorFactory inchiFactory = InChIGeneratorFactory.getInstance();
inchiFactory.setIgnoreAromaticBonds(true); // false by default
InChIGenerator generator = inchiFactory.getInChIGenerator(container);
  • New module cdk-group provides calculation of the automorphism group using partition refinement. Gilleain has a nice post with some more details - Using CDK's group Module
AtomDiscretePartitionRefiner refiner = new AtomDiscretePartitionRefiner();

IAtomContainer   container = ...;
PermutationGroup group     = refiner.getAutomorphismGroup(container);
IAtomContainer benzoquinone = ...;
  • Object cloning improved, IStereoElements are now deeply cloned and using covariance the cast can now be removed.
// previously cloning required a cast from `Object`
IAtomContainer clone = (IAtomContainer) container.clone();
// this cast is now redundant
IAtomContainer clone = container.clone();
  • Improved atom type perception for SINGLE_OR_DOUBLE bond type introduced in 1.5.1.
  • IBond.Order now has a numeric() accessor which provides the integer value of the bond order. This replaces the bad practice of using Enum.ordinal().
int singleOrder = IBond.Order.SINGLE.numeric(); // 1 
int doubleOrder = IBond.Order.DOUBLE.numeric(); // 2 
  • Long pseudo atom aliases are now written as atom aliases in MDL V2000.

  CDK 04191323202D          

  1  0  0  0  0  0            999 V2000
   -1.7973    3.3000    0.0000 R   0  0  0  0  0  0  0  0  0  0  0  0
A    1
  • ChemObject properties will now automatically cast to their requested type. A new accessor getProperty(String, Class<?>) allows you to specify the return type and do inline casts.
// accessing a title as a String by casting
String title = (String) container.getProperty(TITLE);

// the cast is now redundant
String  title = container.getProperty(TITLE);
Integer label = atom.getProperty(CANONICAL_LABEL); 

// inline cast
if(container.getProperty(TITLE, String.class).equals("ATP")){
   // molecule has title 'ATP'
  • Singlet, Doublet and Triplet radicals are now correctly read and written in MDL V2000 format.
  • A new DynamicFatory allows registration of implementations. The factory allows you to create and register custom types and also simplifies the existing ChemObjectBuilders - SilentChemObjectBuilder.
  • Faster ring checking tool: RingSearch. Related blog post: Scaling Up - Faster Ring Detection in CDK
IAtomContainer container;
RingSearch     ringSearch = new RingSearch(container);
// test whether atom 'i' is in a ring
for(int i = 0; i < container.getAtomCount(); i++)
// or check using the atom
for(IAtom atom : container.atoms())

// only those atoms and bonds which form the rings of a molecule (possibly disconnected)
IAtomContainer frags = ringSearch.ringFragments();

// isolated and spiro rings (no fragments)
for(IAtomContainer isolated : ringSearch.isolatedRingFragments()) { 

// fused and bridges ring systems (no fragments)
for(IAtomContainer fused : ringSearch.fusedRingFragments()) {
  • Unspecified stereo bonds are now rendered.

  • QueryChemObjects previously would through an exception when the getBuilder() method was invoked. These objects can creep in from reading normal input (e.g. query bonds in MDL). Common tools like the atom typing require the builder to run and thus would not function correctly. To fix this all query objects now take a IChemObjectBuilder in their constructor. This required front end changes to the SMARTSQueryTool and to any fingerprinters which use SMARTS (e.g. PubchemFingerprinter).

IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance();
IBitFingerprinter  fp      = new PubchemFingerprinter(builder);
AllShortestPaths asp = new AllShortestPaths(fullerene);
for(int i = 0, n = fullerene.getAtomCount(); i < n; i++){
    for(int j = i + 1; j < n; j++){  
        IAtom[] path = asp.from(i).atomsTo(j);
  • The new module cdk-hash provides generation of atomic and molecular hash atom enviroments. Atomic properties can be encoded with custom AtomEncoders of which a couple are provided. The depth of the hash code specifies how much of it's environment each atom feels. There is also support for encoding of double bond and tetrahedral stereochemistry with rarer geometries to follow. This is based on Ihlenfeldt and Gasteiger's article - Hash codes for the identification and classification of molecular structure elements. The generators are quite complicated to assembly but the HashGeneratorMaker provides a fluent way of constructing the generators. The HashCodeScenarios test also provides demonstrations from the original publication.
MoleculeHashGenerator generator = new HashGeneratorMaker().depth(5)
for (IAtomContainer m : ms) {
   long hash = generator.generate(m);


 182 John May
  76  Egon Willighagen
  12  Stephan Beisken
  11  Gilleain Torrance
   5  Ralf Stephan
   2  LuisFF
   2  Klas Jönsson
   1  Arvid Berg


 134  Egon Willighagen 
  50  John May 
   2  Stephan Beisken 
   3  Gilleain Torrance 

Full Change Log

  • javadoc taglet error 7426d2f
  • correct taglet name a8efbc7
  • bumping version number for 1.5.2 release 676ef42
  • changing IMolecule to IAtomContainer 4735754
  • Unit test to verify that wedge bond information is properly read 77878a8
  • Unit tests for the expected behavior of bug #1294 03d57cd
  • Added missing dependency d8a3354
  • move printed statements to comments and added assertion messages (on fail) 1c5503f
  • ensuring all molecules are named 729af6b
  • missing dependency dfce2f1
  • including hash code scenrios in the module tests cacc40e
  • hash code scenario tests - demonstrating examples from the original publication and other use cases 3617288
  • ensuring the original invariant array is copied and can not be modified bfb4719
  • typo and formatting 38cbfe1
  • moving @cdk.cite out of the first sentence 078a330
  • adding git.hash tag 438b14b
  • removing period ('.') in copyright notice and adding notice and license to classes from which they were missing be4a650
  • alternate methods to breaking the symmetry of uniform hashed atom environments. d9f6722
  • perturbed atom hash codes 74de143
  • chiral hash code configuration in HashGeneratorMaker, the configuration will add both double bond and tetrahedral encoding to the new hash generator 5afe537
  • a factory for generating double bond stereo encoders based on 2D/3D atom coordinates bb26ddf
  • updated DoubleBond2DParity to provide all substituent atoms, this is required for cases where the double bond drawing is skewed in 2D due to 3D configuration. df146cc
  • added geometry parities for 2D/3D double bond configurations and some utility classes for combinding their permutation parities 37ca197
  • including stereo configuration in basic hash codes 5640f29
  • a factory for generating tetrahedral stereo encoders based on 2D/3D atom coordinates 142a43a
  • API for encoding stereo values in the hash code and an implementation for encoding geometry and using multiple encoders 08c402c
  • geometric parity configuration for 2D/3D tetrahedral stereo centres for hash code 20332b6
  • api for calculating the permutation parity of a sub-array 920ad3e
  • fluent API for building hash generators f3f10ce
  • a hash generator for basic molecule hashes 31af02f
  • including coverage tests cdf32bc
  • a generator for basic atom hash codes 1729048
  • improved error message 630a6b7
  • citation for original publication 5fe1a88
  • an atom hash generator for seeding hash values 7a811d7
  • an abstract super class providing utility methods for other hashing functions 2d60945
  • classes and unit tests for encoding common atom invariants 8600e71
  • a fast pseudorandom number generator 101525b
  • add hash module to build 9f1fcad
  • hash coding API f9e3d7a
  • compile taglets to build directory 42af957
  • ensuring net/sf/* classes are cleaned d7455bb
  • citation for cdk-group documentation 6507869
  • resolving javadoc problems 6a4781b
  • Revert "removed settable input stream, this could be reintroduced but should be done via a constructor. the configFile path was corrected and renamed, several small tidy ups to the loading code" 82aba8b
  • Revert "moved configuration of MM2 into a single (previously broken) method - resolves unit test in error" 8bc6479
  • Revert "grouping location fields and correcting value (leading slash)" 7ff4641
  • Revert "moves MMFF94 parameter loading to a single (previously broken) method - resolves failing unit test" 637f8cf
  • Revert "Restored the leading slash-less config file paths" 15e73b6
  • Revert "Using the ClassLoader is important too" cbae234
  • Using the ClassLoader is important too 6624689
  • Restored the leading slash-less config file paths b13ba75
  • isRingSaturated check for SINGLE_OR_DOUBLE bond flag 9dbf86a
  • correct mass number from exact mass 9ad58d0
  • return the matching isotope closest to the provided exact mass e69c387
  • Added a convenience method to get an isotope based on an element symbol and exact mass, returning null when nothing suitable is found 8e9243e
  • only rebound atoms (and clear existing bonds) if the option is set f7428d6
  • corrected long broken unit test, the test was likely broken due to changes in the Fingerprinter… the new test does not depend on the output from Fingerprinter being preserved and isolates the test with bit sets. An additional method was added to perform the more intuitive differences both ways opposed to just the differences one way. b3074ad
  • replacing implementation with interface 6a08ec8
  • unit test for MurckoFragmenter.getFragmentsAsContainers 8d8f7d3
  • unit tests for MurckoFramgnter.getFrameworksAsContainers 653efc6
  • test for FragmentUtils.traverse() 243f448
  • new test for FragmentUtils.makeAtomContainer() ee6bd49
  • suppressing superclass test (expects exception) and indicate which test verifies getRawFingerprint b915f75
  • removing test method annotation from constructors, this method was renamed to getRawFingerprint and does not explicit test object construction c477d7b
  • incorrect method name from super class 2d828d7
  • missing dependencies required by AbstractFingerprinterTest for Lingo and Signature fingerprinters. 22d8c66
  • test annotations 5564ad8
  • unit test for Tanimoto from IBitFingerprint 36c8439
  • unit tests to ensure getCountFingerprint/getRawFingerprint throw an UnsupportedOperation exception, in the case of the only implementor (SignatureFingerprint) the methods are overridden f62103a
  • correct method name for inherited tests de0f6a3
  • moves MMFF94 parameter loading to a single (previously broken) method - resolves failing unit test 63e3757
  • removing stdout 4948888
  • grouping location fields and correcting value (leading slash) 18b53bf
  • moved configuration of MM2 into a single (previously broken) method - resolves unit test in error 1b29ea8
  • removed settable input stream, this could be reintroduced but should be done via a constructor. the configFile path was corrected and renamed, several small tidy ups to the loading code c13cebe
  • using array list instead of vector 3ac357b
  • when IMolecule was removed (27c6f7df) this conditional was broken. ICrystal was not a subclass of IMolecule but it is a subclass of IAtomContainer and so the first condition will match and writeCrystal is never called. 9631e2e
  • corrected caught exception, this exception changed in commit: 1ef89fb0 1e065a3
  • updated unit test assertions to match the fingerprinter that was changed in b27ee124bb 15ecad1
  • corrected assertion to compare correct values, an IBitFingerprint (7004511a2b) cannot be comapred with an BitSet 7fa4a3a
  • corrected assertion, refer to data added in: commit deebfaba04 e844cbc
  • replaced manipulator produce anonymous structures - the new method avoids cloning so all values will always be default and avoids issues from the previous commit 3b8438f
  • resolved three unit test errors in cdk-builder3d, due to the SINGLE_OR_DOUBLE flag which if not erased was leading to different atom types and thus fingerprints when searching for templates. f50a040
  • using reflection to correct unit test. Unit test order is non certain and so in this test the template may already be loaded (fail) - to avoid this we use reflection to create a new non-singleton instance and to excite the private loading of templates. efce85c
  • resolved two regressions in builder3d due to null field values 53bc775
  • factory call with interface abeff2e
  • removed a line which tried to add a bond which didn't exist - the molecule has 3 atoms at indices 0, 1 and 2 (there is no 3). 1a3de8e
  • resolving failing unit test in MDMoleculeTest, the MDMoleculeCustomizer invokes storeAtomData() on it's own which however the core module also invokes this method via (storeData) at the end. This resolution simply cleans up the existing data once the atoms or bonds have been stored. Invoking the method again does not store the atoms twice. 80cc27b
  • resolved failing unit test, test was failing because it was looking for the ICrystal in the wrong place 0fc002b
  • annotations to satisfy coverage unit test e867e4b
  • adding mockito dependency to domain modules 48861ee
  • fixing failing coverage test in cdk-cip 5aaff49
  • update DynamicFactory to be thread safe - when a constructor for given parameters is not found a lock is obtained before searching for an appropriate match. 700bf50
  • tests for ShortestPathWalker 99f3c7c
  • toString tidy up, removed trailing join string '->' 4d63442
  • removed unused and redundant method, walker.paths().size() is equivalent 51106e5
  • removed incorrect implementation, getRawFingerprint should return a map of path keys e.g. [CC:C] to the hash value, this implementation was returning a map of hashes (int) to hashes (int). f8b9d21
  • correct test method name 63e085c
  • removed annotation to missing test method a29c8d0
  • resolves failing unit tests 460ba9d
  • Replacing array list with a linked list queue - quicker polling fda0852
  • including preceding path conditional required by Vismara's MCB Union, also included the reference for the article. 43c2825
  • renamed AllShortestPaths to AllPairsShortestPaths as this is the correct name for the problem c7f3a8b
  • Change shortest path implementation to encode multiple shortest paths. This causes two regressions in the unit tests as both these molecules had multiple shortest paths. adce573
  • Allowing traverse() to return the set of paths. Once the traversal is done the set is wrapped in an immutable decorator only once and stored for access. 05400d4
  • Updated java doc and renamed getPaths() -> paths() ff0968c
  • Reduced number of iterations. This path also resolves the previous regression. e664a57
  • Removing temporary method be69d81
  • Removed redundant allPaths set (no regressions) 2cb5093
  • Replaced path tools shortest path implementation with the new AllShortestPaths. Removed redundant canonicalisation step. This patch cause a single regression due to multiple-shortests paths. 83d68dd
  • Replaced atom iteration with integer for loops - this causes no regressions. 10a2457
  • Commented out a line which could lead to a bug. This line was in the existing implementation but can cause issues when at molecule has multiple pseudo atoms with the same label. Also removed nPseudoAtoms, this is given by the size of the pseudoAtoms list. 296d539
  • replaced setAtom with a new method to encode a path of indexed vertices to a string. These changes cause no test regressions. f43c72a
  • Variable/method renaming and copyright update ad96f24
  • Corrected constructor visibility 2f9e10e
  • Improved terminology in javadoc and added @cdk.githash to production classes. 43224b8
  • Introduced a new utility for computing the first shortest path and all shortest paths from a start to an end atom. This implementation replaces an existing static method in PathTools which has now been deprecated. Another helper class was added that simplifies the computation of all-vs-all shortest paths. f5b4be1
  • Minor JavaDoc cleanup a1bc458
  • throw an exception when a new instance of a non-interface is passed to a builder. 2384708
  • Removed redundant import (not found in class path) 4c20736
  • Updated for a recent API change: added an IChemObjectBuilder 1ceb75b
  • Corrected fingerprint call (difference due to patch from cdk-1.4.x) 4386e8c
  • Correct unit test name and added missing unit tests and annotations. d12129c
  • Added explicit atom typing and aromaticity detection to several failing fingerprinter tests. 2d2ca82
  • Fixed proton isotope perception. 638a0ed
  • Updated patch d1748f93aa7810efbbdc2be7e4243f7ececc6fe4 for master 5f78272
  • Small patch for bug 3551478 d1748f9
  • Added additional test that non matching symbols mismatch 83d3c63
  • non-null atomic numbers when reading from InChi [bug:1293] 93466ad
  • Test to ensure that the atom type name is returned with IAtomType.toString() 8cfb295
  • Added a unit test for the sorting of the multiplier 0d4c77f
  • allow DescriptorEngine to load the two descriptors that require an IChemObjectBuilder injection. DescriptorTest was updated and generiffied to allow testing of the modified descriptors. f30e2b2
  • Made QueryChemObject require a IChemObject builder when being constructed. This has a knock on effect that all the SMARTs atoms require the builder also. Although there are a lot of changes there's little front end API changes - the SMARTSQueryTool and PubChemFingerprinter now require a builder but other methods (e.g. descriptors and QueryAtomContainerCreator) could make use of the builder from other IChemObjects. 9b736ad
  • Added an option to define a maximum drawable ring size for the aromatic ring representation. Added dynamic scaling based on the ring size for inner bond elements. bc9d9fc
  • Added a wavy bond type for unset stereobonds. 1e67f59
  • Reformatting patch 3386be2
  • The adjacency matrix was corrected in order to account for aromatic bonds. There was also other corrections to the condition statements to set the node priorities. This corrections fix bug 3562476. 0aa0b79
  • Added new tests for equivalent class partitioning of aromatic systems (bug:3562476) Added test class to extra modules test suite a8e5d31
  • a faster ring search to identify the atoms and bonds which are members of rings. 7f96eea
  • updated sort to also sort multiplier values - bug:1291 6b8d8ca
  • renamed variable 'minimum' and added explanation as to why it is used. 60e9719
  • unit tests ensure broken comparators don't put null to the start of the set and than an empty set is never sorted 19de82c
  • replacing full array sort with a range sort 66ed48f
  • Fixed null condition to ensure that null values get pushed back in the array. a47c793
  • Now also has a task to create a source distrib that includes the unit tests (per user request) e740074
  • Expanded explanation of Sigma Electronegativity Descriptor f673395
  • Added missing literature reference, and minimal additional information requested in bug #1285 b4f4313
  • Added unit test and annotation for moment generation (3D Similarity) d527061
  • Changed saturation conditional to also check that a bond is not aromatic. f4b625f
  • Throw an error when a non-ring is attempted to be closed 29d6fbb
  • C1C1 is an invalid SMILES; expect an thrown error be20bee
  • Properly pad the resulting descriptor value list to MAX_PROTON_COUNT, fixing two failing unit tests ab1dc1f
  • Small fixes: remove STDOUT use and proper int-based assertEquals() method acbe8be
  • Typed the input class and added support for IChemFile.class input 46b51a5
  • s/implmentorsOf/implementorsOf/ 74ba3a4
  • Corrected typo in DynamicFactory javadoc and made the interfaces static b314703
  • updated DefaultChemObject to use the new DynamicFactory 4c0bcd1
  • Corrected bad practice in ConstructorKey.equals 613d21c
  • Included missing javadoc for DynamicFactory and SilentChemObjectBuilder 5b97d06
  • Implemented SilentChemObjectBuilder using the new DynamicFactory d14839b
  • Added mockito to the Eclipse .classpath 61b7364
  • Implemented a dynamic factory so we can replace the decision tree in the ChemObjectBuilders. The dynamic factory uses reflection to inspect an implementations constructor. The factory also allows simple registration of an implementation with a given interface. As the factory uses a symbol table the factory can provide near constant time access (might have some hash collisions) for all class types. This implementation is advantageous to a decision tree (existing ChemObejctBuilders) as it is easier to register new classes and there is a negligible performance improvement. The factory also allows explict definition of object creation and post instantation modification (see. the javadoc). f9ede2a
  • Including the Mockito library in devellib. The library allows us to mock objects and create stub implementations in unit tests. The library is particularly useful in core where there is no access to data,silent or datadebug domain objects. a87dd75
  • Added a missing dependency on the test data 971aa36
  • Added a missing dependency 0a937a3
  • Updated of patch: "Added correct radical perception to the SDF writer / reader (tests included)." 3f8bccf
  • Added correct radical perception to the SDF writer / reader (tests included). 1015418
  • Properly implemented Isotope.compare() for data and silent 88a3b12
  • And the Groovy deps for the CDKSourceCodeWriterTest 0e20e88
  • Also updated the Eclipse .classpath c9a9be1
  • Also updated the other two PMD config files for 5.0.1 c7493db
  • Updated PMD to version 5.0.1 412d7ec
  • Corrected method call on DebugChemObject cc2af0f
  • Added unit tests for the new getProperty(Object,Class) method. 959f3fe
  • Gentrified IChemObject.getProperty() and provided a getProperty() which takes a class parameter so the method can be chained. 5baedfe
  • Fixed accepts() methods to also properly accept interfaces, fixing 7 testAcceptsAtLeastOneChemObjectClass() unit tests 1463387
  • Added type check for the atom-atom mapping property. 962e33b
    • Modified getTotalHydrogenCount(IAtomContainer) to actually provide the total hydrogen count. the only classes invoking this are AtomContainerSetManipulator and MoleculeSetManipulator the test on each of these were tested and worked as expected. - Added method to just count implicit hydrogens (as the pervious method actually did) - Modified existing unit test to reflect the change to total hydrogen count - Added three new unit tests for the new implicit method - Added null check and exception throw on new/existing methods 856781e
  • Updated comparator on AtomPlacer. The comparator now uses the built in Integer comparator. To avoid null pointer exceptions the access to the weight value is wrapped in a private method which return the minimum integer value when the weight is not set (i.e. null). 8d0642e
  • Unified spelling of Canonicalisation to the US spelling (z instead of s) and renamed the class name to be the noun instead of verb. c8a843f
  • It is not clear why RandomNumber needs to be serialisable but as the RandomGenerator field is not it has been marked as transient so it is not serialised. 6b22cdd
  • Updated documentation and removed SVN tags. Renamed variables to be more concise and reflect their use. fd7d0fe
  • Optimisations to SimpleAtomComparator. The LinkedList isn't needed and has an added cost and was replaced with an ArrayList. The iterator was replaced with a foreach and the redundant counter was removed (the atoms were always added at their original index [they're also being sorted so order is not important]). 63e7358
  • Made ShortestPathWalker public and optimised/cleaned path iteration. c6fe476
  • Removed new instance creation on RandomNumber generation. This also required the method was non-static. 80db3c3
  • Removed redundant cast on comparator fd5fb30
  • Move new classes from standard to fingerprint 21adb90
  • Added unit test for methods related to ShortestPathFingerprint. This include unit test for RandomNumber, SimpleAtomComparator, SimpleAtomCanonicalisation. bab373d
  • Corrected null handling on AtomContainer 2D centre comparison. Previous if either container was null the comparator would incorrectly return '0' indicating they were equal. The method was changed to always provide a minimum Point2d when an atom container is null. This will sort all null containers lower then non-null containers. eda7ba7
  • Replaced subtraction based comparator. This comparator is unlikely to overflow but the safety of using the equalities ensures the proper behaviour of this comparator. 0968c90
  • Replaced subtraction based comparison. When the difference (which is a double) is converted to an integer the result may overflow. This overflow can occur in rare cases but would cause the comparator to be non-transitive. f15ea9f
  • OK, simple fix: reset the test graph before each test method call f1e2e3d
  • Make sure the tests are also run with JUnit4 091336d
  • Corrected canonical label sorting in the SmilesGenerator. This canonical labels are long and thus when the difference between two values is taken the result may be larger then the largest possible integer. This in rare cases cause the value to overflow and thus make the comparator non-transitive. 26a2f9b
  • corrected handling of null value in the TreeNodeComparator. Previous if any node or atom were null the comparator would return '0' which is incorrect. If one is null and the other is not the objects are not equal. 65ed12c
  • Generified comparators, removing redundant casts 6a323f0
  • Corrected comparator in InvPair sorting. The current comparison was in violation of the comparable contract which was throwing an IllegalArgumentException on JRE 7. 5937bd1
  • Proper modules (wasn't this fixed earlier already??) 8fc7db8
  • Added more unit tests for the MDLV2000Writer - including corner cases such as multiline RGPs, atom aliases, truncated atom aliases and pseudo atoms with null labels. The MDLV2000Writer can now handle all of these cases correctly. cb4670b
  • Revert "Added more unit tests for the MDLV2000Writer - including corner cases such as multiline RGPs, atom aliases, truncated atom aliases and pseudo atoms with null labels. The MDLV2000Writer can now handle all of these cases correctly." 54b3728
  • Added more unit tests for the MDLV2000Writer - including corner cases such as multiline RGPs, atom aliases, truncated atom aliases and pseudo atoms with null labels. The MDLV2000Writer can now handle all of these cases correctly. e3b1c8e
  • Added a missing dependency 01f8db4
  • Alter the data representation in the refiners, and fix some test cases for the Bond Refiner c1ad408
  • Post-review fixes; javadocs, making permutation final, improvement to partition refiner fcc06b3
  • Additional patch that calls refine before returning the automorphism partition 186b35b
  • Additional patch for aromatic support, and test cases borowed from bug 1250 cd85e29
  • The second half of the group module, containing the majority of the important stuff : The key classes are the Atom and Bond Discrete Partition Refiners. b90b343
  • Fixed a bug in the fromString static method of Partition, and test for the case that caused it 81c44f3
  • Added a method to check that two elements are in the same cell of a partition 8726639
  • Added a method to order the cells of a partition 22c75eb
  • A few unit tests uncovering some issues with == comparisons 1ad2ad4
  • Added accessor for the bond length in StructureDiagramGenerator 8bd4b10
  • Updated the @cdk.bugs taglet to support the new SourceForge project pages 704df11
  • Replaced IBond.Order.ordinal() usages with IBond.Order.numeric() f2bfd74
  • Added a field to the bond order enumeration allow access to the numeric value for that order. b66ebfe
  • Added perception of N.sp2 and N.planar3 when SINGLE_OR_DOUBLE is used 7a39faa
  • Fixed a big goof up: 1. IBond.Order.UNSET was not considered; 2. when SINGLE_OR_DOUBLE the type bond order can also be SINGLE, and in fact must be SINGLE or DOUBLE, as the flag name suggests b6b13ed
  • Added a missing dependency 75f4e08
  • Merged in cdk-1.4.x patches: s/IMolecule/IAtomContainer/ an s/Nonotification/Silent/ acb9b68
  • unit test 588fa6a
  • unit test 0d9ae1b
  • unit test for bug 1269 (atom... not placed by SDG, causing NPE), remove catch statements, set expected 340ce40
  • Added a unit test for C.sp2 perception with SINGLE_OR_DOUBLE bonds 8956530
  • Added detection of C.sp2 atom types with SINGLE_OR_DOUBLE bonds 6f26188
  • Accept that bonds are sometimes unset (and except them to have a SINGLE_OR_DOUBLE flag then), and no longer use IBond.Order ordinals for comparison, but do it the proper way. 53d1989
  • Fixed a bug present in many readers: it would not accept a subclass if ChemFile (e.g. NNChemFile) even if ChemFile itself was accepted b8f4e87
  • Fixed loading of the right class when reporting possible alternative constructors 276554f
  • [bug:1275] added check to ensure that when String.substring is called the string is long enough 75a4d01
  • [bug:1274] added conditional to ensure that when multiple bond stereo is specified as attributes and characters only one is used. This is achieved by using the existing flag to determine if a stereo bond value has already been provided. 3195052
  • Updated Gilleain's code to hook in with the other two new selenium atom types 937d40a
  • Missing Se.2 atom type and test case d0d2c8e
  • Added finally cause to ensure the file is closed 98b28a9
  • Moved methods for resetting the atom/bond data variables outside the store atom/bond data methods. The methods that store atom/bond data should not reset the variables immeditately to allow intuitive override behaviour. e26196e
  • Compile fixes for merge with cdk-1.4.x: add missing method, and using new stronger typed clone() return values 0cbb246
    • added unit test to demonstrate the bug d676efd
  • added unit test to demonstrate bug and correct bug id's for two recents tests cdb1cbe
  • Adding CMLReaderTest of io module test suite 4222c1c
  • Resolved NoNotify fails on AtomParity. Error was due to subclassing of AtomParity. Also the assertEquals params were swapped as the assertion was the wrong way. aa6c1c5
  • Added unit tests for bugs 1270 (removalAllElements should remove stereo elements) and 1273 (double bond stereo chemistry constructor should throw an exception on wrong input). Added @cdk.bug tag for bug 1264 (stereo element cloning) d1972eb
  • Used return covariance on clone() to provide cleaner front-end API cf52582
  • Added deep cloning of stereo element to atom containers and polymers (atom container subclass) 3f4ce3d
  • Added stereo element shallow copy cc7b6f0
  • Added a 'map' method on all IStereoElements. The map method allows a stereo element on one container/molecule to mapped to a stereo element on another. This mapping is achieved using two symbol tables, one for atoms and one for bonds. All methods are null safe and the mapping will not fail if any content in the stereo elements is null. The mapping simplifies the cloning of molecules/atom containers but could also be used when comparing isomorphic graphs. 54b05f4
  • Reworked AtomContainer.clone() so it is clear what is going on. We now use a HashMap between the original and cloned atoms to avoid to a linear search each time the atom mapping is needed. This is also useful when we add StereoElement cloning (not yet implemented). We also store a bond mapping as well - we will need the bond mapping for double bond stereo chemistry. The stereo elements in the clone need to be set to an empty array on the clone so we don't remove elements from the original (cloning odditity). It was also clear we need to change the clone() method on Polymer which currently undoes all the cloning work we do in the AtomContainer. For all clone instances I added some code to correctly create HashMaps that won't need to resized. The default HashMap implementation works best at 0.75 capacity - we therefore need to do some simple arithmetic to ensure we don't get a resize. The implemented method is what is used in the Guava library. d0c4891
  • Added unit tests for DoubleBond and AtomParity cloning 0fa2cc2
  • Added ability to setStereoElements - this was required due to clone() being shall on List. We need to be able to set a new array when have cloned a AtomContainer 886800a
  • Added unit test for tetrahedral chirality stereo element cdfb597
  • Removed the obsolete OPTIMIZE_TOKEN_MANAGER option, giving warnings in JavaCC 4 for not being present 97b1803
  • Added a missing dependency ce40db4
  • Renamed constructer parameter out to writer (Writer) and change default constructor to use the ByteArrayOutputStream. Added Writer -> OutputStream conversion in setWriter() similar to constructor and modified both to print a warning message. I'm aware the OutputStream doesn't handle encodings… but I'm not sure if this is an issue as the CML serializers take an encoding as a parameters. Added null check on 'close()' f7b6302
  • Fixed closing <ul> (fixes #1265) 2fd3406
  • Added cdk-silent dependency for test-renderextra c26154d
  • Removed redundant code from ChemObj clone - the existing code did exactly what the copy constructor of HashMap does and thus provides a cleaner implementation 229700d
  • Added removal of stereo elements in 'removeAllElements()' - documentation has been updated 04f6a1e
  • Added check to ensure a DoubleBondStereochemistry is never created with more then 2 bonds - this would cause errors with some methods. d2c3a5b
  • Removed print to standard out from ChemObjectBuilders a2b5b1e
  • Removed redundant code - we don't need to check whether the bond is already in the container as we create a new instance. We also don't need to check the array size as this is done by addBond(IBond) e35e4ef
  • Added the now requires isEmpty() method, copying the implementation from AtomContainer a5ff5fd
  • s/Molecule/AtomContainer/ 9a52e64
  • Added unit test and @TestMehtod annotaitons for new 'isEmpty' mehtods 9d8c528
  • add isEmpty() to classes/interfaces ChemModel, AtomContainerSet, ReactionSet, Crystal and AtomContainer ec21865
  • Be more informative when the test fails ee6da32
  • Added missing test annotation ad2e751
  • Documenting new method and extended unit test cadbf58
  • Removed SVN tags, as suggested by the reviewer d1816a3
  • Removed cdk.create dates, as suggested by the reviewer 0a570fe
  • Testing that benzoquinone is perceived as aromatic using the alternative detection method. 5e3b0a4
  • Because the placement of double bonds is not deterministic, we cannot be sure we always get them at the same location. Better is to just test that all carbons are perceived as C.sp2 and that they are aromatic. 8b202ed
  • Added an alternative aromaticity perception model, which is happy about double bonds pointing outwards from aromatic rings 8ba0aab
  • Removed unused imports 2f14157
  • s/IMolecule/IAtomContainer/ fd2b29c
  • Fixed failure when the bond order sum is not set 02494bd
  • Fixed the problem with failure if the molecule only have implicit bonds 4ce50f3
  • Added meta data about commons-math jar 31dbb7b
  • s/Molecule/AtomContainer/ d65f21d
  • Added the missing S.2minus atom type for selenide b7d2ae6
  • There is no Se.2 atom type in the CDK; the perception seems to match Se atoms with two neighbors; I added two unit tests for the changed code, assuming one and two implicit hydrogens 23e26b9
  • Added aromaticity-based perception: N.planar3 b4cb0ce
  • Added renderextra to dist-large and test-all targets 9af07f0
  • Simplified Partition.isDiscrete() Included method call for retrieve the first non discrete cell - personal preference just makes the code super readable Included @inheritDoc and @override on toString, equals and hashCode Added illegal argument check on 'fromString' Added check on Permutation.setTo that the permutations are the same size Used StringBuilder instead of StringBuffer - StringBuffer is thread-safe and only need when being accessed by multiple threads. f093134
  • A group module (and package) with few basic classes cc0f101
  • Added option to the InChIGenerator that indicates aromatic bonds should be treated as single/double. The option is set in the factory singleton. A unit test was added to demonstrate the the observed issue. f421510
  • Ignore this failing test case; it was one of the original points at which we decided new tools were needed f33d806
  • Added double bond stereo 6707836
  • Added a data model for double bond stereochemistry 670c525
  • s/Molecule/AtomContainer/g 73b534d
  • Added similar testing to reader and writers to fix four further unit tests for support of matching against some IChemObject interface class cbcd660
  • s/Molecule/AtomContainer/g 3aafd3f
  • Fixed the readers and writers to also accept the matching interfaces (fixes #3553780) 7ca34ab
  • And open for more API changes 8231482