GithubHelp home page GithubHelp logo

algebraic-solving / msolve Goto Github PK

View Code? Open in Web Editor NEW
84.0 7.0 21.0 2.71 MB

Library for Polynomial System Solving through Algebraic Methods

Home Page: https://msolve.lip6.fr

License: GNU General Public License v2.0

Makefile 0.21% Shell 1.16% M4 1.76% JetBrains MPS 1.21% Sage 0.18% C 57.69% MAXScript 22.23% ReScript 12.75% C++ 2.80%
algorithms computer-algebra groebner groebner-bases groebner-basis math mathematics polynomial-equations polynomial-roots science

msolve's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

msolve's Issues

document meanings of columns in verbose output

currently with -g 1/2 -v 2 one sees

deg     sel   pairs        mat          density            new data         time(rd) in sec (real|cpu)
------------------------------------------------------------------------------------------------------

in the header, and while some of it can be guessed, some are totally cryptic.
This is how I think about it:

  • deg : maximal degree of GB elements?
  • sel : ???
  • pairs : number of unprocessed S-polynomials?
  • mat/density : data for the current linear algebra solving stage?
  • new data
    • new : number of new GB elements?
    • zero: ???
  • time(rd) in sec (real|cpu) : timing for the current stage

Fails on simple overdetermined systems

msolve (both 0.5.0 and latest commit ddfb9e1) says that the following system has no solution (it has a solution 92, since the equations have a nontrivial GCD)

x
251
-68*x^2+34*x-107,
104*x^2+122*x+72

This system was obtained by minifying an issue happening when trying to solve an exercise on larger systems of multivariate quadratic equations generated to have known solutions.

See below various examples of pseudo-random systems with known solutions where msolve fails:

mq_2_1.txt => known solution 92
mq_5_2.txt => known solution (158, 196)
mq_8_3.txt => solution (217, 70, 166)
mq_20_5.txt => solution (200, 5, 86, 211, 203)
mq_38_10.txt => solution (12, 59, 44, 208, 12, 210, 212, 116, 106, 148)
mq_41_18.txt => solution (10, 66, 180, 181, 165, 74, 94, 139, 29, 170, 141, 11, 111, 19, 47, 34, 209, 189)
mq_44_21.txt => known solution, non-unique (0, 0, 0, 170, 117, 195, 29, 32, 172, 99, 207, 55, 171, 182, 113, 208, 104, 90, 137, 175, 22)

Also, removing a few random equations from mq_8_3 makes msolve crash:

x0,x1,x2
251
54*x0^2-106*x0*x1+47*x1^2-92*x0*x2+35*x1*x2-118*x2^2-125*x0-73*x1+14*x2+104,
35*x0^2-35*x0*x1-28*x1^2+121*x0*x2+122*x1*x2-90*x2^2+110*x0+58*x1-85*x2-8,
71*x0^2-x0*x1-41*x1^2+82*x0*x2+90*x1*x2-87*x2^2-100*x0+67*x1+36*x2+122,
21*x0^2-71*x0*x1+55*x0*x2+19*x1*x2-81*x2^2+89*x0+67*x1-12*x2+17

zsh: segmentation fault (core dumped)  msolve -f zzz

Same with mq_20_5:

x0,x1,x2,x3,x4
251
-91*x0^2-21*x0*x1+86*x1^2-57*x0*x2+87*x1*x2+5*x2^2-93*x0*x3-98*x1*x3-75*x2*x3+44*x3^2-68*x0*x4-34*x1*x4-111*x2*x4-76*x3*x4+88*x4^2-101*x0+90*x1-26*x2+101*x3-111*x4+75,
12*x0^2+122*x0*x1-57*x1^2-96*x0*x2+125*x1*x2+94*x2^2+37*x0*x3+100*x1*x3+20*x2*x3+119*x3^2+73*x0*x4+87*x1*x4-79*x2*x4-52*x3*x4+11*x4^2-83*x0-52*x1-34*x2+55*x3+39*x4-37,
121*x0^2-33*x0*x1-11*x1^2+120*x0*x2-29*x1*x2-83*x2^2+8*x0*x3+109*x1*x3+9*x2*x3+28*x3^2+19*x0*x4+59*x1*x4+104*x2*x4-33*x3*x4-25*x4^2+23*x0+16*x1-69*x2-77*x3+49*x4+45, 
28*x0^2-102*x0*x1-86*x1^2-34*x0*x2-23*x1*x2+37*x2^2+99*x0*x3-121*x1*x3+31*x2*x3+22*x3^2-40*x0*x4+37*x1*x4-52*x2*x4+29*x3*x4-28*x4^2-47*x0+13*x1-91*x2-23*x3-52*x4-87, 
60*x0^2-108*x0*x1-25*x1^2-7*x0*x2+89*x1*x2-58*x2^2+18*x0*x3+32*x1*x3-113*x2*x3-55*x3^2+111*x0*x4-63*x1*x4-35*x2*x4+50*x3*x4+95*x4^2-57*x0+113*x1-15*x2+77*x3-49*x4-89,   
-120*x0^2-106*x0*x1+74*x1^2-33*x0*x2+103*x1*x2+87*x2^2-86*x0*x3-69*x1*x3+39*x2*x3-29*x3^2+86*x0*x4-63*x1*x4+103*x2*x4+85*x3*x4+70*x4^2+82*x0-68*x1+36*x2-15*x3+x4-41

Tests failing/hanging on 32-bit architectures

Some of the tests are are failing and hanging on 32-bit architectures, possibly due to using long (which is only 32 bits instead of 64 on these architectures).

