Thanks. This works for ensuring that a function with -> int
only returns an int but not for ensuring that I have MPZ
when I should rather than int
. An example is:
def g(x: MPZLike) -> MPZLike:
return x + 1
g(1) # checks fine
Now the function g
is operating with int
when I wanted it to use MPZ
. I can also end up having a mixed list of MPZ
and int
:
a: list[MPZLike] = [1, 2, MPZ(3)]
For examples of why I want to care about this in both directions see e.g. broken int printing and perf problems with int
or gmpy2.mpz broken with log. The situation here is that I can have a protocol to regulate my own usage but I still always have a strong preference about which type it is regardless of whether they seem to be compatible with a protocol: if I say it is MPZ
then it should be MPZ
and not int
and vice versa.