Currently the equivalent() methods match for
[Cd,Cs].equivalent([Cd,Cb,H]) = True
[Cd,Cb,H].equivalent([Cd,Cs]) = True
[R].equivalent([Cs]) = True
[Cs].equivalent([R]) = True
etc.
and the subgraph matching is confusingly named too.
I propose methods called self.isSpecificCaseOf(other) that is true if they are identical or self is fully contained within other (other is equal to or more general than self).
We may also need exact matching, such as self.isIdenticalTo(other) that is true only if they match exactly.