Not exactly, when one asks if two linear maps are equal it is not the same thing to ask if they are similar, I mean equal as maps. In my example, if you enter:
K=GF(2)
V=K^2
B=V.basis()
B1=[vector(K,[i,j]) for i,j in [(1,0),(1,1)]]
V1=V.subspace_with_basis(B1)
and you ask V==V1 the answer is True despite they are distinct objects in Sage as their associated bases are not the same. In my opinion the option is correct because as mathematical objects they are the same.
When one defines morphisms with domains V or V1, and same codomain, the method keeps the matrix as comparison object. As you say computing the Smith form (or Jordan form in case of endomorphisms) is expensive. I am not sure if computing the images of the basis elements of either V or V1 is so expensive. If it is so, it would be better to avoid an answer for the equality, to avoid wrong answers.
This is the source of a._richcmp_??
def _richcmp_(self, other, op):
if not isinstance(other, MatrixMorphism) or op not in (op_EQ, op_NE):
# Generic comparison
return sage.categories.morphism.Morphism._richcmp_(self, other, op)
return richcmp(self.matrix(), other.matrix(), op)
File: /usr/local/sage/local/lib/python3.8/site-packages/sage/modules/matrix_morphism.py
Type: method
Best, Enrique.