Design of a moving 7-bar mechanism

Laurent polynomial systems are systems that have negative exponents. In this section, we consider a Laurent system with one irreducible component of degree three and six isolated points.

A reference for the general case is the paper by Carlo Innocenti: Polynomial solution to the position analysis of the 7-line Assur kinematic chain with one quaternary link, in Mech. Mach. Theory, Vol. 30, No. 8, pages 1295-1303, 1995.

The special case was introduced in the paper with title: Numerical decomposition of the solution sets of polynomial systems into irreducible components, SIAM J. Numer. Anal. 38(6):2022-2046, 2001, by Andrew Sommese, Jan Verschelde, and Charles Wampler.

This special sevenbar mechanism has 6 isolated solutions and a cubic curve.”

SymPy is used to define the equations, with complex arithmetic.

from cmath import exp
from sympy import var

From phcpy, the following functions are imported:

from phcpy.solutions import coordinates, diagnostics, condition_tables
from phcpy.solver import solve
from phcpy.sets import double_laurent_membertest
from phcpy.cascades import double_laurent_top_cascade
from phcpy.cascades import double_laurent_cascade_filter
from phcpy.factor import double_monodromy_breakup

a Laurent polynomial system

The code in this section defines the Laurent polynomial system for a generic instance of the parameters.

def symbolic_equations():
    """
    Returns the symbolic equations,
    with parameters a1, a2, a3, a4, a5, a6
    b0, b2, b3, b4, b5, and c0, with variables
    t1, t2, t3, t4, and t5.
    """
    a0, a1, a2, a3, a4, a5, a6 = var('a0, a1, a2, a3, a4, a5, a6')
    b0, b2, b3, b4, b5, c0 = var('b0, b2, b3, b4, b5, c0')
    t1, t2, t3, t4, t5, t6 = var('t1, t2, t3, t4, t5, t6')
    eq1 = a1*t1 + a2*t2 - a3*t3 - a0
    eq2 = b2*t2 + a3*t3 - a4*t4 + a5*t5 - b0
    eq3 = a4*t4 + b5*t5 - a6*t6 - c0
    return [eq1, eq2, eq3]

Then the symbolic equations are computed via

eqs = symbolic_equations()
for equ in eqs:
    print(equ)

with output in

-a0 + a1*t1 + a2*t2 - a3*t3
a3*t3 - a4*t4 + a5*t5 - b0 + b2*t2
a4*t4 - a6*t6 + b5*t5 - c0

A generic instance of the problem is defined in the following function:

def generic_problem(eqs):
    """
    Given the symbolic equations in eqs,
    defines the equations for a generic problem,
    as a Laurent polynomial system.
    The system is returned as a list of string representations,
    suitable for input to the solve of phcpy.
    """
    i = complex(0, 1)
    subdict = {a0: 0.7 + 0.2*i, b0: 0.6, c0: 0.5 - 0.5*i, \
        a1: 0.7, a2: 0.8, b2: 0.6 + 0.5*i, a3: 0.4, a4: 0.6, \
        a5: 0.8, b5: 0.4 + 0.3*i, a6: 0.9}
    print(subdict)
    conjugates = {a0: 0.7 - 0.2*i, b0: 0.6, c0: 0.5 + 0.5*i, \
        a1: 0.7, a2: 0.8, b2: 0.6 - 0.5*i, a3: 0.4, a4: 0.6, \
        a5: 0.8, b5: 0.4 - 0.3*i, a6: 0.9}
    print(conjugates)
    result = []
    for equ in eqs:
        pol = equ.subs(subdict)
        result.append(str(pol) + ';')
    for equ in eqs:
        pol = str(equ.subs(conjugates))
        pol = pol.replace('t1', 't1**(-1)')
        pol = pol.replace('t2', 't2**(-1)')
        pol = pol.replace('t3', 't3**(-1)')
        pol = pol.replace('t4', 't4**(-1)')
        pol = pol.replace('t5', 't5**(-1)')
        pol = pol.replace('t6', 't6**(-1)')
        result.append(pol + ';')
    return result

Then the system is constructed symbolically via

T1, T2, T3, T4, T5, T6 = var('T1, T2, T3, T4, T5, T6')
generic = generic_problem(eqs)
for equ in generic:
    print(equ)

with output

0.7*t1 + 0.8*t2 - 0.4*t3 - 0.7 - 0.2*I;
t2*(0.6 + 0.5*I) + 0.4*t3 - 0.6*t4 + 0.8*t5 - 0.6;
0.6*t4 + t5*(0.4 + 0.3*I) - 0.9*t6 - 0.5 + 0.5*I;
0.7*t1**(-1) + 0.8*t2**(-1) - 0.4*t3**(-1) - 0.7 + 0.2*I;
t2**(-1)*(0.6 - 0.5*I) + 0.4*t3**(-1) - 0.6*t4**(-1) + 0.8*t5**(-1) - 0.6;
0.6*t4**(-1) + t5**(-1)*(0.4 - 0.3*I) - 0.9*t6**(-1) - 0.5 - 0.5*I;

Observe the negative exponents. Now, let us call the blackbox solver:

sols = solve(generic)
print('found', len(sols), 'solutions')

which prints found 18 solutions.

A condition table is a frequency table of the err, rco, and res fields of the solutions.

condition_tables(sols)

with output in

([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 2],
 [3, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 7])

The first and third row indicate that the forward and backward errors of the solutions were all very small. The second row indicates that the estimates for the condition numbers were also in the good range. So, 18 solutions are well conditioned.

