py_ecc icon indicating copy to clipboard operation
py_ecc copied to clipboard

Use custom object for infinity point instead of `None`

Open hwwhww opened this issue 5 years ago • 1 comments

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

hwwhww avatar May 09 '20 01:05 hwwhww

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)

vbuterin avatar Jun 13 '20 15:06 vbuterin