{"library":"qpsolvers","title":"Quadratic Programming Solvers","description":"qpsolvers is a Python library that provides a unified API to various quadratic programming (QP) solvers. It simplifies the process of solving convex QPs by abstracting away solver-specific APIs and matrix format requirements. Currently at version 4.11.0, the library maintains an active development pace with frequent minor releases to integrate new solvers and provide updates for existing ones.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install qpsolvers","pip install qpsolvers[open_source_solvers]","pip install qpsolvers[clarabel,osqp,proxqp]"],"cli":null},"imports":["from qpsolvers import solve_qp","from qpsolvers import solve_problem","from qpsolvers import available_solvers"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import numpy as np\nfrom qpsolvers import solve_qp, available_solvers\n\n# Define the QP problem in standard form: minimize 0.5 * x.T * P * x + q.T * x \n# subject to G * x <= h, A * x == b, lb <= x <= ub\n\nM = np.array([[1., 2., 0.], [-8., 3., 2.], [0., 1., 1.]])\nP = M.T @ M  # This results in a positive definite matrix\nq = np.array([3., 2., 3.]) @ M\n\nG = np.array([[1., 2., 1.], [2., 0., 1.], [-1., 2., -1.]])\nh = np.array([3., 2., -2.])\n\nA = np.array([1., 1., 1.])\nb = np.array([1.])\n\n# Try to use a common open-source solver, or fallback if not available\nsolver_to_use = \"proxqp\" if \"proxqp\" in available_solvers else available_solvers[0] if available_solvers else None\n\nif solver_to_use:\n    print(f\"Using solver: {solver_to_use}\")\n    x = solve_qp(P, q, G, h, A, b, solver=solver_to_use)\n    print(f\"QP solution: {x = }\")\nelse:\n    print(\"No QP solvers found. Please install one, e.g., pip install qpsolvers[proxqp]\")","lang":"python","description":"This example demonstrates how to define a quadratic programming problem using NumPy arrays and solve it with an available backend solver. It automatically selects 'proxqp' if available, otherwise it tries the first available solver, or prompts the user to install one if no solvers are found. The problem is formulated in the standard quadratic program form.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"4.8.2","pypi_latest":"4.12.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":70,"avg_install_s":9.5,"avg_import_s":1.38,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.98,"mem_mb":22.7,"disk_size":"231.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"clarabel,osqp,proxqp","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"open_source_solvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.94,"mem_mb":22.7,"disk_size":"231.4M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":7.1,"import_time_s":0.77,"mem_mb":22.7,"disk_size":"222M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"clarabel,osqp,proxqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.6,"import_time_s":0.88,"mem_mb":22.1,"disk_size":"236M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"open_source_solvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":7.1,"import_time_s":0.77,"mem_mb":22.7,"disk_size":"222M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":1.38,"mem_mb":25.3,"disk_size":"246.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"clarabel,osqp,proxqp","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"open_source_solvers","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":6.9,"import_time_s":1.27,"mem_mb":25.2,"disk_size":"236M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"clarabel,osqp,proxqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.3,"import_time_s":1.37,"mem_mb":24.6,"disk_size":"251M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"open_source_solvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":18.6,"import_time_s":4.33,"mem_mb":63.4,"disk_size":"833M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":1.36,"mem_mb":25.1,"disk_size":"232.7M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"clarabel,osqp,proxqp","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"open_source_solvers","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":7.1,"import_time_s":1.31,"mem_mb":25.1,"disk_size":"222M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"clarabel,osqp,proxqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.7,"import_time_s":1.47,"mem_mb":24.5,"disk_size":"245M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"open_source_solvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":18.8,"import_time_s":4.48,"mem_mb":61.8,"disk_size":"827M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":1.12,"mem_mb":24.4,"disk_size":"231.5M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"clarabel,osqp,proxqp","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"open_source_solvers","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":7.3,"import_time_s":1.15,"mem_mb":24.4,"disk_size":"221M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"clarabel,osqp,proxqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.7,"import_time_s":1.24,"mem_mb":24,"disk_size":"244M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"open_source_solvers","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":10,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.81,"mem_mb":16.7,"disk_size":"233.6M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"clarabel,osqp,proxqp","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"open_source_solvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":null,"import_time_s":0.81,"mem_mb":16.7,"disk_size":"233.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"qpsolvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":8,"import_time_s":0.76,"mem_mb":16.7,"disk_size":"230M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"clarabel,osqp,proxqp","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":9.4,"import_time_s":0.88,"mem_mb":18.9,"disk_size":"244M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"open_source_solvers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"noisy","install_time_s":8,"import_time_s":0.82,"mem_mb":16.7,"disk_size":"230M"}]}}