For example (from https://buildd.debian.org/status/fetch.php?pkg=msolve&arch=i386&ver=0.5.0-1&stamp=1688586254&raw=0):

make  check-TESTS
make[3]: Entering directory '/<<PKGBUILDDIR>>'
make[4]: Entering directory '/<<PKGBUILDDIR>>'
PASS: fglm_build_matrixn_radical_shape-31
PASS: neogb_io
PASS: fglm_build_matrixn_nonradical_shape-31
PASS: fglm_build_matrixn_nonradical_radicalshape-31
FAIL: test/diff/diff_elim-qq.sh
PASS: test/diff/diff_elim-31.sh
PASS: test/diff/diff_F4SAT-31.sh
FAIL: test/diff/diff_kat6-31.sh
FAIL: test/diff/diff_eco11-31.sh
E: Build killed with signal TERM after 150 minutes of inactivity

See also https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1040774.

please upload a configured tarball to your release(s)

Currently releases only package the version-controlled source files. However, the standard is to also provide tarballs with ./configure etc present (these are automatically produced by make dist, to you just need to run this and upload the resulting tarball to release (click "edit release").

Now for SageMath we need to create such tarballs ourselves...

diff_reals_dim0-chgvar.sh hangs in Debian unstable

I'm getting the following build error for the amd64 build of the Debian package for 0.6.2 (full build log)

PASS: test/diff/diff_nonradical_shape-qq.sh
PASS: test/diff/diff_eco11-31.sh
E: Build killed with signal TERM after 150 minutes of inactivity

The only test that didn't appear in the log was diff_reals_dim0-chgvar.sh, and removing it fixes the problem.

Oscar and msolve

Hi,

Is msolve still available via Oscar? I tried the latest version of 0.11.2 and msolve does not show as a command.

Thanks!

"segmentation fault" when attempting multithread calculation

I am using MAC with M1 chip.

Since apple's gcc seems to have issue with gmp, I was able to build with

export LIBRARY_PATH=$LIBRARY_PATH:/opt/homebrew/lib

./autogen.sh

./configure CC=gcc-12 CFLAGS=-I/opt/homebrew/include

make

After that the single-thread calculation works fine, but the multithread calculation returns

zsh: segmentation fault ./msolve -t 4 -f in.ms -o out.ms

Detect sed variant at runtime

The comment in interfaces/msolve-to-maple-file-interface.mpl

#WARNING: this file uses a sed command which does not work for mac users
#Mac users should use the msolve-to-maple-file-interface-macos.mpl file

is not accurate, as the sed command does work for macOS users with GNU sed, which is common for Nix users in a build environment:

$ sed --version
sed: illegal option -- -
usage: sed script [-Ealnru] [-i extension] [file ...]
	sed [-Ealnu] [-i extension] [-e script] ... [-f script_file] ... [file ...]

$ nix develop github:NixOS/nixpkgs/nixos-unstable#hello
$ sed --version
sed (GNU sed) 4.9
Copyright (C) 2022 Free Software Foundation, Inc.

Instead, it would be nice to detect if sed is BSD or GNU at runtime, for example

# BSD sed
> ssystem("sed --version");
[1, ""]

# GNU sed
> ssystem("sed --version");
[0, "sed (GNU sed) 4.9
    Copyright (C) 2022 Free Software Foundation, Inc.
     ..."]

A natural extension would be to combine interfaces/msolve-to-maple-file-interface-macos.mpl into interfaces/msolve-to-maple-file-interface.mpl, since their logic differs little.

Segmentation fault when a polynomial is zero

The following file crashes msolve:

x,y,z
257
0,
x*x+y*y+z*z,
x+y+z,
x+y*z

Zero polynomials are not forbidden according to the README.
The issue happened while using Sage after substituting numerical values into a polynomial system.

% ./msolve -f mini -P 1
AddressSanitizer:DEADLYSIGNAL
=================================================================
==1377530==ERROR: AddressSanitizer: SEGV on unknown address (pc 0x7f33f722bbd6 bp 0x7ffd08854ed0 sp 0x7ffd08854d80 T0)
==1377530==The signal is caused by a READ memory access.
==1377530==Hint: this fault was caused by a dereference of a high value address (see register values below).  Disassemble the provided pc to learn which register was used.
    #0 0x7f33f722bbd6 in import_input_data (/tmp/msolve/src/neogb/.libs/libneogb-0.5.0.so+0x82bd6) (BuildId: 2be063c67d42a6ff905764b3bf2a9f481a8b8bf2)
    #1 0x557bf1ad1ad8 in msolve_trace_qq (/tmp/msolve/.libs/msolve+0x4cad8) (BuildId: e7c6c61f288cced0a2dc2cd7692a6431914aaca4)
    #2 0x557bf1adbfe8 in real_msolve_qq (/tmp/msolve/.libs/msolve+0x56fe8) (BuildId: e7c6c61f288cced0a2dc2cd7692a6431914aaca4)
    #3 0x557bf1ae159e in core_msolve (/tmp/msolve/.libs/msolve+0x5c59e) (BuildId: e7c6c61f288cced0a2dc2cd7692a6431914aaca4)
    #4 0x557bf1aecf4c in main (/tmp/msolve/.libs/msolve+0x67f4c) (BuildId: e7c6c61f288cced0a2dc2cd7692a6431914aaca4)
    #5 0x7f33f5b4c84f  (/usr/lib/libc.so.6+0x2384f) (BuildId: 2f005a79cd1a8e385972f5a102f16adba414d75e)
    #6 0x7f33f5b4c909 in __libc_start_main (/usr/lib/libc.so.6+0x23909) (BuildId: 2f005a79cd1a8e385972f5a102f16adba414d75e)
    #7 0x557bf1a91d24 in _start (/tmp/msolve/.libs/msolve+0xcd24) (BuildId: e7c6c61f288cced0a2dc2cd7692a6431914aaca4)

Building outside of source directory

Compiling outside the source directory doesn't seem to work, probably due to something minor:

$ ls
AUTHORS  autogen.sh  configure.ac  COPYING  doc  INSTALL  interfaces  m4  Makefile.am  README.md  src  test
$ mkdir build
$ cd build/
$ ../autogen.sh 
autoreconf: export WARNINGS=
autoreconf: error: 'configure.ac' is required

You can still do autoreconf -vif .. or something like that, but that leaves some files in the source directory.

Header files installed twice

After installing msolve 0.6.3, I noticed that msolve.h and msolve-data.h were installed in two distinct locations:

$ ls -R /usr/include/msolve
/usr/include/msolve:
msolve  msolve-data.h  msolve.h  neogb

/usr/include/msolve/msolve:
msolve-data.h  msolve.h

/usr/include/msolve/neogb:
basis.h  engine.h  f4sat.h  io.h        meta_data.h  nf.h   sort_r.h  update.h
data.h   f4.h      hash.h   libneogb.h  modular.h    sba.h  tools.h

I believe the ones in /usr/include/msolve are coming from nobase_include_HEADERS in include/Makefile.am and the ones in /usr/include/msolve/msolve are coming from libmsolve_la_HEADERS in src/msolve/Makefile.am.

Also, the headers in /usr/include/msolve don't work, since they're looking for the neogb headers in the wrong place. Suppose I try compiling this simple program:

#include <msolve/msolve.h>

int main(void)
{
  return 0;
}

Then I get the following:

In file included from /usr/include/msolve/msolve.h:24,
                 from foo.c:1:
/usr/include/msolve/msolve-data.h:25:10: fatal error: ../neogb/data.h: No such file or directory
   25 | #include "../neogb/data.h"
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.

Output file format for Groebner bases over the rationals

Hello,

I am using msolve to compute Groebner bases.
For parsing the output basis, it can be useful for me if the formats of the output over a finite field and over the rationals would be similar.

Currently, for the rationals, there seems to be no preamble:

$ msolve -g 2 -f input_qq -o output_qq
$ cat output_qq

[x+1
]:

but there is one for the finite fields

$ msolve -g 2 -f input_ff -o output_ff
$ cat output_ff

#Reduced Groebner basis for input in characteristic 11
#for variable order x, y, z
#w.r.t. grevlex monomial ordering
#consisting of 1 elements:
[1*x^1+1]:

The files input_qq and input_ff contain the following:

x, y, z
0
x + 1

and

x, y, z
11
x + 1

unknown type names "param_t" and "interval"

When compiling a simple C program with #include <msolve/msolve/msolve.h>, I get the following compile errors:

$ gcc foo.c
In file included from foo.c:2:
/usr/include/msolve/msolve/msolve.h:28:9: error: unknown type name ‘param_t’; did you mean ‘mpz_param_t’?
   28 |         param_t **nmod_param,
      |         ^~~~~~~
      |         mpz_param_t
/usr/include/msolve/msolve/msolve.h:48:9: error: unknown type name ‘param_t’; did you mean ‘mpz_param_t’?
   48 |         param_t **nmod_param,
      |         ^~~~~~~
      |         mpz_param_t
/usr/include/msolve/msolve/msolve.h:89:9: error: unknown type name ‘param_t’; did you mean ‘mpz_param_t’?
   89 |         param_t **nmod_param,
      |         ^~~~~~~
      |         mpz_param_t
/usr/include/msolve/msolve/msolve.h:93:9: error: unknown type name ‘interval’
   93 |         interval **real_roots_ptr,
      |         ^~~~~~~~
/usr/include/msolve/msolve/msolve.h:134:9: error: unknown type name ‘param_t’; did you mean ‘mpz_param_t’?
  134 |         param_t **paramp,
      |         ^~~~~~~
      |         mpz_param_t
/usr/include/msolve/msolve/msolve.h:137:9: error: unknown type name ‘interval’
  137 |         interval **real_roots_ptr,
      |         ^~~~~~~~

Is there another header that should be included?

Clarification on the formatting of the input file

First of all thanks for open-sourcing your work, it is very appreciated! 💯

On a regular basis, I have trouble with the formatting of the input file. For example, the following equation system seems just fine for me:

a, b, s, lamA, lamB
0
0.4750117565367643 + lamA * 0.05698810324224207 - b * 14.145271207860723 + b*s * 1.0878512413314014 - a * 0.9823487845322446 - a*s * 9.840557894587773,
0.24620471651887643 - lamA * 0.030110441242706842 + b * 0.0 + b*s * 0.0 + a * 0.0 + a*s * 0.0,
0.18477765545456737 - lamA * 1 - b * 0.9823487845322446 - b*s * 9.840557894587773 + a * 14.145271207860723 - a*s * 1.0878512413314014,
0.4750117565367643 + lamB * 0.05698810324224207 - b * 7.824159668166666 + b*s * 1.0878512413314014 - a * 0.9783577693832235 - a*s * 9.840557894587773,
0.24620471651887643 - lamB * 0.030110441242706842 + b * 0.0 + b*s * 0.0 + a * 0.0 + a*s * 0.0,
0.18477765545456737 - lamB * 1 - b * 0.9783577693832235 - b*s * 9.840557894587773 + a * 7.824159668166666 - a*s * 1.0878512413314014,
a^2 + b^2 - 1

However, the solution returned by msolve

a, b, s, lamA, lamB = 0.8392867552141612, -0.5436890126920764, 1.8392867552141612, 1.8392867552141612, 1.8392867552141612

is wrong. Interestingly, the solution is correct for the Gröbner basis system computed by msolve

lamA-1*lamB,
a-1*lamB+1,
lamB^2+b-1*lamB-1,
s*lamB+b-1*s-1,
b*lamB+s-1*lamB+1,
s^2+b-1*lamB-1,
b*s+1,
b^2-1*b-1*lamB+1

As of now, it seems that there are two possible problems. Either

  1. The computation of the Gröbner system is wrong, resulting in a false solution. This is rather unlikely.
  2. The formatting of the input file is wrong. It seems like the parser is sensitive to some things a human might oversee. For example, the solver stops working it the equation system contains any leading plus sign (+) .

If the issue is the second problem: Could you please describe what the error is my problem formulation is? Perhaps it would be nice to have a small section in the readme where the required format is described in more detail. For example, it took a while until I figured out that the problem formulation should not include division (/). Thanks!

diff_mq_2_1 failing on ppc64el

I just uploaded msolve 0.6.6 to Debian, and one of the tests is failing during the 64-bit PowerPC build:

FAIL: test/diff/diff_mq_2_1.sh
==============================

Warning: this part of the code has not been tested intensively
Something should be checked
3c3
< 2, 
---
> 1, 
7,8c7,8
< [[2,
< [20, 6, 1]],
---
> [[1,
> [159, 1]],
FAIL test/diff/diff_mq_2_1.sh (exit status: 42)

Full log: https://buildd.debian.org/status/fetch.php?pkg=msolve&arch=ppc64el&ver=0.6.6-1&stamp=1719514089&file=log

Segmentation fault when computing GB

Hello,

I compile msolve from the latest commit ea859ac, and run the command msolve -g 2 -c 0 -f input.txt -o output.txt.

After about 10 minutes I get Segmentation fault.

upd: this is x86-64 Intel Xeon Gold 6130.

The content of input.txt is

x2_7, x3_6, x13_6, x10_6, x2_6, x5_6, x1_6, x8_6, x4_6, x3_5, x14_5, x13_5, x11_5, x10_5, x2_5, x12_5, x7_5, x5_5, x1_5, x8_5, x9_5, x6_5, x4_5, x3_4, x14_4, x13_4, x11_4, x10_4, x2_4, x12_4, x7_4, x5_4, x1_4, x8_4, x9_4, x6_4, x4_4, x3_3, x14_3, x13_3, x11_3, x10_3, x2_3, x12_3, x7_3, x5_3, x1_3, x8_3, x9_3, x6_3, x4_3, x3_2, x14_2, x13_2, x11_2, x10_2, x2_2, x12_2, x7_2, x5_2, x1_2, x8_2, x9_2, x6_2, x4_2, x3_1, x14_1, x13_1, x11_1, x10_1, x2_1, x12_1, x7_1, x5_1, x1_1, x8_1, x9_1, x6_1, x4_1, x3_0, x14_0, x13_0, x11_0, x10_0, x2_0, x12_0, x7_0, x5_0, x1_0, x8_0, x9_0, x6_0, x4_0, z_aux, k_prod_0, k_deg_0, k1_0, k3_0, t1_0, t2_0, k2_0, i1_0, c5_0, c_4a_0, i_1a_0, c_3a_0, e_2a_0
1073741827
1073741826*x3_0 + 1073741826*x2_0 + 1073741826*x1_0 + 1029971849,
607579857*x2_0*x8_0^2*k2_0 + x3_0*k_deg_0 + 1073741826*x2_0*k3_0 + x3_1,
x1_0*k_deg_0 + 466161970*x1_0*k1_0 + x1_1 + 1073741826*k_prod_0,
466161970*x2_0*x8_0^2*k2_0 + 1073741826*x4_0^2*t1_0 + 1073741826*x5_0^2*t2_0 + x13_0*x2_0 + 429496731*x10_0*x2_0 + x2_0*k_deg_0 + 607579857*x1_0*k1_0 + x2_0*k3_0 + x2_1,
1073741826*x12_0 + 367396831,
x12_0*c_3a_0 + x12_1 + 171134583*x7_0,
1073741826*x2_0 + 678833355,
1073741826*x9_0 + 816456985,
x9_1 + 171134583*x7_0 + 531287456*x9_0,
1073741826*x13_0 + 1073741826*x10_0 + 1064138947,
536870913*x10_0*x6_0^2 + 1073741826*x14_0^2*e_2a_0 + x13_0*x2_0 + x13_1 + 670809469*x13_0,
536870914*x10_0*x6_0^2 + 409632507*x11_0^2 + 429496731*x10_0*x2_0 + 1073741826*x12_0*c_4a_0 + x10_0*i_1a_0 + x10_1 + 132821864*x10_0,
1073741826*x7_0 + 547041998,
536870914*x11_0^2*x7_0 + 1073741822*x6_0^2*i1_0 + x7_1,
1073741826*x3_1 + 1073741826*x2_1 + 1073741826*x1_1 + 74066639,
x1_1*k_deg_0 + 466161970*x1_1*k1_0 + 818327100*x1_0*k1_0 + x1_2,
607579857*x8_1^2*x2_0*k2_0 + 607579857*x2_1*x8_0^2*k2_0 + 255414727*x2_0*x8_0^2*k2_0 + x3_1*k_deg_0 + 1073741826*x2_1*k3_0 + x3_2,
466161970*x8_1^2*x2_0*k2_0 + 466161970*x2_1*x8_0^2*k2_0 + 818327100*x2_0*x8_0^2*k2_0 + 1073741826*x4_1^2*t1_0 + 1073741826*x5_1^2*t2_0 + x2_1*x13_0 + 429496731*x2_1*x10_0 + x13_1*x2_0 + 429496731*x10_1*x2_0 + x2_1*k_deg_0 + 607579857*x1_1*k1_0 + 255414727*x1_0*k1_0 + x2_1*k3_0 + x2_2,
x4_0^2*t1_0 + x4_1^2 + 644245096*x10_0*x2_0,
x8_0^2*c5_0^3 + x8_1^2 + 536870913*x9_0,
x5_0^2*t2_0 + x5_1^2 + 1073741826*x13_0*x2_0,
1073741826*x12_1 + 66120491,
x12_1*c_3a_0 + x12_2 + 171134583*x7_1,
1073741826*x2_1 + 540368852,
1073741826*x13_1 + 1073741826*x10_1 + 586811099,
536870913*x6_1^2*x10_0 + 536870913*x10_1*x6_0^2 + 1073741826*x14_1^2*e_2a_0 + x2_1*x13_0 + x13_1*x2_0 + x13_2 + 670809469*x13_1,
536870914*x6_1^2*x10_0 + 536870914*x10_1*x6_0^2 + 409632507*x11_1^2 + 429496731*x2_1*x10_0 + 429496731*x10_1*x2_0 + 1073741826*x12_1*c_4a_0 + x10_1*i_1a_0 + x10_2 + 132821864*x10_1,
536870914*x10_0*x6_0^2 + 1073741826*x5_0^2*t2_0 + x6_0^2*i1_0 + x6_1^2 + 402932358*x13_0,
536870914*x11_0^2*x7_0 + x11_1^2 + 99321119*x11_0^2 + 1073741822*x10_0*i_1a_0,
536870913*x11_0^2*x7_0 + 5*x14_0^2*e_2a_0 + x14_1^2,
1073741826*x7_1 + 444984338,
536870914*x7_1*x11_0^2 + 536870914*x11_1^2*x7_0 + 1073741822*x6_1^2*i1_0 + x7_2,
1073741826*x3_2 + 1073741826*x2_2 + 1073741826*x1_2 + 28909455,
141417887*x2_1*x8_1^2*k2_0 + 607579857*x8_2^2*x2_0*k2_0 + 510829454*x8_1^2*x2_0*k2_0 + 607579857*x2_2*x8_0^2*k2_0 + 510829454*x2_1*x8_0^2*k2_0 + 526236431*x2_0*x8_0^2*k2_0 + x3_2*k_deg_0 + 1073741826*x2_2*k3_0 + x3_3,
x1_2*k_deg_0 + 466161970*x1_2*k1_0 + 562912373*x1_1*k1_0 + 547505396*x1_0*k1_0 + x1_3,
932323940*x2_1*x8_1^2*k2_0 + 466161970*x8_2^2*x2_0*k2_0 + 562912373*x8_1^2*x2_0*k2_0 + 466161970*x2_2*x8_0^2*k2_0 + 562912373*x2_1*x8_0^2*k2_0 + 547505396*x2_0*x8_0^2*k2_0 + 1073741826*x4_2^2*t1_0 + 1073741826*x5_2^2*t2_0 + 2*x13_1*x2_1 + 858993462*x10_1*x2_1 + x2_2*x13_0 + 429496731*x2_2*x10_0 + x13_2*x2_0 + 429496731*x10_2*x2_0 + x2_2*k_deg_0 + 607579857*x1_2*k1_0 + 510829454*x1_1*k1_0 + 526236431*x1_0*k1_0 + x2_2*k3_0 + x2_3,
x4_1^2*t1_0 + x4_2^2 + 644245096*x2_1*x10_0 + 644245096*x10_1*x2_0,
x5_1^2*t2_0 + x5_2^2 + 1073741826*x2_1*x13_0 + 1073741826*x13_1*x2_0,
x8_1^2*c5_0^3 + x8_2^2 + 536870913*x9_1,
1073741826*x2_2 + 17580111,
1073741826*x13_2 + 1073741826*x10_2 + 356099907,
x10_1*x6_1^2 + 536870914*x6_2^2*x10_0 + 536870914*x10_2*x6_0^2 + 409632507*x11_2^2 + 858993462*x10_1*x2_1 + 429496731*x2_2*x10_0 + 429496731*x10_2*x2_0 + 1073741826*x12_2*c_4a_0 + x10_2*i_1a_0 + x10_3 + 132821864*x10_2,
1073741826*x10_1*x6_1^2 + 536870913*x6_2^2*x10_0 + 536870913*x10_2*x6_0^2 + 1073741826*x14_2^2*e_2a_0 + 2*x13_1*x2_1 + x2_2*x13_0 + x13_2*x2_0 + x13_3 + 670809469*x13_2,
536870914*x6_1^2*x10_0 + 536870914*x10_1*x6_0^2 + 1073741826*x5_1^2*t2_0 + x6_1^2*i1_0 + x6_2^2 + 402932358*x13_1,
536870913*x7_1*x11_0^2 + 536870913*x11_1^2*x7_0 + 5*x14_1^2*e_2a_0 + x14_2^2,
536870914*x7_1*x11_0^2 + 536870914*x11_1^2*x7_0 + x11_2^2 + 99321119*x11_1^2 + 1073741822*x10_1*i_1a_0,
1073741826*x7_2 + 472429259,
x11_1^2*x7_1 + 536870914*x7_2*x11_0^2 + 536870914*x11_2^2*x7_0 + 1073741822*x6_2^2*i1_0 + x7_3,
1073741826*x3_3 + 1073741826*x2_3 + 1073741826*x1_3 + 442118574,
324744083*x8_2^2*x2_1*k2_0 + 324744083*x2_2*x8_1^2*k2_0 + 614995292*x2_1*x8_1^2*k2_0 + 466161970*x8_3^2*x2_0*k2_0 + 307497646*x8_2^2*x2_0*k2_0 + 568774361*x8_1^2*x2_0*k2_0 + 466161970*x2_3*x8_0^2*k2_0 + 307497646*x2_2*x8_0^2*k2_0 + 568774361*x2_1*x8_0^2*k2_0 + 850129211*x2_0*x8_0^2*k2_0 + 1073741826*x4_3^2*t1_0 + 1073741826*x5_3^2*t2_0 + 3*x2_2*x13_1 + 214748366*x2_2*x10_1 + 3*x13_2*x2_1 + 214748366*x10_2*x2_1 + x2_3*x13_0 + 429496731*x2_3*x10_0 + x13_3*x2_0 + 429496731*x10_3*x2_0 + x2_3*k_deg_0 + 607579857*x1_3*k1_0 + 766244181*x1_2*k1_0 + 504967466*x1_1*k1_0 + 223612616*x1_0*k1_0 + x2_3*k3_0 + x2_4,
x1_3*k_deg_0 + 466161970*x1_3*k1_0 + 307497646*x1_2*k1_0 + 568774361*x1_1*k1_0 + 850129211*x1_0*k1_0 + x1_4,
748997744*x8_2^2*x2_1*k2_0 + 748997744*x2_2*x8_1^2*k2_0 + 458746535*x2_1*x8_1^2*k2_0 + 607579857*x8_3^2*x2_0*k2_0 + 766244181*x8_2^2*x2_0*k2_0 + 504967466*x8_1^2*x2_0*k2_0 + 607579857*x2_3*x8_0^2*k2_0 + 766244181*x2_2*x8_0^2*k2_0 + 504967466*x2_1*x8_0^2*k2_0 + 223612616*x2_0*x8_0^2*k2_0 + x3_3*k_deg_0 + 1073741826*x2_3*k3_0 + x3_4,
x5_2^2*t2_0 + x5_3^2 + 1073741825*x13_1*x2_1 + 1073741826*x2_2*x13_0 + 1073741826*x13_2*x2_0,
x4_2^2*t1_0 + x4_3^2 + 214748365*x10_1*x2_1 + 644245096*x2_2*x10_0 + 644245096*x10_2*x2_0,
x8_2^2*c5_0^3 + x8_3^2 + 536870913*x9_2,
x9_2 + 171134583*x7_1 + 531287456*x9_1,
1073741826*x2_3 + 460851122,
1073741826*x13_3 + 1073741826*x10_3 + 417772175,
536870912*x6_2^2*x10_1 + 536870912*x10_2*x6_1^2 + 536870913*x6_3^2*x10_0 + 536870913*x10_3*x6_0^2 + 1073741826*x14_3^2*e_2a_0 + 3*x2_2*x13_1 + 3*x13_2*x2_1 + x2_3*x13_0 + x13_3*x2_0 + x13_4 + 670809469*x13_3,
536870915*x6_2^2*x10_1 + 536870915*x10_2*x6_1^2 + 536870914*x6_3^2*x10_0 + 536870914*x10_3*x6_0^2 + 409632507*x11_3^2 + 214748366*x2_2*x10_1 + 214748366*x10_2*x2_1 + 429496731*x2_3*x10_0 + 429496731*x10_3*x2_0 + 1073741826*x12_3*c_4a_0 + x10_3*i_1a_0 + x10_4 + 132821864*x10_3,
x12_2*c_3a_0 + x12_3 + 171134583*x7_2,
1073741826*x11_1^2*x7_1 + 536870913*x7_2*x11_0^2 + 536870913*x11_2^2*x7_0 + 5*x14_2^2*e_2a_0 + x14_3^2,
x10_1*x6_1^2 + 536870914*x6_2^2*x10_0 + 536870914*x10_2*x6_0^2 + 1073741826*x5_2^2*t2_0 + x6_2^2*i1_0 + x6_3^2 + 402932358*x13_2,
x11_1^2*x7_1 + 536870914*x7_2*x11_0^2 + 536870914*x11_2^2*x7_0 + x11_3^2 + 99321119*x11_2^2 + 1073741822*x10_2*i_1a_0,
1073741826*x7_3 + 691184029,
536870915*x7_2*x11_1^2 + 536870915*x11_2^2*x7_1 + 536870914*x7_3*x11_0^2 + 536870914*x11_3^2*x7_0 + 1073741822*x6_3^2*i1_0 + x7_4,
1073741826*x3_4 + 1073741826*x2_4 + 1073741826*x1_4 + 680085615,
424253661*x2_2*x8_2^2*k2_0 + 282835774*x8_3^2*x2_1*k2_0 + 917493070*x8_2^2*x2_1*k2_0 + 282835774*x2_3*x8_1^2*k2_0 + 917493070*x2_2*x8_1^2*k2_0 + 946128037*x2_1*x8_1^2*k2_0 + 607579857*x8_4^2*x2_0*k2_0 + 1021658908*x8_3^2*x2_0*k2_0 + 1009934932*x8_2^2*x2_0*k2_0 + 894450464*x8_1^2*x2_0*k2_0 + 607579857*x2_4*x8_0^2*k2_0 + 1021658908*x2_3*x8_0^2*k2_0 + 1009934932*x2_2*x8_0^2*k2_0 + 894450464*x2_1*x8_0^2*k2_0 + 584242468*x2_0*x8_0^2*k2_0 + x3_4*k_deg_0 + 1073741826*x2_4*k3_0 + x3_5,
649488166*x2_2*x8_2^2*k2_0 + 790906053*x8_3^2*x2_1*k2_0 + 156248757*x8_2^2*x2_1*k2_0 + 790906053*x2_3*x8_1^2*k2_0 + 156248757*x2_2*x8_1^2*k2_0 + 127613790*x2_1*x8_1^2*k2_0 + 466161970*x8_4^2*x2_0*k2_0 + 52082919*x8_3^2*x2_0*k2_0 + 63806895*x8_2^2*x2_0*k2_0 + 179291363*x8_1^2*x2_0*k2_0 + 466161970*x2_4*x8_0^2*k2_0 + 52082919*x2_3*x8_0^2*k2_0 + 63806895*x2_2*x8_0^2*k2_0 + 179291363*x2_1*x8_0^2*k2_0 + 489499359*x2_0*x8_0^2*k2_0 + 1073741826*x4_4^2*t1_0 + 1073741826*x5_4^2*t2_0 + 6*x13_2*x2_2 + 429496732*x10_2*x2_2 + 4*x2_3*x13_1 + 644245097*x2_3*x10_1 + 4*x13_3*x2_1 + 644245097*x10_3*x2_1 + x2_4*x13_0 + 429496731*x2_4*x10_0 + x13_4*x2_0 + 429496731*x10_4*x2_0 + x2_4*k_deg_0 + 607579857*x1_4*k1_0 + 1021658908*x1_3*k1_0 + 1009934932*x1_2*k1_0 + 894450464*x1_1*k1_0 + 584242468*x1_0*k1_0 + x2_4*k3_0 + x2_5,
x1_4*k_deg_0 + 466161970*x1_4*k1_0 + 52082919*x1_3*k1_0 + 63806895*x1_2*k1_0 + 179291363*x1_1*k1_0 + 489499359*x1_0*k1_0 + x1_5,
x5_3^2*t2_0 + x5_4^2 + 1073741824*x2_2*x13_1 + 1073741824*x13_2*x2_1 + 1073741826*x2_3*x13_0 + 1073741826*x13_3*x2_0,
x4_3^2*t1_0 + x4_4^2 + 858993461*x2_2*x10_1 + 858993461*x10_2*x2_1 + 644245096*x2_3*x10_0 + 644245096*x10_3*x2_0,
x8_3^2*c5_0^3 + x8_4^2 + 536870913*x9_3,
x9_3 + 171134583*x7_2 + 531287456*x9_2,
1073741826*x2_4 + 10911471,
1073741826*x13_4 + 1073741826*x10_4 + 514805511,
3*x10_2*x6_2^2 + 2*x6_3^2*x10_1 + 2*x10_3*x6_1^2 + 536870914*x6_4^2*x10_0 + 536870914*x10_4*x6_0^2 + 409632507*x11_4^2 + 429496732*x10_2*x2_2 + 644245097*x2_3*x10_1 + 644245097*x10_3*x2_1 + 429496731*x2_4*x10_0 + 429496731*x10_4*x2_0 + 1073741826*x12_4*c_4a_0 + x10_4*i_1a_0 + x10_5 + 132821864*x10_4,
1073741824*x10_2*x6_2^2 + 1073741825*x6_3^2*x10_1 + 1073741825*x10_3*x6_1^2 + 536870913*x6_4^2*x10_0 + 536870913*x10_4*x6_0^2 + 1073741826*x14_4^2*e_2a_0 + 6*x13_2*x2_2 + 4*x2_3*x13_1 + 4*x13_3*x2_1 + x2_4*x13_0 + x13_4*x2_0 + x13_5 + 670809469*x13_4,
536870915*x6_2^2*x10_1 + 536870915*x10_2*x6_1^2 + 536870914*x6_3^2*x10_0 + 536870914*x10_3*x6_0^2 + 1073741826*x5_3^2*t2_0 + x6_3^2*i1_0 + x6_4^2 + 402932358*x13_3,
536870915*x7_2*x11_1^2 + 536870915*x11_2^2*x7_1 + 536870914*x7_3*x11_0^2 + 536870914*x11_3^2*x7_0 + x11_4^2 + 99321119*x11_3^2 + 1073741822*x10_3*i_1a_0,
x12_3*c_3a_0 + x12_4 + 171134583*x7_3,
536870912*x7_2*x11_1^2 + 536870912*x11_2^2*x7_1 + 536870913*x7_3*x11_0^2 + 536870913*x11_3^2*x7_0 + 5*x14_3^2*e_2a_0 + x14_4^2,
1073741826*x7_4 + 20125587,
3*x11_2^2*x7_2 + 2*x7_3*x11_1^2 + 2*x11_3^2*x7_1 + 536870914*x7_4*x11_0^2 + 536870914*x11_4^2*x7_0 + 1073741822*x6_4^2*i1_0 + x7_5,
1073741826*x3_5 + 1073741826*x2_5 + 1073741826*x1_5 + 1028881261,
366652392*x8_3^2*x2_2*k2_0 + 366652392*x2_3*x8_2^2*k2_0 + 927492806*x2_2*x8_2^2*k2_0 + 183326196*x8_4^2*x2_1*k2_0 + 260414595*x8_3^2*x2_1*k2_0 + 319034475*x8_2^2*x2_1*k2_0 + 183326196*x2_4*x8_1^2*k2_0 + 260414595*x2_3*x8_1^2*k2_0 + 319034475*x2_2*x8_1^2*k2_0 + 896456815*x2_1*x8_1^2*k2_0 + 466161970*x8_5^2*x2_0*k2_0 + 870410019*x8_4^2*x2_0*k2_0 + 106344825*x8_3^2*x2_0*k2_0 + 985099321*x8_2^2*x2_0*k2_0 + 300013141*x8_1^2*x2_0*k2_0 + 466161970*x2_5*x8_0^2*k2_0 + 870410019*x2_4*x8_0^2*k2_0 + 106344825*x2_3*x8_0^2*k2_0 + 985099321*x2_2*x8_0^2*k2_0 + 300013141*x2_1*x8_0^2*k2_0 + 1018318053*x2_0*x8_0^2*k2_0 + 1073741826*x4_5^2*t1_0 + 1073741826*x5_5^2*t2_0 + 10*x2_3*x13_2 + 2*x2_3*x10_2 + 10*x13_3*x2_2 + 2*x10_3*x2_2 + 5*x2_4*x13_1 + x2_4*x10_1 + 5*x13_4*x2_1 + x10_4*x2_1 + x2_5*x13_0 + 429496731*x2_5*x10_0 + x13_5*x2_0 + 429496731*x10_5*x2_0 + x2_5*k_deg_0 + 607579857*x1_5*k1_0 + 203331808*x1_4*k1_0 + 967397002*x1_3*k1_0 + 88642506*x1_2*k1_0 + 773728686*x1_1*k1_0 + 55423774*x1_0*k1_0 + x2_5*k3_0 + x2_6,
x1_5*k_deg_0 + 466161970*x1_5*k1_0 + 870410019*x1_4*k1_0 + 106344825*x1_3*k1_0 + 985099321*x1_2*k1_0 + 300013141*x1_1*k1_0 + 1018318053*x1_0*k1_0 + x1_6,
707089435*x8_3^2*x2_2*k2_0 + 707089435*x2_3*x8_2^2*k2_0 + 146249021*x2_2*x8_2^2*k2_0 + 890415631*x8_4^2*x2_1*k2_0 + 813327232*x8_3^2*x2_1*k2_0 + 754707352*x8_2^2*x2_1*k2_0 + 890415631*x2_4*x8_1^2*k2_0 + 813327232*x2_3*x8_1^2*k2_0 + 754707352*x2_2*x8_1^2*k2_0 + 177285012*x2_1*x8_1^2*k2_0 + 607579857*x8_5^2*x2_0*k2_0 + 203331808*x8_4^2*x2_0*k2_0 + 967397002*x8_3^2*x2_0*k2_0 + 88642506*x8_2^2*x2_0*k2_0 + 773728686*x8_1^2*x2_0*k2_0 + 607579857*x2_5*x8_0^2*k2_0 + 203331808*x2_4*x8_0^2*k2_0 + 967397002*x2_3*x8_0^2*k2_0 + 88642506*x2_2*x8_0^2*k2_0 + 773728686*x2_1*x8_0^2*k2_0 + 55423774*x2_0*x8_0^2*k2_0 + x3_5*k_deg_0 + 1073741826*x2_5*k3_0 + x3_6,
x4_4^2*t1_0 + x4_5^2 + 644245095*x10_2*x2_2 + 429496730*x2_3*x10_1 + 429496730*x10_3*x2_1 + 644245096*x2_4*x10_0 + 644245096*x10_4*x2_0,
x5_4^2*t2_0 + x5_5^2 + 1073741821*x13_2*x2_2 + 1073741823*x2_3*x13_1 + 1073741823*x13_3*x2_1 + 1073741826*x2_4*x13_0 + 1073741826*x13_4*x2_0,
x8_4^2*c5_0^3 + x8_5^2 + 536870913*x9_4,
x9_4 + 171134583*x7_3 + 531287456*x9_3,
1073741826*x2_5 + 501093272,
1073741826*x13_5 + 1073741826*x10_5 + 30989325,
1073741822*x6_3^2*x10_2 + 1073741822*x10_3*x6_2^2 + 536870911*x6_4^2*x10_1 + 536870911*x10_4*x6_1^2 + 536870913*x6_5^2*x10_0 + 536870913*x10_5*x6_0^2 + 1073741826*x14_5^2*e_2a_0 + 10*x2_3*x13_2 + 10*x13_3*x2_2 + 5*x2_4*x13_1 + 5*x13_4*x2_1 + x2_5*x13_0 + x13_5*x2_0 + x13_6 + 670809469*x13_5,
5*x6_3^2*x10_2 + 5*x10_3*x6_2^2 + 536870916*x6_4^2*x10_1 + 536870916*x10_4*x6_1^2 + 536870914*x6_5^2*x10_0 + 536870914*x10_5*x6_0^2 + 409632507*x11_5^2 + 2*x2_3*x10_2 + 2*x10_3*x2_2 + x2_4*x10_1 + x10_4*x2_1 + 429496731*x2_5*x10_0 + 429496731*x10_5*x2_0 + 1073741826*x12_5*c_4a_0 + x10_5*i_1a_0 + x10_6 + 132821864*x10_5,
3*x11_2^2*x7_2 + 2*x7_3*x11_1^2 + 2*x11_3^2*x7_1 + 536870914*x7_4*x11_0^2 + 536870914*x11_4^2*x7_0 + x11_5^2 + 99321119*x11_4^2 + 1073741822*x10_4*i_1a_0,
1073741824*x11_2^2*x7_2 + 1073741825*x7_3*x11_1^2 + 1073741825*x11_3^2*x7_1 + 536870913*x7_4*x11_0^2 + 536870913*x11_4^2*x7_0 + 5*x14_4^2*e_2a_0 + x14_5^2,
x12_4*c_3a_0 + x12_5 + 171134583*x7_4,
3*x10_2*x6_2^2 + 2*x6_3^2*x10_1 + 2*x10_3*x6_1^2 + 536870914*x6_4^2*x10_0 + 536870914*x10_4*x6_0^2 + 1073741826*x5_4^2*t2_0 + x6_4^2*i1_0 + x6_5^2 + 402932358*x13_4,
1073741826*x2_6 + 749000943,
733304784*x2_3*x8_3^2*k2_0 + 549978588*x8_4^2*x2_2*k2_0 + 781243785*x8_3^2*x2_2*k2_0 + 549978588*x2_4*x8_2^2*k2_0 + 781243785*x2_3*x8_2^2*k2_0 + 957103425*x2_2*x8_2^2*k2_0 + 649488166*x8_5^2*x2_1*k2_0 + 927492806*x8_4^2*x2_1*k2_0 + 638068950*x8_3^2*x2_1*k2_0 + 541886791*x8_2^2*x2_1*k2_0 + 649488166*x2_5*x8_1^2*k2_0 + 927492806*x2_4*x8_1^2*k2_0 + 638068950*x2_3*x8_1^2*k2_0 + 541886791*x2_2*x8_1^2*k2_0 + 726337019*x2_1*x8_1^2*k2_0 + 466161970*x8_6^2*x2_0*k2_0 + 614995292*x8_5^2*x2_0*k2_0 + 696388151*x8_4^2*x2_0*k2_0 + 896456815*x8_3^2*x2_0*k2_0 + 900039423*x8_2^2*x2_0*k2_0 + 741199183*x8_1^2*x2_0*k2_0 + 466161970*x2_6*x8_0^2*k2_0 + 614995292*x2_5*x8_0^2*k2_0 + 696388151*x2_4*x8_0^2*k2_0 + 896456815*x2_3*x8_0^2*k2_0 + 900039423*x2_2*x8_0^2*k2_0 + 741199183*x2_1*x8_0^2*k2_0 + 926287664*x2_0*x8_0^2*k2_0 + 1073741826*x4_6^2*t1_0 + 1073741826*x5_6^2*t2_0 + 20*x13_3*x2_3 + 4*x10_3*x2_3 + 15*x2_4*x13_2 + 3*x2_4*x10_2 + 15*x13_4*x2_2 + 3*x10_4*x2_2 + 6*x2_5*x13_1 + 429496732*x2_5*x10_1 + 6*x13_5*x2_1 + 429496732*x10_5*x2_1 + x2_6*x13_0 + 429496731*x2_6*x10_0 + x13_6*x2_0 + 429496731*x10_6*x2_0 + x2_6*k_deg_0 + 607579857*x1_6*k1_0 + 458746535*x1_5*k1_0 + 377353676*x1_4*k1_0 + 177285012*x1_3*k1_0 + 173702404*x1_2*k1_0 + 332542644*x1_1*k1_0 + 147454163*x1_0*k1_0 + x2_6*k3_0 + x2_7,
x4_5^2*t1_0 + x4_6^2 + 1073741825*x2_3*x10_2 + 1073741825*x10_3*x2_2 + 1073741826*x2_4*x10_1 + 1073741826*x10_4*x2_1 + 644245096*x2_5*x10_0 + 644245096*x10_5*x2_0,
x5_5^2*t2_0 + x5_6^2 + 1073741817*x2_3*x13_2 + 1073741817*x13_3*x2_2 + 1073741822*x2_4*x13_1 + 1073741822*x13_4*x2_1 + 1073741826*x2_5*x13_0 + 1073741826*x13_5*x2_0,
x8_5^2*c5_0^3 + x8_6^2 + 536870913*x9_5,
x9_5 + 171134583*x7_4 + 531287456*x9_4,
1073741826*x3_6 + 1073741826*x2_6 + 1073741826*x1_6 + 1065558082,
1073741826*x12_2 + 178245876,
1073741826*x12_3 + 10332989,
1073741826*x12_4 + 1051264925,
1073741826*x12_5 + 183840190,
1073741826*x2_7 + 922650416,
1073741826*x9_1 + 662991663,
1073741826*x9_2 + 945328987,
1073741826*x9_3 + 310031740,
1073741826*x9_4 + 783639684,
1073741826*x9_5 + 120331649,
1073741826*x13_6 + 1073741826*x10_6 + 946664105,
1073741826*x7_5 + 115335724,
z_aux + 1073741826

Fraction not shortened

When I solve the following problem

a,b
0
696*a*b^2 - 276*a*b + 260*a - 138*b^2 + 60*b - 65,
696*a^2*b - 138*a^2 - 276*a*b + 60*a + 260*b - 65

I get

[0, [1,[[[85070591730234615865843651857942052864 / 2^128, 85070591730234615865843651857942052864 / 2^128], [1 / 2^2, 1 / 2^2]]]]]:

while all numbers are exactly 1/4. Is that intended, so I am supposed to simplify the radicals myself?

Detect AVX2 support at runtime

Linux distributions must build for the lowest common denominator CPU. For the Fedora Linux distribution, the original x86_64 is still supported, meaning we cannot build msolve with AVX2 support. Would you consider detecting AVX2 support at runtime instead of at compile time?

One way that could be done is to add this code somewhere in src/neogb:

/* check for AVX2 availability */
#ifdef __amd64__
#include <cpuid.h>
int have_avx2;

static void __attribute__((constructor))
set_avx2_flag(void)
{
  unsigned int eax, ebx, ecx, edx;
  have_avx2 = __get_cpuid(7, &eax, &ebx, &ecx, &edx) && (ebx & bit_AVX2) != 0;
}
#endif

That works for gcc and clang. If you want to support other compilers, the code might get a little more complex. With have_avx2 available, then code like this:

#ifdef HAVE_AVX2
  foo;
#else
  bar;
#endif

would be transformed into this:

#ifdef __amd64__
  if (have_avx2) {
    foo;
  } else
#endif
  {
    bar;
  }

On x86_64 platforms, then -mavx could be passed to the compiler always, since the AVX2 code is not executed if __get_cpuid indicates the CPU doesn't support AVX2. That would let you throw away most or all of several files in the m4 directory.

I can open a PR if you like the idea.

msolve -h call exits with non-0 code

This is a regression in 0.6.5 compared to 0.5.0.

With 0.5.0 one has

$ if $(msolve -h >/dev/null); then echo ok; else echo oops; fi
ok

but with 0.6.5, no

$ if $(msolve -h >/dev/null); then echo ok; else echo oops; fi
oops

Found while working on sagemath/sage#37673

Illegal Instruction with example from docs

File in.ms contains the following:

z1, z2, z3
1073741827
7*z1*z2+5*z2*z3+z3^2+z1+5*z3+10,
7*z3^2-27*z1^2-15*z2^2+59*z3+3*z1,
8*z1^2+13*z1*z3+10*z3^2+z2+z1

Now, typing the following command ./msolve -g 2 -f in.ms -o out.ms results in Illegal instruction (core dumped).

versions

Same result on AMD epic and on Ryzen 7, same with the 0.6.5 release on the website and the 0.6.5-1 in the Arch linux packages.

the coredump info

$ coredumpctl info 19647
           PID: 19647 (msolve)
           UID: 1000 (votroto)
           GID: 1000 (votroto)
        Signal: 4 (ILL)
     Timestamp: Wed 2024-04-03 14:30:49 CEST (2h 31min ago)
  Command Line: msolve -g 1 -f cona.ms -o conagb.ms
    Executable: /usr/bin/msolve
 Control Group: /user.slice/user-1000.slice/session-2.scope
          Unit: session-2.scope
         Slice: user-1000.slice
       Session: 2
     Owner UID: 1000 (votroto)
       Boot ID: 8f23e8e8a7a344b1a1c4774af2e2ad34
    Machine ID: 0a28cbc9d0c445bba276547b812bd8b2
      Hostname: votrotot14
       Storage: /var/lib/systemd/coredump/core.msolve.1000.8f23e8e8a7a344b1a1c4774af2e2ad34.19647.1712147449000000.zst (present)
  Size on Disk: 297.3K
       Message: Process 19647 (msolve) of user 1000 dumped core.
                
                Stack trace of thread 19647:
                #0  0x00007b7425ef2816 initialize_basis_hash_table (libneogb-0.6.5.so + 0x8816)
                #1  0x00007b7425ef478b initialize_basis (libneogb-0.6.5.so + 0xa78b)
                #2  0x00005a5ffe79f6c2 n/a (msolve + 0x286c2)
                #3  0x00005a5ffe781dc6 n/a (msolve + 0xadc6)
                #4  0x00005a5ffe77c5b8 n/a (msolve + 0x55b8)
                #5  0x00007b7424c3bcd0 n/a (libc.so.6 + 0x25cd0)
                #6  0x00007b7424c3bd8a __libc_start_main (libc.so.6 + 0x25d8a)
                #7  0x00005a5ffe77cde5 n/a (msolve + 0x5de5)
                ELF object binary architecture: AMD x86-64

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.