{"library":"qdldl","title":"QDLDL Factorization","description":"QDLDL is a Python wrapper for the QDLDL C library, providing a high-performance LDL factorization routine primarily for sparse matrices. It's designed for use in optimization and numerical methods, particularly for solving symmetric indefinite systems like those arising in KKT matrices. The current version is 0.1.9.post1, with updates released periodically to support newer Python versions, architectures, and upstream C library improvements.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install qdldl"],"cli":null},"imports":["import qdldl"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import qdldl\nimport numpy as np\nfrom scipy.sparse import csc_matrix\n\n# Construct a sparse symmetric indefinite matrix, typically a KKT matrix.\n# K = [ P  A.T ]\n#     [ A   0  ]\n\n# Example components:\nP_data = np.array([2.0, 1.0, 1.0, 3.0])\nP_row_ind = np.array([0, 0, 1, 1])\nP_col_ind = np.array([0, 1, 0, 1])\nP = csc_matrix((P_data, (P_row_ind, P_col_ind)), shape=(2, 2))\n\nA_constr_data = np.array([1.0, 1.0, 1.0])\nA_constr_row_ind = np.array([0, 1, 1])\nA_constr_col_ind = np.array([0, 0, 1])\nA_constr = csc_matrix((A_constr_data, (A_constr_row_ind, A_constr_col_ind)), shape=(2, 2))\n\nn_P = P.shape[0]\nn_A = A_constr.shape[0]\nn = n_P + n_A\n\n# Build the full KKT matrix\nKKT = csc_matrix(\n    (n, n),\n    dtype=P.dtype\n)\nKKT[:n_P, :n_P] = P\nKKT[:n_P, n_P:] = A_constr.T\nKKT[n_P:, :n_P] = A_constr\n\n# The 'd' argument for qdldl.qdldl is a user-defined initial diagonal for pivoting.\n# A common choice is a vector of ones.\nd = np.ones(n)\n\n# Perform LDL factorization\n# L_factor is a csc_matrix (lower triangular factor),\n# D_diag is a numpy array (diagonal of D),\n# P_vec is a numpy array (permutation vector).\nL_factor, D_diag, P_vec = qdldl.qdldl(KKT, d)\n\n# Solve a system KKT @ x = b\nb = np.array([10.0, 20.0, 5.0, 8.0]) # Example right-hand side\n\n# Use the qdldl.solve function to get the solution x\nx = qdldl.solve(L_factor, D_diag, P_vec, b)\n\nprint(\"Input KKT matrix (dense representation for display):\\n\", KKT.toarray())\nprint(\"Right-hand side b:\\n\", b)\nprint(\"Solution x:\\n\", x)\n\n# Verify the solution\nprint(\"KKT @ x:\\n\", KKT @ x)\nprint(\"Error (KKT @ x - b):\\n\", KKT @ x - b)\nassert np.allclose(KKT @ x, b, atol=1e-9)\nprint(\"Solution verified.\")","lang":"python","description":"This quickstart demonstrates how to factorize a sparse symmetric indefinite matrix (e.g., a KKT matrix) using `qdldl.qdldl` and then solve a linear system with the obtained factors using `qdldl.solve`. It uses `scipy.sparse.csc_matrix` for efficient sparse matrix representation.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"0.1.9.post1","pypi_latest":"0.1.9.post1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":50,"avg_install_s":8.5,"avg_import_s":0,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"qdldl","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-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"qdldl","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.4,"import_time_s":0,"mem_mb":0,"disk_size":"227M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"qdldl","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":"qdldl","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.2,"import_time_s":0,"mem_mb":0,"disk_size":"240M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"qdldl","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":"qdldl","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.4,"import_time_s":0,"mem_mb":0,"disk_size":"226M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"qdldl","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":"qdldl","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.3,"import_time_s":0,"mem_mb":0,"disk_size":"225M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"qdldl","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-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"qdldl","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":11.3,"import_time_s":0,"mem_mb":0,"disk_size":"234M"}]}}