From a7e11a03bce3c7a752cc908b3c67b3ac2e04df3b Mon Sep 17 00:00:00 2001 From: Niels Sparre Faurskov Date: Mon, 25 May 2026 17:27:03 +0200 Subject: [PATCH] Containerize --- Dockerfile | 19 +++++++++++++++++++ src/optimizer/postprocess.py | 2 +- src/util/__init__.py | 4 +--- src/util/util.py | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9308e35 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +FROM python:3.13-slim + +COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /usr/local/bin/ + +WORKDIR /app + +COPY . . + +RUN uv venv && uv pip install --no-cache --allow-insecure-host pypi.org --allow-insecure-host files.pythonhosted.org . dwave-neal + +ENV VIRTUAL_ENV=/app/.venv +ENV PATH="/app/.venv/bin:$PATH" +# /app → makes `src` importable as a package (for relative imports in app.py) +# /app/src → makes `util` importable as a top-level module +ENV PYTHONPATH=/app:/app/src + +EXPOSE 8000 + +CMD ["uvicorn", "src.app:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/src/optimizer/postprocess.py b/src/optimizer/postprocess.py index 26f1bc3..7c415bb 100644 --- a/src/optimizer/postprocess.py +++ b/src/optimizer/postprocess.py @@ -156,7 +156,7 @@ def objective_value( # Objective: -tr(P_tilde @ X @ A @ X.T) # Equivalent to -sum_{n,m,s,s'} P_tilde_nm * A_ss' * X_ns * X_ms' obj = -np.einsum( - "nm,ns,ss',ms'->", + "nm,ns,sk,mk->", result.P_tilde, X[:, :-1], result.A[:-1, :-1].astype(float), diff --git a/src/util/__init__.py b/src/util/__init__.py index 75ed658..d221742 100644 --- a/src/util/__init__.py +++ b/src/util/__init__.py @@ -1,3 +1 @@ -from .util import symmetrize_matrix -from .util import mu -from .util import is_valid_solution \ No newline at end of file +from .util import * \ No newline at end of file diff --git a/src/util/util.py b/src/util/util.py index 0f5b902..2df59a0 100644 --- a/src/util/util.py +++ b/src/util/util.py @@ -66,7 +66,7 @@ def get_real_seat_assignments(X: np.ndarray, S: int) -> np.ndarray: return real_seats -def get_best_sample(sample_set: SampleSet) -> dimod.sampleset.Sample: +def get_best_sample(sample_set: SampleSet) -> dimod.sampleset.SampleView: return sample_set.first.sample