I think LinkImpl, RatioImpl etc. should override equals() and hashCode() more consistently.
LinkImpl doesn't override any of the two
RatioImpl overrides equals(), but not hashCode(). And the implementation of equals() relies on object identity of the numerators und denominators
My suggestions would be to generate all equals and hashCode implementations for these classes with your IDE of choice.
I would have created a pr, but I read you dont accept any...