Define (in)equality operations for Configurable
With the Run 3 configurable behaviour, testing equality two Configurables that are identically named and configured was returning False, because they were different objects, and no equality operator was defined.
I've now created equality/inequality operators for Configurable, which should test that all properties are identical (including any tools held in ToolHandle properties -- I assume that services are safely identified by name). This allows me to merge ComponentAccumulators containing identical algorithms successfully, as was intended.
Defining the hash with recursion into childrens' properties in a __hash__
method caused frequent generation of default configurables from ToolHandles that resulted in two types of issues:
- Immediate crash due to incorrect C++ initialisation of the ToolHandle, and therefore failure to access the right class in ConfigurableDb
- Inconsistency between default configurable and a configured instance to be set, which was treated as an error mode.
So, for now the main operation is in a getStrDescriptor
method instead, meaning that the default python hashing still applies when Configurables are placed in sets or used as keys to a dict. We may wish to implement proper hashing, but possibly after the Gaudi Configurable updates in gaudi/Gaudi!721 (merged).