a special problem

As we have as many equations as variables, for general coefficients, we will have only isolated solutions. For special parameters, the system has an irreducible cubic as a solution set.

def special_parameters():
    """
    Returns a dictionary with special values for the parameters
    for the Assur7c in Roberts Cognate pattern.
    Before calling this function, the symbolic_equations()
    must have defined the variables for the parameters.
    """
    i = complex(0, 1)
    # start with the independent parameters
    result = {b0: 0.0, c0: 1.2, a2: 0.46, \
        b2: -0.11 + 0.49*i, a5: 0.41}
    theta4 = 0.6 + 0.8*i
    theta3 = exp(1.8*i)
    # add the derived parameters
    result[a3] = result[a5]
    beta = result[b2]/result[a2]
    result[a0] = result[c0]/beta
    result[b5] = result[a5]*beta
    result[a4] = abs(result[b2])
    result[a1] = abs(result[a0] + result[a3]*theta3 - result[a4]*theta4/beta)
    result[a6] = abs(result[a4]*theta4 - result[b5]*theta3-result[c0])
    return result
def conjugates(dic):
    """
    Given on input a dictionary with variables as keys
    and complex numbers as values.
    Returns a dictionary with the same keys,
    but with values replaced by complex conjugates.
    """
    result = {}
    for key in list(dic.keys()):
        result[key] = dic[key].conjugate()
    return result
def special_problem(eqs):
    """
    Given the symbolic equations in eqs,
    replaces the parameters with special values.
    """
    pars = special_parameters()
    conj = conjugates(pars)
    result = []
    for equ in eqs:
        pol = equ.subs(pars)
        result.append(str(pol) + ';')
    for equ in eqs:
        pol = str(equ.subs(conj))
        pol = pol.replace('t1', 't1**(-1)')
        pol = pol.replace('t2', 't2**(-1)')
        pol = pol.replace('t3', 't3**(-1)')
        pol = pol.replace('t4', 't4**(-1)')
        pol = pol.replace('t5', 't5**(-1)')
        pol = pol.replace('t6', 't6**(-1)')
        result.append(pol + ';')
    return result

Constructing the polynomials of the special problem

special = special_problem(eqs)
for equ in special:
    print(equ)

leads to

0.710358341606049*t1 + 0.46*t2 - 0.41*t3 + 0.240761300555115 + 1.07248215701824*I;
t2*(-0.11 + 0.49*I) + 0.41*t3 - 0.502195181179589*t4 + 0.41*t5;
0.502195181179589*t4 + t5*(-0.0980434782608696 + 0.436739130434783*I) - 0.775518556663656*t6 - 1.2;
0.710358341606049*t1**(-1) + 0.46*t2**(-1) - 0.41*t3**(-1) + 0.240761300555115 - 1.07248215701824*I;
t2**(-1)*(-0.11 - 0.49*I) + 0.41*t3**(-1) - 0.502195181179589*t4**(-1) + 0.41*t5**(-1);
0.502195181179589*t4**(-1) + t5**(-1)*(-0.0980434782608696 - 0.436739130434783*I) - 0.775518556663656*t6**(-1) - 1.2;

Running the solve of the solver module and printing the number of solutions

sols = solve(special)
print('found', len(sols), 'solutions')

shows found 6 solutions. Let us look at all solutions, executing

for (idx, sol) in enumerate(sols):
    print('Solution', idx+1, ':')
    print(sol)

which gives the output

Solution 1 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -5.66058532229597E-01  -3.67759063106022E-01
 t2 :  5.87958784214731E-01  -2.31024744989669E-01
 t3 :  2.66141319725173E-01   1.71943916132782E+00
 t4 :  2.42136902539446E-01   1.56435563278512E+00
 t5 : -8.79136932379914E-02  -5.67977370543055E-01
 t6 : -1.05957839449340E+00   1.03531112257767E+00
== err :  3.073E-15 = rco :  3.135E-02 = res :  9.853E-16 =
Solution 2 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  3.53717078322846E-01  -5.30879118400565E-01
 t2 : -5.99365365166588E-01  -1.57888836421937E+00
 t3 :  5.27607584716191E-01  -7.54168308853111E-02
 t4 :  5.86169848996842E-01  -8.37877878416834E-02
 t5 : -1.85739737768408E+00   2.65498503011424E-01
 t6 : -1.08247082572556E+00  -1.13383016827930E+00
== err :  2.542E-15 = rco :  3.053E-02 = res :  4.510E-16 =
Solution 3 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  8.69193907041793E-01  -1.30453665759482E+00
 t2 : -2.10146778358548E-01  -5.53582709999063E-01
 t3 :  1.85739737768408E+00  -2.65498503011422E-01
 t4 :  1.67183103323242E+00  -2.38973437749056E-01
 t5 : -5.27607584716191E-01   7.54168308853116E-02
 t6 : -4.40509781239126E-01  -4.61410384022367E-01
== err :  8.299E-16 = rco :  2.577E-02 = res :  4.302E-16 =
Solution 4 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -5.45421549881402E-01  -8.38161877518281E-01
 t2 : -5.49340801920855E-01  -8.35598398361888E-01
 t3 : -9.74098087752273E-01   2.26125884049935E-01
 t4 :  1.78912046655936E-01  -9.83865071827120E-01
 t5 :  4.72153176961024E-02  -9.98884734979395E-01
 t6 : -8.74935009483375E-01  -4.84240363022669E-01
