py_ecc
py_ecc copied to clipboard
Use custom object for infinity point instead of `None`
What is wrong?
For #89, discussion offline:
If I call mypy --strict --follow-imports=silent --ignore-missing-imports py_ecc (without --no-strict-optional), then 50+ errors about "None" infinity point would show up
If I call the same command with your PR, the errors:
py_ecc/bn128/bn128_curve.py:63: error: 'None' object is not iterable
py_ecc/bn128/bn128_curve.py:75: error: 'None' object is not iterable
py_ecc/bls12_381/bls12_381_curve.py:66: error: 'None' object is not iterable
py_ecc/bls12_381/bls12_381_curve.py:78: error: 'None' object is not iterable
But it's already handled with if is_inf(pt): return pt
None is really tricky in typing, perhaps there should be a special constant object for infinity point?
How can it be fixed
I guess if the goal is to ensure all points are of the same "format", then just use (0, 0) in the "basic" code and (0, 0, 0) in the "optimized" code? (or maybe (1, 1, 0) for optimized would be more correct as that essentially sets x = y = 1/0)