From 2125aab8a0aaa2300f1aa7bb06a36eb511b21f42 Mon Sep 17 00:00:00 2001
From: Alexandre Guillemot <alexandre.guillemot@inria.fr>
Date: Thu, 27 Mar 2025 15:14:14 +0100
Subject: [PATCH] add wilkinson data test

---
 .../linear/wilkinson-developped-10/all/1.json | 51 ++++++++++++
 .../linear/wilkinson-developped-15/all/1.json | 66 +++++++++++++++
 .../linear/wilkinson-developped-20/all/1.json | 81 +++++++++++++++++++
 .../linear/wilkinson-factorized-20/all/1.json | 81 +++++++++++++++++++
 gen.sage                                      | 47 ++++++++---
 packages/adaptive                             |  2 +-
 6 files changed, 318 insertions(+), 10 deletions(-)
 create mode 100644 data/linear/wilkinson-developped-10/all/1.json
 create mode 100644 data/linear/wilkinson-developped-15/all/1.json
 create mode 100644 data/linear/wilkinson-developped-20/all/1.json
 create mode 100644 data/linear/wilkinson-factorized-20/all/1.json

diff --git a/data/linear/wilkinson-developped-10/all/1.json b/data/linear/wilkinson-developped-10/all/1.json
new file mode 100644
index 00000000..0e9eb2b8
--- /dev/null
+++ b/data/linear/wilkinson-developped-10/all/1.json
@@ -0,0 +1,51 @@
+{
+  "system": [
+    "(-0.220594373609885 + 0.0974041709475909*I)*t*x_0^10 + (-55.0000000000000)*t*x_0^9 + (1.22059437360989 - 0.0974041709475909*I)*x_0^10 + 1320.00000000000*t*x_0^8 + (-18150.0000000000)*t*x_0^7 + 157773.000000000*t*x_0^6 + (-902055.000000000)*t*x_0^5 + 3.41693000000000e6*t*x_0^4 + (-8.40950000000000e6)*t*x_0^3 + 1.27535760000000e7*t*x_0^2 + (-1.06286400000000e7)*t*x_0 + (3.62880122059437e6 - 0.0974041709475909*I)*t - 1.22059437360989 + 0.0974041709475909*I"
+  ],
+  "variables": [
+    "x_0"
+  ],
+  "parameters": [
+    "t"
+  ],
+  "path": [
+    [
+      "0.0"
+    ],
+    [
+      "1.0"
+    ]
+  ],
+  "fiber": [
+    [
+      "1.00000000000000"
+    ],
+    [
+      "0.809016994374947 + 0.587785252292473*I"
+    ],
+    [
+      "0.309016994374947 + 0.951056516295154*I"
+    ],
+    [
+      "-0.309016994374948 + 0.951056516295154*I"
+    ],
+    [
+      "-0.809016994374947 + 0.587785252292473*I"
+    ],
+    [
+      "-1.00000000000000 + 1.22464679914735e-16*I"
+    ],
+    [
+      "-0.809016994374947 - 0.587785252292473*I"
+    ],
+    [
+      "-0.309016994374948 - 0.951056516295154*I"
+    ],
+    [
+      "0.309016994374947 - 0.951056516295154*I"
+    ],
+    [
+      "0.809016994374947 - 0.587785252292473*I"
+    ]
+  ]
+}
\ No newline at end of file
diff --git a/data/linear/wilkinson-developped-15/all/1.json b/data/linear/wilkinson-developped-15/all/1.json
new file mode 100644
index 00000000..62525785
--- /dev/null
+++ b/data/linear/wilkinson-developped-15/all/1.json
@@ -0,0 +1,66 @@
+{
+  "system": [
+    "(2.08733995867334 - 1.52666130087475*I)*t*x_0^15 + (-120.000000000000)*t*x_0^14 + (-1.08733995867334 + 1.52666130087475*I)*x_0^15 + 6580.00000000000*t*x_0^13 + (-218400.000000000)*t*x_0^12 + 4.89962200000000e6*t*x_0^11 + (-7.85584800000000e7)*t*x_0^10 + 9.28095740000000e8*t*x_0^9 + (-8.20762800000000e9)*t*x_0^8 + 5.46311295530000e10*t*x_0^7 + (-2.72803210680000e11)*t*x_0^6 + 1.00967210708000e12*t*x_0^5 + (-2.70681334560000e12)*t*x_0^4 + 5.05699570382400e12*t*x_0^3 + (-6.16581761472000e12)*t*x_0^2 + 4.33916300160000e12*t*x_0 + (-1.30767436800109e12 + 1.52666130087475*I)*t + 1.08733995867334 - 1.52666130087475*I"
+  ],
+  "variables": [
+    "x_0"
+  ],
+  "parameters": [
+    "t"
+  ],
+  "path": [
+    [
+      "0.0"
+    ],
+    [
+      "1.0"
+    ]
+  ],
+  "fiber": [
+    [
+      "1.00000000000000"
+    ],
+    [
+      "0.913545457642601 + 0.406736643075800*I"
+    ],
+    [
+      "0.669130606358858 + 0.743144825477394*I"
+    ],
+    [
+      "0.309016994374947 + 0.951056516295154*I"
+    ],
+    [
+      "-0.104528463267653 + 0.994521895368273*I"
+    ],
+    [
+      "-0.500000000000000 + 0.866025403784439*I"
+    ],
+    [
+      "-0.809016994374947 + 0.587785252292473*I"
+    ],
+    [
+      "-0.978147600733806 + 0.207911690817759*I"
+    ],
+    [
+      "-0.978147600733806 - 0.207911690817759*I"
+    ],
+    [
+      "-0.809016994374948 - 0.587785252292473*I"
+    ],
+    [
+      "-0.500000000000000 - 0.866025403784438*I"
+    ],
+    [
+      "-0.104528463267654 - 0.994521895368273*I"
+    ],
+    [
+      "0.309016994374947 - 0.951056516295154*I"
+    ],
+    [
+      "0.669130606358858 - 0.743144825477394*I"
+    ],
+    [
+      "0.913545457642601 - 0.406736643075800*I"
+    ]
+  ]
+}
\ No newline at end of file
diff --git a/data/linear/wilkinson-developped-20/all/1.json b/data/linear/wilkinson-developped-20/all/1.json
new file mode 100644
index 00000000..a06dcd9f
--- /dev/null
+++ b/data/linear/wilkinson-developped-20/all/1.json
@@ -0,0 +1,81 @@
+{
+  "system": [
+    "(0.465757572254130 - 1.24321351880327*I)*t*x_0^20 + (-210.000000000000)*t*x_0^19 + (0.534242427745870 + 1.24321351880327*I)*x_0^20 + 20615.0000000000*t*x_0^18 + (-1.25685000000000e6)*t*x_0^17 + 5.33279460000000e7*t*x_0^16 + (-1.67228082000000e9)*t*x_0^15 + 4.01717716300000e10*t*x_0^14 + (-7.56111184500000e11)*t*x_0^13 + 1.13102769953810e13*t*x_0^12 + (-1.35585182899530e14)*t*x_0^11 + 1.30753501054040e15*t*x_0^10 + (-1.01422998655114e16)*t*x_0^9 + 6.30308120992949e16*t*x_0^8 + (-3.11333643161391e17)*t*x_0^7 + 1.20664780378037e18*t*x_0^6 + (-3.59997951794761e18)*t*x_0^5 + 8.03781182264505e18*t*x_0^4 + (-1.28709312451510e19)*t*x_0^3 + 1.38037597536407e19*t*x_0^2 + (-8.75294803676160e18)*t*x_0 + (2.43290200817664e18 + 1.24321351880327*I)*t - 0.534242427745870 - 1.24321351880327*I"
+  ],
+  "variables": [
+    "x_0"
+  ],
+  "parameters": [
+    "t"
+  ],
+  "path": [
+    [
+      "0.0"
+    ],
+    [
+      "1.0"
+    ]
+  ],
+  "fiber": [
+    [
+      "1.00000000000000"
+    ],
+    [
+      "0.951056516295154 + 0.309016994374947*I"
+    ],
+    [
+      "0.809016994374947 + 0.587785252292473*I"
+    ],
+    [
+      "0.587785252292473 + 0.809016994374947*I"
+    ],
+    [
+      "0.309016994374947 + 0.951056516295154*I"
+    ],
+    [
+      "6.12323399573677e-17 + 1.00000000000000*I"
+    ],
+    [
+      "-0.309016994374948 + 0.951056516295154*I"
+    ],
+    [
+      "-0.587785252292473 + 0.809016994374947*I"
+    ],
+    [
+      "-0.809016994374947 + 0.587785252292473*I"
+    ],
+    [
+      "-0.951056516295154 + 0.309016994374948*I"
+    ],
+    [
+      "-1.00000000000000 + 1.22464679914735e-16*I"
+    ],
+    [
+      "-0.951056516295154 - 0.309016994374948*I"
+    ],
+    [
+      "-0.809016994374947 - 0.587785252292473*I"
+    ],
+    [
+      "-0.587785252292473 - 0.809016994374947*I"
+    ],
+    [
+      "-0.309016994374948 - 0.951056516295154*I"
+    ],
+    [
+      "-1.83697019872103e-16 - 1.00000000000000*I"
+    ],
+    [
+      "0.309016994374947 - 0.951056516295154*I"
+    ],
+    [
+      "0.587785252292474 - 0.809016994374947*I"
+    ],
+    [
+      "0.809016994374947 - 0.587785252292473*I"
+    ],
+    [
+      "0.951056516295154 - 0.309016994374948*I"
+    ]
+  ]
+}
\ No newline at end of file
diff --git a/data/linear/wilkinson-factorized-20/all/1.json b/data/linear/wilkinson-factorized-20/all/1.json
new file mode 100644
index 00000000..3ec9b81a
--- /dev/null
+++ b/data/linear/wilkinson-factorized-20/all/1.json
@@ -0,0 +1,81 @@
+{
+  "system": [
+    "t*((x_0 - 1.00000000000000)*(x_0 - 2.00000000000000)*(x_0 - 3.00000000000000)*(x_0 - 4.00000000000000)*(x_0 - 5.00000000000000)*(x_0 - 6.00000000000000)*(x_0 - 7.00000000000000)*(x_0 - 8.00000000000000)*(x_0 - 9.00000000000000)*(x_0 - 10.0000000000000)*(x_0 - 11.0000000000000)*(x_0 - 12.0000000000000)*(x_0 - 13.0000000000000)*(x_0 - 14.0000000000000)*(x_0 - 15.0000000000000)*(x_0 - 16.0000000000000)*(x_0 - 17.0000000000000)*(x_0 - 18.0000000000000)*(x_0 - 19.0000000000000)*(x_0 - 20.0000000000000)) + (1 - t)*((-0.7992214701998634 + I*-0.9529307062916382)*(x_0^20 - 1))"
+  ],
+  "variables": [
+    "x_0"
+  ],
+  "parameters": [
+    "t"
+  ],
+  "path": [
+    [
+      "0.0"
+    ],
+    [
+      "1.0"
+    ]
+  ],
+  "fiber": [
+    [
+      "1.00000000000000"
+    ],
+    [
+      "0.951056516295154 + 0.309016994374947*I"
+    ],
+    [
+      "0.809016994374947 + 0.587785252292473*I"
+    ],
+    [
+      "0.587785252292473 + 0.809016994374947*I"
+    ],
+    [
+      "0.309016994374947 + 0.951056516295154*I"
+    ],
+    [
+      "6.12323399573677e-17 + 1.00000000000000*I"
+    ],
+    [
+      "-0.309016994374948 + 0.951056516295154*I"
+    ],
+    [
+      "-0.587785252292473 + 0.809016994374947*I"
+    ],
+    [
+      "-0.809016994374947 + 0.587785252292473*I"
+    ],
+    [
+      "-0.951056516295154 + 0.309016994374948*I"
+    ],
+    [
+      "-1.00000000000000 + 1.22464679914735e-16*I"
+    ],
+    [
+      "-0.951056516295154 - 0.309016994374948*I"
+    ],
+    [
+      "-0.809016994374947 - 0.587785252292473*I"
+    ],
+    [
+      "-0.587785252292473 - 0.809016994374947*I"
+    ],
+    [
+      "-0.309016994374948 - 0.951056516295154*I"
+    ],
+    [
+      "-1.83697019872103e-16 - 1.00000000000000*I"
+    ],
+    [
+      "0.309016994374947 - 0.951056516295154*I"
+    ],
+    [
+      "0.587785252292474 - 0.809016994374947*I"
+    ],
+    [
+      "0.809016994374947 - 0.587785252292473*I"
+    ],
+    [
+      "0.951056516295154 - 0.309016994374948*I"
+    ]
+  ]
+}
\ No newline at end of file
diff --git a/gen.sage b/gen.sage
index 57abb5ad..4f29afda 100644
--- a/gen.sage
+++ b/gen.sage
@@ -4,6 +4,7 @@ from pathlib import Path
 from sage.all import *
 import random as rdm
 