== err :  2.024E-15 = rco :  1.693E-01 = res :  6.661E-16 =
Solution 5 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -1.24225818334613E+00  -8.07075027813303E-01
 t2 :  1.47332994921904E+00  -5.78910775622768E-01
 t3 :  8.79136932379908E-02   5.67977370543054E-01
 t4 :  9.66290808831226E-02   6.24284218493861E-01
 t5 : -2.66141319725174E-01  -1.71943916132781E+00
 t6 : -4.82817017275396E-01   4.71759173981634E-01
== err :  2.046E-15 = rco :  3.752E-02 = res :  9.992E-16 =
Solution 6 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  2.80836878017556E-01  -9.59755514673061E-01
 t2 : -9.99161738567148E-01   4.09367827689738E-02
 t3 : -4.72153176961015E-02   9.98884734979395E-01
 t4 :  9.35633636119240E-01  -3.52972660360954E-01
 t5 :  9.74098087752273E-01  -2.26125884049935E-01
 t6 : -9.37276397924231E-01   3.48587082225057E-01
== err :  1.949E-15 = rco :  1.566E-01 = res :  7.910E-16 =

The output of

condition_tables(sols)

is

([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1],
 [2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6])

The solve of the solver module misses the component, but finds all isolated solutions.

a numerical irreducible decomposition

A numerical irreducible decomposition for this system augments the system with a linear equation and adds one slack variable. A cascade of homotopies find generic points on all positive dimensional components of the solution set.

The cascade is wrapped in the following function

def embed_and_cascade(pols, topdim):
    """
    Computes and solves an embedding at top dimension topdim
    of the Laurent polynomials in pols, before running one
    step in the cascade homotopy.
    Returns the embedded system, the three generic points,
    and the filtered solutions at the end of the cascade.
    """
    (embpols, sols0, sols1) \
        = double_laurent_top_cascade(len(pols), topdim, pols, 1.0e-08)
    print('the top generic points :')
    for (idx, sol) in enumerate(sols0):
        print('Solution', idx+1, ':')
        print(sol)
    print('the nonsolutions :')
    for (idx, sol) in enumerate(sols1):
        print('Solution', idx+1, ':')
        print(sol)
    print('... running cascade step ...')
    (embdown, nsols1, sols2) = double_laurent_cascade_filter(1, embpols, \
        sols1, 1.0e-8)
    filtsols2 = []
    for (idx, sol) in enumerate(nsols1):
        err, rco, res = diagnostics(sol)
        if res < 1.0e-8 and rco > 1.0e-8:
            _, point = coordinates(sol)
            crdpt = []
            for pt in point:
                crdpt.append(pt.real)
                crdpt.append(pt.imag)
            onset = double_laurent_membertest(embpols, sols0, 1, crdpt)
            if not onset:
                filtsols2.append(sol)
    print('... after running the cascade ...')
    for (idx, sol) in enumerate(filtsols2):
        print('Solution', idx+1, ':')
        print(sol)
    print('found %d isolated solutions' % len(filtsols2))
    return (embpols, sols0, filtsols2)

Running the code in

(embpols, sols0, isosols) = embed_and_cascade(special, 1)

produces the following output:

the top generic points :
Solution 1 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -1.38546903964616E-01  -6.90082116709782E-01
 t2 :  1.73335780614296E+00  -1.87923014523194E+00
 t3 :  2.29192181084370E+00  -6.88217799479036E-01
 zz1 :  6.81370071005700E-17   1.65228741665612E-16
 t4 :  1.45392357364500E+00   2.10288883797136E+00
 t5 : -2.29192181084370E+00   6.88217799479037E-01
 t6 : -7.03671420729004E-01  -1.59719770241003E-02
== err :  1.018E-14 = rco :  7.104E-03 = res :  1.619E-15 =
Solution 2 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  9.95322784254993E-01   2.68098302301308E-02
 t2 : -2.29577075969873E-01  -2.62541647600257E-01
 t3 :  2.05412606828065E+00   2.36770142844668E+00
 zz1 :  7.58249556746807E-16  -7.20127010307089E-16
 t4 :  3.06452334567059E-01  -1.66495396855090E-01
 t5 : -2.05412606828065E+00  -2.36770142844668E+00
 t6 :  2.44172639794733E-01  -9.65280235905487E-01
== err :  3.577E-15 = rco :  2.031E-02 = res :  1.998E-15 =
Solution 3 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -2.82166573126121E-01   3.94770824953965E-01
 t2 : -1.34882663123749E-01  -2.78088349356538E+00
 t3 : -5.29856181081608E-02   1.79767069529071E-01
 zz1 :  2.43319655939393E-15   2.43565365274284E-15
 t4 :  2.74289769478703E+00   4.77512904043170E-01
 t5 :  5.29856181081606E-02  -1.79767069529072E-01
 t6 :  3.23379011328058E-01   3.61784458285676E-01
== err :  6.752E-15 = rco :  2.149E-03 = res :  2.746E-15 =
the nonsolutions :
Solution 1 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  2.06608664978716E-01  -5.16879012501813E-01
 t2 : -2.63044555866456E+00  -3.32754563190078E+00
 t3 :  2.63517362859822E-02  -3.68638950244269E-01
 zz1 :  2.85704892320864E-01  -1.03310141444983E+00
 t4 :  3.69849125743338E+00  -3.24986222144375E-01
 t5 :  2.43555779349728E+00   2.20779169965979E+00
 t6 : -9.87691023055072E-01   2.23467268352943E+00
