From 57493b997e2199d20c7ef0f1ba8393fb8d08215e Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 11:26:08 +0200 Subject: [PATCH 01/22] renamed bindings to qpSWIFT_sparse_bindings --- README.md | 10 + python/pyqpSWIFT.cpp | 4 +- python/{ => scripts}/demoqp.py | 2 +- python/{ => scripts}/demoqp_sparse.py | 2 +- python/{ => scripts}/syntax.py | 260 +++++----- python/setup.py | 276 +++++----- python/{ => test}/test_qp.py | 702 +++++++++++++------------- 7 files changed, 643 insertions(+), 613 deletions(-) rename python/{ => scripts}/demoqp.py (94%) rename python/{ => scripts}/demoqp_sparse.py (95%) rename python/{ => scripts}/syntax.py (98%) rename python/{ => test}/test_qp.py (99%) diff --git a/README.md b/README.md index c68f5a7..8438af2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +# Python Bindings for qpSWIFT + +These are custom Python bindings for a sparse interface for the [qpSWIFT](https://github.com/qpSWIFT/qpSWIFT) QP solver. + +> qpSWIFT is developed and maintained by its original authors [here](https://github.com/qpSWIFT/qpSWIFT) and is licensed under the GNU General Public License v3.0 (GPL-3.0). +> This project provides Python bindings and is independently maintained. + +--- + +## Original qpSWIFT README # qpSWIFT ![github_release](https://img.shields.io/github/release-date/qpSWIFT/qpSWIFT) ![license](https://img.shields.io/github/license/qpSWIFT/qpSWIFT) diff --git a/python/pyqpSWIFT.cpp b/python/pyqpSWIFT.cpp index ca3f7da..551765b 100644 --- a/python/pyqpSWIFT.cpp +++ b/python/pyqpSWIFT.cpp @@ -601,8 +601,8 @@ QPOptions dict_to_options(const py::dict& options_dict) { static ThreadPool pool(std::max(1u, std::thread::hardware_concurrency() - 1)); // Python module -PYBIND11_MODULE(qpSWIFT, m) { - m.doc() = "Python bindings for qpSWIFT quadratic programming solver"; +PYBIND11_MODULE(qpSWIFT_sparse_bindings, m) { + m.doc() = "Custom sparse python bindings for the qpSWIFT solver"; py::class_(m, "QPSolution") .def_readonly("exit_flag", &QPSolution::exit_flag, "Exit flag (0: success, >0: error)") diff --git a/python/demoqp.py b/python/scripts/demoqp.py similarity index 94% rename from python/demoqp.py rename to python/scripts/demoqp.py index 8d80d7d..9dfd58b 100644 --- a/python/demoqp.py +++ b/python/scripts/demoqp.py @@ -1,5 +1,5 @@ import numpy as np -import qpSWIFT +import qpSWIFT_sparse_bindings as qpSWIFT ### Solver Options diff --git a/python/demoqp_sparse.py b/python/scripts/demoqp_sparse.py similarity index 95% rename from python/demoqp_sparse.py rename to python/scripts/demoqp_sparse.py index e6f6c49..d7b2a04 100644 --- a/python/demoqp_sparse.py +++ b/python/scripts/demoqp_sparse.py @@ -1,6 +1,6 @@ import numpy as np import scipy.sparse as sp -import qpSWIFT +import qpSWIFT_sparse_bindings as qpSWIFT # Solver Options # For information about Solver options please refer to qpSWIFT documentation diff --git a/python/syntax.py b/python/scripts/syntax.py similarity index 98% rename from python/syntax.py rename to python/scripts/syntax.py index 968a627..e992a2f 100644 --- a/python/syntax.py +++ b/python/scripts/syntax.py @@ -1,130 +1,130 @@ -import numpy as np -import qpSWIFT - -### To remove traceback call statements -import sys -sys.tracebacklimit = 0 - - -def error_ctrl(cmd,msg): - try: - exec(cmd) - return False - except TypeError as err: - err_str = str(err) - if(err_str == msg): - return True - else: - return False - -def output_ctrl(cmd): - exec(cmd,globals()) - return res - -### Solver Options -### For information about Solver options please refer to qpSWIFT -### documentation - - -### Cost Function - -P = np.array([[5.0,1.0,0.0], - [1.0, 2.0, 1.0], - [0.0, 1.0, 4.0]]) - -c = np.array([1.0,2.0,1.0]) - -### Inequality Constraints -G = np.array([[-4.0,-4.0,0.0], - [0.0,0.0,-1.0]]) - -h = np.array([-1.0,-1.0]) - -### Equality Constraints -A = np.array([[1.0, -2.0, 1.0]]) - -b = np.array([3.0]) - -### Equality Constrained QP -note_opts = 'reseq = qpSWIFT.run(c,h,P,G,A,b,opts)\n' -note_no_opts = "reseq = qpSWIFT.run(c,h,P,G,A,b)\n" - - - -### Options Arguments -assert error_ctrl("opts = {'MAXITER':-1}\n"+note_opts,"max iterations must be between 0 and 200, using the default value of 100"),"opts iter _1 test failed" -assert error_ctrl("opts = {'MAXITER':201}\n"+note_opts,"max iterations must be between 0 and 200, using the default value of 100"),"opts iter _2 test failed" - -assert error_ctrl("opts = {'VERBOSE':-1}\n"+note_opts,"verbose must be non-negative integer, using the default value"),"opts verbose _1 test failed" -assert error_ctrl("opts = {'VERBOSE':0.2}\n"+note_opts,"verbose must be non-negative integer, using the default value"),"opts verbose _2 test failed" - -assert error_ctrl("opts = {'ABSTOL':-1}\n"+note_opts,"absolute tolerance must be between 0 and 1, using the default value"),"opts abstol _1 test failed" -assert error_ctrl("opts = {'ABSTOL':1.1}\n"+note_opts,"absolute tolerance must be between 0 and 1, using the default value"),"opts abstol _2 test failed" -assert error_ctrl("opts = {'ABSTOL':1}\n"+note_opts,"absolute tolerance must be between 0 and 1, using the default value"),"opts abstol _3 test failed" - -assert error_ctrl("opts = {'RELTOL':-1}\n"+note_opts,"realtive tolerance must be between 0 and 1, using the default value"),"opts reltol _1 test failed" -assert error_ctrl("opts = {'RELTOL':1.1}\n"+note_opts,"realtive tolerance must be between 0 and 1, using the default value"),"opts reltol _2 test failed" -assert error_ctrl("opts = {'RELTOL':1}\n"+note_opts,"realtive tolerance must be between 0 and 1, using the default value"),"opts reltol_3 test failed" - -assert error_ctrl("opts = {'SIGMA':-1}\n"+note_opts,"sigma must be positive, using the default value"),"opts sigma _1 test failed" -assert error_ctrl("opts = {'SIGMA':1}\n"+note_opts,"sigma must be positive, using the default value"),"opts sigma _2 test failed" -### Options Arguments - -### Input Checking -## c h and b -assert error_ctrl("c = np.array([1,2,1])\n"+note_no_opts,"c must be a floating array with one dimension"),"c float test failed" -assert error_ctrl("c = np.array([[1,2,1]])\n"+note_no_opts,"c must be a floating array with one dimension"),"c one dim test failed" - -assert error_ctrl("h = np.array([-1,-1])\n"+note_no_opts,"h must be a floating array with one dimension"),"h float test failed" -assert error_ctrl("h = np.array([[-1.0,-1.0]])\n"+note_no_opts,"h must be a floating array with one dimension"),"h one dim test failed" - -assert error_ctrl("b = np.array([3])\n"+note_no_opts,"b must be a floating array with one dimension"),"b float test failed" -assert error_ctrl("b = np.array([[3.0]])\n"+note_no_opts,"b must be a floating array with one dimension"),"b one dim test failed" -## c h and b - -## P A and G -assert error_ctrl("P = np.array([[5,1,0],\n[1, 2, 1],\n[0, 1, 4]])\n"+note_no_opts,"P must be a floating matrix with two dimensions"),"P float test failed" -assert error_ctrl("P = np.array([5,1,0])\n"+note_no_opts,"P must be a floating matrix with two dimensions"),"P matrix test failed" -assert error_ctrl("P = np.array([[5,1,0,2],\n[1, 2.0, 1,2],\n[0, 1, 4,3]])\n"+note_no_opts,"c and P do not have compatible dimensions"),"P float test_1 failed" -assert error_ctrl("P = np.array([[5,1,0.0],\n[0, 1, 4]])\n"+note_no_opts,"c and P do not have compatible dimensions"),"P float test_2 failed" - -assert error_ctrl("G = np.array([[-4,-4,0],\n[0,0,-1]])\n"+note_no_opts,"G must be a floating matrix with two dimensions"),"G float test failed" -assert error_ctrl("G = np.array([-4.0,-4,0])\n"+note_no_opts,"G must be a floating matrix with two dimensions"),"G matrix test failed" -assert error_ctrl("G = np.array([[-4,-4,0,2.0],\n[0,0.0,-1,3.0]])\n"+note_no_opts,"h and G do not have compatible dimensions"),"G float test_1 failed" -assert error_ctrl("G = np.array([[-4,-4,0.0]])\n"+note_no_opts,"h and G do not have compatible dimensions"),"G float test_2 failed" - -assert error_ctrl("A = np.array([[1, -2, 1]])\n"+note_no_opts,"A must be a floating matrix with two dimensions"),"A float test failed" -assert error_ctrl("A = np.array([1.0, -2.0, 1.0])\n"+note_no_opts,"A must be a floating matrix with two dimensions"),"A matrix test failed" -assert error_ctrl("A = np.array([[2.0,1.0, -2.0, 1.0]])\n"+note_no_opts,"b and A do not have compatible dimensions"),"A float test_1 failed" -assert error_ctrl("A = np.array([[1.0, -2.0, 1.0],[1.0,3.0,4.5]])\n"+note_no_opts,"b and A do not have compatible dimensions"),"A float test_2 failed" -## P A and G - -### Input Checking - - -### Output Arguments -opts_res = 1 -assert output_ctrl("opts = {'OUTPUT':10}\n" + note_opts + "sol = reseq['sol']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=c.size)):\n res = False\nelse:\n res = True\n"),"result _1 sol Test Failed" - -assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['sol']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=c.size)):\n res = False\nelse:\n res = True\n"),"result _2 sol Test Failed" -assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['basicInfo']['ExitFlag']\n" + "if((type(sol) != int)):\n res = False\nelse:\n res = True\n"),"result _2 basicinfo ExitFlag Test Failed" -assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['basicInfo']['Iterations']\n" + "if((type(sol) != int)):\n res = False\nelse:\n res = True\n"),"result _2 basicinfo Iterations Test Failed" -assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['basicInfo']['Setup_Time']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _2 basicinfo Setup_Time Test Failed" -assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['basicInfo']['Solve_Time']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _2 basicinfo Solve_Time Test Failed" - -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['sol']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=c.size)):\n res = False\nelse:\n res = True\n"),"result _3 sol Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['basicInfo']['ExitFlag']\n" + "if((type(sol) != int)):\n res = False\nelse:\n res = True\n"),"result _3 basicinfo ExitFlag Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['basicInfo']['Iterations']\n" + "if((type(sol) != int)):\n res = False\nelse:\n res = True\n"),"result _3 basicinfo Iterations Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['basicInfo']['Setup_Time']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 basicinfo Setup_Time Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['basicInfo']['Solve_Time']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 basicinfo Solve_Time Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['fval']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 advInfo fval Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['kktTime']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 advInfo kktTime Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['ldlTime']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 advInfo ldlTime Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['y']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=b.size)):\n res = False\nelse:\n res = True\n"),"result _3 advinfo y Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['z']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=h.size)):\n res = False\nelse:\n res = True\n"),"result _3 advinfo z Test Failed" -assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['s']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=h.size)):\n res = False\nelse:\n res = True\n"),"result _3 advinfo s Test Failed" -### Output Arguments - - -print('Syntax Test Passed') - +import numpy as np +import qpSWIFT + +### To remove traceback call statements +import sys +sys.tracebacklimit = 0 + + +def error_ctrl(cmd,msg): + try: + exec(cmd) + return False + except TypeError as err: + err_str = str(err) + if(err_str == msg): + return True + else: + return False + +def output_ctrl(cmd): + exec(cmd,globals()) + return res + +### Solver Options +### For information about Solver options please refer to qpSWIFT +### documentation + + +### Cost Function + +P = np.array([[5.0,1.0,0.0], + [1.0, 2.0, 1.0], + [0.0, 1.0, 4.0]]) + +c = np.array([1.0,2.0,1.0]) + +### Inequality Constraints +G = np.array([[-4.0,-4.0,0.0], + [0.0,0.0,-1.0]]) + +h = np.array([-1.0,-1.0]) + +### Equality Constraints +A = np.array([[1.0, -2.0, 1.0]]) + +b = np.array([3.0]) + +### Equality Constrained QP +note_opts = 'reseq = qpSWIFT.run(c,h,P,G,A,b,opts)\n' +note_no_opts = "reseq = qpSWIFT.run(c,h,P,G,A,b)\n" + + + +### Options Arguments +assert error_ctrl("opts = {'MAXITER':-1}\n"+note_opts,"max iterations must be between 0 and 200, using the default value of 100"),"opts iter _1 test failed" +assert error_ctrl("opts = {'MAXITER':201}\n"+note_opts,"max iterations must be between 0 and 200, using the default value of 100"),"opts iter _2 test failed" + +assert error_ctrl("opts = {'VERBOSE':-1}\n"+note_opts,"verbose must be non-negative integer, using the default value"),"opts verbose _1 test failed" +assert error_ctrl("opts = {'VERBOSE':0.2}\n"+note_opts,"verbose must be non-negative integer, using the default value"),"opts verbose _2 test failed" + +assert error_ctrl("opts = {'ABSTOL':-1}\n"+note_opts,"absolute tolerance must be between 0 and 1, using the default value"),"opts abstol _1 test failed" +assert error_ctrl("opts = {'ABSTOL':1.1}\n"+note_opts,"absolute tolerance must be between 0 and 1, using the default value"),"opts abstol _2 test failed" +assert error_ctrl("opts = {'ABSTOL':1}\n"+note_opts,"absolute tolerance must be between 0 and 1, using the default value"),"opts abstol _3 test failed" + +assert error_ctrl("opts = {'RELTOL':-1}\n"+note_opts,"realtive tolerance must be between 0 and 1, using the default value"),"opts reltol _1 test failed" +assert error_ctrl("opts = {'RELTOL':1.1}\n"+note_opts,"realtive tolerance must be between 0 and 1, using the default value"),"opts reltol _2 test failed" +assert error_ctrl("opts = {'RELTOL':1}\n"+note_opts,"realtive tolerance must be between 0 and 1, using the default value"),"opts reltol_3 test failed" + +assert error_ctrl("opts = {'SIGMA':-1}\n"+note_opts,"sigma must be positive, using the default value"),"opts sigma _1 test failed" +assert error_ctrl("opts = {'SIGMA':1}\n"+note_opts,"sigma must be positive, using the default value"),"opts sigma _2 test failed" +### Options Arguments + +### Input Checking +## c h and b +assert error_ctrl("c = np.array([1,2,1])\n"+note_no_opts,"c must be a floating array with one dimension"),"c float test failed" +assert error_ctrl("c = np.array([[1,2,1]])\n"+note_no_opts,"c must be a floating array with one dimension"),"c one dim test failed" + +assert error_ctrl("h = np.array([-1,-1])\n"+note_no_opts,"h must be a floating array with one dimension"),"h float test failed" +assert error_ctrl("h = np.array([[-1.0,-1.0]])\n"+note_no_opts,"h must be a floating array with one dimension"),"h one dim test failed" + +assert error_ctrl("b = np.array([3])\n"+note_no_opts,"b must be a floating array with one dimension"),"b float test failed" +assert error_ctrl("b = np.array([[3.0]])\n"+note_no_opts,"b must be a floating array with one dimension"),"b one dim test failed" +## c h and b + +## P A and G +assert error_ctrl("P = np.array([[5,1,0],\n[1, 2, 1],\n[0, 1, 4]])\n"+note_no_opts,"P must be a floating matrix with two dimensions"),"P float test failed" +assert error_ctrl("P = np.array([5,1,0])\n"+note_no_opts,"P must be a floating matrix with two dimensions"),"P matrix test failed" +assert error_ctrl("P = np.array([[5,1,0,2],\n[1, 2.0, 1,2],\n[0, 1, 4,3]])\n"+note_no_opts,"c and P do not have compatible dimensions"),"P float test_1 failed" +assert error_ctrl("P = np.array([[5,1,0.0],\n[0, 1, 4]])\n"+note_no_opts,"c and P do not have compatible dimensions"),"P float test_2 failed" + +assert error_ctrl("G = np.array([[-4,-4,0],\n[0,0,-1]])\n"+note_no_opts,"G must be a floating matrix with two dimensions"),"G float test failed" +assert error_ctrl("G = np.array([-4.0,-4,0])\n"+note_no_opts,"G must be a floating matrix with two dimensions"),"G matrix test failed" +assert error_ctrl("G = np.array([[-4,-4,0,2.0],\n[0,0.0,-1,3.0]])\n"+note_no_opts,"h and G do not have compatible dimensions"),"G float test_1 failed" +assert error_ctrl("G = np.array([[-4,-4,0.0]])\n"+note_no_opts,"h and G do not have compatible dimensions"),"G float test_2 failed" + +assert error_ctrl("A = np.array([[1, -2, 1]])\n"+note_no_opts,"A must be a floating matrix with two dimensions"),"A float test failed" +assert error_ctrl("A = np.array([1.0, -2.0, 1.0])\n"+note_no_opts,"A must be a floating matrix with two dimensions"),"A matrix test failed" +assert error_ctrl("A = np.array([[2.0,1.0, -2.0, 1.0]])\n"+note_no_opts,"b and A do not have compatible dimensions"),"A float test_1 failed" +assert error_ctrl("A = np.array([[1.0, -2.0, 1.0],[1.0,3.0,4.5]])\n"+note_no_opts,"b and A do not have compatible dimensions"),"A float test_2 failed" +## P A and G + +### Input Checking + + +### Output Arguments +opts_res = 1 +assert output_ctrl("opts = {'OUTPUT':10}\n" + note_opts + "sol = reseq['sol']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=c.size)):\n res = False\nelse:\n res = True\n"),"result _1 sol Test Failed" + +assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['sol']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=c.size)):\n res = False\nelse:\n res = True\n"),"result _2 sol Test Failed" +assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['basicInfo']['ExitFlag']\n" + "if((type(sol) != int)):\n res = False\nelse:\n res = True\n"),"result _2 basicinfo ExitFlag Test Failed" +assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['basicInfo']['Iterations']\n" + "if((type(sol) != int)):\n res = False\nelse:\n res = True\n"),"result _2 basicinfo Iterations Test Failed" +assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['basicInfo']['Setup_Time']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _2 basicinfo Setup_Time Test Failed" +assert output_ctrl("opts = {'OUTPUT':1}\n" + note_opts + "sol = reseq['basicInfo']['Solve_Time']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _2 basicinfo Solve_Time Test Failed" + +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['sol']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=c.size)):\n res = False\nelse:\n res = True\n"),"result _3 sol Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['basicInfo']['ExitFlag']\n" + "if((type(sol) != int)):\n res = False\nelse:\n res = True\n"),"result _3 basicinfo ExitFlag Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['basicInfo']['Iterations']\n" + "if((type(sol) != int)):\n res = False\nelse:\n res = True\n"),"result _3 basicinfo Iterations Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['basicInfo']['Setup_Time']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 basicinfo Setup_Time Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['basicInfo']['Solve_Time']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 basicinfo Solve_Time Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['fval']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 advInfo fval Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['kktTime']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 advInfo kktTime Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['ldlTime']\n" + "if((type(sol) != float)):\n res = False\nelse:\n res = True\n"),"result _3 advInfo ldlTime Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['y']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=b.size)):\n res = False\nelse:\n res = True\n"),"result _3 advinfo y Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['z']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=h.size)):\n res = False\nelse:\n res = True\n"),"result _3 advinfo z Test Failed" +assert output_ctrl("opts = {'OUTPUT':2}\n" + note_opts + "sol = reseq['advInfo']['s']\n" + "if((sol.dtype != np.dtype('float64')) or (sol.ndim != 1) or (sol.size!=h.size)):\n res = False\nelse:\n res = True\n"),"result _3 advinfo s Test Failed" +### Output Arguments + + +print('Syntax Test Passed') + diff --git a/python/setup.py b/python/setup.py index e367f9d..6116f13 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,128 +1,148 @@ -import os -import sys -import subprocess -from setuptools import setup, Extension -import pybind11 -import numpy as np - -# This setup.py builds the QP_SWIFT C sources inline, relative to this python/ folder -here = os.path.abspath(os.path.dirname(__file__)) -project_root = os.path.abspath(os.path.join(here, os.pardir)) - -# Paths for includes and sources -include_dir = os.path.join(project_root, 'include') -src_dir = os.path.join(project_root, 'src') - -# Verify directories -if not os.path.isdir(include_dir): - sys.exit(f"ERROR: include directory not found: {include_dir}") -if not os.path.isdir(src_dir): - sys.exit(f"ERROR: src directory not found: {src_dir}") - - -# Function to find Eigen include directory -def find_eigen(): - # Common paths where Eigen might be installed - common_paths = [ - "/usr/include/eigen3", - "/usr/local/include/eigen3", - "/opt/homebrew/include/eigen3", - "/usr/include", - "/usr/local/include", - "/opt/local/include/eigen3", - "/opt/local/include", - ] - - # Try to find Eigen/Core header in common paths - for path in common_paths: - if os.path.exists(os.path.join(path, "Eigen", "Core")): - return path - - # Try using pkg-config if available - try: - eigen_cflags = subprocess.check_output(["pkg-config", "--cflags", "eigen3"], - universal_newlines=True).strip() - for item in eigen_cflags.split(): - if item.startswith("-I"): - path = item[2:] - if os.path.exists(os.path.join(path, "Eigen", "Core")): - return path - except (subprocess.SubprocessError, FileNotFoundError): - pass - - # Try using find command if available (Unix-like systems) - try: - find_output = subprocess.check_output( - ["find", "/usr", "-name", "Eigen", "-type", "d", "-path", "*/eigen3/Eigen"], - universal_newlines=True - ).strip() - - if find_output: - # Take the first result and get its parent directory - eigen_dir = os.path.dirname(find_output.split('\n')[0]) - if os.path.exists(os.path.join(eigen_dir, "Eigen", "Core")): - return eigen_dir - except (subprocess.SubprocessError, FileNotFoundError): - pass - - return None - - -# Find Eigen include directory -eigen_include_dir = find_eigen() - -if eigen_include_dir is None: - print("WARNING: Eigen headers not found automatically. Building might fail.") - print("You may need to install Eigen with: apt install libeigen3-dev (Debian/Ubuntu),") - print("brew install eigen (macOS), or download from http://eigen.tuxfamily.org/") -else: - print(f"Found Eigen headers at: {eigen_include_dir}") - -# Collect all C source files -c_sources = [ - os.path.join(src_dir, f) - for f in [ - 'amd_1.c', 'amd_2.c', 'amd_aat.c', 'amd_control.c', 'amd_defaults.c', - 'amd_dump.c', 'amd_global.c', 'amd_info.c', 'amd_order.c', - 'amd_post_tree.c', 'amd_postorder.c', 'amd_preprocess.c', 'amd_valid.c', - 'Auxilary.c', 'ldl.c', 'timer.c', 'qpSWIFT.c' - ] -] - -# Add the pybind11 wrapper -wrapper_cpp = os.path.join(here, 'pyqpSWIFT.cpp') -c_sources.append(wrapper_cpp) - -# Setup include directories -include_dirs = [ - include_dir, - pybind11.get_include(), - pybind11.get_include(user=True), - np.get_include(), -] - -# Add Eigen include directory if found -if eigen_include_dir: - include_dirs.append(eigen_include_dir) - -# Prepare extra compile args -extra_compile_args = ["-O3", "-std=c++11"] - -ext_modules = [ - Extension( - name="qpSWIFT", - sources=c_sources, - include_dirs=include_dirs, - language="c++", - extra_compile_args=extra_compile_args, - ), -] - -setup( - name="qpSWIFT", - version="0.1.0", - description="Python bindings for the QP_SWIFT solver", - ext_modules=ext_modules, - install_requires=["numpy", "scipy", "pybind11"], - zip_safe=False, -) \ No newline at end of file +import os +import sys +import subprocess +from setuptools import setup, Extension +import pybind11 +import numpy as np + +# This setup.py builds the QP_SWIFT C sources inline, relative to this python/ folder +here = os.path.abspath(os.path.dirname(__file__)) +project_root = os.path.abspath(os.path.join(here, os.pardir)) + +# Paths for includes and sources +include_dir = os.path.join(project_root, 'include') +src_dir = os.path.join(project_root, 'src') + +# Verify directories +if not os.path.isdir(include_dir): + sys.exit(f"ERROR: include directory not found: {include_dir}") +if not os.path.isdir(src_dir): + sys.exit(f"ERROR: src directory not found: {src_dir}") + + +# Function to find Eigen include directory +def find_eigen(): + # Common paths where Eigen might be installed + common_paths = [ + "/usr/include/eigen3", + "/usr/local/include/eigen3", + "/opt/homebrew/include/eigen3", + "/usr/include", + "/usr/local/include", + "/opt/local/include/eigen3", + "/opt/local/include", + ] + + # Try to find Eigen/Core header in common paths + for path in common_paths: + if os.path.exists(os.path.join(path, "Eigen", "Core")): + return path + + # Try using pkg-config if available + try: + eigen_cflags = subprocess.check_output(["pkg-config", "--cflags", "eigen3"], + universal_newlines=True).strip() + for item in eigen_cflags.split(): + if item.startswith("-I"): + path = item[2:] + if os.path.exists(os.path.join(path, "Eigen", "Core")): + return path + except (subprocess.SubprocessError, FileNotFoundError): + pass + + # Try using find command if available (Unix-like systems) + try: + find_output = subprocess.check_output( + ["find", "/usr", "-name", "Eigen", "-type", "d", "-path", "*/eigen3/Eigen"], + universal_newlines=True + ).strip() + + if find_output: + # Take the first result and get its parent directory + eigen_dir = os.path.dirname(find_output.split('\n')[0]) + if os.path.exists(os.path.join(eigen_dir, "Eigen", "Core")): + return eigen_dir + except (subprocess.SubprocessError, FileNotFoundError): + pass + + return None + + +# Find Eigen include directory +eigen_include_dir = find_eigen() + +if eigen_include_dir is None: + print("WARNING: Eigen headers not found automatically. Building might fail.") + print("You may need to install Eigen with: apt install libeigen3-dev (Debian/Ubuntu),") + print("brew install eigen (macOS), or download from http://eigen.tuxfamily.org/") +else: + print(f"Found Eigen headers at: {eigen_include_dir}") + +# Collect all C source files +c_sources = [ + os.path.join(src_dir, f) + for f in [ + 'amd_1.c', 'amd_2.c', 'amd_aat.c', 'amd_control.c', 'amd_defaults.c', + 'amd_dump.c', 'amd_global.c', 'amd_info.c', 'amd_order.c', + 'amd_post_tree.c', 'amd_postorder.c', 'amd_preprocess.c', 'amd_valid.c', + 'Auxilary.c', 'ldl.c', 'timer.c', 'qpSWIFT.c' + ] +] + +# Add the pybind11 wrapper +wrapper_cpp = os.path.join(here, 'pyqpSWIFT.cpp') +c_sources.append(wrapper_cpp) + +# Setup include directories +include_dirs = [ + include_dir, + pybind11.get_include(), + np.get_include(), +] + +# Add Eigen include directory if found +if eigen_include_dir: + include_dirs.append(eigen_include_dir) + +# Prepare extra compile args +extra_compile_args = ["-O3", "-std=c++11"] + +ext_modules = [ + Extension( + name="qpSWIFT_sparse_bindings", + sources=c_sources, + include_dirs=include_dirs, + language="c++", + extra_compile_args=extra_compile_args, + ), +] + +setup( + name="qpSWIFT_sparse_bindings", + version="1.0.0", + description="Custom sparse python bindings for the qpSWIFT solver", + long_description_content_type="text/markdown", + python_requires='>=3.8, <3.13', + long_description='qpSWIFT is light-weight sparse Quadratic Programming solver targeted for embedded and robotic applications. ' + 'It employs Primal-Dual Interioir Point method with Mehrotra Predictor corrector step and Nesterov Todd scaling. ' + 'For solving the linear system of equations, sparse LDL\' factorization is used along with approximate minimum ' + 'degree heuristic to minimize fill-in of the factorizations.\n ' + 'This is a fork of the official qpSWIFT project (https://github.com/qpSWIFT/qpSWIFT) adapted for use with Giskard(py)', + ext_modules=ext_modules, + url="https://github.com/SemRoCo/qpSWIFT", + author="Simon Stelter", + install_requires=["numpy", "scipy", "pybind11"], + license='GPLv3', + license_files=('LICENSE',), + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', + 'Operating System :: POSIX :: Linux', + 'Intended Audience :: Science/Research', + "Programming Language :: Python", + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.12', + ], + zip_safe=False, +) diff --git a/python/test_qp.py b/python/test/test_qp.py similarity index 99% rename from python/test_qp.py rename to python/test/test_qp.py index a61058f..8456dd6 100644 --- a/python/test_qp.py +++ b/python/test/test_qp.py @@ -1,352 +1,352 @@ -import time - -import numpy as np -import qpSWIFT -from scipy.sparse import csc_matrix - -options = { - 'OUTPUT': 1, # 0 = sol; 1 = sol + basicInfo; 2 = sol + basicInfo + advInfo - # 'MAXITER': 100, # 0 < MAXITER < 200; default 100. maximum number of iterations needed - # 'ABSTOL': 9e-4, # 0 < ABSTOL < 1; default 1e-6. absolute tolerance - 'RELTOL': 3.5e-5, # 0 < RELTOL < 1; default 1e-6. relative tolerance - # 'SIGMA': 0.01, # default 100. maximum centering allowed - # 'VERBOSE': 1 # 0 = no print; 1 = print -} - - -def solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA, benchmark: bool = False, precision: float = 1.e-4) -> np.ndarray: - if len(H.shape) == 2: - sparse_H = csc_matrix(H) - else: - sparse_H = H - H = np.diag(H) - sparse_A = csc_matrix(A) - sparse_E = csc_matrix(E) - - if benchmark: - iterations = 1000 - else: - iterations = 1 - t = time.time() - for i in range(iterations): - x_dense = qpSWIFT.solve(H, g, lb, ub, E, b, A, lbA, ubA, options).x - print(f'Time(dense): {(time.time() - t)/iterations}') - - - t = time.time() - for i in range(iterations): - if len(sparse_H.shape) == 1: - x = qpSWIFT.solve_sparse_H_diag(sparse_H, g, lb, ub, sparse_E, b, sparse_A, lbA, ubA, options).x - else: - x = qpSWIFT.solve_sparse(sparse_H, g, lb, ub, sparse_E, b, sparse_A, lbA, ubA, options).x - print(f'Time(sparse): {(time.time() - t)/iterations}') - print(f'Solution: {x}') - - if len(sparse_H.shape) == 1: - x_batch = qpSWIFT.solve_sparse_H_diag_batch(qp_data=[(sparse_H, g, lb, ub, sparse_E, b, sparse_A, lbA, ubA)], options=options)[0].x - assert np.allclose(x_batch, x), f'batch/sparse: {x_dense} != {x}' - - assert np.allclose(x_dense, x), f'dense/sparse: {x_dense} != {x}' - # verify eq constraints - Ex = E.dot(x) - assert np.allclose(Ex, b), f'Ex: {Ex} == {b}' - - # verify box constraints - assert np.less_equal(lb, x + precision).all(), f'lb: {lb} <= {x}' - assert np.less_equal(x, ub + precision).all(), f'ub: {x} <= {ub}' - - # verify ineq constraints - Ax = A.dot(x) - assert np.less_equal(lbA, Ax + precision).all(), f'Ax: {lbA} <= {Ax} <= {ubA}' - assert np.less_equal(Ax, ubA + precision).all(), f'Ax: {lbA} <= {Ax} <= {ubA}' - return x - - -def test_solve_ineq_only_upper(): - H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost - g = np.array([0.0, 0.0]) # No linear cost - - E = np.zeros((0, 2)) - b = np.array([]) - - lb = np.array([-np.inf, -np.inf]) - ub = np.array([np.inf, np.inf]) - - for i in range(2): - for j in range(2): - if i == 0: - A = np.array([[1.0, 1.0]]) - else: - A = np.array([[-1.0, -1.0]]) - if j == 0: - ubA = np.array([0.5]) - else: - ubA = np.array([-0.5]) - lbA = np.array([-np.inf]) - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - - -def test_solve_ineq_only_lower(): - H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost - g = np.array([0.0, 0.0]) # No linear cost - - E = np.zeros((0, 2)) - b = np.array([]) - - lb = np.array([-np.inf, -np.inf]) - ub = np.array([np.inf, np.inf]) - - for i in range(2): - for j in range(2): - if i == 0: - A = np.array([[1.0, 1.0]]) - else: - A = np.array([[-1.0, -1.0]]) - if j == 0: - lbA = np.array([0.5]) - else: - lbA = np.array([-0.5]) - ubA = np.array([np.inf]) - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - - -def test_solve_eq_as_ineq(): - H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost - g = np.array([0.0, 0.0]) # No linear cost - - E = np.zeros((0, 2)) - b = np.array([]) - - A = np.array([[1.0, 1.0]]) - lbA = np.array([-np.inf]) - ubA = np.array([-0.5]) - - lb = np.array([-np.inf, -np.inf]) - ub = np.array([np.inf, np.inf]) - - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - - -def test_solve_non_convex_constraints(): - H = np.eye(3) - g = np.array([0.0, 0.0, 0.0]) - - E = np.array([[1, -1, -1]]) - b = np.array([0]) - - A = np.array([[1, 1, 0]]) - lbA = np.array([0.5]) - ubA = np.array([np.inf]) - - lb = np.array([0, 0, -np.inf]) - ub = np.array([np.inf, np.inf, np.inf]) - - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - - -def test_solve_eq_and_ineq(): - H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost - g = np.array([0.0, 0.0]) # No linear cost - - E = np.array([[1.,0]]) - b = np.array([1.]) - - A = np.array([[0.0, 1.0]]) - lbA = np.array([-np.inf]) - ubA = np.array([-0.5]) - - lb = np.array([-np.inf, -np.inf]) - ub = np.array([np.inf, np.inf]) - - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - -def test_solve_eq_as_ineq_1_var(): - H = np.array([[1.0]]) # Identity matrix for quadratic cost - g = np.array([0.0]) # No linear cost - - E = np.zeros((0, 1)) - b = np.array([]) - - A = np.array([[1.0]]) - lbA = np.array([-np.inf]) - ubA = np.array([-1.0]) - - lb = np.array([-np.inf]) - ub = np.array([np.inf]) - - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - -def test_solve_eq_as_ineq_1_var2(): - H = np.array([[1.0]]) # Identity matrix for quadratic cost - g = np.array([0.0]) # No linear cost - - E = np.array([1.0]) - b = np.array([-2]) - - A = np.array([[1.0]]) - lbA = np.array([-np.inf]) - ubA = np.array([1.0]) - - lb = np.array([-np.inf]) - ub = np.array([np.inf]) - - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - - -def test_solve_eq(): - H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost - g = np.array([0.0, 0.0]) # No linear cost - - E = np.array([[1.0, 1.0]]) - b = np.array([-0.5]) - - A = np.zeros((0,2)) - lbA = np.array([]) - ubA = np.array([]) - - lb = np.array([-np.inf, -np.inf]) - ub = np.array([np.inf, np.inf]) - - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - - -def test_solve_qp_complex(): - H = np.array([[5.0, 1.0, 0.0], [1.0, 2.0, 1.0], [0.0, 1.0, 4.0]]) # Identity matrix for quadratic cost - g = np.array([1.0, 2.0, 1.0]) # No linear cost - - E = np.array([[1.0, -2.0, 1.0]]) - b = np.array([3.0]) - - A = np.array([[-4.0, -4.0, 0.0], [0.0, 0.0, -1.0]]) - lbA = np.array([-np.inf, -np.inf]) - ubA = np.array([-1.0, -1.0]) - - lb = np.array([-np.inf, -np.inf, -np.inf]) - ub = np.array([np.inf, np.inf, np.inf]) - - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - -def test_solve_qp_complex_sparse_H_diag(): - H = np.array([5.0, 2.0, 4.0]) - g = np.array([1.0, 2.0, 1.0]) # No linear cost - - E = np.array([[1.0, -2.0, 1.0]]) - b = np.array([3.0]) - - A = np.array([[-4.0, -4.0, 0.0], [0.0, 0.0, -1.0]]) - lbA = np.array([-np.inf, -np.inf]) - ubA = np.array([-1.0, -1.0]) - - lb = np.array([-np.inf, -np.inf, -np.inf]) - ub = np.array([np.inf, np.inf, np.inf]) - - solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) - -def test_solve_qp_complex_sparse_H_diag_batch(): - H = np.array([5.0, 2.0, 4.0]) - g = np.array([1.0, 2.0, 1.0]) # No linear cost - - E = np.array([[1.0, -2.0, 1.0]]) - b = np.array([3.0]) - - A = np.array([[-4.0, -4.0, 0.0], [0.0, 0.0, -1.0]]) - lbA = np.array([-np.inf, -np.inf]) - ubA = np.array([-1.0, -1.0]) - - lb = np.array([-np.inf, -np.inf, -np.inf]) - ub = np.array([np.inf, np.inf, np.inf]) - - print(qpSWIFT.solve_sparse_H_diag_batch(qp_data=[(H, g, lb, ub, csc_matrix(E), b, csc_matrix(A), lbA, ubA)], - options=options)) - -def test_solve_complex(): - g = np.zeros(255, dtype=float) - - H = np.array([2.50000000e-02, 2.50000000e-02, 2.50000000e-02, 1.00000000e-03, 8.16326531e-05, 1.00000000e-03, 1.00000000e-03, 2.50000000e-02, 4.44444444e-02, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 2.50000000e-02, 4.44444444e-02, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 5.91715976e+00, 8.12500000e-02, 8.12500000e-02, 8.12500000e-02, 3.25000000e-03, 2.65306122e-04, 3.25000000e-03, 3.25000000e-03, 8.12500000e-02, 1.44444444e-01, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 8.12500000e-02, 1.44444444e-01, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 1.92307692e+01, 1.37500000e-01, 1.37500000e-01, 1.37500000e-01, 5.50000000e-03, 4.48979592e-04, 5.50000000e-03, 5.50000000e-03, 1.37500000e-01, 2.44444444e-01, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 1.37500000e-01, 2.44444444e-01, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 3.25443787e+01, 1.93750000e-01, 1.93750000e-01, 1.93750000e-01, 7.75000000e-03, 6.32653061e-04, 7.75000000e-03, 7.75000000e-03, 1.93750000e-01, 3.44444444e-01, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 1.93750000e-01, 3.44444444e-01, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 4.58579882e+01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 1.00000000e-02, 8.16326531e-04, 1.00000000e-02, 1.00000000e-02, 2.50000000e-01, 4.44444444e-01, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 2.50000000e-01, 4.44444444e-01, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 5.91715976e+01, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 2.50000000e+02]) - - A_data = np.array([-5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02]) - - A_indicies = np.array([0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int) - A_indptr = np.array([ 0, 8, 16, 24, 24, 24, 28, 32, 36, 41, 45, 49, 53, 57, 61, 65, 70, 74, 78, 82, 90, 98, 106, 114, 114, 114, 118, 122, 126, 131, 135, 139, 143, 147, 151, 155, 160, 164, 168, 172, 180, 188, 196, 204, 204, 204, 208, 212, 216, 221, 225, 229, 233, 237, 241, 245, 250, 254, 258, 262, 270, 278, 286, 294, 294, 294, 298, 302, 306, 311, 315, 319, 323, 327, 331, 335, 340, 344, 348, 352, 360, 368, 376, 384, 384, 384, 388, 392, 396, 401, 405, 409, 413, 417, 421, 425, 430, 434, 438, 442, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459], dtype=int) - A_shape = (9, 255) - A = csc_matrix((A_data, A_indicies, A_indptr), shape=A_shape) - - E_data = np.array([-1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02]) - E_indicies = np.array([ 0, 20, 40, 143, 144, 145, 1, 21, 41, 143, 144, 145, 2, 22, 42, 140, 141, 142, 143, 144, 145, 3, 23, 43, 4, 24, 44, 5, 25, 45, 6, 26, 46, 7, 27, 47, 8, 28, 48, 9, 29, 49, 10, 30, 50, 11, 31, 51, 12, 32, 52, 140, 141, 142, 143, 144, 145, 13, 33, 53, 140, 141, 142, 143, 144, 145, 14, 34, 54, 140, 141, 142, 143, 144, 145, 15, 35, 55, 140, 141, 142, 143, 144, 145, 16, 36, 56, 140, 141, 142, 143, 144, 145, 17, 37, 57, 140, 141, 142, 143, 144, 145, 18, 38, 58, 140, 141, 142, 19, 39, 59, 143, 144, 145, 20, 40, 60, 143, 144, 145, 21, 41, 61, 143, 144, 145, 22, 42, 62, 140, 141, 142, 143, 144, 145, 23, 43, 63, 24, 44, 64, 25, 45, 65, 26, 46, 66, 27, 47, 67, 28, 48, 68, 29, 49, 69, 30, 50, 70, 31, 51, 71, 32, 52, 72, 140, 141, 142, 143, 144, 145, 33, 53, 73, 140, 141, 142, 143, 144, 145, 34, 54, 74, 140, 141, 142, 143, 144, 145, 35, 55, 75, 140, 141, 142, 143, 144, 145, 36, 56, 76, 140, 141, 142, 143, 144, 145, 37, 57, 77, 140, 141, 142, 143, 144, 145, 38, 58, 78, 140, 141, 142, 39, 59, 79, 143, 144, 145, 40, 60, 80, 143, 144, 145, 41, 61, 81, 143, 144, 145, 42, 62, 82, 140, 141, 142, 143, 144, 145, 43, 63, 83, 44, 64, 84, 45, 65, 85, 46, 66, 86, 47, 67, 87, 48, 68, 88, 49, 69, 89, 50, 70, 90, 51, 71, 91, 52, 72, 92, 140, 141, 142, 143, 144, 145, 53, 73, 93, 140, 141, 142, 143, 144, 145, 54, 74, 94, 140, 141, 142, 143, 144, 145, 55, 75, 95, 140, 141, 142, 143, 144, 145, 56, 76, 96, 140, 141, 142, 143, 144, 145, 57, 77, 97, 140, 141, 142, 143, 144, 145, 58, 78, 98, 140, 141, 142, 59, 79, 99, 143, 144, 145, 60, 80, 100, 143, 144, 145, 61, 81, 101, 143, 144, 145, 62, 82, 102, 140, 141, 142, 143, 144, 145, 63, 83, 103, 64, 84, 104, 65, 85, 105, 66, 86, 106, 67, 87, 107, 68, 88, 108, 69, 89, 109, 70, 90, 110, 71, 91, 111, 72, 92, 112, 140, 141, 142, 143, 144, 145, 73, 93, 113, 140, 141, 142, 143, 144, 145, 74, 94, 114, 140, 141, 142, 143, 144, 145, 75, 95, 115, 140, 141, 142, 143, 144, 145, 76, 96, 116, 140, 141, 142, 143, 144, 145, 77, 97, 117, 140, 141, 142, 143, 144, 145, 78, 98, 118, 140, 141, 142, 79, 99, 119, 143, 144, 145, 80, 100, 120, 143, 144, 145, 81, 101, 121, 143, 144, 145, 82, 102, 122, 140, 141, 142, 143, 144, 145, 83, 103, 123, 84, 104, 124, 85, 105, 125, 86, 106, 126, 87, 107, 127, 88, 108, 128, 89, 109, 129, 90, 110, 130, 91, 111, 131, 92, 112, 132, 140, 141, 142, 143, 144, 145, 93, 113, 133, 140, 141, 142, 143, 144, 145, 94, 114, 134, 140, 141, 142, 143, 144, 145, 95, 115, 135, 140, 141, 142, 143, 144, 145, 96, 116, 136, 140, 141, 142, 143, 144, 145, 97, 117, 137, 140, 141, 142, 143, 144, 145, 98, 118, 138, 140, 141, 142, 99, 119, 139, 143, 144, 145, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145], dtype=int) - E_indptr = np.array([ 0, 6, 12, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 57, 66, 75, 84, 93, 102, 108, 114, 120, 126, 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 171, 180, 189, 198, 207, 216, 222, 228, 234, 240, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 285, 294, 303, 312, 321, 330, 336, 342, 348, 354, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 399, 408, 417, 426, 435, 444, 450, 456, 462, 468, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 513, 522, 531, 540, 549, 558, 564, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716], dtype=int) - E_shape = (146, 255) - E = csc_matrix((E_data, E_indicies, E_indptr), shape=E_shape) - - b = np.array([-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. , 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. , 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. , 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. , 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.00756357, 0.05 , 0.01530287, 0.05 , -0.0042282 , 0.05 ]) - - E = E.toarray() - - A = A.toarray() - - lb = np.array([-2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -3.11111051e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -2.33333166e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -1.16666848e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -3.88892985e-01, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -2.74666974e-06, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf]) - - ub = np.array([2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, 1.55781469e+00, 1.62544631e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 1.24573752e+00]) - - lbA = np.array([ 0.05 , 0.05 , 0.04592435, 0.04222247, 0.03667071, 0.03349079, 0.01099738, 0.00657185, -0.05 ]) - ubA = np.array([np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf]) - - x = solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA, benchmark=True) - reference = np.array([ 2.22165000e-02, -2.22164999e-02, 2.22164999e-02, 0.00000000e+00, 5.69811346e-04, -1.11114201e-01, -1.11113539e-01, 2.22164980e-02, 1.66627472e-02, -1.11114228e-01, -1.11114206e-01, -1.11110396e-01, 7.58497922e-02, -1.11114249e-01, -2.22165000e-02, 1.66627499e-02, -1.91331365e-02, -8.12231451e-11, 1.10872609e-01, 1.44724976e-03, 5.55412500e-02, -5.55412496e-02, 5.55412498e-02, 0.00000000e+00, 1.19036685e-03, -2.77785465e-01, -2.77783275e-01, 5.55412435e-02, 4.16568657e-02, -2.77785553e-01, -2.77785481e-01, -2.77772686e-01, 6.92623737e-02, -2.77785622e-01, -5.55412499e-02, 4.16568746e-02, -1.40912652e-02, -8.12231468e-11, 2.42716868e-01, 3.61812520e-03, 6.66495000e-02, -6.66494995e-02, 6.66494998e-02, 0.00000000e+00, -8.83540202e-04, -3.33342559e-01, -3.33339952e-01, 6.66494923e-02, 4.99882390e-02, -3.33342664e-01, -3.33342578e-01, -3.33327288e-01, 3.59627741e-02, -3.33342746e-01, -6.66494999e-02, 4.99882495e-02, -6.83615294e-03, -8.12231452e-11, 2.65389685e-01, 4.34175035e-03, 5.55412500e-02, -5.55412496e-02, 5.55412498e-02, 0.00000000e+00, 4.41853059e-04, -2.77785465e-01, -2.77783272e-01, 5.55412435e-02, 4.16568657e-02, -2.77785553e-01, -2.77785481e-01, -2.77772600e-01, 2.33363299e-02, -2.77785622e-01, -5.55412499e-02, 4.16568746e-02, -4.54317620e-03, -8.12231468e-11, 1.85013141e-01, 3.61812520e-03, 2.22165000e-02, -2.22164999e-02, 2.22164999e-02, 0.00000000e+00, 3.98886585e-02, -1.11114201e-01, -1.11113536e-01, 2.22164980e-02, 1.66627472e-02, -1.11114228e-01, -1.11114206e-01, -1.11110315e-01, 1.79284720e-02, -1.11114249e-01, -2.22165000e-02, 1.66627499e-02, -3.62236136e-03, -8.12231451e-11, 1.08275936e-01, 1.44724976e-03, 8.88659999e+00, -8.88659995e+00, 8.88659998e+00, 0.00000000e+00, 2.27924538e-01, -4.44456805e+01, -4.44454154e+01, 8.88659921e+00, 6.66509887e+00, -4.44456912e+01, -4.44456825e+01, -4.44441585e+01, 3.03399169e+01, -4.44456996e+01, -8.88659999e+00, 6.66509995e+00, -7.65325458e+00, -3.24892582e-08, 4.43490437e+01, 5.78899996e-01, 4.44330002e+00, -4.44329994e+00, 4.44329998e+00, 0.00000000e+00, 2.02976620e-02, -2.22228248e+01, -2.22224791e+01, 4.44329898e+00, 3.33254854e+00, -2.22228387e+01, -2.22228274e+01, -2.22207572e+01, -3.29748843e+01, -2.22228495e+01, -4.44330001e+00, 3.33254994e+00, 9.67000308e+00, 3.24892577e-08, 8.38866000e+00, 2.89450273e-01, -8.88659999e+00, 8.88659992e+00, -8.88659997e+00, 0.00000000e+00, -1.07778502e+00, 4.44456675e+01, 4.44452239e+01, -8.88659869e+00, -6.66509812e+00, 4.44456854e+01, 4.44456708e+01, 4.44430748e+01, -1.06848724e+01, 4.44456993e+01, 8.88659998e+00, -6.66509992e+00, 8.85296403e-01, 1.12176607e-15, -4.36685769e+01, -5.78899993e-01, -8.88659999e+00, 8.88659994e+00, -8.88659998e+00, 0.00000000e+00, 1.35972012e+00, 4.44456756e+01, 4.44453424e+01, -8.88659902e+00, -6.66509859e+00, 4.44456890e+01, 4.44456781e+01, 4.44437159e+01, 8.26926214e+00, 4.44456995e+01, 8.88659999e+00, -6.66509994e+00, -1.98485421e+00, -5.74645151e-17, -4.12197445e+01, -5.78899995e-01, -8.88659999e+00, 8.88659992e+00, -8.88659997e+00, 0.00000000e+00, 1.52485649e+01, 4.44456675e+01, 4.44452228e+01, -8.88659869e+00, -6.66509812e+00, 4.44456854e+01, 4.44456708e+01, 4.44430390e+01, 2.88743451e+00, 4.44456993e+01, 8.88659998e+00, -6.66509992e+00, -5.48864755e-01, 1.15487685e-15, 1.45573566e+00, -5.78899993e-01, 4.44330002e+00, -4.44329994e+00, 4.44329998e+00, 0.00000000e+00, -3.17341855e+01, -2.22228248e+01, -2.22224802e+01, 4.44329898e+00, 3.33254854e+00, -2.22228387e+01, -2.22228274e+01, -2.22207879e+01, -5.00824563e+00, -2.22228495e+01, -4.44330001e+00, 3.33254994e+00, 1.08061860e+00, 3.24892585e-08, -1.26154923e+01, 2.89450273e-01, 8.88659999e+00, -8.88659995e+00, 8.88659998e+00, 0.00000000e+00, 1.59554634e+01, -4.44456805e+01, -4.44454144e+01, 8.88659921e+00, 6.66509887e+00, -4.44456912e+01, -4.44456825e+01, -4.44441262e+01, 7.17138880e+00, -4.44456996e+01, -8.88659999e+00, 6.66509995e+00, -1.44894454e+00, -3.24892591e-08, 4.33103743e+01, 5.78899996e-01, 4.26135035e-05, 9.58781073e-01, 5.43434537e-02, 5.99130484e-01, -7.92244998e-02, 9.86439501e-01, 1.02026092e+00, 9.47641965e-01, 9.71031229e-01, 8.04198897e-01, 1.10786696e+00, 1.09253390e+00, 5.89378789e-01, 5.58878577e-01, 2.44212245e-10]) - assert np.allclose(x, reference) - -def test_solve_complex_batch_benchmark(): - g = np.zeros(255, dtype=float) - - H = np.array([2.50000000e-02, 2.50000000e-02, 2.50000000e-02, 1.00000000e-03, 8.16326531e-05, 1.00000000e-03, 1.00000000e-03, 2.50000000e-02, 4.44444444e-02, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 2.50000000e-02, 4.44444444e-02, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 5.91715976e+00, 8.12500000e-02, 8.12500000e-02, 8.12500000e-02, 3.25000000e-03, 2.65306122e-04, 3.25000000e-03, 3.25000000e-03, 8.12500000e-02, 1.44444444e-01, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 8.12500000e-02, 1.44444444e-01, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 1.92307692e+01, 1.37500000e-01, 1.37500000e-01, 1.37500000e-01, 5.50000000e-03, 4.48979592e-04, 5.50000000e-03, 5.50000000e-03, 1.37500000e-01, 2.44444444e-01, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 1.37500000e-01, 2.44444444e-01, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 3.25443787e+01, 1.93750000e-01, 1.93750000e-01, 1.93750000e-01, 7.75000000e-03, 6.32653061e-04, 7.75000000e-03, 7.75000000e-03, 1.93750000e-01, 3.44444444e-01, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 1.93750000e-01, 3.44444444e-01, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 4.58579882e+01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 1.00000000e-02, 8.16326531e-04, 1.00000000e-02, 1.00000000e-02, 2.50000000e-01, 4.44444444e-01, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 2.50000000e-01, 4.44444444e-01, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 5.91715976e+01, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 2.50000000e+02]) - - A_data = np.array([-5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02]) - - A_indicies = np.array([0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int) - A_indptr = np.array([ 0, 8, 16, 24, 24, 24, 28, 32, 36, 41, 45, 49, 53, 57, 61, 65, 70, 74, 78, 82, 90, 98, 106, 114, 114, 114, 118, 122, 126, 131, 135, 139, 143, 147, 151, 155, 160, 164, 168, 172, 180, 188, 196, 204, 204, 204, 208, 212, 216, 221, 225, 229, 233, 237, 241, 245, 250, 254, 258, 262, 270, 278, 286, 294, 294, 294, 298, 302, 306, 311, 315, 319, 323, 327, 331, 335, 340, 344, 348, 352, 360, 368, 376, 384, 384, 384, 388, 392, 396, 401, 405, 409, 413, 417, 421, 425, 430, 434, 438, 442, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459], dtype=int) - A_shape = (9, 255) - A = csc_matrix((A_data, A_indicies, A_indptr), shape=A_shape) - - E_data = np.array([-1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02]) - E_indicies = np.array([ 0, 20, 40, 143, 144, 145, 1, 21, 41, 143, 144, 145, 2, 22, 42, 140, 141, 142, 143, 144, 145, 3, 23, 43, 4, 24, 44, 5, 25, 45, 6, 26, 46, 7, 27, 47, 8, 28, 48, 9, 29, 49, 10, 30, 50, 11, 31, 51, 12, 32, 52, 140, 141, 142, 143, 144, 145, 13, 33, 53, 140, 141, 142, 143, 144, 145, 14, 34, 54, 140, 141, 142, 143, 144, 145, 15, 35, 55, 140, 141, 142, 143, 144, 145, 16, 36, 56, 140, 141, 142, 143, 144, 145, 17, 37, 57, 140, 141, 142, 143, 144, 145, 18, 38, 58, 140, 141, 142, 19, 39, 59, 143, 144, 145, 20, 40, 60, 143, 144, 145, 21, 41, 61, 143, 144, 145, 22, 42, 62, 140, 141, 142, 143, 144, 145, 23, 43, 63, 24, 44, 64, 25, 45, 65, 26, 46, 66, 27, 47, 67, 28, 48, 68, 29, 49, 69, 30, 50, 70, 31, 51, 71, 32, 52, 72, 140, 141, 142, 143, 144, 145, 33, 53, 73, 140, 141, 142, 143, 144, 145, 34, 54, 74, 140, 141, 142, 143, 144, 145, 35, 55, 75, 140, 141, 142, 143, 144, 145, 36, 56, 76, 140, 141, 142, 143, 144, 145, 37, 57, 77, 140, 141, 142, 143, 144, 145, 38, 58, 78, 140, 141, 142, 39, 59, 79, 143, 144, 145, 40, 60, 80, 143, 144, 145, 41, 61, 81, 143, 144, 145, 42, 62, 82, 140, 141, 142, 143, 144, 145, 43, 63, 83, 44, 64, 84, 45, 65, 85, 46, 66, 86, 47, 67, 87, 48, 68, 88, 49, 69, 89, 50, 70, 90, 51, 71, 91, 52, 72, 92, 140, 141, 142, 143, 144, 145, 53, 73, 93, 140, 141, 142, 143, 144, 145, 54, 74, 94, 140, 141, 142, 143, 144, 145, 55, 75, 95, 140, 141, 142, 143, 144, 145, 56, 76, 96, 140, 141, 142, 143, 144, 145, 57, 77, 97, 140, 141, 142, 143, 144, 145, 58, 78, 98, 140, 141, 142, 59, 79, 99, 143, 144, 145, 60, 80, 100, 143, 144, 145, 61, 81, 101, 143, 144, 145, 62, 82, 102, 140, 141, 142, 143, 144, 145, 63, 83, 103, 64, 84, 104, 65, 85, 105, 66, 86, 106, 67, 87, 107, 68, 88, 108, 69, 89, 109, 70, 90, 110, 71, 91, 111, 72, 92, 112, 140, 141, 142, 143, 144, 145, 73, 93, 113, 140, 141, 142, 143, 144, 145, 74, 94, 114, 140, 141, 142, 143, 144, 145, 75, 95, 115, 140, 141, 142, 143, 144, 145, 76, 96, 116, 140, 141, 142, 143, 144, 145, 77, 97, 117, 140, 141, 142, 143, 144, 145, 78, 98, 118, 140, 141, 142, 79, 99, 119, 143, 144, 145, 80, 100, 120, 143, 144, 145, 81, 101, 121, 143, 144, 145, 82, 102, 122, 140, 141, 142, 143, 144, 145, 83, 103, 123, 84, 104, 124, 85, 105, 125, 86, 106, 126, 87, 107, 127, 88, 108, 128, 89, 109, 129, 90, 110, 130, 91, 111, 131, 92, 112, 132, 140, 141, 142, 143, 144, 145, 93, 113, 133, 140, 141, 142, 143, 144, 145, 94, 114, 134, 140, 141, 142, 143, 144, 145, 95, 115, 135, 140, 141, 142, 143, 144, 145, 96, 116, 136, 140, 141, 142, 143, 144, 145, 97, 117, 137, 140, 141, 142, 143, 144, 145, 98, 118, 138, 140, 141, 142, 99, 119, 139, 143, 144, 145, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145], dtype=int) - E_indptr = np.array([ 0, 6, 12, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 57, 66, 75, 84, 93, 102, 108, 114, 120, 126, 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 171, 180, 189, 198, 207, 216, 222, 228, 234, 240, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 285, 294, 303, 312, 321, 330, 336, 342, 348, 354, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 399, 408, 417, 426, 435, 444, 450, 456, 462, 468, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 513, 522, 531, 540, 549, 558, 564, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716], dtype=int) - E_shape = (146, 255) - E = csc_matrix((E_data, E_indicies, E_indptr), shape=E_shape) - - b = np.array([-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. , 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. , 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. , 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. , 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.00756357, 0.05 , 0.01530287, 0.05 , -0.0042282 , 0.05 ]) - - lb = np.array([-2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -3.11111051e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -2.33333166e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -1.16666848e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -3.88892985e-01, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -2.74666974e-06, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf]) - - ub = np.array([2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, 1.55781469e+00, 1.62544631e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 1.24573752e+00]) - - lbA = np.array([ 0.05 , 0.05 , 0.04592435, 0.04222247, 0.03667071, 0.03349079, 0.01099738, 0.00657185, -0.05 ]) - ubA = np.array([np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf]) - - reference = np.array([ 2.22165000e-02, -2.22164999e-02, 2.22164999e-02, 0.00000000e+00, 5.69811346e-04, -1.11114201e-01, -1.11113539e-01, 2.22164980e-02, 1.66627472e-02, -1.11114228e-01, -1.11114206e-01, -1.11110396e-01, 7.58497922e-02, -1.11114249e-01, -2.22165000e-02, 1.66627499e-02, -1.91331365e-02, -8.12231451e-11, 1.10872609e-01, 1.44724976e-03, 5.55412500e-02, -5.55412496e-02, 5.55412498e-02, 0.00000000e+00, 1.19036685e-03, -2.77785465e-01, -2.77783275e-01, 5.55412435e-02, 4.16568657e-02, -2.77785553e-01, -2.77785481e-01, -2.77772686e-01, 6.92623737e-02, -2.77785622e-01, -5.55412499e-02, 4.16568746e-02, -1.40912652e-02, -8.12231468e-11, 2.42716868e-01, 3.61812520e-03, 6.66495000e-02, -6.66494995e-02, 6.66494998e-02, 0.00000000e+00, -8.83540202e-04, -3.33342559e-01, -3.33339952e-01, 6.66494923e-02, 4.99882390e-02, -3.33342664e-01, -3.33342578e-01, -3.33327288e-01, 3.59627741e-02, -3.33342746e-01, -6.66494999e-02, 4.99882495e-02, -6.83615294e-03, -8.12231452e-11, 2.65389685e-01, 4.34175035e-03, 5.55412500e-02, -5.55412496e-02, 5.55412498e-02, 0.00000000e+00, 4.41853059e-04, -2.77785465e-01, -2.77783272e-01, 5.55412435e-02, 4.16568657e-02, -2.77785553e-01, -2.77785481e-01, -2.77772600e-01, 2.33363299e-02, -2.77785622e-01, -5.55412499e-02, 4.16568746e-02, -4.54317620e-03, -8.12231468e-11, 1.85013141e-01, 3.61812520e-03, 2.22165000e-02, -2.22164999e-02, 2.22164999e-02, 0.00000000e+00, 3.98886585e-02, -1.11114201e-01, -1.11113536e-01, 2.22164980e-02, 1.66627472e-02, -1.11114228e-01, -1.11114206e-01, -1.11110315e-01, 1.79284720e-02, -1.11114249e-01, -2.22165000e-02, 1.66627499e-02, -3.62236136e-03, -8.12231451e-11, 1.08275936e-01, 1.44724976e-03, 8.88659999e+00, -8.88659995e+00, 8.88659998e+00, 0.00000000e+00, 2.27924538e-01, -4.44456805e+01, -4.44454154e+01, 8.88659921e+00, 6.66509887e+00, -4.44456912e+01, -4.44456825e+01, -4.44441585e+01, 3.03399169e+01, -4.44456996e+01, -8.88659999e+00, 6.66509995e+00, -7.65325458e+00, -3.24892582e-08, 4.43490437e+01, 5.78899996e-01, 4.44330002e+00, -4.44329994e+00, 4.44329998e+00, 0.00000000e+00, 2.02976620e-02, -2.22228248e+01, -2.22224791e+01, 4.44329898e+00, 3.33254854e+00, -2.22228387e+01, -2.22228274e+01, -2.22207572e+01, -3.29748843e+01, -2.22228495e+01, -4.44330001e+00, 3.33254994e+00, 9.67000308e+00, 3.24892577e-08, 8.38866000e+00, 2.89450273e-01, -8.88659999e+00, 8.88659992e+00, -8.88659997e+00, 0.00000000e+00, -1.07778502e+00, 4.44456675e+01, 4.44452239e+01, -8.88659869e+00, -6.66509812e+00, 4.44456854e+01, 4.44456708e+01, 4.44430748e+01, -1.06848724e+01, 4.44456993e+01, 8.88659998e+00, -6.66509992e+00, 8.85296403e-01, 1.12176607e-15, -4.36685769e+01, -5.78899993e-01, -8.88659999e+00, 8.88659994e+00, -8.88659998e+00, 0.00000000e+00, 1.35972012e+00, 4.44456756e+01, 4.44453424e+01, -8.88659902e+00, -6.66509859e+00, 4.44456890e+01, 4.44456781e+01, 4.44437159e+01, 8.26926214e+00, 4.44456995e+01, 8.88659999e+00, -6.66509994e+00, -1.98485421e+00, -5.74645151e-17, -4.12197445e+01, -5.78899995e-01, -8.88659999e+00, 8.88659992e+00, -8.88659997e+00, 0.00000000e+00, 1.52485649e+01, 4.44456675e+01, 4.44452228e+01, -8.88659869e+00, -6.66509812e+00, 4.44456854e+01, 4.44456708e+01, 4.44430390e+01, 2.88743451e+00, 4.44456993e+01, 8.88659998e+00, -6.66509992e+00, -5.48864755e-01, 1.15487685e-15, 1.45573566e+00, -5.78899993e-01, 4.44330002e+00, -4.44329994e+00, 4.44329998e+00, 0.00000000e+00, -3.17341855e+01, -2.22228248e+01, -2.22224802e+01, 4.44329898e+00, 3.33254854e+00, -2.22228387e+01, -2.22228274e+01, -2.22207879e+01, -5.00824563e+00, -2.22228495e+01, -4.44330001e+00, 3.33254994e+00, 1.08061860e+00, 3.24892585e-08, -1.26154923e+01, 2.89450273e-01, 8.88659999e+00, -8.88659995e+00, 8.88659998e+00, 0.00000000e+00, 1.59554634e+01, -4.44456805e+01, -4.44454144e+01, 8.88659921e+00, 6.66509887e+00, -4.44456912e+01, -4.44456825e+01, -4.44441262e+01, 7.17138880e+00, -4.44456996e+01, -8.88659999e+00, 6.66509995e+00, -1.44894454e+00, -3.24892591e-08, 4.33103743e+01, 5.78899996e-01, 4.26135035e-05, 9.58781073e-01, 5.43434537e-02, 5.99130484e-01, -7.92244998e-02, 9.86439501e-01, 1.02026092e+00, 9.47641965e-01, 9.71031229e-01, 8.04198897e-01, 1.10786696e+00, 1.09253390e+00, 5.89378789e-01, 5.58878577e-01, 2.44212245e-10]) - - from time import perf_counter - X = 2 - qp = (H, g, lb, ub, E, b, A, lbA, ubA) - qps = [qp] * X - - batch_times = [] - for _ in range(1000): - t0 = perf_counter() - sols = qpSWIFT.solve_sparse_H_diag_batch(qp_data=qps, options=options) - batch_times.append(perf_counter() - t0) - for s in sols: - assert np.allclose(s.x, reference) - - single_times = [] - for _ in range(1000): - t0 = perf_counter() - sols = [qpSWIFT.solve_sparse_H_diag(*qp, options=options) for qp in qps] - single_times.append(perf_counter() - t0) - for s in sols: - assert np.allclose(s.x, reference) - - print('---------------------') - print(f"batch : total: {sum(batch_times):.6f}", - f"avg per batch : {(sum(batch_times) / len(batch_times)):.6f}") - print(f"single: total: {sum(single_times):.6f}", - f"avg per {X} solve: {sum(single_times) / len(single_times):.6f}", +import time + +import numpy as np +import qpSWIFT +from scipy.sparse import csc_matrix + +options = { + 'OUTPUT': 1, # 0 = sol; 1 = sol + basicInfo; 2 = sol + basicInfo + advInfo + # 'MAXITER': 100, # 0 < MAXITER < 200; default 100. maximum number of iterations needed + # 'ABSTOL': 9e-4, # 0 < ABSTOL < 1; default 1e-6. absolute tolerance + 'RELTOL': 3.5e-5, # 0 < RELTOL < 1; default 1e-6. relative tolerance + # 'SIGMA': 0.01, # default 100. maximum centering allowed + # 'VERBOSE': 1 # 0 = no print; 1 = print +} + + +def solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA, benchmark: bool = False, precision: float = 1.e-4) -> np.ndarray: + if len(H.shape) == 2: + sparse_H = csc_matrix(H) + else: + sparse_H = H + H = np.diag(H) + sparse_A = csc_matrix(A) + sparse_E = csc_matrix(E) + + if benchmark: + iterations = 1000 + else: + iterations = 1 + t = time.time() + for i in range(iterations): + x_dense = qpSWIFT.solve(H, g, lb, ub, E, b, A, lbA, ubA, options).x + print(f'Time(dense): {(time.time() - t)/iterations}') + + + t = time.time() + for i in range(iterations): + if len(sparse_H.shape) == 1: + x = qpSWIFT.solve_sparse_H_diag(sparse_H, g, lb, ub, sparse_E, b, sparse_A, lbA, ubA, options).x + else: + x = qpSWIFT.solve_sparse(sparse_H, g, lb, ub, sparse_E, b, sparse_A, lbA, ubA, options).x + print(f'Time(sparse): {(time.time() - t)/iterations}') + print(f'Solution: {x}') + + if len(sparse_H.shape) == 1: + x_batch = qpSWIFT.solve_sparse_H_diag_batch(qp_data=[(sparse_H, g, lb, ub, sparse_E, b, sparse_A, lbA, ubA)], options=options)[0].x + assert np.allclose(x_batch, x), f'batch/sparse: {x_dense} != {x}' + + assert np.allclose(x_dense, x), f'dense/sparse: {x_dense} != {x}' + # verify eq constraints + Ex = E.dot(x) + assert np.allclose(Ex, b), f'Ex: {Ex} == {b}' + + # verify box constraints + assert np.less_equal(lb, x + precision).all(), f'lb: {lb} <= {x}' + assert np.less_equal(x, ub + precision).all(), f'ub: {x} <= {ub}' + + # verify ineq constraints + Ax = A.dot(x) + assert np.less_equal(lbA, Ax + precision).all(), f'Ax: {lbA} <= {Ax} <= {ubA}' + assert np.less_equal(Ax, ubA + precision).all(), f'Ax: {lbA} <= {Ax} <= {ubA}' + return x + + +def test_solve_ineq_only_upper(): + H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost + g = np.array([0.0, 0.0]) # No linear cost + + E = np.zeros((0, 2)) + b = np.array([]) + + lb = np.array([-np.inf, -np.inf]) + ub = np.array([np.inf, np.inf]) + + for i in range(2): + for j in range(2): + if i == 0: + A = np.array([[1.0, 1.0]]) + else: + A = np.array([[-1.0, -1.0]]) + if j == 0: + ubA = np.array([0.5]) + else: + ubA = np.array([-0.5]) + lbA = np.array([-np.inf]) + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + + +def test_solve_ineq_only_lower(): + H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost + g = np.array([0.0, 0.0]) # No linear cost + + E = np.zeros((0, 2)) + b = np.array([]) + + lb = np.array([-np.inf, -np.inf]) + ub = np.array([np.inf, np.inf]) + + for i in range(2): + for j in range(2): + if i == 0: + A = np.array([[1.0, 1.0]]) + else: + A = np.array([[-1.0, -1.0]]) + if j == 0: + lbA = np.array([0.5]) + else: + lbA = np.array([-0.5]) + ubA = np.array([np.inf]) + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + + +def test_solve_eq_as_ineq(): + H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost + g = np.array([0.0, 0.0]) # No linear cost + + E = np.zeros((0, 2)) + b = np.array([]) + + A = np.array([[1.0, 1.0]]) + lbA = np.array([-np.inf]) + ubA = np.array([-0.5]) + + lb = np.array([-np.inf, -np.inf]) + ub = np.array([np.inf, np.inf]) + + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + + +def test_solve_non_convex_constraints(): + H = np.eye(3) + g = np.array([0.0, 0.0, 0.0]) + + E = np.array([[1, -1, -1]]) + b = np.array([0]) + + A = np.array([[1, 1, 0]]) + lbA = np.array([0.5]) + ubA = np.array([np.inf]) + + lb = np.array([0, 0, -np.inf]) + ub = np.array([np.inf, np.inf, np.inf]) + + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + + +def test_solve_eq_and_ineq(): + H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost + g = np.array([0.0, 0.0]) # No linear cost + + E = np.array([[1.,0]]) + b = np.array([1.]) + + A = np.array([[0.0, 1.0]]) + lbA = np.array([-np.inf]) + ubA = np.array([-0.5]) + + lb = np.array([-np.inf, -np.inf]) + ub = np.array([np.inf, np.inf]) + + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + +def test_solve_eq_as_ineq_1_var(): + H = np.array([[1.0]]) # Identity matrix for quadratic cost + g = np.array([0.0]) # No linear cost + + E = np.zeros((0, 1)) + b = np.array([]) + + A = np.array([[1.0]]) + lbA = np.array([-np.inf]) + ubA = np.array([-1.0]) + + lb = np.array([-np.inf]) + ub = np.array([np.inf]) + + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + +def test_solve_eq_as_ineq_1_var2(): + H = np.array([[1.0]]) # Identity matrix for quadratic cost + g = np.array([0.0]) # No linear cost + + E = np.array([1.0]) + b = np.array([-2]) + + A = np.array([[1.0]]) + lbA = np.array([-np.inf]) + ubA = np.array([1.0]) + + lb = np.array([-np.inf]) + ub = np.array([np.inf]) + + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + + +def test_solve_eq(): + H = np.array([[1.0, 0.0], [0.0, 1.0]]) # Identity matrix for quadratic cost + g = np.array([0.0, 0.0]) # No linear cost + + E = np.array([[1.0, 1.0]]) + b = np.array([-0.5]) + + A = np.zeros((0,2)) + lbA = np.array([]) + ubA = np.array([]) + + lb = np.array([-np.inf, -np.inf]) + ub = np.array([np.inf, np.inf]) + + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + + +def test_solve_qp_complex(): + H = np.array([[5.0, 1.0, 0.0], [1.0, 2.0, 1.0], [0.0, 1.0, 4.0]]) # Identity matrix for quadratic cost + g = np.array([1.0, 2.0, 1.0]) # No linear cost + + E = np.array([[1.0, -2.0, 1.0]]) + b = np.array([3.0]) + + A = np.array([[-4.0, -4.0, 0.0], [0.0, 0.0, -1.0]]) + lbA = np.array([-np.inf, -np.inf]) + ubA = np.array([-1.0, -1.0]) + + lb = np.array([-np.inf, -np.inf, -np.inf]) + ub = np.array([np.inf, np.inf, np.inf]) + + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + +def test_solve_qp_complex_sparse_H_diag(): + H = np.array([5.0, 2.0, 4.0]) + g = np.array([1.0, 2.0, 1.0]) # No linear cost + + E = np.array([[1.0, -2.0, 1.0]]) + b = np.array([3.0]) + + A = np.array([[-4.0, -4.0, 0.0], [0.0, 0.0, -1.0]]) + lbA = np.array([-np.inf, -np.inf]) + ubA = np.array([-1.0, -1.0]) + + lb = np.array([-np.inf, -np.inf, -np.inf]) + ub = np.array([np.inf, np.inf, np.inf]) + + solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA) + +def test_solve_qp_complex_sparse_H_diag_batch(): + H = np.array([5.0, 2.0, 4.0]) + g = np.array([1.0, 2.0, 1.0]) # No linear cost + + E = np.array([[1.0, -2.0, 1.0]]) + b = np.array([3.0]) + + A = np.array([[-4.0, -4.0, 0.0], [0.0, 0.0, -1.0]]) + lbA = np.array([-np.inf, -np.inf]) + ubA = np.array([-1.0, -1.0]) + + lb = np.array([-np.inf, -np.inf, -np.inf]) + ub = np.array([np.inf, np.inf, np.inf]) + + print(qpSWIFT.solve_sparse_H_diag_batch(qp_data=[(H, g, lb, ub, csc_matrix(E), b, csc_matrix(A), lbA, ubA)], + options=options)) + +def test_solve_complex(): + g = np.zeros(255, dtype=float) + + H = np.array([2.50000000e-02, 2.50000000e-02, 2.50000000e-02, 1.00000000e-03, 8.16326531e-05, 1.00000000e-03, 1.00000000e-03, 2.50000000e-02, 4.44444444e-02, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 2.50000000e-02, 4.44444444e-02, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 5.91715976e+00, 8.12500000e-02, 8.12500000e-02, 8.12500000e-02, 3.25000000e-03, 2.65306122e-04, 3.25000000e-03, 3.25000000e-03, 8.12500000e-02, 1.44444444e-01, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 8.12500000e-02, 1.44444444e-01, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 1.92307692e+01, 1.37500000e-01, 1.37500000e-01, 1.37500000e-01, 5.50000000e-03, 4.48979592e-04, 5.50000000e-03, 5.50000000e-03, 1.37500000e-01, 2.44444444e-01, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 1.37500000e-01, 2.44444444e-01, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 3.25443787e+01, 1.93750000e-01, 1.93750000e-01, 1.93750000e-01, 7.75000000e-03, 6.32653061e-04, 7.75000000e-03, 7.75000000e-03, 1.93750000e-01, 3.44444444e-01, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 1.93750000e-01, 3.44444444e-01, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 4.58579882e+01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 1.00000000e-02, 8.16326531e-04, 1.00000000e-02, 1.00000000e-02, 2.50000000e-01, 4.44444444e-01, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 2.50000000e-01, 4.44444444e-01, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 5.91715976e+01, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 2.50000000e+02]) + + A_data = np.array([-5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02]) + + A_indicies = np.array([0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int) + A_indptr = np.array([ 0, 8, 16, 24, 24, 24, 28, 32, 36, 41, 45, 49, 53, 57, 61, 65, 70, 74, 78, 82, 90, 98, 106, 114, 114, 114, 118, 122, 126, 131, 135, 139, 143, 147, 151, 155, 160, 164, 168, 172, 180, 188, 196, 204, 204, 204, 208, 212, 216, 221, 225, 229, 233, 237, 241, 245, 250, 254, 258, 262, 270, 278, 286, 294, 294, 294, 298, 302, 306, 311, 315, 319, 323, 327, 331, 335, 340, 344, 348, 352, 360, 368, 376, 384, 384, 384, 388, 392, 396, 401, 405, 409, 413, 417, 421, 425, 430, 434, 438, 442, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459], dtype=int) + A_shape = (9, 255) + A = csc_matrix((A_data, A_indicies, A_indptr), shape=A_shape) + + E_data = np.array([-1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02]) + E_indicies = np.array([ 0, 20, 40, 143, 144, 145, 1, 21, 41, 143, 144, 145, 2, 22, 42, 140, 141, 142, 143, 144, 145, 3, 23, 43, 4, 24, 44, 5, 25, 45, 6, 26, 46, 7, 27, 47, 8, 28, 48, 9, 29, 49, 10, 30, 50, 11, 31, 51, 12, 32, 52, 140, 141, 142, 143, 144, 145, 13, 33, 53, 140, 141, 142, 143, 144, 145, 14, 34, 54, 140, 141, 142, 143, 144, 145, 15, 35, 55, 140, 141, 142, 143, 144, 145, 16, 36, 56, 140, 141, 142, 143, 144, 145, 17, 37, 57, 140, 141, 142, 143, 144, 145, 18, 38, 58, 140, 141, 142, 19, 39, 59, 143, 144, 145, 20, 40, 60, 143, 144, 145, 21, 41, 61, 143, 144, 145, 22, 42, 62, 140, 141, 142, 143, 144, 145, 23, 43, 63, 24, 44, 64, 25, 45, 65, 26, 46, 66, 27, 47, 67, 28, 48, 68, 29, 49, 69, 30, 50, 70, 31, 51, 71, 32, 52, 72, 140, 141, 142, 143, 144, 145, 33, 53, 73, 140, 141, 142, 143, 144, 145, 34, 54, 74, 140, 141, 142, 143, 144, 145, 35, 55, 75, 140, 141, 142, 143, 144, 145, 36, 56, 76, 140, 141, 142, 143, 144, 145, 37, 57, 77, 140, 141, 142, 143, 144, 145, 38, 58, 78, 140, 141, 142, 39, 59, 79, 143, 144, 145, 40, 60, 80, 143, 144, 145, 41, 61, 81, 143, 144, 145, 42, 62, 82, 140, 141, 142, 143, 144, 145, 43, 63, 83, 44, 64, 84, 45, 65, 85, 46, 66, 86, 47, 67, 87, 48, 68, 88, 49, 69, 89, 50, 70, 90, 51, 71, 91, 52, 72, 92, 140, 141, 142, 143, 144, 145, 53, 73, 93, 140, 141, 142, 143, 144, 145, 54, 74, 94, 140, 141, 142, 143, 144, 145, 55, 75, 95, 140, 141, 142, 143, 144, 145, 56, 76, 96, 140, 141, 142, 143, 144, 145, 57, 77, 97, 140, 141, 142, 143, 144, 145, 58, 78, 98, 140, 141, 142, 59, 79, 99, 143, 144, 145, 60, 80, 100, 143, 144, 145, 61, 81, 101, 143, 144, 145, 62, 82, 102, 140, 141, 142, 143, 144, 145, 63, 83, 103, 64, 84, 104, 65, 85, 105, 66, 86, 106, 67, 87, 107, 68, 88, 108, 69, 89, 109, 70, 90, 110, 71, 91, 111, 72, 92, 112, 140, 141, 142, 143, 144, 145, 73, 93, 113, 140, 141, 142, 143, 144, 145, 74, 94, 114, 140, 141, 142, 143, 144, 145, 75, 95, 115, 140, 141, 142, 143, 144, 145, 76, 96, 116, 140, 141, 142, 143, 144, 145, 77, 97, 117, 140, 141, 142, 143, 144, 145, 78, 98, 118, 140, 141, 142, 79, 99, 119, 143, 144, 145, 80, 100, 120, 143, 144, 145, 81, 101, 121, 143, 144, 145, 82, 102, 122, 140, 141, 142, 143, 144, 145, 83, 103, 123, 84, 104, 124, 85, 105, 125, 86, 106, 126, 87, 107, 127, 88, 108, 128, 89, 109, 129, 90, 110, 130, 91, 111, 131, 92, 112, 132, 140, 141, 142, 143, 144, 145, 93, 113, 133, 140, 141, 142, 143, 144, 145, 94, 114, 134, 140, 141, 142, 143, 144, 145, 95, 115, 135, 140, 141, 142, 143, 144, 145, 96, 116, 136, 140, 141, 142, 143, 144, 145, 97, 117, 137, 140, 141, 142, 143, 144, 145, 98, 118, 138, 140, 141, 142, 99, 119, 139, 143, 144, 145, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145], dtype=int) + E_indptr = np.array([ 0, 6, 12, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 57, 66, 75, 84, 93, 102, 108, 114, 120, 126, 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 171, 180, 189, 198, 207, 216, 222, 228, 234, 240, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 285, 294, 303, 312, 321, 330, 336, 342, 348, 354, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 399, 408, 417, 426, 435, 444, 450, 456, 462, 468, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 513, 522, 531, 540, 549, 558, 564, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716], dtype=int) + E_shape = (146, 255) + E = csc_matrix((E_data, E_indicies, E_indptr), shape=E_shape) + + b = np.array([-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. , 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. , 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. , 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. , 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.00756357, 0.05 , 0.01530287, 0.05 , -0.0042282 , 0.05 ]) + + E = E.toarray() + + A = A.toarray() + + lb = np.array([-2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -3.11111051e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -2.33333166e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -1.16666848e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -3.88892985e-01, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -2.74666974e-06, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf]) + + ub = np.array([2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, 1.55781469e+00, 1.62544631e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 1.24573752e+00]) + + lbA = np.array([ 0.05 , 0.05 , 0.04592435, 0.04222247, 0.03667071, 0.03349079, 0.01099738, 0.00657185, -0.05 ]) + ubA = np.array([np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf]) + + x = solve_and_verify_qp_solution(H, g, lb, ub, E, b, A, lbA, ubA, benchmark=True) + reference = np.array([ 2.22165000e-02, -2.22164999e-02, 2.22164999e-02, 0.00000000e+00, 5.69811346e-04, -1.11114201e-01, -1.11113539e-01, 2.22164980e-02, 1.66627472e-02, -1.11114228e-01, -1.11114206e-01, -1.11110396e-01, 7.58497922e-02, -1.11114249e-01, -2.22165000e-02, 1.66627499e-02, -1.91331365e-02, -8.12231451e-11, 1.10872609e-01, 1.44724976e-03, 5.55412500e-02, -5.55412496e-02, 5.55412498e-02, 0.00000000e+00, 1.19036685e-03, -2.77785465e-01, -2.77783275e-01, 5.55412435e-02, 4.16568657e-02, -2.77785553e-01, -2.77785481e-01, -2.77772686e-01, 6.92623737e-02, -2.77785622e-01, -5.55412499e-02, 4.16568746e-02, -1.40912652e-02, -8.12231468e-11, 2.42716868e-01, 3.61812520e-03, 6.66495000e-02, -6.66494995e-02, 6.66494998e-02, 0.00000000e+00, -8.83540202e-04, -3.33342559e-01, -3.33339952e-01, 6.66494923e-02, 4.99882390e-02, -3.33342664e-01, -3.33342578e-01, -3.33327288e-01, 3.59627741e-02, -3.33342746e-01, -6.66494999e-02, 4.99882495e-02, -6.83615294e-03, -8.12231452e-11, 2.65389685e-01, 4.34175035e-03, 5.55412500e-02, -5.55412496e-02, 5.55412498e-02, 0.00000000e+00, 4.41853059e-04, -2.77785465e-01, -2.77783272e-01, 5.55412435e-02, 4.16568657e-02, -2.77785553e-01, -2.77785481e-01, -2.77772600e-01, 2.33363299e-02, -2.77785622e-01, -5.55412499e-02, 4.16568746e-02, -4.54317620e-03, -8.12231468e-11, 1.85013141e-01, 3.61812520e-03, 2.22165000e-02, -2.22164999e-02, 2.22164999e-02, 0.00000000e+00, 3.98886585e-02, -1.11114201e-01, -1.11113536e-01, 2.22164980e-02, 1.66627472e-02, -1.11114228e-01, -1.11114206e-01, -1.11110315e-01, 1.79284720e-02, -1.11114249e-01, -2.22165000e-02, 1.66627499e-02, -3.62236136e-03, -8.12231451e-11, 1.08275936e-01, 1.44724976e-03, 8.88659999e+00, -8.88659995e+00, 8.88659998e+00, 0.00000000e+00, 2.27924538e-01, -4.44456805e+01, -4.44454154e+01, 8.88659921e+00, 6.66509887e+00, -4.44456912e+01, -4.44456825e+01, -4.44441585e+01, 3.03399169e+01, -4.44456996e+01, -8.88659999e+00, 6.66509995e+00, -7.65325458e+00, -3.24892582e-08, 4.43490437e+01, 5.78899996e-01, 4.44330002e+00, -4.44329994e+00, 4.44329998e+00, 0.00000000e+00, 2.02976620e-02, -2.22228248e+01, -2.22224791e+01, 4.44329898e+00, 3.33254854e+00, -2.22228387e+01, -2.22228274e+01, -2.22207572e+01, -3.29748843e+01, -2.22228495e+01, -4.44330001e+00, 3.33254994e+00, 9.67000308e+00, 3.24892577e-08, 8.38866000e+00, 2.89450273e-01, -8.88659999e+00, 8.88659992e+00, -8.88659997e+00, 0.00000000e+00, -1.07778502e+00, 4.44456675e+01, 4.44452239e+01, -8.88659869e+00, -6.66509812e+00, 4.44456854e+01, 4.44456708e+01, 4.44430748e+01, -1.06848724e+01, 4.44456993e+01, 8.88659998e+00, -6.66509992e+00, 8.85296403e-01, 1.12176607e-15, -4.36685769e+01, -5.78899993e-01, -8.88659999e+00, 8.88659994e+00, -8.88659998e+00, 0.00000000e+00, 1.35972012e+00, 4.44456756e+01, 4.44453424e+01, -8.88659902e+00, -6.66509859e+00, 4.44456890e+01, 4.44456781e+01, 4.44437159e+01, 8.26926214e+00, 4.44456995e+01, 8.88659999e+00, -6.66509994e+00, -1.98485421e+00, -5.74645151e-17, -4.12197445e+01, -5.78899995e-01, -8.88659999e+00, 8.88659992e+00, -8.88659997e+00, 0.00000000e+00, 1.52485649e+01, 4.44456675e+01, 4.44452228e+01, -8.88659869e+00, -6.66509812e+00, 4.44456854e+01, 4.44456708e+01, 4.44430390e+01, 2.88743451e+00, 4.44456993e+01, 8.88659998e+00, -6.66509992e+00, -5.48864755e-01, 1.15487685e-15, 1.45573566e+00, -5.78899993e-01, 4.44330002e+00, -4.44329994e+00, 4.44329998e+00, 0.00000000e+00, -3.17341855e+01, -2.22228248e+01, -2.22224802e+01, 4.44329898e+00, 3.33254854e+00, -2.22228387e+01, -2.22228274e+01, -2.22207879e+01, -5.00824563e+00, -2.22228495e+01, -4.44330001e+00, 3.33254994e+00, 1.08061860e+00, 3.24892585e-08, -1.26154923e+01, 2.89450273e-01, 8.88659999e+00, -8.88659995e+00, 8.88659998e+00, 0.00000000e+00, 1.59554634e+01, -4.44456805e+01, -4.44454144e+01, 8.88659921e+00, 6.66509887e+00, -4.44456912e+01, -4.44456825e+01, -4.44441262e+01, 7.17138880e+00, -4.44456996e+01, -8.88659999e+00, 6.66509995e+00, -1.44894454e+00, -3.24892591e-08, 4.33103743e+01, 5.78899996e-01, 4.26135035e-05, 9.58781073e-01, 5.43434537e-02, 5.99130484e-01, -7.92244998e-02, 9.86439501e-01, 1.02026092e+00, 9.47641965e-01, 9.71031229e-01, 8.04198897e-01, 1.10786696e+00, 1.09253390e+00, 5.89378789e-01, 5.58878577e-01, 2.44212245e-10]) + assert np.allclose(x, reference) + +def test_solve_complex_batch_benchmark(): + g = np.zeros(255, dtype=float) + + H = np.array([2.50000000e-02, 2.50000000e-02, 2.50000000e-02, 1.00000000e-03, 8.16326531e-05, 1.00000000e-03, 1.00000000e-03, 2.50000000e-02, 4.44444444e-02, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 2.50000000e-02, 4.44444444e-02, 1.00000000e-03, 1.00000000e-03, 1.00000000e-03, 5.91715976e+00, 8.12500000e-02, 8.12500000e-02, 8.12500000e-02, 3.25000000e-03, 2.65306122e-04, 3.25000000e-03, 3.25000000e-03, 8.12500000e-02, 1.44444444e-01, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 8.12500000e-02, 1.44444444e-01, 3.25000000e-03, 3.25000000e-03, 3.25000000e-03, 1.92307692e+01, 1.37500000e-01, 1.37500000e-01, 1.37500000e-01, 5.50000000e-03, 4.48979592e-04, 5.50000000e-03, 5.50000000e-03, 1.37500000e-01, 2.44444444e-01, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 1.37500000e-01, 2.44444444e-01, 5.50000000e-03, 5.50000000e-03, 5.50000000e-03, 3.25443787e+01, 1.93750000e-01, 1.93750000e-01, 1.93750000e-01, 7.75000000e-03, 6.32653061e-04, 7.75000000e-03, 7.75000000e-03, 1.93750000e-01, 3.44444444e-01, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 1.93750000e-01, 3.44444444e-01, 7.75000000e-03, 7.75000000e-03, 7.75000000e-03, 4.58579882e+01, 2.50000000e-01, 2.50000000e-01, 2.50000000e-01, 1.00000000e-02, 8.16326531e-04, 1.00000000e-02, 1.00000000e-02, 2.50000000e-01, 4.44444444e-01, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 2.50000000e-01, 4.44444444e-01, 1.00000000e-02, 1.00000000e-02, 1.00000000e-02, 5.91715976e+01, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 1.25000000e+04, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 6.25000000e+01, 2.50000000e+02]) + + A_data = np.array([-5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -5.00000000e-02, -4.64283933e-17, -8.34194286e-17, 0.00000000e+00, 4.64314522e-17, 0.00000000e+00, -4.05136404e-17, 0.00000000e+00, 0.00000000e+00, 1.62957168e-02, 2.12209808e-02, 1.57944035e-02, 2.19759757e-02, -1.60228749e-02, -2.11644578e-02, -1.55985027e-02, -2.17780767e-02, -1.32518704e-03, -1.57401163e-04, -9.30291518e-04, 5.01258892e-04, -7.39386497e-05, -2.55381025e-05, -4.80269568e-05, 1.06720289e-05, 1.30651870e-02, 1.30781878e-02, 1.34567098e-02, 1.34469462e-02, 6.89571683e-03, 1.18209808e-02, 6.39440353e-03, 1.25759757e-02, -7.77600029e-04, 9.32427469e-04, -3.65966655e-03, 1.52732133e-03, -4.24456180e-03, -1.45152830e-03, -1.39952548e-04, -1.07523534e-03, 5.37045410e-04, -2.62626297e-04, 2.59934043e-04, -2.99042317e-04, 3.55696242e-04, -1.16819478e-03, -4.78270558e-05, -7.48496310e-04, 5.97480113e-04, 6.33134050e-05, 1.87119800e-05, 3.62518435e-05, -1.73193985e-05, 1.32339776e-02, 1.31720723e-02, 1.36307197e-02, 1.35558787e-02, -6.62287491e-03, -1.17644578e-02, -6.19850273e-03, -1.23780767e-02, -1.70620516e-04, -1.24182501e-03, 3.57644991e-03, -1.76661038e-03, 4.02452780e-03, -1.30421324e-03, -3.29781661e-05, -9.00921740e-04, 6.26383797e-04, 2.84139342e-04, -2.57703774e-04, 3.12128408e-04, -3.39084149e-04, -4.64283933e-17, 8.34194286e-17, 0.00000000e+00, 0.00000000e+00, -2.12428265e-17, 6.07704606e-17, 1.52498769e-17, 1.45426558e-17, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02]) + + A_indicies = np.array([0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 8, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 8, 4, 5, 6, 7, 4, 5, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8], dtype=int) + A_indptr = np.array([ 0, 8, 16, 24, 24, 24, 28, 32, 36, 41, 45, 49, 53, 57, 61, 65, 70, 74, 78, 82, 90, 98, 106, 114, 114, 114, 118, 122, 126, 131, 135, 139, 143, 147, 151, 155, 160, 164, 168, 172, 180, 188, 196, 204, 204, 204, 208, 212, 216, 221, 225, 229, 233, 237, 241, 245, 250, 254, 258, 262, 270, 278, 286, 294, 294, 294, 298, 302, 306, 311, 315, 319, 323, 327, 331, 335, 340, 344, 348, 352, 360, 368, 376, 384, 384, 384, 388, 392, 396, 401, 405, 409, 413, 417, 421, 425, 430, 434, 438, 442, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459], dtype=int) + A_shape = (9, 255) + A = csc_matrix((A_data, A_indicies, A_indptr), shape=A_shape) + + E_data = np.array([-1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 5.00000000e-02, 0.00000000e+00, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 5.00000000e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 1.87885901e-02, 3.15107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 7.65085993e-05, 2.43514770e-02, -5.65682901e-03, 7.89714760e-04, -5.89870048e-03, -2.43030834e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.48750473e-02, -6.38760852e-04, -2.41329818e-03, -5.27780178e-05, -8.65380051e-04, 2.36212565e-04, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.60665651e-02, 1.90922010e-02, -1.53406145e-03, -1.30292595e-02, 1.17676513e-02, -2.65329906e-02, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.64746171e-03, -2.30532464e-04, 2.48583547e-02, 9.38859013e-03, 3.40107550e-02, 0.00000000e+00, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 4.34575764e-03, -5.58368722e-03, -2.39778403e-02, -1.40561038e-03, -2.35946706e-02, 5.68768465e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 1.20854207e-06, 2.41708414e-02, -6.38517229e-03, 8.42848953e-04, -2.40731069e-03, -8.63101737e-03, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 2.50000000e-02, -1.25000000e-06, 3.46979347e-19, -1.00000000e+00, 2.00000000e+00, -1.00000000e+00, 0.00000000e+00, 0.00000000e+00, 5.00000000e-02, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 2.50000000e-03, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02, 5.00000000e-02]) + E_indicies = np.array([ 0, 20, 40, 143, 144, 145, 1, 21, 41, 143, 144, 145, 2, 22, 42, 140, 141, 142, 143, 144, 145, 3, 23, 43, 4, 24, 44, 5, 25, 45, 6, 26, 46, 7, 27, 47, 8, 28, 48, 9, 29, 49, 10, 30, 50, 11, 31, 51, 12, 32, 52, 140, 141, 142, 143, 144, 145, 13, 33, 53, 140, 141, 142, 143, 144, 145, 14, 34, 54, 140, 141, 142, 143, 144, 145, 15, 35, 55, 140, 141, 142, 143, 144, 145, 16, 36, 56, 140, 141, 142, 143, 144, 145, 17, 37, 57, 140, 141, 142, 143, 144, 145, 18, 38, 58, 140, 141, 142, 19, 39, 59, 143, 144, 145, 20, 40, 60, 143, 144, 145, 21, 41, 61, 143, 144, 145, 22, 42, 62, 140, 141, 142, 143, 144, 145, 23, 43, 63, 24, 44, 64, 25, 45, 65, 26, 46, 66, 27, 47, 67, 28, 48, 68, 29, 49, 69, 30, 50, 70, 31, 51, 71, 32, 52, 72, 140, 141, 142, 143, 144, 145, 33, 53, 73, 140, 141, 142, 143, 144, 145, 34, 54, 74, 140, 141, 142, 143, 144, 145, 35, 55, 75, 140, 141, 142, 143, 144, 145, 36, 56, 76, 140, 141, 142, 143, 144, 145, 37, 57, 77, 140, 141, 142, 143, 144, 145, 38, 58, 78, 140, 141, 142, 39, 59, 79, 143, 144, 145, 40, 60, 80, 143, 144, 145, 41, 61, 81, 143, 144, 145, 42, 62, 82, 140, 141, 142, 143, 144, 145, 43, 63, 83, 44, 64, 84, 45, 65, 85, 46, 66, 86, 47, 67, 87, 48, 68, 88, 49, 69, 89, 50, 70, 90, 51, 71, 91, 52, 72, 92, 140, 141, 142, 143, 144, 145, 53, 73, 93, 140, 141, 142, 143, 144, 145, 54, 74, 94, 140, 141, 142, 143, 144, 145, 55, 75, 95, 140, 141, 142, 143, 144, 145, 56, 76, 96, 140, 141, 142, 143, 144, 145, 57, 77, 97, 140, 141, 142, 143, 144, 145, 58, 78, 98, 140, 141, 142, 59, 79, 99, 143, 144, 145, 60, 80, 100, 143, 144, 145, 61, 81, 101, 143, 144, 145, 62, 82, 102, 140, 141, 142, 143, 144, 145, 63, 83, 103, 64, 84, 104, 65, 85, 105, 66, 86, 106, 67, 87, 107, 68, 88, 108, 69, 89, 109, 70, 90, 110, 71, 91, 111, 72, 92, 112, 140, 141, 142, 143, 144, 145, 73, 93, 113, 140, 141, 142, 143, 144, 145, 74, 94, 114, 140, 141, 142, 143, 144, 145, 75, 95, 115, 140, 141, 142, 143, 144, 145, 76, 96, 116, 140, 141, 142, 143, 144, 145, 77, 97, 117, 140, 141, 142, 143, 144, 145, 78, 98, 118, 140, 141, 142, 79, 99, 119, 143, 144, 145, 80, 100, 120, 143, 144, 145, 81, 101, 121, 143, 144, 145, 82, 102, 122, 140, 141, 142, 143, 144, 145, 83, 103, 123, 84, 104, 124, 85, 105, 125, 86, 106, 126, 87, 107, 127, 88, 108, 128, 89, 109, 129, 90, 110, 130, 91, 111, 131, 92, 112, 132, 140, 141, 142, 143, 144, 145, 93, 113, 133, 140, 141, 142, 143, 144, 145, 94, 114, 134, 140, 141, 142, 143, 144, 145, 95, 115, 135, 140, 141, 142, 143, 144, 145, 96, 116, 136, 140, 141, 142, 143, 144, 145, 97, 117, 137, 140, 141, 142, 143, 144, 145, 98, 118, 138, 140, 141, 142, 99, 119, 139, 143, 144, 145, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145], dtype=int) + E_indptr = np.array([ 0, 6, 12, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 57, 66, 75, 84, 93, 102, 108, 114, 120, 126, 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 171, 180, 189, 198, 207, 216, 222, 228, 234, 240, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 285, 294, 303, 312, 321, 330, 336, 342, 348, 354, 363, 366, 369, 372, 375, 378, 381, 384, 387, 390, 399, 408, 417, 426, 435, 444, 450, 456, 462, 468, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 513, 522, 531, 540, 549, 558, 564, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 716, 716, 716, 716, 716, 716, 716, 716, 716], dtype=int) + E_shape = (146, 255) + E = csc_matrix((E_data, E_indicies, E_indptr), shape=E_shape) + + b = np.array([-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. , 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. , 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. , 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. , 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.00756357, 0.05 , 0.01530287, 0.05 , -0.0042282 , 0.05 ]) + + lb = np.array([-2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -3.11111051e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -2.33333166e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -1.16666848e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -3.88892985e-01, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -2.00000000e-01, -2.00000000e-01, -2.00000000e-01, -1.00000102e+00, -2.74666974e-06, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.00000102e+00, -1.00000000e+00, -1.99996365e-01, -1.49999693e-01, -1.00000102e+00, -1.00000102e+00, -1.00000000e+00, -1.30006605e-02, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -8.88660000e+00, -8.88660000e+00, -8.88660000e+00, -4.44457000e+01, -1.55555000e+02, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -8.88660000e+00, -6.66510000e+00, -4.44457000e+01, -4.44457000e+01, -4.44457000e+01, -5.78900000e-01, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf, -np.inf]) + + ub = np.array([2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 2.00000000e-01, 2.00000000e-01, 2.00000000e-01, 1.00000102e+00, 3.49999947e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.00000102e+00, 1.00000000e+00, 1.99996365e-01, 1.49999693e-01, 1.00000102e+00, 0.00000000e+00, 1.00000000e+00, 1.30006605e-02, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, 8.88660000e+00, 8.88660000e+00, 8.88660000e+00, 4.44457000e+01, 1.55555000e+02, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 8.88660000e+00, 6.66510000e+00, 4.44457000e+01, 4.44457000e+01, 4.44457000e+01, 5.78900000e-01, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, 1.55781469e+00, 1.62544631e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 2.00000000e+00, 1.24573752e+00]) + + lbA = np.array([ 0.05 , 0.05 , 0.04592435, 0.04222247, 0.03667071, 0.03349079, 0.01099738, 0.00657185, -0.05 ]) + ubA = np.array([np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf, np.inf]) + + reference = np.array([ 2.22165000e-02, -2.22164999e-02, 2.22164999e-02, 0.00000000e+00, 5.69811346e-04, -1.11114201e-01, -1.11113539e-01, 2.22164980e-02, 1.66627472e-02, -1.11114228e-01, -1.11114206e-01, -1.11110396e-01, 7.58497922e-02, -1.11114249e-01, -2.22165000e-02, 1.66627499e-02, -1.91331365e-02, -8.12231451e-11, 1.10872609e-01, 1.44724976e-03, 5.55412500e-02, -5.55412496e-02, 5.55412498e-02, 0.00000000e+00, 1.19036685e-03, -2.77785465e-01, -2.77783275e-01, 5.55412435e-02, 4.16568657e-02, -2.77785553e-01, -2.77785481e-01, -2.77772686e-01, 6.92623737e-02, -2.77785622e-01, -5.55412499e-02, 4.16568746e-02, -1.40912652e-02, -8.12231468e-11, 2.42716868e-01, 3.61812520e-03, 6.66495000e-02, -6.66494995e-02, 6.66494998e-02, 0.00000000e+00, -8.83540202e-04, -3.33342559e-01, -3.33339952e-01, 6.66494923e-02, 4.99882390e-02, -3.33342664e-01, -3.33342578e-01, -3.33327288e-01, 3.59627741e-02, -3.33342746e-01, -6.66494999e-02, 4.99882495e-02, -6.83615294e-03, -8.12231452e-11, 2.65389685e-01, 4.34175035e-03, 5.55412500e-02, -5.55412496e-02, 5.55412498e-02, 0.00000000e+00, 4.41853059e-04, -2.77785465e-01, -2.77783272e-01, 5.55412435e-02, 4.16568657e-02, -2.77785553e-01, -2.77785481e-01, -2.77772600e-01, 2.33363299e-02, -2.77785622e-01, -5.55412499e-02, 4.16568746e-02, -4.54317620e-03, -8.12231468e-11, 1.85013141e-01, 3.61812520e-03, 2.22165000e-02, -2.22164999e-02, 2.22164999e-02, 0.00000000e+00, 3.98886585e-02, -1.11114201e-01, -1.11113536e-01, 2.22164980e-02, 1.66627472e-02, -1.11114228e-01, -1.11114206e-01, -1.11110315e-01, 1.79284720e-02, -1.11114249e-01, -2.22165000e-02, 1.66627499e-02, -3.62236136e-03, -8.12231451e-11, 1.08275936e-01, 1.44724976e-03, 8.88659999e+00, -8.88659995e+00, 8.88659998e+00, 0.00000000e+00, 2.27924538e-01, -4.44456805e+01, -4.44454154e+01, 8.88659921e+00, 6.66509887e+00, -4.44456912e+01, -4.44456825e+01, -4.44441585e+01, 3.03399169e+01, -4.44456996e+01, -8.88659999e+00, 6.66509995e+00, -7.65325458e+00, -3.24892582e-08, 4.43490437e+01, 5.78899996e-01, 4.44330002e+00, -4.44329994e+00, 4.44329998e+00, 0.00000000e+00, 2.02976620e-02, -2.22228248e+01, -2.22224791e+01, 4.44329898e+00, 3.33254854e+00, -2.22228387e+01, -2.22228274e+01, -2.22207572e+01, -3.29748843e+01, -2.22228495e+01, -4.44330001e+00, 3.33254994e+00, 9.67000308e+00, 3.24892577e-08, 8.38866000e+00, 2.89450273e-01, -8.88659999e+00, 8.88659992e+00, -8.88659997e+00, 0.00000000e+00, -1.07778502e+00, 4.44456675e+01, 4.44452239e+01, -8.88659869e+00, -6.66509812e+00, 4.44456854e+01, 4.44456708e+01, 4.44430748e+01, -1.06848724e+01, 4.44456993e+01, 8.88659998e+00, -6.66509992e+00, 8.85296403e-01, 1.12176607e-15, -4.36685769e+01, -5.78899993e-01, -8.88659999e+00, 8.88659994e+00, -8.88659998e+00, 0.00000000e+00, 1.35972012e+00, 4.44456756e+01, 4.44453424e+01, -8.88659902e+00, -6.66509859e+00, 4.44456890e+01, 4.44456781e+01, 4.44437159e+01, 8.26926214e+00, 4.44456995e+01, 8.88659999e+00, -6.66509994e+00, -1.98485421e+00, -5.74645151e-17, -4.12197445e+01, -5.78899995e-01, -8.88659999e+00, 8.88659992e+00, -8.88659997e+00, 0.00000000e+00, 1.52485649e+01, 4.44456675e+01, 4.44452228e+01, -8.88659869e+00, -6.66509812e+00, 4.44456854e+01, 4.44456708e+01, 4.44430390e+01, 2.88743451e+00, 4.44456993e+01, 8.88659998e+00, -6.66509992e+00, -5.48864755e-01, 1.15487685e-15, 1.45573566e+00, -5.78899993e-01, 4.44330002e+00, -4.44329994e+00, 4.44329998e+00, 0.00000000e+00, -3.17341855e+01, -2.22228248e+01, -2.22224802e+01, 4.44329898e+00, 3.33254854e+00, -2.22228387e+01, -2.22228274e+01, -2.22207879e+01, -5.00824563e+00, -2.22228495e+01, -4.44330001e+00, 3.33254994e+00, 1.08061860e+00, 3.24892585e-08, -1.26154923e+01, 2.89450273e-01, 8.88659999e+00, -8.88659995e+00, 8.88659998e+00, 0.00000000e+00, 1.59554634e+01, -4.44456805e+01, -4.44454144e+01, 8.88659921e+00, 6.66509887e+00, -4.44456912e+01, -4.44456825e+01, -4.44441262e+01, 7.17138880e+00, -4.44456996e+01, -8.88659999e+00, 6.66509995e+00, -1.44894454e+00, -3.24892591e-08, 4.33103743e+01, 5.78899996e-01, 4.26135035e-05, 9.58781073e-01, 5.43434537e-02, 5.99130484e-01, -7.92244998e-02, 9.86439501e-01, 1.02026092e+00, 9.47641965e-01, 9.71031229e-01, 8.04198897e-01, 1.10786696e+00, 1.09253390e+00, 5.89378789e-01, 5.58878577e-01, 2.44212245e-10]) + + from time import perf_counter + X = 2 + qp = (H, g, lb, ub, E, b, A, lbA, ubA) + qps = [qp] * X + + batch_times = [] + for _ in range(1000): + t0 = perf_counter() + sols = qpSWIFT.solve_sparse_H_diag_batch(qp_data=qps, options=options) + batch_times.append(perf_counter() - t0) + for s in sols: + assert np.allclose(s.x, reference) + + single_times = [] + for _ in range(1000): + t0 = perf_counter() + sols = [qpSWIFT.solve_sparse_H_diag(*qp, options=options) for qp in qps] + single_times.append(perf_counter() - t0) + for s in sols: + assert np.allclose(s.x, reference) + + print('---------------------') + print(f"batch : total: {sum(batch_times):.6f}", + f"avg per batch : {(sum(batch_times) / len(batch_times)):.6f}") + print(f"single: total: {sum(single_times):.6f}", + f"avg per {X} solve: {sum(single_times) / len(single_times):.6f}", f"(per single solve: {sum(single_times) / len(single_times) / X})") \ No newline at end of file From a706354bf877cefb395bc08ce31c0edd2dd1ddad Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 12:12:12 +0200 Subject: [PATCH 02/22] added publish_to_pypi.yml --- .github/workflows/publish_to_pypi.yml | 57 +++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/workflows/publish_to_pypi.yml diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml new file mode 100644 index 0000000..8993e41 --- /dev/null +++ b/.github/workflows/publish_to_pypi.yml @@ -0,0 +1,57 @@ +name: Publish Python Package + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + deploy: + runs-on: ubuntu-latest + permissions: + # IMPORTANT: this permission is mandatory for trusted publishing + id-token: write + + strategy: + fail-fast: false + matrix: + python-version: [ '3.8', '3.10', '3.12' ] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + + - name: Install dependencies + run: | + python3 -m pip install --upgrade pip + python3 -m pip install setuptools build wheel numpy auditwheel patchelf + + - name: Build package + run: | + cmake -S . -B build -DCMAKE_BUILD_TYPE=Release + cmake --build build --config Release + cd python + python3 -m build --wheel -n + + - name: Repair wheel + run: | + mkdir -p dist + cd python + auditwheel repair dist/*.whl --plat manylinux_2_34_x86_64 + rm dist/*.whl + mv wheelhouse/*.whl ../dist/ + + - name: Publish package + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ # remove/comment line when publishing to actual repository +# user: __token__ # used before setting up a trusted publisher +# password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file From 7e4a3a0b7728dfdc22a09ddb1f95e5701012fe68 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 12:48:17 +0200 Subject: [PATCH 03/22] split publish pip into build and publish jobs --- .github/workflows/publish_to_pypi.yml | 103 +++++++++++++++----------- python/setup.py | 2 + 2 files changed, 60 insertions(+), 45 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 8993e41..4c40029 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -1,57 +1,70 @@ name: Publish Python Package -on: - push: - branches: - - main - pull_request: - branches: - - main +on: push jobs: - deploy: + build: + name: Build distribution 📦 runs-on: ubuntu-latest - permissions: - # IMPORTANT: this permission is mandatory for trusted publishing - id-token: write - strategy: fail-fast: false matrix: - python-version: [ '3.8', '3.10', '3.12' ] + python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12' ] + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python3 -m pip install --upgrade pip + python3 -m pip install setuptools build wheel numpy auditwheel patchelf + + - name: Build package + run: | + cmake -S . -B build -DCMAKE_BUILD_TYPE=Release + cmake --build build --config Release + cd python + python3 -m build --wheel -n + + - name: Repair wheel + run: | + mkdir -p dist + cd python + auditwheel repair dist/*.whl --plat manylinux_2_34_x86_64 + rm dist/*.whl + mv wheelhouse/*.whl ../dist/ + + - name: Store the distribution packages + uses: actions/upload-artifact@v4 + with: + name: python-package-distributions-${{ matrix.python-version }} + path: dist/ + + publish-to-pypi: + name: Publish Python 🐍 distribution 📦 to PyPI + if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes + needs: + - build + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/qpSWIFT_sparse_bindings + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing steps: - - uses: actions/checkout@v3 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - - name: Install dependencies - run: | - python3 -m pip install --upgrade pip - python3 -m pip install setuptools build wheel numpy auditwheel patchelf - - - name: Build package - run: | - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release - cmake --build build --config Release - cd python - python3 -m build --wheel -n - - - name: Repair wheel - run: | - mkdir -p dist - cd python - auditwheel repair dist/*.whl --plat manylinux_2_34_x86_64 - rm dist/*.whl - mv wheelhouse/*.whl ../dist/ - - - name: Publish package - uses: pypa/gh-action-pypi-publish@release/v1 - with: - repository-url: https://test.pypi.org/legacy/ # remove/comment line when publishing to actual repository + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + pattern: python-package-distributions-* + path: dist/ + merge-multiple: true + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ # remove/comment line when publishing to actual repository # user: __token__ # used before setting up a trusted publisher # password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/python/setup.py b/python/setup.py index 6116f13..1af6d7c 100644 --- a/python/setup.py +++ b/python/setup.py @@ -141,7 +141,9 @@ def find_eigen(): 'Intended Audience :: Science/Research', "Programming Language :: Python", 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', ], zip_safe=False, From 9a74030d1e4ea444096aa5d3712aefbffc069e65 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:00:38 +0200 Subject: [PATCH 04/22] tests is for noobs --- .github/workflows/publish_to_pypi.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 4c40029..8146cf9 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -64,7 +64,7 @@ jobs: merge-multiple: true - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1 - with: - repository-url: https://test.pypi.org/legacy/ # remove/comment line when publishing to actual repository +# with: +# repository-url: https://test.pypi.org/legacy/ # remove/comment line when publishing to actual repository # user: __token__ # used before setting up a trusted publisher # password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file From 61d802fda42efe61badc97ff3454db3e6bbe58cd Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:01:53 +0200 Subject: [PATCH 05/22] install pybind11 --- .github/workflows/publish_to_pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 8146cf9..175a498 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -20,7 +20,7 @@ jobs: - name: Install dependencies run: | python3 -m pip install --upgrade pip - python3 -m pip install setuptools build wheel numpy auditwheel patchelf + python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 - name: Build package run: | From a56610f132551477b9b21fc1775377ee8ef37554 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:03:15 +0200 Subject: [PATCH 06/22] install scipy --- .github/workflows/publish_to_pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 175a498..4da64e2 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -20,7 +20,7 @@ jobs: - name: Install dependencies run: | python3 -m pip install --upgrade pip - python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 + python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 scipy - name: Build package run: | From baa42d9fa4c343128af3f86719aab64ce55040a6 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:04:53 +0200 Subject: [PATCH 07/22] install eigen --- .github/workflows/publish_to_pypi.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 4da64e2..de8efd2 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -21,6 +21,8 @@ jobs: run: | python3 -m pip install --upgrade pip python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 scipy + apt update + apt install libeigen3-dev - name: Build package run: | From 36c3beb71245ea0abf9b0c51cbf5eadb8497d366 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:08:29 +0200 Subject: [PATCH 08/22] sudo --- .github/workflows/publish_to_pypi.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index de8efd2..221ae9e 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -19,10 +19,10 @@ jobs: - name: Install dependencies run: | + sudo apt update + sudo apt install libeigen3-dev python3 -m pip install --upgrade pip python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 scipy - apt update - apt install libeigen3-dev - name: Build package run: | From 63d12c0416e02a9e6767226af8bc2ea3e5e250a7 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:12:03 +0200 Subject: [PATCH 09/22] manylinux2014_x86_64 --- .github/workflows/publish_to_pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 221ae9e..7f5018b 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -35,7 +35,7 @@ jobs: run: | mkdir -p dist cd python - auditwheel repair dist/*.whl --plat manylinux_2_34_x86_64 + auditwheel repair dist/*.whl --plat manylinux2014_x86_64 rm dist/*.whl mv wheelhouse/*.whl ../dist/ From ee87191dc7a889bcb25801e89830e03931bbe085 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:18:41 +0200 Subject: [PATCH 10/22] cibuildwheel --- .github/workflows/publish_to_pypi.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 7f5018b..c819778 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -20,9 +20,9 @@ jobs: - name: Install dependencies run: | sudo apt update - sudo apt install libeigen3-dev + sudo apt install libeigen3-dev cmake python3 -m pip install --upgrade pip - python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 scipy + python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 scipy cibuildwheel - name: Build package run: | @@ -31,13 +31,14 @@ jobs: cd python python3 -m build --wheel -n - - name: Repair wheel + - name: Build wheels + env: + CIBW_BUILD: cp${{ matrix.python-version == '3.10' && '310' || matrix.python-version == '3.11' && '311' || matrix.python-version == '3.12' && '312' || matrix.python-version == '3.9' && '39' || '38' }}-manylinux_x86_64 + CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 + CIBW_BEFORE_BUILD: pip install -r requirements.txt + CIBW_REPAIR_WHEEL_COMMAND: auditwheel repair -w {dest_dir} {wheel} run: | - mkdir -p dist - cd python - auditwheel repair dist/*.whl --plat manylinux2014_x86_64 - rm dist/*.whl - mv wheelhouse/*.whl ../dist/ + python -m cibuildwheel --output-dir wheelhouse - name: Store the distribution packages uses: actions/upload-artifact@v4 From 7bd252915ac9332ee70a2e7eb8e29172c7779bb1 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:20:57 +0200 Subject: [PATCH 11/22] cd python --- .github/workflows/publish_to_pypi.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index c819778..513e830 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -38,6 +38,7 @@ jobs: CIBW_BEFORE_BUILD: pip install -r requirements.txt CIBW_REPAIR_WHEEL_COMMAND: auditwheel repair -w {dest_dir} {wheel} run: | + cd python python -m cibuildwheel --output-dir wheelhouse - name: Store the distribution packages From 7ad73507a19aab69734b8ef4285e673becddad92 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:23:27 +0200 Subject: [PATCH 12/22] requirements.txt --- python/requirements.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 python/requirements.txt diff --git a/python/requirements.txt b/python/requirements.txt new file mode 100644 index 0000000..86e1083 --- /dev/null +++ b/python/requirements.txt @@ -0,0 +1,3 @@ +pybind11 +scipy +numpy \ No newline at end of file From c33300da3b4bb75498bd475c57b0ae1956ac112e Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:31:50 +0200 Subject: [PATCH 13/22] update --- .github/workflows/publish_to_pypi.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 513e830..d72de7f 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -24,18 +24,16 @@ jobs: python3 -m pip install --upgrade pip python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 scipy cibuildwheel - - name: Build package - run: | - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release - cmake --build build --config Release - cd python - python3 -m build --wheel -n - - name: Build wheels env: CIBW_BUILD: cp${{ matrix.python-version == '3.10' && '310' || matrix.python-version == '3.11' && '311' || matrix.python-version == '3.12' && '312' || matrix.python-version == '3.9' && '39' || '38' }}-manylinux_x86_64 CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 - CIBW_BEFORE_BUILD: pip install -r requirements.txt + CIBW_BEFORE_BUILD: | + yum install -y eigen3-devel cmake3 || (apt-get update && apt-get install -y libeigen3-dev cmake) + pip install -r requirements.txt + cd /project && rm -rf build/ python/build/ python/dist/ python/*.so python/*.c + cd /project && cmake -S . -B build -DCMAKE_BUILD_TYPE=Release + cd /project && cmake --build build --config Release CIBW_REPAIR_WHEEL_COMMAND: auditwheel repair -w {dest_dir} {wheel} run: | cd python From 30968be3bc6669786a4db1686c58dc65d2750e9e Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:34:46 +0200 Subject: [PATCH 14/22] update --- .github/workflows/publish_to_pypi.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index d72de7f..94b5e13 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -17,19 +17,19 @@ jobs: with: python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - sudo apt update - sudo apt install libeigen3-dev cmake - python3 -m pip install --upgrade pip - python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 scipy cibuildwheel +# - name: Install dependencies +# run: | +# sudo apt update +# sudo apt install libeigen3-dev cmake +# python3 -m pip install --upgrade pip +# python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 scipy cibuildwheel - name: Build wheels env: CIBW_BUILD: cp${{ matrix.python-version == '3.10' && '310' || matrix.python-version == '3.11' && '311' || matrix.python-version == '3.12' && '312' || matrix.python-version == '3.9' && '39' || '38' }}-manylinux_x86_64 CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 CIBW_BEFORE_BUILD: | - yum install -y eigen3-devel cmake3 || (apt-get update && apt-get install -y libeigen3-dev cmake) + apt install -y eigen3-devel cmake3 || (apt-get update && apt-get install -y libeigen3-dev cmake) pip install -r requirements.txt cd /project && rm -rf build/ python/build/ python/dist/ python/*.so python/*.c cd /project && cmake -S . -B build -DCMAKE_BUILD_TYPE=Release From 818ab8f9baa401cd3a071fd7c7e169f9a017eb0a Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:35:38 +0200 Subject: [PATCH 15/22] update --- .github/workflows/publish_to_pypi.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 94b5e13..70298bd 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -17,12 +17,10 @@ jobs: with: python-version: ${{ matrix.python-version }} -# - name: Install dependencies -# run: | -# sudo apt update -# sudo apt install libeigen3-dev cmake -# python3 -m pip install --upgrade pip -# python3 -m pip install setuptools build wheel numpy auditwheel patchelf pybind11 scipy cibuildwheel + - name: Install cibuildwheel + run: | + python -m pip install --upgrade pip + python -m pip install cibuildwheel - name: Build wheels env: From 8542a387ceeab1314c3e2f0a32af252208065970 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:39:34 +0200 Subject: [PATCH 16/22] update --- .github/workflows/publish_to_pypi.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 70298bd..d1e9d63 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -29,9 +29,8 @@ jobs: CIBW_BEFORE_BUILD: | apt install -y eigen3-devel cmake3 || (apt-get update && apt-get install -y libeigen3-dev cmake) pip install -r requirements.txt - cd /project && rm -rf build/ python/build/ python/dist/ python/*.so python/*.c - cd /project && cmake -S . -B build -DCMAKE_BUILD_TYPE=Release - cd /project && cmake --build build --config Release + cmake -S . -B build -DCMAKE_BUILD_TYPE=Release + cmake --build build --config Release CIBW_REPAIR_WHEEL_COMMAND: auditwheel repair -w {dest_dir} {wheel} run: | cd python From 8bd2c7e02bafa03fd00ee1587b06f320a89f29cd Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:41:45 +0200 Subject: [PATCH 17/22] update --- .github/workflows/publish_to_pypi.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index d1e9d63..6d4f239 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -27,6 +27,9 @@ jobs: CIBW_BUILD: cp${{ matrix.python-version == '3.10' && '310' || matrix.python-version == '3.11' && '311' || matrix.python-version == '3.12' && '312' || matrix.python-version == '3.9' && '39' || '38' }}-manylinux_x86_64 CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 CIBW_BEFORE_BUILD: | + echo "Current directory: $(pwd)" + echo "Files in project root: $(ls -la)" + echo "Python directory exists: $(ls -la python/)" apt install -y eigen3-devel cmake3 || (apt-get update && apt-get install -y libeigen3-dev cmake) pip install -r requirements.txt cmake -S . -B build -DCMAKE_BUILD_TYPE=Release From 51c4a16577df4e036af4443517a5e556412689e8 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:44:25 +0200 Subject: [PATCH 18/22] update --- .github/workflows/publish_to_pypi.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 6d4f239..c08d89e 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -36,8 +36,7 @@ jobs: cmake --build build --config Release CIBW_REPAIR_WHEEL_COMMAND: auditwheel repair -w {dest_dir} {wheel} run: | - cd python - python -m cibuildwheel --output-dir wheelhouse + python -m cibuildwheel python --output-dir wheelhouse - name: Store the distribution packages uses: actions/upload-artifact@v4 From 6af5bcac7275511fa43715cb74a85c2c56e8ffd6 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:46:58 +0200 Subject: [PATCH 19/22] update --- .github/workflows/publish_to_pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index c08d89e..2c5a20b 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -30,7 +30,7 @@ jobs: echo "Current directory: $(pwd)" echo "Files in project root: $(ls -la)" echo "Python directory exists: $(ls -la python/)" - apt install -y eigen3-devel cmake3 || (apt-get update && apt-get install -y libeigen3-dev cmake) + apt-get install libeigen3-dev cmake pip install -r requirements.txt cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release From 15ddf9d6879e92f490027fea495296ad50c550a5 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:50:12 +0200 Subject: [PATCH 20/22] update --- .github/workflows/publish_to_pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 2c5a20b..062d918 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -30,7 +30,7 @@ jobs: echo "Current directory: $(pwd)" echo "Files in project root: $(ls -la)" echo "Python directory exists: $(ls -la python/)" - apt-get install libeigen3-dev cmake + apt-get install libeigen3 libeigen3-dev cmake pip install -r requirements.txt cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release From 0253b9ea0f0eef2671497854b43f06614812a27b Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:51:51 +0200 Subject: [PATCH 21/22] update --- .github/workflows/publish_to_pypi.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 062d918..f86345c 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -27,10 +27,7 @@ jobs: CIBW_BUILD: cp${{ matrix.python-version == '3.10' && '310' || matrix.python-version == '3.11' && '311' || matrix.python-version == '3.12' && '312' || matrix.python-version == '3.9' && '39' || '38' }}-manylinux_x86_64 CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 CIBW_BEFORE_BUILD: | - echo "Current directory: $(pwd)" - echo "Files in project root: $(ls -la)" - echo "Python directory exists: $(ls -la python/)" - apt-get install libeigen3 libeigen3-dev cmake + yum install -y eigen3-devel cmake3 pip install -r requirements.txt cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release From ad466fa5604cdf1ca01e2bf6048930482e5ac7a0 Mon Sep 17 00:00:00 2001 From: Simon Stelter Date: Wed, 9 Jul 2025 13:54:09 +0200 Subject: [PATCH 22/22] update --- .github/workflows/publish_to_pypi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index f86345c..56b3ed5 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -28,7 +28,7 @@ jobs: CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 CIBW_BEFORE_BUILD: | yum install -y eigen3-devel cmake3 - pip install -r requirements.txt + pip install -r python/requirements.txt cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build --config Release CIBW_REPAIR_WHEEL_COMMAND: auditwheel repair -w {dest_dir} {wheel}