refactor: Migrate solver module to use CVXOPT wrapper

- Rename `_wrap` to `_cvx_opt_wrap` for consistency
- Update import paths in solver module
- Add type hints to `solution_mat_clusters` method
- Improve type annotations in `solve` method
This commit is contained in:
2025-03-03 17:38:24 +08:00
parent 39da7992d4
commit 6034175a10
3 changed files with 8 additions and 8 deletions

View File

@ -7,9 +7,9 @@ import numpy as np
from app._typing import NDArray
from ._wrap import matrix, spmatrix
from ._wrap.glpk import ilp
from ._wrap.glpk import set_global_options as set_glpk_options
from ._cvxopt_wrap import matrix, spmatrix
from ._cvxopt_wrap.glpk import ilp
from ._cvxopt_wrap.glpk import set_global_options as set_glpk_options
set_glpk_options({"msg_lev": "GLP_MSG_ERR"})
@ -139,19 +139,19 @@ class _BIPSolver:
@staticmethod
def solution_mat_clusters(solution_mat: NDArray):
n = solution_mat.shape[0]
n: int = solution_mat.shape[0]
labels = np.arange(1, n + 1)
for i in range(n):
for j in range(i + 1, n):
if solution_mat[i, j] > 0:
labels[j] = labels[i]
clusters = defaultdict(list)
# a dictionary that with empty list as default value for non-existing keys
clusters: dict[int, list[int]] = defaultdict(list)
for i, label in enumerate(labels):
clusters[label].append(i)
clusters[int(label)].append(i)
return list(clusters.values())
def solve(self, affinity_matrix, rtn_matrix=False):
def solve(self, affinity_matrix: NDArray, rtn_matrix=False):
n_nodes = affinity_matrix.shape[0]
if n_nodes <= 1:
solution_x, sol_matrix = (