== err :  3.403E-15 = rco :  2.764E-02 = res :  1.561E-15 =
Solution 2 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  3.09054535971898E-01   3.45124987046649E-02
 t2 : -2.62571332002632E-01   3.96698883381851E-02
 t3 :  4.32699725536785E+00   5.00970765602759E+00
 zz1 :  2.88323234772462E-01  -1.68997834567399E+00
 t4 : -1.07803480589631E+00  -1.04944159716503E+00
 t5 : -1.51252934187501E+00  -6.41341577084612E+00
 t6 :  1.32322533488782E+00   1.47762805502765E+00
== err :  6.549E-15 = rco :  1.025E-02 = res :  3.109E-15 =
Solution 3 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -4.38810628559853E-02  -3.73466290987713E-01
 t2 :  1.41948412243664E+00   2.64381540059301E-01
 t3 : -1.51714321706050E-01   2.82809534841746E+00
 zz1 :  5.80561465793845E-01   7.55877838451024E-01
 t4 :  6.84618807253357E-01  -1.45281628643651E-01
 t5 :  2.97376151600431E-01  -2.76806627220378E+00
 t6 : -3.91051079512042E-01  -5.02441609168954E-01
== err :  3.533E-15 = rco :  1.180E-02 = res :  1.086E-15 =
Solution 4 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -5.56053317223021E-01  -1.10476501709143E+00
 t2 :  1.08198361813419E+00  -6.10107625522898E-01
 t3 :  1.63797645826712E+00   2.65500692732987E-01
 zz1 : -3.75750870070081E-02  -3.41463274433182E-01
 t4 :  1.13327119828200E+00   1.00882972129605E+00
 t5 :  8.79031826440765E-02  -8.01012123191631E-01
 t6 : -2.97523163734206E-01   1.24044339222691E+00
== err :  1.312E-15 = rco :  2.758E-02 = res :  1.305E-15 =
Solution 5 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  1.42858931075131E-01   4.57096616580137E-01
 t2 : -1.11064648867271E-01  -1.72825737676934E-01
 t3 :  2.13308888441550E+00   1.81873215330586E+00
 zz1 : -7.57293747789502E-01  -3.06703567333995E-01
 t4 :  2.49672678368341E-01  -1.36328639570869E-01
 t5 : -1.84534929207840E+00  -3.88014927109987E+00
 t6 :  2.03214759107748E+00  -3.03532919113466E-01
== err :  7.406E-15 = rco :  6.149E-03 = res :  1.971E-15 =
Solution 6 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -4.75108750576191E-02  -1.75815265025158E-02
 t2 : -3.39314399121161E+00   1.41556569134256E+01
 t3 : -8.54021034392022E+00  -1.38811633117136E+01
 zz1 : -1.13042166796985E+01   7.26160237898825E+00
 t4 :  4.31260891858428E-03  -2.20764606490238E-02
 t5 :  1.89710631587227E-02  -1.71967991631555E-02
 t6 :  1.24227998831989E+01  -1.02611559314054E+01
== err :  1.583E-14 = rco :  1.029E-05 = res :  1.698E-14 =
Solution 7 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  9.24280274976326E-01  -1.03328843987402E+00
 t2 : -5.37485466298478E-01  -6.93996812904627E-01
 t3 :  2.16870928120656E+00   3.05270120118574E-01
 zz1 :  1.72164678001449E-03  -2.61490044232207E-01
 t4 :  1.12688433550202E+00   6.04135856872397E-01
 t5 : -1.14709448190074E+00   7.21699657198301E-01
 t6 : -1.06009576375345E+00  -9.36416226240182E-03
== err :  1.235E-15 = rco :  1.803E-02 = res :  1.473E-15 =
Solution 8 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  2.56141977779414E-01  -1.26192262870549E-01
 t2 :  2.72348811313250E-02   2.27695964490337E+00
 t3 :  8.94179859360769E-02   1.64582692269313E-02
 zz1 : -1.69636690132142E+00   1.17291673807606E+00
 t4 :  1.44816411386502E-01  -5.21926135720004E-02
 t5 : -1.06047458297333E+00  -2.70699717824994E+00
 t6 :  2.29314581678167E+00  -1.93548691562723E+00
== err :  3.630E-15 = rco :  1.266E-03 = res :  2.873E-15 =
Solution 9 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -5.55849610226793E-01  -6.71303249412053E-01
 t2 :  2.22897995402302E+00  -6.36069101208733E-01
 t3 : -6.01231159130768E-03   3.20619531479791E-01
 zz1 :  1.91319173054801E-01   8.69593783238856E-01
 t4 :  1.46082467405615E+00   1.30115181744724E+00
 t5 : -2.81326700289881E-01  -5.36286320208369E-01
 t6 : -5.80370651666996E-01  -3.51674733202245E-01
== err :  1.098E-15 = rco :  2.893E-02 = res :  1.563E-15 =
Solution 10 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  1.96420789232812E-01  -7.25547806896222E-01
 t2 :  4.99261380871303E-01   6.57994832350889E-02
 t3 :  1.79119494447843E-01   8.39067157393641E-02
 zz1 : -2.92932332587968E-01   7.12592654282584E-01
 t4 :  1.31985073905489E+00   5.86875406583772E-01
 t5 : -2.16641539477234E-01  -1.59643525554850E-01
 t6 : -2.56051374441468E-01  -6.62533448829890E-01
