aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epare/formulas.ipynb652
1 files changed, 362 insertions, 290 deletions
diff --git a/epare/formulas.ipynb b/epare/formulas.ipynb
index e63d295..1fa305f 100644
--- a/epare/formulas.ipynb
+++ b/epare/formulas.ipynb
@@ -5,7 +5,9 @@
"id": "672213e3-f426-4113-b5b6-304002474ce3",
"metadata": {},
"source": [
- "# Formula analysis"
+ "# Formula analysis\n",
+ "\n",
+ "This notebook analyzes behavior of formulas from the EFD in various exceptional cases, such as operating on the point at infinity or the all zero point they sometimes degenerate into."
]
},
{
@@ -176,235 +178,274 @@
]
},
{
+ "cell_type": "markdown",
+ "id": "847be8ca-6bed-47ff-b809-37d5e9b7b80a",
+ "metadata": {
+ "cell_style": "width: 700px; word-wrap: break-word;",
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "## Results (add)\n",
+ " - `P + P = ?`: Two behavior classes, complete formulas (RCB) and incomplete formulas.\n",
+ " For the complete, the result is correct, can be made affine and is on curve.\n",
+ " For the incomplete formulas the result is zeros, not affine and not on the curve.\n",
+ " - `P + infty = P` and `infty + P = P`: Four behavior classes, **for some the order matters**:\n",
+ " most of the `madd`s and `zadd`s. This is because they have an assumption `Z2 = 1`. Some\n",
+ " `madd`s fail the same in both cases.\n",
+ " > Not correct, zeros, not affine, not on curve\n",
+ " \n",
+ " > Correct, not zeros, affine, on curve\n",
+ " \n",
+ " > Not correct, not zeros, affine, not on curve\n",
+ " \n",
+ " > Not correct, not zeros, not affine, not on curve\n",
+ " - `Ord2 + Ord2 = infty`: Two behavior classes. Either correct behavior or zeros. Correct behavior for four fomulas on projective coords:\n",
+ " `add-2002-bj, add-2007-bl, add-2015-rcb, madd-2015-rcb`\n",
+ " - `P + -P = infty` and `-P + P = infty`: All correct, no zeros, no affine, on curve.\n",
+ " - `zeros + P = ?` and `P + zeros = ?`: Three behavior classes, in one, the zeros propagate, in another the formula makes up an affine point\n",
+ " that is not zeros but is not on the curve. In the final class, the formula makes up some point that is neither zeros, nor affine nor on the curve."
+ ]
+ },
+ {
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 28,
"id": "d0928c16-9688-4d65-a559-5895d1b7c85b",
- "metadata": {},
+ "metadata": {
+ "editable": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<thead>\n",
- "<tr><th>Formula </th><th>Test </th><th>Correct? </th><th>Zeros? </th><th>Affine? </th><th>On curve? </th></tr>\n",
+ "<tr><th>Coords </th><th>Formula </th><th>Test </th><th>Correct? </th><th>Zeros? </th><th>Affine? </th><th>On curve? </th></tr>\n",
"</thead>\n",
"<tbody>\n",
- "<tr><td>add-2007-bl </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2002-bj </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
- "<tr><td>add-2002-bj </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2002-bj </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2002-bj </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2002-bj </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2002-bj </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2002-bj </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2002-bj </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2015-rcb </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
- "<tr><td>add-2015-rcb </td><td>PpInfty </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
- "<tr><td>add-2015-rcb </td><td>InftypP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
- "<tr><td>add-2015-rcb </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2015-rcb </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2015-rcb </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2015-rcb </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2015-rcb </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-1998-cmo</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-1998-cmo</td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-1998-cmo</td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-1998-cmo</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-1998-cmo</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mmadd-1998-cmo</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mmadd-1998-cmo</td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-1998-cmo</td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-1998-cmo </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-1998-cmo </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-1998-cmo </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-1998-cmo </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-1998-cmo </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-1998-cmo </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-1998-cmo </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-1998-cmo </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2015-rcb </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
- "<tr><td>madd-2015-rcb </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2015-rcb </td><td>InftypP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
- "<tr><td>madd-2015-rcb </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2015-rcb </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2015-rcb </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2015-rcb </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2015-rcb </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2009-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2009-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2009-bl </td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2009-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2009-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mmadd-2009-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mmadd-2009-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2009-bl </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>add-2009-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2009-bl </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2009-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2009-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2009-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2009-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2009-bl </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2009-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2009-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2009-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2009-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2009-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2009-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2009-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2009-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2009-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2008-s </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2008-s </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2008-s </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2008-s </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2008-s </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2008-s </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2008-s </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2008-s </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-s </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-s </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-s </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-s </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-s </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2008-s </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2008-s </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-s </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2008-s </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2008-s </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2008-s </td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2008-s </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2008-s </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mmadd-2008-s </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mmadd-2008-s </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2008-s </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2007-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2007-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2007-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2007-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>zadd-2007-m </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>zadd-2007-m </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>zadd-2007-m </td><td>InftypP </td><td>False </td><td>False </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>zadd-2007-m </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>zadd-2007-m </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>zadd-2007-m </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>zadd-2007-m </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>zadd-2007-m </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2001-b </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2001-b </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2001-b </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2001-b </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2001-b </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2001-b </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2001-b </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2001-b </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-cmo-2</td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1986-cc </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1986-cc </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1986-cc </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1986-cc </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1986-cc </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1986-cc </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1986-cc </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1986-cc </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2004-hmv </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2004-hmv </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2004-hmv </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2004-hmv </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2004-hmv </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2004-hmv </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2004-hmv </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2004-hmv </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-g </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-g </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-g </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-g </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-g </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2008-g </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd-2008-g </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd-2008-g </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2007-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2007-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2007-bl </td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2007-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mmadd-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mmadd-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mmadd-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>add-1998-hnm </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-hnm </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-hnm </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-hnm </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-hnm </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-hnm </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>add-1998-hnm </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>add-1998-hnm </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>madd </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>madd </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>madd </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2007-bl </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2007-bl </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2007-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2007-bl </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2002-bj </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2002-bj </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2002-bj </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2002-bj </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2002-bj </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2002-bj </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2002-bj </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2002-bj </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2015-rcb </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2015-rcb </td><td>PpInfty </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2015-rcb </td><td>InftypP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2015-rcb </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2015-rcb </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2015-rcb </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-2015-rcb </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-2015-rcb </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>mmadd-1998-cmo</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>mmadd-1998-cmo</td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>mmadd-1998-cmo</td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>mmadd-1998-cmo</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>mmadd-1998-cmo</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>mmadd-1998-cmo</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>mmadd-1998-cmo</td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>mmadd-1998-cmo</td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>madd-1998-cmo </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>madd-1998-cmo </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>madd-1998-cmo </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>madd-1998-cmo </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>madd-1998-cmo </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>madd-1998-cmo </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>madd-1998-cmo </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>madd-1998-cmo </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>madd-2015-rcb </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>madd-2015-rcb </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>madd-2015-rcb </td><td>InftypP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>madd-2015-rcb </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>madd-2015-rcb </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>madd-2015-rcb </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>madd-2015-rcb </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>madd-2015-rcb </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo-2</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo-2</td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo-2</td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo-2</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo-2</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo-2</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo-2</td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>add-1998-cmo-2</td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>mmadd-2009-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>mmadd-2009-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>mmadd-2009-bl </td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>mmadd-2009-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>mmadd-2009-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>mmadd-2009-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>mmadd-2009-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>mmadd-2009-bl </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-2009-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-2009-bl </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-2009-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-2009-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-2009-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>add-2009-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>add-2009-bl </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-2009-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>madd-2009-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>madd-2009-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>madd-2009-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>madd-2009-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>madd-2009-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>madd-2009-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>madd-2009-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>madd-2009-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-1998-cmo-2</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-1998-cmo-2</td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-1998-cmo-2</td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-1998-cmo-2</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-1998-cmo-2</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>add-1998-cmo-2</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>add-1998-cmo-2</td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>add-1998-cmo-2</td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>add-2008-s </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>add-2008-s </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>add-2008-s </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>add-2008-s </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>add-2008-s </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>add-2008-s </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>add-2008-s </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>add-2008-s </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>madd-2008-s </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>madd-2008-s </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>madd-2008-s </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>madd-2008-s </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>madd-2008-s </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>madd-2008-s </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>madd-2008-s </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>madd-2008-s </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>mmadd-2008-s </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>mmadd-2008-s </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>mmadd-2008-s </td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>mmadd-2008-s </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>mmadd-2008-s </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>mmadd-2008-s </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>mmadd-2008-s </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>mmadd-2008-s </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2007-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2007-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2007-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2007-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>zadd-2007-m </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>zadd-2007-m </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>zadd-2007-m </td><td>InftypP </td><td>False </td><td>False </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>zadd-2007-m </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>zadd-2007-m </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>zadd-2007-m </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>zadd-2007-m </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>zadd-2007-m </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2001-b </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2001-b </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2001-b </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2001-b </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2001-b </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2001-b </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2001-b </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2001-b </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo-2</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo-2</td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo-2</td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo-2</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo-2</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo-2</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo-2</td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-cmo-2</td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1986-cc </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1986-cc </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1986-cc </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1986-cc </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1986-cc </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1986-cc </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1986-cc </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1986-cc </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2004-hmv </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2004-hmv </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2004-hmv </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2004-hmv </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2004-hmv </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2004-hmv </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2004-hmv </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2004-hmv </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2007-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2007-bl </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2007-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2007-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2008-g </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2008-g </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2008-g </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2008-g </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2008-g </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2008-g </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2008-g </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd-2008-g </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>mmadd-2007-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>mmadd-2007-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>mmadd-2007-bl </td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>mmadd-2007-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>mmadd-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>mmadd-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>mmadd-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>mmadd-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-hnm </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-hnm </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-hnm </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-hnm </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-hnm </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-hnm </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-hnm </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>add-1998-hnm </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>madd </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
"</tbody>\n",
"</table>"
],
@@ -417,19 +458,41 @@
}
],
"source": [
- "table = [[\"Formula\", \"Test\", \"Correct?\", \"Zeros?\", \"Affine?\", \"On curve?\"]]\n",
+ "table = [[\"Coords\", \"Formula\", \"Test\", \"Correct?\", \"Zeros?\", \"Affine?\", \"On curve?\"]]\n",
"test_filter = None\n",
- "for vals in results_add.values():\n",
+ "groups = {}\n",
+ "for coords_name, vals in results_add.items():\n",
" for name, formula in vals.items():\n",
" for k, v in formula.items():\n",
" if test_filter is None or k in test_filter:\n",
- " table.append((name, k, v[0], v[1], v[2], v[3]))\n",
+ " item = (v[0], v[1], v[2], v[3])\n",
+ " group = groups.setdefault(item, set())\n",
+ " group.add(name + \"-\" + k + \"-\" + coords_name)\n",
+ " table.append((coords_name, name, k, v[0], v[1], v[2], v[3]))\n",
+ "if test_filter is not None:\n",
+ " for group, formulas in groups.items():\n",
+ " print(group)\n",
+ " for f in sorted(formulas):\n",
+ " print(f\"\\t{f}\")\n",
"display(HTML(tabulate.tabulate(table, tablefmt=\"html\", headers=\"firstrow\")))"
]
},
{
+ "cell_type": "markdown",
+ "id": "f8d713ed-7f06-4457-a921-1be0e9dddac3",
+ "metadata": {},
+ "source": [
+ "## Results (dbl)\n",
+ " - `2 * Ord2 = infty`: All correct, no zeros, no affine, on curve.\n",
+ " - `2 * infty = infty`: Three behavior classes: Some formulas are correct and return infty.\n",
+ " Some make up some affine point that is not zeros and not on curve.\n",
+ " Some return zeros.\n",
+ " - `2 * zeros = ?`: Two behavior classes, the zeros either propagate or become the infty."
+ ]
+ },
+ {
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 29,
"id": "2d74db05-0606-4e54-87e0-c7fe0cbb5519",
"metadata": {},
"outputs": [
@@ -438,72 +501,72 @@
"text/html": [
"<table>\n",
"<thead>\n",
- "<tr><th>Formula </th><th>Test </th><th>Correct? </th><th>Zeros? </th><th>Affine? </th><th>On curve? </th></tr>\n",
+ "<tr><th> </th><th>Formula </th><th>Test </th><th>Correct? </th><th>Zeros? </th><th>Affine? </th><th>On curve? </th></tr>\n",
"</thead>\n",
"<tbody>\n",
- "<tr><td>mdbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mdbl-2007-bl </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mdbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2015-rcb </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2015-rcb </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2015-rcb </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-1998-cmo </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-cmo </td><td>Inftytwice</td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-1998-cmo </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2007-bl </td><td>Inftytwice</td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-1998-cmo-2</td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-cmo-2</td><td>Inftytwice</td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-1998-cmo-2</td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-2009-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2009-bl </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2009-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mdbl-2009-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mdbl-2009-bl </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mdbl-2009-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-1998-cmo-2</td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-cmo-2</td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-cmo-2</td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mdbl-2008-s-1 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mdbl-2008-s-1 </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mdbl-2008-s-1 </td><td>Zerostwice</td><td>Undefined </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2008-s-1 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2008-s-1 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2008-s-1 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-1998-cmo </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-cmo </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-cmo </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-1986-cc </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1986-cc </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1986-cc </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2007-bl </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-1998-cmo-2</td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-cmo-2</td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-cmo-2</td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-1998-hnm </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-hnm </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-1998-hnm </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>mdbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>mdbl-2007-bl </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
- "<tr><td>mdbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-bj-3 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-bj-3 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-bj-3 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-2002-bj </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-bj </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-bj </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-2002-it-2 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-it-2 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-it-2 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-2002-it </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-it </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-it </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
- "<tr><td>dbl-2002-bj-2 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-bj-2 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
- "<tr><td>dbl-2002-bj-2 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>mdbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>mdbl-2007-bl </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>mdbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-2015-rcb </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-2015-rcb </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-2015-rcb </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-1998-cmo </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-1998-cmo </td><td>Inftytwice</td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-1998-cmo </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-2007-bl </td><td>Inftytwice</td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-1998-cmo-2</td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-1998-cmo-2</td><td>Inftytwice</td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>projective</td><td>dbl-1998-cmo-2</td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>dbl-2009-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>dbl-2009-bl </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>dbl-2009-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>mdbl-2009-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>mdbl-2009-bl </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>mdbl-2009-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>modified </td><td>dbl-1998-cmo-2</td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>dbl-1998-cmo-2</td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>modified </td><td>dbl-1998-cmo-2</td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>mdbl-2008-s-1 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>mdbl-2008-s-1 </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>xyzz </td><td>mdbl-2008-s-1 </td><td>Zerostwice</td><td>Undefined </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>dbl-2008-s-1 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>dbl-2008-s-1 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xyzz </td><td>dbl-2008-s-1 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1998-cmo </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1998-cmo </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1998-cmo </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1986-cc </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1986-cc </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1986-cc </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-2007-bl </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1998-cmo-2</td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1998-cmo-2</td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1998-cmo-2</td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1998-hnm </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1998-hnm </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>dbl-1998-hnm </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>mdbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>jacobian </td><td>mdbl-2007-bl </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n",
+ "<tr><td>jacobian </td><td>mdbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-bj-3 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-bj-3 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-bj-3 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-bj </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-bj </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-bj </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-it-2 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-it-2 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-it-2 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-it </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-it </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-it </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-bj-2 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-bj-2 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n",
+ "<tr><td>xz </td><td>dbl-2002-bj-2 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n",
"</tbody>\n",
"</table>"
],
@@ -518,11 +581,20 @@
"source": [
"table = [[\"Formula\", \"Test\", \"Correct?\", \"Zeros?\", \"Affine?\", \"On curve?\"]]\n",
"test_filter = None\n",
- "for vals in results_dbl.values():\n",
+ "groups = {}\n",
+ "for coords_name, vals in results_dbl.items():\n",
" for name, formula in vals.items():\n",
" for k, v in formula.items():\n",
" if test_filter is None or k in test_filter:\n",
- " table.append((name, k, v[0], v[1], v[2], v[3]))\n",
+ " item = (v[0], v[1], v[2], v[3])\n",
+ " group = groups.setdefault(item, set())\n",
+ " group.add(name + \"-\" + k + \"-\" + coords_name)\n",
+ " table.append((coords_name, name, k, v[0], v[1], v[2], v[3]))\n",
+ "if test_filter is not None:\n",
+ " for group, formulas in groups.items():\n",
+ " print(group)\n",
+ " for f in sorted(formulas):\n",
+ " print(f\"\\t{f}\")\n",
"display(HTML(tabulate.tabulate(table, tablefmt=\"html\", headers=\"firstrow\")))"
]
},