+
 class Name:
     name = None
 
@@ -135,7 +136,6 @@ class SumPowLinCtx(Name, System):
             CC, names=[f"x_{i}" for i in range(self.n_ctx.value)])
         self.system = [f"{str(choice([-1, 1]))} + " + " + ".join(["(" + str(sum([normalvariate(-1, 1)*v for v in self.ring.gens()])
                                                                             ) + f")^{self.d_ctx.value}" for _ in range(self.l_ctx.value)]) for _ in range(self.n_ctx.value)]
-        print(self.system)
         if self.structure_ctx.structure == "developped":
             self.system = list(map(self.ring, self.system))
         self.name = Path("sumpowlin" + f"-{self.structure_ctx.name}"*(
@@ -164,10 +164,12 @@ class ResultantsCtx(Name, System):
         assert "y" not in variables
         n = self.n_ctx.value
         d = self.d_ctx.value
-        
+
         Cpy = PolynomialRing(CC, names=["y"] + variables)
-        f = Cpy.random_element(degree=self.d_ctx.value, terms=binomial(n + 1 + d, d))
-        g = Cpy.random_element(degree=self.d_ctx.value, terms=binomial(n + 1 + d, d))
+        f = Cpy.random_element(degree=self.d_ctx.value,
+                               terms=binomial(n + 1 + d, d))
+        g = Cpy.random_element(degree=self.d_ctx.value,
+                               terms=binomial(n + 1 + d, d))
         h = g.resultant(f, Cpy.gens()[0])
         h = h/h.coefficients()[0]
         self.system[0] = self.ring(h)
@@ -176,6 +178,26 @@ class ResultantsCtx(Name, System):
             "resultants" + f"-{self.n_ctx.name}-{self.d_ctx.name}")
 
 
+class Wilkinson(Name, System):
+    d_ctx: None
+    structure_ctx = None
+
+    def __init__(self, d=None, structure=None):
+        self.d_ctx = IntegerCtx(d, default=5, message="Degree ?")
+        self.structure_ctx = StructureCtx(structure)
+        self.ring = PolynomialRing(CC, names="x_0")
+        self.system = [
+            "*".join([f"({self.ring.gens()[0] - (i + 1)})" for i in range(self.d_ctx.value)])]
+
+        if self.structure_ctx.structure == "developped":
+            self.system = list(map(self.ring, self.system))
+
+        self.name = Path("wilkinson" + f"-{self.structure_ctx.name}"*(
+            structure is None) + f"-{self.d_ctx.name}")
+        
+    def get_degrees(self):
+        return [self.d_ctx.value]
+
 class GradientCtx(Name, System):
     nvars_ctx: None
     d_ctx: None
@@ -195,7 +217,8 @@ class GradientCtx(Name, System):
 
     def get_degrees(self):
         return [self.d_ctx.value - 1 for _ in range(self.nvars_ctx.value)]
-    
+
+
 class SPLGradient(Name, System):
     n_ctx: None
     d_ctx: None
@@ -208,17 +231,21 @@ class SPLGradient(Name, System):
         self.l_ctx = IntegerCtx(l, default=3, message="Length ?")
         self.ring = PolynomialRing(
             CC, names=[f"x_{i}" for i in range(self.n_ctx.value)])
-        
+
         n, d, l = self.n_ctx.value, self.d_ctx.value, self.l_ctx.value
         c = [CC.random_element() for _ in range(l)]
         a = [[CC.random_element() for _ in range(n)] for _ in range(l)]
-        λ = [" + ".join([f"({aij})*{xj}" for aij, xj in zip(ai, self.ring.gens())]) for ai in a]
-        self.system = [" + ".join([f"{d} * ({a[i][k]}) * ({c[i]} + {λ[i]})^{d - 1}" for i in range(l)]) for k in range(n)]
-        self.name = Path("spl-gradient" + f"-{self.n_ctx.name}-{self.d_ctx.name}-{self.l_ctx.name}")
+        λ = [" + ".join([f"({aij})*{xj}" for aij,
+                        xj in zip(ai, self.ring.gens())]) for ai in a]
+        self.system = [
+            " + ".join([f"{d} * ({a[i][k]}) * ({c[i]} + {λ[i]})^{d - 1}" for i in range(l)]) for k in range(n)]
+        self.name = Path(
+            "spl-gradient" + f"-{self.n_ctx.name}-{self.d_ctx.name}-{self.l_ctx.name}")
 
     def get_degrees(self):
         return [self.d_ctx.value - 1 for _ in range(self.n_ctx.value)]
 
+
 class KatsuraCtx(Name, System):
     n_ctx: None
 
@@ -323,6 +350,8 @@ class TargetCtx(Name):
             self.target = KatsuraCtx()
         elif self.target_type == "spl-gradient":
             self.target = SPLGradient()
+        elif self.target_type == "wilkinson":
+            self.target = Wilkinson()
         else:
             self.target = DenseCtx()
 
diff --git a/packages/adaptive b/packages/adaptive
index 9dcdf1ef..1668336b 160000
--- a/packages/adaptive
+++ b/packages/adaptive
@@ -1 +1 @@
-Subproject commit 9dcdf1ef5d5cd65c869697149d81a2f79d2156ec
+Subproject commit 1668336b404fa6c9edad88aa246fc4f7b8475f71
-- 
GitLab