== err :  4.769E-16 = rco :  7.725E-03 = res :  1.402E-15 =
Solution 11 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -2.60846935289829E-01  -1.87501112823166E+00
 t2 :  8.91205034115317E-01   2.18216656676799E+00
 t3 :  1.35354427992550E-01   2.14130902473316E-01
 zz1 : -4.38444725918741E-01   6.37863637010385E-01
 t4 :  4.58998133742581E-01   3.40221617387902E-01
 t5 :  1.48618652575694E+00  -8.83671361618052E-01
 t6 : -4.27731643521526E-01   3.12634407365499E-01
== err :  4.740E-15 = rco :  1.451E-02 = res :  2.900E-15 =
Solution 12 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  2.58526368145855E-02  -5.89746935862251E-01
 t2 :  5.89197128653301E-01  -8.56471323438483E-01
 t3 :  4.99885121099350E-01  -8.51253650022305E-02
 zz1 : -1.40247285577845E-01   4.15696687647816E-01
 t4 :  1.66773190687860E+00   8.55179987286000E-01
 t5 : -3.91334700102683E-01   1.44828575079480E-01
 t6 : -3.52629174262130E-01  -2.31227315105538E-01
== err :  3.496E-15 = rco :  1.796E-02 = res :  1.877E-15 =
Solution 13 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  1.31675077902931E+00  -2.33335629490662E+00
 t2 :  2.60288716555775E-01  -6.40025748193045E-02
 t3 :  3.47791530603780E+00   3.39861528263726E+00
 zz1 :  1.78921624866824E+00  -9.20506290946835E-01
 t4 : -3.11182618390869E-02   1.27100852726915E-01
 t5 : -1.76684760979132E-01   1.89283790316579E-02
 t6 : -3.78392322972795E+00   1.30979364462129E+00
== err :  5.729E-15 = rco :  1.880E-03 = res :  3.067E-15 =
Solution 14 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  1.09751178036435E+00  -1.40574539820329E+00
 t2 : -6.26603734750229E-01   2.77315044013342E+00
 t3 :  1.16737341994583E-01   1.23560628499014E-01
 zz1 : -9.17943053708135E-01   1.14574950444327E+00
 t4 :  2.24794207999588E-01  -2.20864560734679E-01
 t5 :  7.19265347716089E-03  -2.96930745959293E-01
 t6 : -1.46858876699108E-01  -1.65019111957513E+00
== err :  9.467E-16 = rco :  1.061E-02 = res :  1.874E-15 =
Solution 15 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -1.30458602699707E+00  -2.33541493076135E+00
 t2 : -1.95199047692026E-01  -4.46316027103696E-01
 t3 : -2.63391619655473E-01  -2.31639399176850E-01
 zz1 :  3.72490200270314E-01  -8.90356341436546E-01
 t4 :  2.41781694569341E+00   1.09012175794204E-01
 t5 :  4.97584553326169E+00   7.63254192555898E-01
 t6 : -1.44788918406800E+00   3.95223854445634E+00
== err :  1.808E-15 = rco :  2.602E-02 = res :  1.971E-15 =
Solution 16 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  5.06717666964459E-01  -7.97241780193331E-01
 t2 : -4.84953123213085E-01  -4.42303335072244E-01
 t3 :  9.44820387296986E-01  -1.44512677763047E-02
 zz1 : -2.86872573899956E-01   1.14217012524121E-01
 t4 :  1.47330976885270E+00   3.99769298368997E-01
 t5 : -2.57072989456668E-01   3.67302107948625E-01
 t6 : -4.07703118258568E-01  -1.02532173760480E-01
== err :  1.760E-15 = rco :  2.381E-02 = res :  1.249E-15 =
Solution 17 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -4.44607365409264E-02  -2.59406017880835E-01
 t2 :  3.78176637095005E-01   4.39268560397966E-01
 t3 : -1.79503189927382E+00   3.20305158897225E+00
 zz1 :  6.51015867427647E-01   9.37169953082408E-01
 t4 :  1.30934173849756E+00  -1.12550388002783E+00
 t5 :  2.25665017724524E+00  -2.76677636166897E+00
 t6 : -3.40266607063703E-01  -2.61585700440509E-01
== err :  7.075E-15 = rco :  6.393E-03 = res :  2.526E-15 =
Solution 18 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -2.53488386324696E-01  -2.83321822997287E-01
 t2 :  4.84338946463415E-01  -1.67152891112537E+00
 t3 : -4.67320096443835E-01  -4.71307905321838E-02
 zz1 :  7.80393042398170E-02   4.84167415461090E-01
 t4 :  2.41580881604416E+00   6.84660143775337E-01
 t5 :  4.73818299916806E-01   3.62365346793219E-01
 t6 : -3.86544038004814E-01   4.76118474348958E-02
== err :  3.492E-15 = rco :  2.148E-02 = res :  1.291E-15 =
Solution 19 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -1.33188225629716E-01   2.10966347401895E-02
 t2 :  7.81125047936108E-02  -6.85635891220529E-02
 t3 : -1.17563370850181E+00  -1.23520999866901E+00
 zz1 : -1.16759331681420E+00   1.23236695756379E+00
 t4 :  2.02453946582577E+00   5.47406959303102E-01
 t5 : -7.18144929758816E-02  -1.30397505946681E-01
 t6 :  1.24906033996779E+00  -1.34990480788646E+00
== err :  2.561E-15 = rco :  1.448E-03 = res :  5.407E-15 =
Solution 20 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  7.93825359960543E-01   3.42942332165835E-01
 t2 :  1.61651669536702E-01  -2.20420239291763E+00
 t3 :  4.64285871839968E+00   3.38285150308267E+00
 zz1 :  5.85868505889160E-01  -1.37232304716824E+00
 t4 :  4.40119366407873E-02   3.19449005533791E-01
 t5 : -3.57045518779285E+00  -3.30999449881425E+00
 t6 :  1.53654644664973E-01   4.28064658906619E-01
