Source code for PyBMF.models.MaxSAT
from .ContinuousModel import ContinuousModel
import sys
import os
from ..utils import to_dense, matmul
import subprocess
import numpy as np
import pandas as pd
[docs]
class MaxSAT(ContinuousModel):
def __init__(self, k, mode='fast_undercover'):
self.check_params(k=k, mode=mode)
[docs]
def fit(self, X_train, X_val=None, X_test=None, **kwargs):
super().fit(X_train, X_val, X_test, **kwargs)
self._fit()
self.finish(show_logs=self.show_logs, save_model=self.save_model, show_result=self.show_result)
def _fit(self):
X_train = to_dense(self.X_train)
# X_train.tofile("D:/Dropbox/PyBMF/models/bmf_maxsat_avellaneda/input.csv", sep = ',')
df = pd.DataFrame.sparse.from_spmatrix(self.X_train)
df.to_csv("D:/Dropbox/PyBMF/models/bmf_maxsat_avellaneda/input.csv", index=False, header=False)
cp = subprocess.run([
"wsl",
"~",
"-e",
"/mnt/d/Dropbox/PyBMF/models/bmf_maxsat_avellaneda/inferbmf",
"-k",
str(self.k),
"fromFile",
"-o",
"/mnt/d/Dropbox/PyBMF/models/bmf_maxsat_avellaneda/result",
"/mnt/d/Dropbox/PyBMF/models/bmf_maxsat_avellaneda/input.csv"
], capture_output=True, shell=True)
print("=== stdout ===")
print(cp.stdout.decode())
print("=== stderr ===")
print(cp.stderr.decode())
self.U = np.genfromtxt('D:/Dropbox/PyBMF/models/bmf_maxsat_avellaneda/result.A.csv', delimiter=',')
self.V = np.genfromtxt('D:/Dropbox/PyBMF/models/bmf_maxsat_avellaneda/result.B.csv', delimiter=',').T
self.X_pd = matmul(self.U, self.V.T, boolean=True, sparse=True)
self.evaluate(df_name='boolean')