Task: Fixes #7367 (rdkit/rdkit#7426)

org: rdkit
repo: rdkit
pr_number: 7426
issue_title: Fixes #7367
issue_body: Fixes #7367

The cause of the issue is simply that we don't consider the `Chem.CXSmilesFields.CX_BOND_ATROPISOMER` SMILES extension when computing the registration hash. Fixing the issue is as simple as adding it to the flags we use.

While working on this, I noticed that `wedgeBondsFromAtropisomers()` is missing a check for ring info, since both `WedgeBondFromAtropisomerOneBond2d()` and `WedgeBondFromAtropisomerOneBond3d` require ring info and call `minBondRingSize()`.


resolved_issues: number: 7367
title: RegistrationHash.GetMolLayers does not distinguish atropisomers
body: The registration hash should be able to distinguish between atropisomers, but that's currently not the case:

```python3
In [1]: from rdkit import Chem

In [2]: from rdkit.Chem import RegistrationHash

# This is one of the examples from the initial atropisomers PR
In [3]: m = Chem.MolFromMolFile('RP-6306_atrop1.sdf')

In [4]: b = m.GetBondWithIdx(3)

# The atropisomer was correctly identified
In [5]: b.GetStereo()
Out[5]: rdkit.Chem.rdchem.BondStereo.STEREOATROPCW

In [6]: hash1 = RegistrationHash.GetMolLayers(m, enable_tautomer_hash_v2=True)

# No atropisomer info in the hash: for SMILES, it's encoded in the CX extension, which is not part of the hash
In [7]: print(hash1)
{
<HashLayer.CANONICAL_SMILES: 1>: 'Cc1cc2c(C(N)=O)c(N)n(-c3c(C)ccc(O)c3C)c2nc1C', 
<HashLayer.ESCAPE: 2>: '', 
<HashLayer.FORMULA: 3>: 'C18H20N4O2', 
<HashLayer.NO_STEREO_SMILES: 4>: 'Cc1cc2c(C(N)=O)c(N)n(-c3c(C)ccc(O)c3C)c2nc1C', 
<HashLayer.NO_STEREO_TAUTOMER_HASH: 5>: '[C]:[C]1:[N]:[C]2:[C](:[C]:[C]:1-[CH3]):[C](:[C](:[N]):[O]):[C](:[N]):[N]:2:[C]1:[C](-[CH3]):[C]:[C]:[C](:[O]):[C]:1-[CH3]_11_0', 
<HashLayer.SGROUP_DATA: 6>: '[]', 
<HashLayer.TAUTOMER_HASH: 7>: '[C]:[C]1:[N]:[C]2:[C](:[C]:[C]:1-[CH3]):[C](:[C](:[N]):[O]):[C](:[N]):[N]:2:[C]1:[C](-[CH3]):[C]:[C]:[C](:[O]):[C]:1-[CH3]_11_0'
}

# Now, reverse the atropisomer
In [8]: b.SetStereo(Chem.BondStereo.STEREOATROPCCW)

In [9]: hash2 = RegistrationHash.GetMolLayers(m, enable_tautomer_hash_v2=True)

# No atropisomer info either
In [10]: print(hash2)
{
<HashLayer.CANONICAL_SMILES: 1>: 'Cc1cc2c(C(N)=O)c(N)n(-c3c(C)ccc(O)c3C)c2nc1C', 
<HashLayer.ESCAPE: 2>: '', 
<HashLayer.FORMULA: 3>: 'C18H20N4O2', 
<HashLayer.NO_STEREO_SMILES: 4>: 'Cc1cc2c(C(N)=O)c(N)n(-c3c(C)ccc(O)c3C)c2nc1C', 
<HashLayer.NO_STEREO_TAUTOMER_HASH: 5>: '[C]:[C]1:[N]:[C]2:[C](:[C]:[C]:1-[CH3]):[C](:[C](:[N]):[O]):[C](:[N]):[N]:2:[C]1:[C](-[CH3]):[C]:[C]:[C](:[O]):[C]:1-[CH3]_11_0', 
<HashLayer.SGROUP_DATA: 6>: '[]', 
<HashLayer.TAUTOMER_HASH: 7>: '[C]:[C]1:[N]:[C]2:[C](:[C]:[C]:1-[CH3]):[C](:[C](:[N]):[O]):[C](:[N]):[N]:2:[C]1:[C](-[CH3]):[C]:[C]:[C](:[O]):[C]:1-[CH3]_11_0'
}

# We'd want these to be different to deduplicate the atropisomers, but ...
In [11]: hash1 != hash2
Out[11]: False
```

Reference solution:
fix_patch: diff --git a/Code/GraphMol/Atropisomers.cpp b/Code/GraphMol/Atropisomers.cpp
index 1ea48d7b588..e82f86bffd4 100644
--- a/Code/GraphMol/Atropisomers.cpp
+++ b/Code/GraphMol/Atropisomers.cpp
@@ -1166,6 +1166,12 @@ void wedgeBondsFromAtropisomers(
         &wedgeBonds) {
   PRECONDITION(conf == nullptr || &(conf->getOwningMol()) == &mol,
                "conformer does not belong to molecule");
+
+  // WedgeBondFromAtropisomerOneBond 2d/3d requires ring bond counts
+  if (!mol.getRingInfo()->isSssrOrBetter()) {
+    RDKit::MolOps::findSSSR(mol);
+  }
+
   for (auto bond : mol.bonds()) {
     auto bondStereo = bond->getStereo();
 
diff --git a/rdkit/Chem/RegistrationHash.py b/rdkit/Chem/RegistrationHash.py
index 23c483d9eb4..0d70cc8e71b 100644
--- a/rdkit/Chem/RegistrationHash.py
+++ b/rdkit/Chem/RegistrationHash.py
@@ -35,7 +35,8 @@
 
 logger = logging.getLogger(__name__)
 
-DEFAULT_CXFLAG = Chem.CXSmilesFields.CX_ATOM_LABELS | Chem.CXSmilesFields.CX_ENHANCEDSTEREO
+DEFAULT_CXFLAG = (Chem.CXSmilesFields.CX_ATOM_LABELS | Chem.CXSmilesFields.CX_ENHANCEDSTEREO
+                  | Chem.CXSmilesFields.CX_BOND_ATROPISOMER)
 
 ENHANCED_STEREO_GROUP_REGEX = re.compile(r'((?:a|[&o]\d+):\d+(?:,\d+)*)')