== err :  3.056E-15 = rco :  1.438E-02 = res :  3.844E-15 =
Solution 21 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -7.60489144456182E-02  -1.04300898291791E+00
 t2 :  1.30846500932422E+00   6.09095986219939E-02
 t3 :  2.60207018922791E+00   2.05366973304254E+00
 zz1 :  3.31325254376896E-01  -4.47605721252978E-01
 t4 :  5.02974219619557E-02   5.96655221299233E-01
 t5 : -8.46448240981595E-01  -2.38906321758213E+00
 t6 : -4.52524421602189E-01   8.14559254657865E-01
== err :  1.498E-15 = rco :  2.468E-02 = res :  2.047E-15 =
Solution 22 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  1.17748055149989E+00  -2.43215785209726E+00
 t2 : -1.11238676756403E+00   1.89832325651549E+00
 t3 :  3.71807527705904E+00   1.18513377244720E+00
 zz1 : -1.36994965965414E-01  -9.86163388302379E-01
 t4 : -5.27247356627358E-01  -7.14664957510453E-02
 t5 : -1.69492044434729E-01  -4.08782307130586E-01
 t6 : -1.38104781392739E+00   1.16797791507032E+00
== err :  2.038E-15 = rco :  4.306E-02 = res :  1.249E-15 =
Solution 23 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  3.12364985327808E+00  -2.05920731130273E+00
 t2 : -7.83955013846558E+00   3.44568114237919E+00
 t3 :  2.41311468318769E-01  -1.43824031559247E-02
 zz1 : -1.59787001054699E+00  -6.62918168050137E-01
 t4 :  1.10281361738592E+00  -3.47888278489006E+00
 t5 :  3.62179107231530E+00   1.85699344604169E+00
 t6 : -2.26905454742053E-01   2.75923139264321E-01
== err :  1.042E-14 = rco :  4.252E-03 = res :  2.163E-15 =
Solution 24 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  3.08355119326816E+00  -8.60649488234224E+00
 t2 : -5.82366068292758E-01   6.35509246767222E+00
 t3 : -6.51342246123743E-02   9.06094708166825E-02
 zz1 :  2.84990305286854E+00   1.14816597303183E+00
 t4 :  4.34422945742045E-02   1.52135217854099E-01
 t5 :  6.74998864667608E+00   9.94704932815523E+00
 t6 : -1.17348229611637E+01   1.39527617933237E+00
== err :  3.194E-14 = rco :  5.571E-04 = res :  6.391E-15 =
Solution 25 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  3.99353498759161E-01  -1.05992514732995E+00
 t2 : -6.97576291634198E-01   2.90503809343657E-01
 t3 :  7.12853582076897E-02   4.30854721150634E-01
 zz1 : -1.84001525983760E-01   2.70200187419495E-01
 t4 :  1.46156773352004E+00  -1.50613908910889E-01
 t5 :  1.12282954533061E+00   4.33717117615447E-02
 t6 : -5.52341835801268E-01   1.66701841647516E-01
== err :  9.415E-16 = rco :  4.214E-02 = res :  7.841E-16 =
Solution 26 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  1.68976453558350E-01   4.67689996418420E-01
 t2 : -1.11289042160100E+00  -2.36087487730329E+00
 t3 :  7.14519021473384E-02   1.63214961074351E-01
 zz1 : -3.02872131405798E-01  -6.49699828630491E-02
 t4 :  2.59822631620836E+00   2.73920748230829E-02
 t5 : -5.72162586858151E-02  -1.87011959227602E-01
 t6 :  6.42736202016055E-01   6.82645862607672E-02
== err :  2.532E-15 = rco :  2.192E-03 = res :  2.207E-15 =
Solution 27 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  5.98088716113923E-01  -1.09928306831808E+00
 t2 : -1.32166665802307E+00   9.68674190067784E-02
 t3 :  1.25565072505728E+00   7.88279907441350E-01
 zz1 : -1.94309421837523E-01  -4.14018780046576E-01
 t4 :  1.15900115504862E+00  -3.40883097941626E-01
 t5 :  7.68268330674074E-01  -3.30650582363870E-01
 t6 : -4.24188159828689E-01   7.70802547523126E-01
== err :  1.539E-15 = rco :  3.512E-02 = res :  7.355E-16 =
Solution 28 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
" t1 :  1.74056293633403E+00   1.02810794797457E+00
 t2 : -4.53362942425264E+00  -3.21821306993922E+00
 t3 :  9.07980903275410E-01   2.06897987372685E+00
 zz1 :  9.08970112275608E-02  -1.10894123925719E+00
 t4 :  2.76795451024622E+00  -1.85436435929005E+00
 t5 :  8.31726772379002E-02  -3.06761087764399E-01
 t6 :  3.80053540200631E-01   3.19279779559526E-01
== err :  5.467E-15 = rco :  1.088E-02 = res :  4.621E-15 =
Solution 29 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  9.98996829187838E-02   5.45879605814945E+00
 t2 :  4.77713088756544E-02  -1.65064542093410E-01
 t3 :  7.03293595992006E-02  -5.75960210248865E-03
 zz1 : -4.34989172011554E+00   2.22547996626009E+00
 t4 :  7.42601541252893E-02  -4.06346066756681E-02
 t5 : -8.26936045369789E+00  -8.88179809231708E+00
 t6 :  9.96592014933793E+00  -6.77636361154879E+00
