Which typechecker are you using? It looks like mypy does not produce an error, while pyright does for the code snippet you shared. I interpret the doc section linked to just refer to function arguments, not any variable marked as float (e.g., foo(1) is acceptable for def foo(x: float): ...).
Then, I’d view mypy’s behavior as more correct, while pyright is guarding against a potential pitfall. I don’t know how pydantic works under the hood, but MVAWp(1) works even though isinstance(1, float) == False.
Ben’s suggestion still produces type errors (seems like a bug though), but outside of pydantic numbers.Real would guard against passing ints vs floats.