== err :  2.141E-14 = rco :  3.614E-04 = res :  4.914E-15 =
Solution 30 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  1.26911098400795E+00  -1.26566539297069E+00
 t2 : -8.06762092689544E-01   6.05358763159280E-01
 t3 :  4.36774346983282E+00   1.58729813776646E+00
 zz1 : -2.24457954433668E-01  -1.01428467390231E+00
 t4 : -5.06895216434008E-01   2.00062592651442E-01
 t5 : -2.24941445482227E+00  -1.41444572972009E+00
 t6 : -4.23738271342406E-01   3.28737704966059E-01
== err :  2.782E-15 = rco :  2.863E-02 = res :  1.360E-15 =
... running cascade step ...
Solution at position 14 is not appended.
Solution at position 22 is not appended.
... after running the cascade ...
Solution 1 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -5.45421549881402E-01  -8.38161877518281E-01
 t2 : -5.49340801920855E-01  -8.35598398361888E-01
 t3 : -9.74098087752273E-01   2.26125884049935E-01
 t6 : -8.74935009483375E-01  -4.84240363022669E-01
 t4 :  1.78912046655936E-01  -9.83865071827120E-01
 t5 :  4.72153176961023E-02  -9.98884734979395E-01
== err :  3.858E-16 = rco :  3.659E-02 = res :  1.388E-16 =
Solution 2 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -5.66058532229596E-01  -3.67759063106022E-01
 t2 :  5.87958784214732E-01  -2.31024744989669E-01
 t3 :  2.66141319725174E-01   1.71943916132782E+00
 t6 : -1.05957839449340E+00   1.03531112257767E+00
 t4 :  2.42136902539447E-01   1.56435563278512E+00
 t5 : -8.79136932379912E-02  -5.67977370543055E-01
== err :  1.140E-15 = rco :  2.128E-02 = res :  4.441E-16 =
Solution 3 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  2.80836878017556E-01  -9.59755514673061E-01
 t2 : -9.99161738567148E-01   4.09367827689737E-02
 t3 : -4.72153176961024E-02   9.98884734979395E-01
 t6 : -9.37276397924231E-01   3.48587082225057E-01
 t4 :  9.35633636119240E-01  -3.52972660360955E-01
 t5 :  9.74098087752273E-01  -2.26125884049935E-01
== err :  2.120E-13 = rco :  2.187E-02 = res :  2.220E-16 =
Solution 4 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -1.24225818334613E+00  -8.07075027813304E-01
 t2 :  1.47332994921904E+00  -5.78910775622768E-01
 t3 :  8.79136932379910E-02   5.67977370543054E-01
 t6 : -4.82817017275396E-01   4.71759173981634E-01
 t4 :  9.66290808831228E-02   6.24284218493860E-01
 t5 : -2.66141319725174E-01  -1.71943916132781E+00
== err :  2.043E-13 = rco :  1.402E-02 = res :  2.637E-16 =
Solution 5 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  8.69193907041793E-01  -1.30453665759482E+00
 t2 : -2.10146778358548E-01  -5.53582709999063E-01
 t3 :  1.85739737768408E+00  -2.65498503011422E-01
 t6 : -4.40509781239126E-01  -4.61410384022367E-01
 t4 :  1.67183103323242E+00  -2.38973437749056E-01
 t5 : -5.27607584716191E-01   7.54168308853117E-02
== err :  6.392E-16 = rco :  1.136E-02 = res :  2.220E-16 =
Solution 6 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  3.53717078322846E-01  -5.30879118400565E-01
 t2 : -5.99365365166589E-01  -1.57888836421937E+00
 t3 :  5.27607584716190E-01  -7.54168308853108E-02
 t6 : -1.08247082572556E+00  -1.13383016827931E+00
 t4 :  5.86169848996842E-01  -8.37877878416832E-02
 t5 : -1.85739737768408E+00   2.65498503011425E-01
== err :  5.809E-16 = rco :  1.811E-02 = res :  6.661E-16 =
found 6 isolated solutions

The polynomials in the embedded system are printed by

for pol in embpols:
    print(pol)

with output in

+ 7.10358341606049E-01*t1 + 4.60000000000000E-01*t2 - 4.10000000000000E-01*t3 + (-3.99034499614690E-01 + 9.16935912764493E-01*i)*zz1+(2.40761300555115E-01 + 1.07248215701824E+00*i);
+ (-1.10000000000000E-01 + 4.90000000000000E-01*i)*t2 + 4.10000000000000E-01*t3 - 5.02195181179589E-01*t4 + 4.10000000000000E-01*t5 + (-2.71603706128330E-01-9.62409178477302E-01*i)*zz1;
+ 5.02195181179589E-01*t4 + (-9.80434782608696E-02 + 4.36739130434783E-01*i)*t5 - 7.75518556663656E-01*t6 + (-9.98029449494905E-01 + 6.27472544490738E-02*i)*zz1 - 1.20000000000000E+00;
+ (-9.58594885352021E-01-2.84773323499490E-01*i)*zz1+(2.40761300555115E-01-1.07248215701824E+00*i) - 4.10000000000000E-01*t3^-1 + 4.60000000000000E-01*t2^-1 + 7.10358341606049E-01*t1^-1;
+ (9.19472457329587E-01-3.93154422857342E-01*i)*zz1 + 4.10000000000000E-01*t5^-1 - 5.02195181179589E-01*t4^-1 + 4.10000000000000E-01*t3^-1 + (-1.10000000000000E-01-4.90000000000000E-01*i)*t2^-1;
+ (4.61876615285503E-01 + 8.86944187788841E-01*i)*zz1 - 1.20000000000000E+00 - 7.75518556663656E-01*t6^-1 + (-9.80434782608696E-02-4.36739130434783E-01*i)*t5^-1 + 5.02195181179589E-01*t4^-1;
+ (9.04264731472024E-01-4.26972241973442E-01*i)*t1 + (9.93763178327739E-01-1.11511189572842E-01*i)*t2 + (8.26568833449879E-01 + 5.62835645254728E-01*i)*t3 + (8.13748932516514E-01 + 5.81216547276687E-01*i)*t4 + (9.60611770393053E-01 + 2.77893912459997E-01*i)*t5 + (-5.80987954131586E-02 + 9.98310838352234E-01*i)*t6 + (1.86846899315945E-02 + 9.99825425943029E-01*i)*zz1+(-9.99671453748700E-01 + 2.56317100475435E-02*i);

Observe that we have seven equation in seven variables, where the last variable is the slack variable zz1.

The code in

print('the isolated solutions :')
for (idx, sol) in enumerate(isosols):
    print('Solution', idx+1, ':')
    print(sol)

produces the following output:

the isolated solutions :
Solution 1 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -5.45421549881402E-01  -8.38161877518281E-01
 t2 : -5.49340801920855E-01  -8.35598398361888E-01
 t3 : -9.74098087752273E-01   2.26125884049935E-01
 t6 : -8.74935009483375E-01  -4.84240363022669E-01
 t4 :  1.78912046655936E-01  -9.83865071827120E-01
 t5 :  4.72153176961023E-02  -9.98884734979395E-01
== err :  3.858E-16 = rco :  3.659E-02 = res :  1.388E-16 =
Solution 2 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -5.66058532229596E-01  -3.67759063106022E-01
 t2 :  5.87958784214732E-01  -2.31024744989669E-01
 t3 :  2.66141319725174E-01   1.71943916132782E+00
 t6 : -1.05957839449340E+00   1.03531112257767E+00
 t4 :  2.42136902539447E-01   1.56435563278512E+00
 t5 : -8.79136932379912E-02  -5.67977370543055E-01
== err :  1.140E-15 = rco :  2.128E-02 = res :  4.441E-16 =
Solution 3 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  2.80836878017556E-01  -9.59755514673061E-01
 t2 : -9.99161738567148E-01   4.09367827689737E-02
 t3 : -4.72153176961024E-02   9.98884734979395E-01
 t6 : -9.37276397924231E-01   3.48587082225057E-01
 t4 :  9.35633636119240E-01  -3.52972660360955E-01
 t5 :  9.74098087752273E-01  -2.26125884049935E-01
== err :  2.120E-13 = rco :  2.187E-02 = res :  2.220E-16 =
Solution 4 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 : -1.24225818334613E+00  -8.07075027813304E-01
 t2 :  1.47332994921904E+00  -5.78910775622768E-01
 t3 :  8.79136932379910E-02   5.67977370543054E-01
 t6 : -4.82817017275396E-01   4.71759173981634E-01
 t4 :  9.66290808831228E-02   6.24284218493860E-01
 t5 : -2.66141319725174E-01  -1.71943916132781E+00
== err :  2.043E-13 = rco :  1.402E-02 = res :  2.637E-16 =
Solution 5 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  8.69193907041793E-01  -1.30453665759482E+00
 t2 : -2.10146778358548E-01  -5.53582709999063E-01
 t3 :  1.85739737768408E+00  -2.65498503011422E-01
 t6 : -4.40509781239126E-01  -4.61410384022367E-01
 t4 :  1.67183103323242E+00  -2.38973437749056E-01
 t5 : -5.27607584716191E-01   7.54168308853117E-02
== err :  6.392E-16 = rco :  1.136E-02 = res :  2.220E-16 =
Solution 6 :
t :  1.00000000000000E+00   0.00000000000000E+00
m : 1
the solution for t :
 t1 :  3.53717078322846E-01  -5.30879118400565E-01
 t2 : -5.99365365166589E-01  -1.57888836421937E+00
 t3 :  5.27607584716190E-01  -7.54168308853108E-02
 t6 : -1.08247082572556E+00  -1.13383016827931E+00
 t4 :  5.86169848996842E-01  -8.37877878416832E-02
 t5 : -1.85739737768408E+00   2.65498503011425E-01
== err :  5.809E-16 = rco :  1.811E-02 = res :  6.661E-16 =
fac = double_monodromy_breakup(embpols, sols0, 1, islaurent=True, verbose=True)

produces the following output:

... running monodromy loops in double precision ...
... initializing the grid for the linear trace ...
The diagnostics of the trace grid :
  largest error on the samples : 1.1914895647759973e-14
  smallest distance between the samples : 2.3530539196335214
... starting loop 1 ...
new permutation : [3, 2, 1]
number of factors : 3 -> 2
the decomposition :
  factor 1 : ([1, 3], 0.33179448122518296)
  factor 2 : ([2], 0.3317944812254451)
... starting loop 2 ...
new permutation : [2, 3, 1]
number of factors : 2 -> 1
the decomposition :
  factor 1 : ([1, 2, 3], 4.11226608321158e-13)

The grouping of the generic sets in one set shows that the solution curve is an irreducible cubic.