diff --git a/README.md b/README.md index bc3cf0d..b5c5b7c 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ python fetch-cuoptlink.py install -g /opt/gams/gams55.0 -c 12 -r v0.0.8 python fetch-cuoptlink.py uninstall -g /opt/gams/gams55.0 ``` -> **Note:** Successful installations automatically verify the solver link by running the GAMS `trnsport` test model with `solver=cuopt`. +> **Note:** Successful installations automatically verify the solver link by solving a small embedded LP model with `solver=cuopt`. ## Manual installation diff --git a/examples/trnsport_cuopt.ipynb b/examples/trnsport_cuopt.ipynb index 97bb6a0..15ae895 100644 --- a/examples/trnsport_cuopt.ipynb +++ b/examples/trnsport_cuopt.ipynb @@ -5,37 +5,47 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:27:48.359124Z", - "iopub.status.busy": "2026-02-17T12:27:48.358924Z", - "iopub.status.idle": "2026-02-17T12:33:00.999504Z", - "shell.execute_reply": "2026-02-17T12:33:00.998575Z" + "iopub.execute_input": "2026-10-06T09:54:37.563618Z", + "iopub.status.busy": "2026-10-06T09:54:37.563487Z", + "iopub.status.idle": "2026-10-06T09:57:19.382802Z", + "shell.execute_reply": "2026-10-06T09:57:19.381921Z" } }, "outputs": [ { - "data": { - "text/plain": [ - "CompletedProcess(args='unzip -q -o cuopt-link-release-cu12-x86_64.zip -d /home/andre/cuoptlink-builder/venv/lib/python3.12/site-packages/gamspy_base', returncode=0)" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing `cuopt` from release `v0.0.8e`...\n", + "cuopt-link-release-cu12-x86_64.zip: 100% (884.1MB/884.1MB)\n", + "cu12-runtime-x86_64.zip: 100% (1.3GB/1.3GB)\n", + "Merged `gamsconfig_cuopt.yaml` into `gamsconfig.yaml`.\n", + "Successfully installed `cuopt` into `/home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base`.\n", + "Testing installation with a small LP model...\n", + "Installation test completed successfully!\n", + " \n" + ] } ], "source": [ "# remove -q to debug issues with pip installs\n", + "import os\n", "import subprocess\n", "import sys\n", - "import os\n", + "import tempfile\n", + "import urllib.request\n", "cuversion = 12\n", - "cputype = 'x86_64' if os.uname().machine == 'x86_64' else 'arm64'\n", "!pip install -q gamspy\n", "gams_base_path = subprocess.check_output([sys.executable, '-m', 'gamspy', 'show', 'base']).decode('utf-8').strip()\n", - "subprocess.run(f'wget -nc -nv -q \"https://github.com/GAMS-dev/cuoptlink-builder/releases/latest/download/cu{cuversion}-runtime-{cputype}.zip\"', shell=True, check=True)\n", - "subprocess.run(f'wget -nc -nv -q \"https://github.com/GAMS-dev/cuoptlink-builder/releases/latest/download/cuopt-link-release-cu{cuversion}-{cputype}.zip\"', shell=True, check=True)\n", - "subprocess.run(f\"unzip -q -o cu{cuversion}-runtime-{cputype}.zip -d {gams_base_path}\", shell=True, check=True)\n", - "subprocess.run(f\"unzip -q -o cuopt-link-release-cu{cuversion}-{cputype}.zip -d {gams_base_path}\", shell=True, check=True)" + "# fetch-cuoptlink.py downloads the cuOpt link and CUDA runtime, registers cuOpt in gamsconfig.yaml and runs a test solve\n", + "if not os.path.exists(os.path.join(gams_base_path, '.cuopt_installed_files.txt')):\n", + " with tempfile.TemporaryDirectory() as tmp:\n", + " script = os.path.join(tmp, 'fetch-cuoptlink.py')\n", + " urllib.request.urlretrieve('https://raw.githubusercontent.com/GAMS-dev/cuoptlink-builder/main/fetch-cuoptlink.py', script)\n", + " r = subprocess.run([sys.executable, script, 'install', '-g', gams_base_path, '-c', str(cuversion), '--cuda-runtime'], capture_output=True)\n", + " # only keep the final state of the download progress lines\n", + " print('\\n'.join(line.rsplit('\\r', 1)[-1] for line in r.stdout.decode().split('\\n')), r.stderr.decode())\n", + " r.check_returncode()" ] }, { @@ -94,10 +104,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.029895Z", - "iopub.status.busy": "2026-02-17T12:33:01.029699Z", - "iopub.status.idle": "2026-02-17T12:33:01.322509Z", - "shell.execute_reply": "2026-02-17T12:33:01.321721Z" + "iopub.execute_input": "2026-10-06T09:57:19.402830Z", + "iopub.status.busy": "2026-10-06T09:57:19.402672Z", + "iopub.status.idle": "2026-10-06T09:57:19.572984Z", + "shell.execute_reply": "2026-10-06T09:57:19.572535Z" } }, "outputs": [ @@ -169,10 +179,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.324203Z", - "iopub.status.busy": "2026-02-17T12:33:01.324003Z", - "iopub.status.idle": "2026-02-17T12:33:01.330317Z", - "shell.execute_reply": "2026-02-17T12:33:01.328814Z" + "iopub.execute_input": "2026-10-06T09:57:19.575293Z", + "iopub.status.busy": "2026-10-06T09:57:19.575150Z", + "iopub.status.idle": "2026-10-06T09:57:19.579776Z", + "shell.execute_reply": "2026-10-06T09:57:19.579061Z" } }, "outputs": [ @@ -247,10 +257,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.331882Z", - "iopub.status.busy": "2026-02-17T12:33:01.331736Z", - "iopub.status.idle": "2026-02-17T12:33:01.341305Z", - "shell.execute_reply": "2026-02-17T12:33:01.340650Z" + "iopub.execute_input": "2026-10-06T09:57:19.581075Z", + "iopub.status.busy": "2026-10-06T09:57:19.580957Z", + "iopub.status.idle": "2026-10-06T09:57:19.586865Z", + "shell.execute_reply": "2026-10-06T09:57:19.586164Z" } }, "outputs": [ @@ -352,10 +362,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.342615Z", - "iopub.status.busy": "2026-02-17T12:33:01.342481Z", - "iopub.status.idle": "2026-02-17T12:33:01.345120Z", - "shell.execute_reply": "2026-02-17T12:33:01.344310Z" + "iopub.execute_input": "2026-10-06T09:57:19.588235Z", + "iopub.status.busy": "2026-10-06T09:57:19.588121Z", + "iopub.status.idle": "2026-10-06T09:57:19.590658Z", + "shell.execute_reply": "2026-10-06T09:57:19.589628Z" } }, "outputs": [], @@ -377,10 +387,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.346766Z", - "iopub.status.busy": "2026-02-17T12:33:01.346641Z", - "iopub.status.idle": "2026-02-17T12:33:01.473803Z", - "shell.execute_reply": "2026-02-17T12:33:01.472747Z" + "iopub.execute_input": "2026-10-06T09:57:19.592143Z", + "iopub.status.busy": "2026-10-06T09:57:19.592011Z", + "iopub.status.idle": "2026-10-06T09:57:19.702570Z", + "shell.execute_reply": "2026-10-06T09:57:19.701700Z" } }, "outputs": [], @@ -402,10 +412,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.475780Z", - "iopub.status.busy": "2026-02-17T12:33:01.475620Z", - "iopub.status.idle": "2026-02-17T12:33:01.491727Z", - "shell.execute_reply": "2026-02-17T12:33:01.490906Z" + "iopub.execute_input": "2026-10-06T09:57:19.704350Z", + "iopub.status.busy": "2026-10-06T09:57:19.704187Z", + "iopub.status.idle": "2026-10-06T09:57:19.729464Z", + "shell.execute_reply": "2026-10-06T09:57:19.728650Z" } }, "outputs": [], @@ -439,10 +449,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.493923Z", - "iopub.status.busy": "2026-02-17T12:33:01.493763Z", - "iopub.status.idle": "2026-02-17T12:33:01.506645Z", - "shell.execute_reply": "2026-02-17T12:33:01.505868Z" + "iopub.execute_input": "2026-10-06T09:57:19.731161Z", + "iopub.status.busy": "2026-10-06T09:57:19.730973Z", + "iopub.status.idle": "2026-10-06T09:57:19.739787Z", + "shell.execute_reply": "2026-10-06T09:57:19.739013Z" } }, "outputs": [], @@ -463,10 +473,10 @@ "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.508455Z", - "iopub.status.busy": "2026-02-17T12:33:01.508317Z", - "iopub.status.idle": "2026-02-17T12:33:01.516458Z", - "shell.execute_reply": "2026-02-17T12:33:01.515734Z" + "iopub.execute_input": "2026-10-06T09:57:19.741413Z", + "iopub.status.busy": "2026-10-06T09:57:19.741278Z", + "iopub.status.idle": "2026-10-06T09:57:19.746417Z", + "shell.execute_reply": "2026-10-06T09:57:19.745761Z" }, "tags": [] }, @@ -493,10 +503,10 @@ "execution_count": 10, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.518270Z", - "iopub.status.busy": "2026-02-17T12:33:01.518104Z", - "iopub.status.idle": "2026-02-17T12:33:01.522416Z", - "shell.execute_reply": "2026-02-17T12:33:01.521725Z" + "iopub.execute_input": "2026-10-06T09:57:19.747771Z", + "iopub.status.busy": "2026-10-06T09:57:19.747643Z", + "iopub.status.idle": "2026-10-06T09:57:19.751532Z", + "shell.execute_reply": "2026-10-06T09:57:19.750838Z" } }, "outputs": [ @@ -560,10 +570,10 @@ "execution_count": 11, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.523944Z", - "iopub.status.busy": "2026-02-17T12:33:01.523822Z", - "iopub.status.idle": "2026-02-17T12:33:01.527799Z", - "shell.execute_reply": "2026-02-17T12:33:01.527213Z" + "iopub.execute_input": "2026-10-06T09:57:19.753045Z", + "iopub.status.busy": "2026-10-06T09:57:19.752930Z", + "iopub.status.idle": "2026-10-06T09:57:19.756924Z", + "shell.execute_reply": "2026-10-06T09:57:19.755995Z" } }, "outputs": [ @@ -644,10 +654,10 @@ "execution_count": 12, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.529766Z", - "iopub.status.busy": "2026-02-17T12:33:01.529619Z", - "iopub.status.idle": "2026-02-17T12:33:01.539043Z", - "shell.execute_reply": "2026-02-17T12:33:01.538353Z" + "iopub.execute_input": "2026-10-06T09:57:19.758484Z", + "iopub.status.busy": "2026-10-06T09:57:19.758360Z", + "iopub.status.idle": "2026-10-06T09:57:19.765598Z", + "shell.execute_reply": "2026-10-06T09:57:19.764802Z" } }, "outputs": [ @@ -718,10 +728,10 @@ "execution_count": 13, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.540694Z", - "iopub.status.busy": "2026-02-17T12:33:01.540533Z", - "iopub.status.idle": "2026-02-17T12:33:01.549508Z", - "shell.execute_reply": "2026-02-17T12:33:01.548723Z" + "iopub.execute_input": "2026-10-06T09:57:19.767044Z", + "iopub.status.busy": "2026-10-06T09:57:19.766916Z", + "iopub.status.idle": "2026-10-06T09:57:19.774141Z", + "shell.execute_reply": "2026-10-06T09:57:19.773288Z" } }, "outputs": [ @@ -798,10 +808,10 @@ "execution_count": 14, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.550976Z", - "iopub.status.busy": "2026-02-17T12:33:01.550839Z", - "iopub.status.idle": "2026-02-17T12:33:01.555219Z", - "shell.execute_reply": "2026-02-17T12:33:01.554530Z" + "iopub.execute_input": "2026-10-06T09:57:19.775568Z", + "iopub.status.busy": "2026-10-06T09:57:19.775445Z", + "iopub.status.idle": "2026-10-06T09:57:19.778013Z", + "shell.execute_reply": "2026-10-06T09:57:19.777164Z" } }, "outputs": [], @@ -837,10 +847,10 @@ "execution_count": 15, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.556674Z", - "iopub.status.busy": "2026-02-17T12:33:01.556512Z", - "iopub.status.idle": "2026-02-17T12:33:01.561662Z", - "shell.execute_reply": "2026-02-17T12:33:01.560824Z" + "iopub.execute_input": "2026-10-06T09:57:19.779371Z", + "iopub.status.busy": "2026-10-06T09:57:19.779252Z", + "iopub.status.idle": "2026-10-06T09:57:19.783888Z", + "shell.execute_reply": "2026-10-06T09:57:19.783212Z" } }, "outputs": [ @@ -931,10 +941,10 @@ "execution_count": 16, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.563129Z", - "iopub.status.busy": "2026-02-17T12:33:01.563006Z", - "iopub.status.idle": "2026-02-17T12:33:01.573513Z", - "shell.execute_reply": "2026-02-17T12:33:01.572738Z" + "iopub.execute_input": "2026-10-06T09:57:19.785287Z", + "iopub.status.busy": "2026-10-06T09:57:19.785167Z", + "iopub.status.idle": "2026-10-06T09:57:19.792350Z", + "shell.execute_reply": "2026-10-06T09:57:19.791661Z" } }, "outputs": [ @@ -1039,10 +1049,10 @@ "execution_count": 17, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.574875Z", - "iopub.status.busy": "2026-02-17T12:33:01.574738Z", - "iopub.status.idle": "2026-02-17T12:33:01.585523Z", - "shell.execute_reply": "2026-02-17T12:33:01.584825Z" + "iopub.execute_input": "2026-10-06T09:57:19.793812Z", + "iopub.status.busy": "2026-10-06T09:57:19.793694Z", + "iopub.status.idle": "2026-10-06T09:57:19.800956Z", + "shell.execute_reply": "2026-10-06T09:57:19.800094Z" } }, "outputs": [ @@ -1144,10 +1154,10 @@ "execution_count": 18, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.586850Z", - "iopub.status.busy": "2026-02-17T12:33:01.586712Z", - "iopub.status.idle": "2026-02-17T12:33:01.595132Z", - "shell.execute_reply": "2026-02-17T12:33:01.594357Z" + "iopub.execute_input": "2026-10-06T09:57:19.802210Z", + "iopub.status.busy": "2026-10-06T09:57:19.802091Z", + "iopub.status.idle": "2026-10-06T09:57:19.808326Z", + "shell.execute_reply": "2026-10-06T09:57:19.807673Z" } }, "outputs": [ @@ -1259,10 +1269,10 @@ "execution_count": 19, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.596448Z", - "iopub.status.busy": "2026-02-17T12:33:01.596331Z", - "iopub.status.idle": "2026-02-17T12:33:01.600863Z", - "shell.execute_reply": "2026-02-17T12:33:01.600034Z" + "iopub.execute_input": "2026-10-06T09:57:19.809765Z", + "iopub.status.busy": "2026-10-06T09:57:19.809653Z", + "iopub.status.idle": "2026-10-06T09:57:19.811973Z", + "shell.execute_reply": "2026-10-06T09:57:19.811317Z" } }, "outputs": [], @@ -1302,10 +1312,10 @@ "execution_count": 20, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.602239Z", - "iopub.status.busy": "2026-02-17T12:33:01.602117Z", - "iopub.status.idle": "2026-02-17T12:33:01.608049Z", - "shell.execute_reply": "2026-02-17T12:33:01.607379Z" + "iopub.execute_input": "2026-10-06T09:57:19.813473Z", + "iopub.status.busy": "2026-10-06T09:57:19.813367Z", + "iopub.status.idle": "2026-10-06T09:57:19.815846Z", + "shell.execute_reply": "2026-10-06T09:57:19.815189Z" } }, "outputs": [], @@ -1339,10 +1349,10 @@ "execution_count": 21, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.609304Z", - "iopub.status.busy": "2026-02-17T12:33:01.609189Z", - "iopub.status.idle": "2026-02-17T12:33:01.613951Z", - "shell.execute_reply": "2026-02-17T12:33:01.613323Z" + "iopub.execute_input": "2026-10-06T09:57:19.817170Z", + "iopub.status.busy": "2026-10-06T09:57:19.817065Z", + "iopub.status.idle": "2026-10-06T09:57:19.820231Z", + "shell.execute_reply": "2026-10-06T09:57:19.819477Z" } }, "outputs": [], @@ -1362,10 +1372,10 @@ "execution_count": 22, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.615202Z", - "iopub.status.busy": "2026-02-17T12:33:01.615079Z", - "iopub.status.idle": "2026-02-17T12:33:01.619954Z", - "shell.execute_reply": "2026-02-17T12:33:01.619238Z" + "iopub.execute_input": "2026-10-06T09:57:19.821528Z", + "iopub.status.busy": "2026-10-06T09:57:19.821410Z", + "iopub.status.idle": "2026-10-06T09:57:19.824839Z", + "shell.execute_reply": "2026-10-06T09:57:19.824060Z" } }, "outputs": [], @@ -1393,10 +1403,10 @@ "execution_count": 23, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.621213Z", - "iopub.status.busy": "2026-02-17T12:33:01.621092Z", - "iopub.status.idle": "2026-02-17T12:33:01.623610Z", - "shell.execute_reply": "2026-02-17T12:33:01.622967Z" + "iopub.execute_input": "2026-10-06T09:57:19.826299Z", + "iopub.status.busy": "2026-10-06T09:57:19.826172Z", + "iopub.status.idle": "2026-10-06T09:57:19.828654Z", + "shell.execute_reply": "2026-10-06T09:57:19.827968Z" } }, "outputs": [], @@ -1427,10 +1437,10 @@ "execution_count": 24, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.624868Z", - "iopub.status.busy": "2026-02-17T12:33:01.624757Z", - "iopub.status.idle": "2026-02-17T12:33:01.629407Z", - "shell.execute_reply": "2026-02-17T12:33:01.628722Z" + "iopub.execute_input": "2026-10-06T09:57:19.830147Z", + "iopub.status.busy": "2026-10-06T09:57:19.830032Z", + "iopub.status.idle": "2026-10-06T09:57:19.833595Z", + "shell.execute_reply": "2026-10-06T09:57:19.832812Z" } }, "outputs": [], @@ -1458,10 +1468,10 @@ "execution_count": 25, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.630769Z", - "iopub.status.busy": "2026-02-17T12:33:01.630644Z", - "iopub.status.idle": "2026-02-17T12:33:01.635217Z", - "shell.execute_reply": "2026-02-17T12:33:01.634580Z" + "iopub.execute_input": "2026-10-06T09:57:19.834929Z", + "iopub.status.busy": "2026-10-06T09:57:19.834816Z", + "iopub.status.idle": "2026-10-06T09:57:19.838352Z", + "shell.execute_reply": "2026-10-06T09:57:19.837656Z" } }, "outputs": [], @@ -1505,10 +1515,10 @@ "execution_count": 26, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:01.636582Z", - "iopub.status.busy": "2026-02-17T12:33:01.636438Z", - "iopub.status.idle": "2026-02-17T12:33:02.190808Z", - "shell.execute_reply": "2026-02-17T12:33:02.189784Z" + "iopub.execute_input": "2026-10-06T09:57:19.839999Z", + "iopub.status.busy": "2026-10-06T09:57:19.839883Z", + "iopub.status.idle": "2026-10-06T09:57:20.373075Z", + "shell.execute_reply": "2026-10-06T09:57:20.372239Z" } }, "outputs": [ @@ -1516,7 +1526,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- Job _awEgk__eRY_Dpt1YnRXK0Q.gms Start 02/17/26 13:33:01 52.5.0 9bc771bf LEX-LEG x86 64bit/Linux\n" + "--- Job _eAl_qrTqQLersipXc5g2Sw.gms Start 10/06/26 11:57:19 54.5.0 f2bc4e68 LEX-LEG x86 64bit/Linux\n" ] }, { @@ -1530,14 +1540,14 @@ "name": "stdout", "output_type": "stream", "text": [ - " /home/andre/cuoptlink-builder/venv/lib/python3.12/site-packages/gamspy_base/gmsprmun.txt\n" + " /home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base/gmsprmun.txt\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " /home/andre/cuoptlink-builder/venv/lib/python3.12/site-packages/gamspy_base/gamsconfig.yaml\n" + " /home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base/gamsconfig.yaml\n" ] }, { @@ -1558,28 +1568,28 @@ "name": "stdout", "output_type": "stream", "text": [ - " Input /tmp/tmp69x_9ilt/_awEgk__eRY_Dpt1YnRXK0Q.gms\n" + " Input /tmp/tmph8_btntm/_eAl_qrTqQLersipXc5g2Sw.gms\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " Output /tmp/tmp69x_9ilt/_awEgk__eRY_Dpt1YnRXK0Q.lst\n" + " Output /tmp/tmph8_btntm/_eAl_qrTqQLersipXc5g2Sw.lst\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " ScrDir /tmp/tmp69x_9ilt/tmp9fvz4tfq/\n" + " ScrDir /tmp/tmph8_btntm/tmpruzbgccr/\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " SysDir /home/andre/cuoptlink-builder/venv/lib/python3.12/site-packages/gamspy_base/\n" + " SysDir /home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base/\n" ] }, { @@ -1593,14 +1603,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " Trace /tmp/tmp69x_9ilt/_awEgk__eRY_Dpt1YnRXK0Q.txt\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " License /home/andre/.local/share/GAMSPy/gamspy_license.txt\n" + " License /home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base/gamslice.txt\n" ] }, { @@ -1614,7 +1617,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " OptDir /tmp/tmp69x_9ilt/\n" + " OptDir /tmp/tmph8_btntm/\n" ] }, { @@ -1635,70 +1638,70 @@ "name": "stdout", "output_type": "stream", "text": [ - " TraceOpt 3\n" + " GDX /tmp/tmph8_btntm/_eAl_qrTqQLersipXc5g2Swout.gdx\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " GDX /tmp/tmp69x_9ilt/_awEgk__eRY_Dpt1YnRXK0Qout.gdx\n" + " SolPrint 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " SolPrint 0\n" + " SolveLink 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " SolveLink 2\n" + " PreviousWork 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " PreviousWork 1\n" + " gdxSymbols newOrChangedNoData\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " gdxSymbols newOrChanged\n" + "System information: 10 physical cores and 24 Gb physical memory detected\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "System information: 10 physical cores and 16 Gb physical memory detected\n" + "--- Starting compilation\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- Starting compilation\n" + "--- _eAl_qrTqQLersipXc5g2Sw.gms(63) 4 Mb\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- _awEgk__eRY_Dpt1YnRXK0Q.gms(71) 4 Mb\n" + "--- Starting execution: elapsed 0:00:00.001\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- Starting execution: elapsed 0:00:00.000\n" + "--- _eAl_qrTqQLersipXc5g2Sw.gms(200) 4 Mb\n" ] }, { @@ -1712,7 +1715,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- _awEgk__eRY_Dpt1YnRXK0Q.gms(142) 4 Mb\n" + "--- _eAl_qrTqQLersipXc5g2Sw.gms(201) 4 Mb\n" ] }, { @@ -1754,98 +1757,98 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- Executing CUOPT (Solvelink=2): elapsed 0:00:00.002\n" + "--- Executing CUOPT (Solvelink=2): elapsed 0:00:00.001\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "GAMS/cuOpt link was built against cuOpt version: 26.02.00, git hash: f73da24defcfc405317c0ae409a965fcaf7f58d9\n" + "GAMS/cuOpt link was built against cuOpt version: 26.08.00, git hash: 400863c1a92914bd47f5d68245f9a00e2d0d2df4\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Reading parameter(s) from \"/tmp/tmp69x_9ilt/cuopt.opt\"\n" + "Using cuOpt library version: 26.08.00\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - ">> method 1\n" + "Reading parameter(s) from \"/tmp/tmph8_btntm/cuopt.opt\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - ">> crossover 0\n" + ">> method 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Finished reading from \"/tmp/tmp69x_9ilt/cuopt.opt\"\n" + ">> crossover 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting parameter method to 1\n" + "Finished reading from \"/tmp/tmph8_btntm/cuopt.opt\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting parameter crossover to false\n" + "Setting parameter method to 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting parameter log_file to /tmp/tmp69x_9ilt/tmp9fvz4tfq/cuopt.dat\n" + "Setting parameter crossover to false\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "cuOpt version: 26.2.0, git hash: f73da24d, host arch: x86_64, device archs: 70-real,75-real,80-real,86-real,90a-real,100f-real,120a-real,120\n" + "Setting parameter log_file to /tmp/tmph8_btntm/tmpruzbgccr/cuopt.dat\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "CPU: 13th Gen Intel(R) Core(TM) i7-13700H, threads (physical/logical): 10/20, RAM: 6.53 GiB\n" + "cuOpt version: 26.8.0, git hash: 400863c1, host arch: x86_64, device archs: 70-real,75-real,80-real,86-real,90a-real,100f-real,120a-real,120\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "CUDA 12.9, device: NVIDIA RTX A1000 6GB Laptop GPU (ID 0), VRAM: 6.00 GiB\n" + "CPU: 13th Gen Intel(R) Core(TM) i7-13700H, threads (physical/logical): 10/20, RAM (available/total): 19.95 / 23.47 GiB\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "CUDA device UUID: 542affffffe55e-08ffffffe0-0257-fffff\n" + "CUDA 12.9, device: NVIDIA RTX A1000 6GB Laptop GPU (ID 0), VRAM: 6.00 GiB\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n" + "CUDA device UUID: 542ae55e-08e0-0257-e3e5-6ac1f557fd25\n" ] }, { @@ -1915,7 +1918,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "PSLP presolve time: 0.02s\n" + "PSLP presolve time: 0.04s\n" ] }, { @@ -1999,7 +2002,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Status: Optimal Objective: 1.53697337e+02 Iterations: 420 Time: 0.123s\n" + "Status: Optimal Objective: 1.53697337e+02 Iterations: 420 Time: 0.124s\n" ] }, { @@ -2013,28 +2016,35 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- Executing after solve: elapsed 0:00:00.539\n" + "--- Executing after solve: elapsed 0:00:00.524\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- _awEgk__eRY_Dpt1YnRXK0Q.gms(143) 4 Mb\n" + "--- _eAl_qrTqQLersipXc5g2Sw.gms(204) 4 Mb\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- _awEgk__eRY_Dpt1YnRXK0Q.gms(201) 4 Mb\n" + "--- _eAl_qrTqQLersipXc5g2Sw.gms(234) 4 Mb\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- GDX File /tmp/tmp69x_9ilt/_awEgk__eRY_Dpt1YnRXK0Qout.gdx\n" + "--- GDX File (execute_unload) /tmp/tmph8_btntm/__VoBAq1uT72FOWQM_Ugojw.gdx\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- GDX File /tmp/tmph8_btntm/_eAl_qrTqQLersipXc5g2Swout.gdx\n" ] }, { @@ -2048,7 +2058,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- Job _awEgk__eRY_Dpt1YnRXK0Q.gms Stop 02/17/26 13:33:02 elapsed 0:00:00.540\n" + "--- Job _eAl_qrTqQLersipXc5g2Sw.gms Stop 10/06/26 11:57:20 elapsed 0:00:00.524\n" ] }, { @@ -2085,25 +2095,25 @@ " \n", " \n", " 0\n", - " Normal\n", + " NormalCompletion\n", " OptimalGlobal\n", " 153.697337\n", - " 6\n", - " 7\n", + " 6.0\n", + " 7.0\n", " LP\n", " CUOPT\n", - " 0.123\n", + " 0.523\n", " \n", " \n", "\n", "" ], "text/plain": [ - " Solver Status Model Status Objective Num of Equations \\\n", - "0 Normal OptimalGlobal 153.697337 6 \n", + " Solver Status Model Status Objective Num of Equations \\\n", + "0 NormalCompletion OptimalGlobal 153.697337 6.0 \n", "\n", " Num of Variables Model Type Solver Solver Time \n", - "0 7 LP CUOPT 0.123 " + "0 7.0 LP CUOPT 0.523 " ] }, "execution_count": 26, @@ -2133,10 +2143,10 @@ "execution_count": 27, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:02.192206Z", - "iopub.status.busy": "2026-02-17T12:33:02.192069Z", - "iopub.status.idle": "2026-02-17T12:33:02.201046Z", - "shell.execute_reply": "2026-02-17T12:33:02.200011Z" + "iopub.execute_input": "2026-10-06T09:57:20.374553Z", + "iopub.status.busy": "2026-10-06T09:57:20.374424Z", + "iopub.status.idle": "2026-10-06T09:57:20.381827Z", + "shell.execute_reply": "2026-10-06T09:57:20.381140Z" } }, "outputs": [ @@ -2183,7 +2193,7 @@ " seattle\n", " new-york\n", " 49.736445\n", - " 0.0\n", + " -6.113223e-07\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2191,7 +2201,7 @@ " \n", " chicago\n", " 300.095559\n", - " 0.0\n", + " -3.299668e-07\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2199,7 +2209,7 @@ " \n", " topeka\n", " 0.000000\n", - " 0.0\n", + " 3.599978e-02\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2208,7 +2218,7 @@ " san-diego\n", " new-york\n", " 275.296520\n", - " 0.0\n", + " -6.113223e-07\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2216,7 +2226,7 @@ " \n", " chicago\n", " 0.000000\n", - " 0.0\n", + " 8.999670e-03\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2224,7 +2234,7 @@ " \n", " topeka\n", " 275.002378\n", - " 0.0\n", + " -2.164316e-07\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2234,14 +2244,14 @@ "" ], "text/plain": [ - " level marginal lower upper scale\n", - "i j \n", - "seattle new-york 49.736445 0.0 0.0 inf 1.0\n", - " chicago 300.095559 0.0 0.0 inf 1.0\n", - " topeka 0.000000 0.0 0.0 inf 1.0\n", - "san-diego new-york 275.296520 0.0 0.0 inf 1.0\n", - " chicago 0.000000 0.0 0.0 inf 1.0\n", - " topeka 275.002378 0.0 0.0 inf 1.0" + " level marginal lower upper scale\n", + "i j \n", + "seattle new-york 49.736445 -6.113223e-07 0.0 inf 1.0\n", + " chicago 300.095559 -3.299668e-07 0.0 inf 1.0\n", + " topeka 0.000000 3.599978e-02 0.0 inf 1.0\n", + "san-diego new-york 275.296520 -6.113223e-07 0.0 inf 1.0\n", + " chicago 0.000000 8.999670e-03 0.0 inf 1.0\n", + " topeka 275.002378 -2.164316e-07 0.0 inf 1.0" ] }, "execution_count": 27, @@ -2273,10 +2283,10 @@ "execution_count": 28, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:33:02.202656Z", - "iopub.status.busy": "2026-02-17T12:33:02.202509Z", - "iopub.status.idle": "2026-02-17T12:33:02.205762Z", - "shell.execute_reply": "2026-02-17T12:33:02.205074Z" + "iopub.execute_input": "2026-10-06T09:57:20.383261Z", + "iopub.status.busy": "2026-10-06T09:57:20.383134Z", + "iopub.status.idle": "2026-10-06T09:57:20.386065Z", + "shell.execute_reply": "2026-10-06T09:57:20.385371Z" } }, "outputs": [ @@ -2321,7 +2331,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.14.4" } }, "nbformat": 4, diff --git a/examples/trnsport_cuopt_cu13.ipynb b/examples/trnsport_cuopt_cu13.ipynb index 6f76a5a..af65cbb 100644 --- a/examples/trnsport_cuopt_cu13.ipynb +++ b/examples/trnsport_cuopt_cu13.ipynb @@ -5,10 +5,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:35:19.590621Z", - "iopub.status.busy": "2026-02-17T12:35:19.590495Z", - "iopub.status.idle": "2026-02-17T12:38:38.561774Z", - "shell.execute_reply": "2026-02-17T12:38:38.560708Z" + "iopub.execute_input": "2026-10-06T09:57:29.528122Z", + "iopub.status.busy": "2026-10-06T09:57:29.528000Z", + "iopub.status.idle": "2026-10-06T09:59:07.807284Z", + "shell.execute_reply": "2026-10-06T09:59:07.805990Z" }, "vscode": { "languageId": "shellscript" @@ -16,29 +16,39 @@ }, "outputs": [ { - "data": { - "text/plain": [ - "CompletedProcess(args='unzip -q -o cuopt-link-release-cu13-x86_64.zip -d /home/andre/cuoptlink-builder/venv/lib/python3.12/site-packages/gamspy_base', returncode=0)" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing `cuopt` from release `v0.0.8e`...\n", + "cuopt-link-release-cu13-x86_64.zip: 100% (662.5MB/662.5MB)\n", + "cu13-runtime-x86_64.zip: 100% (890.9MB/890.9MB)\n", + "Merged `gamsconfig_cuopt.yaml` into `gamsconfig.yaml`.\n", + "Successfully installed `cuopt` into `/home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base`.\n", + "Testing installation with a small LP model...\n", + "Installation test completed successfully!\n", + " \n" + ] } ], "source": [ "# remove -q to debug issues with pip installs\n", + "import os\n", "import subprocess\n", "import sys\n", - "import os\n", + "import tempfile\n", + "import urllib.request\n", "cuversion = 13\n", - "cputype = 'x86_64' if os.uname().machine == 'x86_64' else 'arm64'\n", "!pip install -q gamspy\n", "gams_base_path = subprocess.check_output([sys.executable, '-m', 'gamspy', 'show', 'base']).decode('utf-8').strip()\n", - "subprocess.run(f'wget -nc -nv -q \"https://github.com/GAMS-dev/cuoptlink-builder/releases/latest/download/cu{cuversion}-runtime-{cputype}.zip\"', shell=True, check=True)\n", - "subprocess.run(f'wget -nc -nv -q \"https://github.com/GAMS-dev/cuoptlink-builder/releases/latest/download/cuopt-link-release-cu{cuversion}-{cputype}.zip\"', shell=True, check=True)\n", - "subprocess.run(f\"unzip -q -o cu{cuversion}-runtime-{cputype}.zip -d {gams_base_path}\", shell=True, check=True)\n", - "subprocess.run(f\"unzip -q -o cuopt-link-release-cu{cuversion}-{cputype}.zip -d {gams_base_path}\", shell=True, check=True)" + "# fetch-cuoptlink.py downloads the cuOpt link and CUDA runtime, registers cuOpt in gamsconfig.yaml and runs a test solve\n", + "if not os.path.exists(os.path.join(gams_base_path, '.cuopt_installed_files.txt')):\n", + " with tempfile.TemporaryDirectory() as tmp:\n", + " script = os.path.join(tmp, 'fetch-cuoptlink.py')\n", + " urllib.request.urlretrieve('https://raw.githubusercontent.com/GAMS-dev/cuoptlink-builder/main/fetch-cuoptlink.py', script)\n", + " r = subprocess.run([sys.executable, script, 'install', '-g', gams_base_path, '-c', str(cuversion), '--cuda-runtime'], capture_output=True)\n", + " # only keep the final state of the download progress lines\n", + " print('\\n'.join(line.rsplit('\\r', 1)[-1] for line in r.stdout.decode().split('\\n')), r.stderr.decode())\n", + " r.check_returncode()" ] }, { @@ -97,10 +107,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:38.588255Z", - "iopub.status.busy": "2026-02-17T12:38:38.588033Z", - "iopub.status.idle": "2026-02-17T12:38:38.919610Z", - "shell.execute_reply": "2026-02-17T12:38:38.918456Z" + "iopub.execute_input": "2026-10-06T09:59:07.826591Z", + "iopub.status.busy": "2026-10-06T09:59:07.826392Z", + "iopub.status.idle": "2026-10-06T09:59:07.983355Z", + "shell.execute_reply": "2026-10-06T09:59:07.982303Z" } }, "outputs": [ @@ -172,10 +182,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:38.921292Z", - "iopub.status.busy": "2026-02-17T12:38:38.921079Z", - "iopub.status.idle": "2026-02-17T12:38:38.926872Z", - "shell.execute_reply": "2026-02-17T12:38:38.925828Z" + "iopub.execute_input": "2026-10-06T09:59:07.985109Z", + "iopub.status.busy": "2026-10-06T09:59:07.984979Z", + "iopub.status.idle": "2026-10-06T09:59:07.990029Z", + "shell.execute_reply": "2026-10-06T09:59:07.989214Z" } }, "outputs": [ @@ -250,10 +260,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:38.928551Z", - "iopub.status.busy": "2026-02-17T12:38:38.928399Z", - "iopub.status.idle": "2026-02-17T12:38:38.936617Z", - "shell.execute_reply": "2026-02-17T12:38:38.935479Z" + "iopub.execute_input": "2026-10-06T09:59:07.991676Z", + "iopub.status.busy": "2026-10-06T09:59:07.991561Z", + "iopub.status.idle": "2026-10-06T09:59:07.997416Z", + "shell.execute_reply": "2026-10-06T09:59:07.996687Z" } }, "outputs": [ @@ -355,10 +365,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:38.938165Z", - "iopub.status.busy": "2026-02-17T12:38:38.938011Z", - "iopub.status.idle": "2026-02-17T12:38:38.940733Z", - "shell.execute_reply": "2026-02-17T12:38:38.939893Z" + "iopub.execute_input": "2026-10-06T09:59:07.998694Z", + "iopub.status.busy": "2026-10-06T09:59:07.998566Z", + "iopub.status.idle": "2026-10-06T09:59:08.000939Z", + "shell.execute_reply": "2026-10-06T09:59:08.000204Z" } }, "outputs": [], @@ -380,10 +390,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:38.942175Z", - "iopub.status.busy": "2026-02-17T12:38:38.942037Z", - "iopub.status.idle": "2026-02-17T12:38:39.079857Z", - "shell.execute_reply": "2026-02-17T12:38:39.078886Z" + "iopub.execute_input": "2026-10-06T09:59:08.002323Z", + "iopub.status.busy": "2026-10-06T09:59:08.002206Z", + "iopub.status.idle": "2026-10-06T09:59:08.105213Z", + "shell.execute_reply": "2026-10-06T09:59:08.104547Z" } }, "outputs": [], @@ -405,10 +415,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.081483Z", - "iopub.status.busy": "2026-02-17T12:38:39.081335Z", - "iopub.status.idle": "2026-02-17T12:38:39.093091Z", - "shell.execute_reply": "2026-02-17T12:38:39.092233Z" + "iopub.execute_input": "2026-10-06T09:59:08.107449Z", + "iopub.status.busy": "2026-10-06T09:59:08.107290Z", + "iopub.status.idle": "2026-10-06T09:59:08.133286Z", + "shell.execute_reply": "2026-10-06T09:59:08.132426Z" } }, "outputs": [], @@ -442,10 +452,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.094798Z", - "iopub.status.busy": "2026-02-17T12:38:39.094616Z", - "iopub.status.idle": "2026-02-17T12:38:39.107075Z", - "shell.execute_reply": "2026-02-17T12:38:39.106072Z" + "iopub.execute_input": "2026-10-06T09:59:08.134843Z", + "iopub.status.busy": "2026-10-06T09:59:08.134717Z", + "iopub.status.idle": "2026-10-06T09:59:08.144318Z", + "shell.execute_reply": "2026-10-06T09:59:08.143495Z" } }, "outputs": [], @@ -466,10 +476,10 @@ "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.108525Z", - "iopub.status.busy": "2026-02-17T12:38:39.108409Z", - "iopub.status.idle": "2026-02-17T12:38:39.115720Z", - "shell.execute_reply": "2026-02-17T12:38:39.114858Z" + "iopub.execute_input": "2026-10-06T09:59:08.145830Z", + "iopub.status.busy": "2026-10-06T09:59:08.145709Z", + "iopub.status.idle": "2026-10-06T09:59:08.150969Z", + "shell.execute_reply": "2026-10-06T09:59:08.150301Z" }, "tags": [] }, @@ -496,10 +506,10 @@ "execution_count": 10, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.117285Z", - "iopub.status.busy": "2026-02-17T12:38:39.117143Z", - "iopub.status.idle": "2026-02-17T12:38:39.121848Z", - "shell.execute_reply": "2026-02-17T12:38:39.121107Z" + "iopub.execute_input": "2026-10-06T09:59:08.152529Z", + "iopub.status.busy": "2026-10-06T09:59:08.152401Z", + "iopub.status.idle": "2026-10-06T09:59:08.156348Z", + "shell.execute_reply": "2026-10-06T09:59:08.155624Z" } }, "outputs": [ @@ -563,10 +573,10 @@ "execution_count": 11, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.123519Z", - "iopub.status.busy": "2026-02-17T12:38:39.123292Z", - "iopub.status.idle": "2026-02-17T12:38:39.127695Z", - "shell.execute_reply": "2026-02-17T12:38:39.126977Z" + "iopub.execute_input": "2026-10-06T09:59:08.157825Z", + "iopub.status.busy": "2026-10-06T09:59:08.157716Z", + "iopub.status.idle": "2026-10-06T09:59:08.161597Z", + "shell.execute_reply": "2026-10-06T09:59:08.160692Z" } }, "outputs": [ @@ -647,10 +657,10 @@ "execution_count": 12, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.129111Z", - "iopub.status.busy": "2026-02-17T12:38:39.128984Z", - "iopub.status.idle": "2026-02-17T12:38:39.138726Z", - "shell.execute_reply": "2026-02-17T12:38:39.137805Z" + "iopub.execute_input": "2026-10-06T09:59:08.163099Z", + "iopub.status.busy": "2026-10-06T09:59:08.162945Z", + "iopub.status.idle": "2026-10-06T09:59:08.169762Z", + "shell.execute_reply": "2026-10-06T09:59:08.168716Z" } }, "outputs": [ @@ -721,10 +731,10 @@ "execution_count": 13, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.140177Z", - "iopub.status.busy": "2026-02-17T12:38:39.140046Z", - "iopub.status.idle": "2026-02-17T12:38:39.149390Z", - "shell.execute_reply": "2026-02-17T12:38:39.148315Z" + "iopub.execute_input": "2026-10-06T09:59:08.171459Z", + "iopub.status.busy": "2026-10-06T09:59:08.171301Z", + "iopub.status.idle": "2026-10-06T09:59:08.179020Z", + "shell.execute_reply": "2026-10-06T09:59:08.178242Z" } }, "outputs": [ @@ -801,10 +811,10 @@ "execution_count": 14, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.150767Z", - "iopub.status.busy": "2026-02-17T12:38:39.150604Z", - "iopub.status.idle": "2026-02-17T12:38:39.155045Z", - "shell.execute_reply": "2026-02-17T12:38:39.154350Z" + "iopub.execute_input": "2026-10-06T09:59:08.180378Z", + "iopub.status.busy": "2026-10-06T09:59:08.180267Z", + "iopub.status.idle": "2026-10-06T09:59:08.182672Z", + "shell.execute_reply": "2026-10-06T09:59:08.181943Z" } }, "outputs": [], @@ -840,10 +850,10 @@ "execution_count": 15, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.156791Z", - "iopub.status.busy": "2026-02-17T12:38:39.156662Z", - "iopub.status.idle": "2026-02-17T12:38:39.162127Z", - "shell.execute_reply": "2026-02-17T12:38:39.161332Z" + "iopub.execute_input": "2026-10-06T09:59:08.183976Z", + "iopub.status.busy": "2026-10-06T09:59:08.183860Z", + "iopub.status.idle": "2026-10-06T09:59:08.189149Z", + "shell.execute_reply": "2026-10-06T09:59:08.188369Z" } }, "outputs": [ @@ -934,10 +944,10 @@ "execution_count": 16, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.163397Z", - "iopub.status.busy": "2026-02-17T12:38:39.163265Z", - "iopub.status.idle": "2026-02-17T12:38:39.174452Z", - "shell.execute_reply": "2026-02-17T12:38:39.173551Z" + "iopub.execute_input": "2026-10-06T09:59:08.190354Z", + "iopub.status.busy": "2026-10-06T09:59:08.190242Z", + "iopub.status.idle": "2026-10-06T09:59:08.197411Z", + "shell.execute_reply": "2026-10-06T09:59:08.196645Z" } }, "outputs": [ @@ -1042,10 +1052,10 @@ "execution_count": 17, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.175964Z", - "iopub.status.busy": "2026-02-17T12:38:39.175824Z", - "iopub.status.idle": "2026-02-17T12:38:39.186263Z", - "shell.execute_reply": "2026-02-17T12:38:39.185565Z" + "iopub.execute_input": "2026-10-06T09:59:08.198712Z", + "iopub.status.busy": "2026-10-06T09:59:08.198601Z", + "iopub.status.idle": "2026-10-06T09:59:08.205510Z", + "shell.execute_reply": "2026-10-06T09:59:08.204823Z" } }, "outputs": [ @@ -1147,10 +1157,10 @@ "execution_count": 18, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.187614Z", - "iopub.status.busy": "2026-02-17T12:38:39.187458Z", - "iopub.status.idle": "2026-02-17T12:38:39.196362Z", - "shell.execute_reply": "2026-02-17T12:38:39.195737Z" + "iopub.execute_input": "2026-10-06T09:59:08.206872Z", + "iopub.status.busy": "2026-10-06T09:59:08.206761Z", + "iopub.status.idle": "2026-10-06T09:59:08.213213Z", + "shell.execute_reply": "2026-10-06T09:59:08.212469Z" } }, "outputs": [ @@ -1262,10 +1272,10 @@ "execution_count": 19, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.198024Z", - "iopub.status.busy": "2026-02-17T12:38:39.197891Z", - "iopub.status.idle": "2026-02-17T12:38:39.202378Z", - "shell.execute_reply": "2026-02-17T12:38:39.201707Z" + "iopub.execute_input": "2026-10-06T09:59:08.214702Z", + "iopub.status.busy": "2026-10-06T09:59:08.214589Z", + "iopub.status.idle": "2026-10-06T09:59:08.217031Z", + "shell.execute_reply": "2026-10-06T09:59:08.216458Z" } }, "outputs": [], @@ -1305,10 +1315,10 @@ "execution_count": 20, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.203879Z", - "iopub.status.busy": "2026-02-17T12:38:39.203763Z", - "iopub.status.idle": "2026-02-17T12:38:39.210028Z", - "shell.execute_reply": "2026-02-17T12:38:39.209345Z" + "iopub.execute_input": "2026-10-06T09:59:08.218385Z", + "iopub.status.busy": "2026-10-06T09:59:08.218273Z", + "iopub.status.idle": "2026-10-06T09:59:08.220815Z", + "shell.execute_reply": "2026-10-06T09:59:08.220175Z" } }, "outputs": [], @@ -1342,10 +1352,10 @@ "execution_count": 21, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.211425Z", - "iopub.status.busy": "2026-02-17T12:38:39.211312Z", - "iopub.status.idle": "2026-02-17T12:38:39.216436Z", - "shell.execute_reply": "2026-02-17T12:38:39.215529Z" + "iopub.execute_input": "2026-10-06T09:59:08.222143Z", + "iopub.status.busy": "2026-10-06T09:59:08.222018Z", + "iopub.status.idle": "2026-10-06T09:59:08.225503Z", + "shell.execute_reply": "2026-10-06T09:59:08.224799Z" } }, "outputs": [], @@ -1365,10 +1375,10 @@ "execution_count": 22, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.217768Z", - "iopub.status.busy": "2026-02-17T12:38:39.217632Z", - "iopub.status.idle": "2026-02-17T12:38:39.223344Z", - "shell.execute_reply": "2026-02-17T12:38:39.222439Z" + "iopub.execute_input": "2026-10-06T09:59:08.226820Z", + "iopub.status.busy": "2026-10-06T09:59:08.226712Z", + "iopub.status.idle": "2026-10-06T09:59:08.229793Z", + "shell.execute_reply": "2026-10-06T09:59:08.229106Z" } }, "outputs": [], @@ -1396,10 +1406,10 @@ "execution_count": 23, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.224824Z", - "iopub.status.busy": "2026-02-17T12:38:39.224693Z", - "iopub.status.idle": "2026-02-17T12:38:39.227300Z", - "shell.execute_reply": "2026-02-17T12:38:39.226581Z" + "iopub.execute_input": "2026-10-06T09:59:08.231299Z", + "iopub.status.busy": "2026-10-06T09:59:08.231186Z", + "iopub.status.idle": "2026-10-06T09:59:08.233489Z", + "shell.execute_reply": "2026-10-06T09:59:08.232830Z" } }, "outputs": [], @@ -1430,10 +1440,10 @@ "execution_count": 24, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.228602Z", - "iopub.status.busy": "2026-02-17T12:38:39.228481Z", - "iopub.status.idle": "2026-02-17T12:38:39.233272Z", - "shell.execute_reply": "2026-02-17T12:38:39.232477Z" + "iopub.execute_input": "2026-10-06T09:59:08.234755Z", + "iopub.status.busy": "2026-10-06T09:59:08.234648Z", + "iopub.status.idle": "2026-10-06T09:59:08.238030Z", + "shell.execute_reply": "2026-10-06T09:59:08.237266Z" } }, "outputs": [], @@ -1461,10 +1471,10 @@ "execution_count": 25, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.234531Z", - "iopub.status.busy": "2026-02-17T12:38:39.234417Z", - "iopub.status.idle": "2026-02-17T12:38:39.238920Z", - "shell.execute_reply": "2026-02-17T12:38:39.238117Z" + "iopub.execute_input": "2026-10-06T09:59:08.239548Z", + "iopub.status.busy": "2026-10-06T09:59:08.239426Z", + "iopub.status.idle": "2026-10-06T09:59:08.242890Z", + "shell.execute_reply": "2026-10-06T09:59:08.242090Z" } }, "outputs": [], @@ -1508,10 +1518,10 @@ "execution_count": 26, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.240259Z", - "iopub.status.busy": "2026-02-17T12:38:39.240134Z", - "iopub.status.idle": "2026-02-17T12:38:39.843192Z", - "shell.execute_reply": "2026-02-17T12:38:39.842442Z" + "iopub.execute_input": "2026-10-06T09:59:08.244303Z", + "iopub.status.busy": "2026-10-06T09:59:08.244179Z", + "iopub.status.idle": "2026-10-06T09:59:08.677503Z", + "shell.execute_reply": "2026-10-06T09:59:08.676670Z" } }, "outputs": [ @@ -1519,7 +1529,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- Job _wzUGve_OSG2F5FU6ucswQw.gms Start 02/17/26 13:38:39 52.5.0 9bc771bf LEX-LEG x86 64bit/Linux\n" + "--- Job _7DXlVK8tSTGbk7_j2mSXkw.gms Start 10/06/26 11:59:08 54.5.0 f2bc4e68 LEX-LEG x86 64bit/Linux\n" ] }, { @@ -1533,14 +1543,14 @@ "name": "stdout", "output_type": "stream", "text": [ - " /home/andre/cuoptlink-builder/venv/lib/python3.12/site-packages/gamspy_base/gmsprmun.txt\n" + " /home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base/gmsprmun.txt\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " /home/andre/cuoptlink-builder/venv/lib/python3.12/site-packages/gamspy_base/gamsconfig.yaml\n" + " /home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base/gamsconfig.yaml\n" ] }, { @@ -1561,28 +1571,28 @@ "name": "stdout", "output_type": "stream", "text": [ - " Input /tmp/tmpqreijagx/_wzUGve_OSG2F5FU6ucswQw.gms\n" + " Input /tmp/tmp3mg4pv73/_7DXlVK8tSTGbk7_j2mSXkw.gms\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " Output /tmp/tmpqreijagx/_wzUGve_OSG2F5FU6ucswQw.lst\n" + " Output /tmp/tmp3mg4pv73/_7DXlVK8tSTGbk7_j2mSXkw.lst\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " ScrDir /tmp/tmpqreijagx/tmpxscxla_u/\n" + " ScrDir /tmp/tmp3mg4pv73/tmpvuivjwas/\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " SysDir /home/andre/cuoptlink-builder/venv/lib/python3.12/site-packages/gamspy_base/\n" + " SysDir /home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base/\n" ] }, { @@ -1596,14 +1606,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " Trace /tmp/tmpqreijagx/_wzUGve_OSG2F5FU6ucswQw.txt\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " License /home/andre/.local/share/GAMSPy/gamspy_license.txt\n" + " License /home/andre/cuoptlink-builder/venv/lib/python3.14/site-packages/gamspy_base/gamslice.txt\n" ] }, { @@ -1617,7 +1620,7 @@ "name": "stdout", "output_type": "stream", "text": [ - " OptDir /tmp/tmpqreijagx/\n" + " OptDir /tmp/tmp3mg4pv73/\n" ] }, { @@ -1638,70 +1641,70 @@ "name": "stdout", "output_type": "stream", "text": [ - " TraceOpt 3\n" + " GDX /tmp/tmp3mg4pv73/_7DXlVK8tSTGbk7_j2mSXkwout.gdx\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " GDX /tmp/tmpqreijagx/_wzUGve_OSG2F5FU6ucswQwout.gdx\n" + " SolPrint 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " SolPrint 0\n" + " SolveLink 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " SolveLink 2\n" + " PreviousWork 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " PreviousWork 1\n" + " gdxSymbols newOrChangedNoData\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " gdxSymbols newOrChanged\n" + "System information: 10 physical cores and 24 Gb physical memory detected\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "System information: 10 physical cores and 16 Gb physical memory detected\n" + "--- Starting compilation\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- Starting compilation\n" + "--- _7DXlVK8tSTGbk7_j2mSXkw.gms(63) 4 Mb\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- _wzUGve_OSG2F5FU6ucswQw.gms(71) 4 Mb\n" + "--- Starting execution: elapsed 0:00:00.000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- Starting execution: elapsed 0:00:00.000\n" + "--- _7DXlVK8tSTGbk7_j2mSXkw.gms(200) 4 Mb\n" ] }, { @@ -1715,7 +1718,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- _wzUGve_OSG2F5FU6ucswQw.gms(142) 4 Mb\n" + "--- _7DXlVK8tSTGbk7_j2mSXkw.gms(201) 4 Mb\n" ] }, { @@ -1764,91 +1767,91 @@ "name": "stdout", "output_type": "stream", "text": [ - "GAMS/cuOpt link was built against cuOpt version: 26.02.00, git hash: f73da24defcfc405317c0ae409a965fcaf7f58d9\n" + "GAMS/cuOpt link was built against cuOpt version: 26.08.00, git hash: 400863c1a92914bd47f5d68245f9a00e2d0d2df4\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Reading parameter(s) from \"/tmp/tmpqreijagx/cuopt.opt\"\n" + "Using cuOpt library version: 26.08.00\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - ">> method 1\n" + "Reading parameter(s) from \"/tmp/tmp3mg4pv73/cuopt.opt\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - ">> crossover 0\n" + ">> method 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Finished reading from \"/tmp/tmpqreijagx/cuopt.opt\"\n" + ">> crossover 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting parameter method to 1\n" + "Finished reading from \"/tmp/tmp3mg4pv73/cuopt.opt\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting parameter crossover to false\n" + "Setting parameter method to 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting parameter log_file to /tmp/tmpqreijagx/tmpxscxla_u/cuopt.dat\n" + "Setting parameter crossover to false\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "cuOpt version: 26.2.0, git hash: f73da24d, host arch: x86_64, device archs: 75-real,80-real,86-real,90a-real,100f-real,120a-real,120\n" + "Setting parameter log_file to /tmp/tmp3mg4pv73/tmpvuivjwas/cuopt.dat\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "CPU: 13th Gen Intel(R) Core(TM) i7-13700H, threads (physical/logical): 10/20, RAM: 6.92 GiB\n" + "cuOpt version: 26.8.0, git hash: 400863c1, host arch: x86_64, device archs: 75-real,80-real,86-real,90a-real,100f-real,120a-real,120\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "CUDA 13.1, device: NVIDIA RTX A1000 6GB Laptop GPU (ID 0), VRAM: 6.00 GiB\n" + "CPU: 13th Gen Intel(R) Core(TM) i7-13700H, threads (physical/logical): 10/20, RAM (available/total): 19.96 / 23.47 GiB\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "CUDA device UUID: 542affffffe55e-08ffffffe0-0257-fffff\n" + "CUDA 13.3, device: NVIDIA RTX A1000 6GB Laptop GPU (ID 0), VRAM: 6.00 GiB\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n" + "CUDA device UUID: 542ae55e-08e0-0257-e3e5-6ac1f557fd25\n" ] }, { @@ -1918,7 +1921,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "PSLP presolve time: 0.07s\n" + "PSLP presolve time: 0.04s\n" ] }, { @@ -1939,14 +1942,14 @@ "name": "stdout", "output_type": "stream", "text": [ - " 0 +0.00000000e+00 +0.00000000e+00 0.00e+00 5.21e+02 4.39e-01 0.133s\n" + " 0 +0.00000000e+00 +0.00000000e+00 0.00e+00 5.21e+02 4.39e-01 0.086s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 420 +1.53697337e+02 +1.53675357e+02 2.20e-02 0.00e+00 9.60e-06 0.181s\n" + " 420 +1.53697337e+02 +1.53675357e+02 2.20e-02 0.00e+00 9.60e-06 0.129s\n" ] }, { @@ -2002,7 +2005,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Status: Optimal Objective: 1.53697337e+02 Iterations: 420 Time: 0.183s\n" + "Status: Optimal Objective: 1.53697337e+02 Iterations: 420 Time: 0.136s\n" ] }, { @@ -2016,28 +2019,35 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- Executing after solve: elapsed 0:00:00.589\n" + "--- Executing after solve: elapsed 0:00:00.421\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- _wzUGve_OSG2F5FU6ucswQw.gms(143) 4 Mb\n" + "--- _7DXlVK8tSTGbk7_j2mSXkw.gms(204) 4 Mb\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- _wzUGve_OSG2F5FU6ucswQw.gms(201) 4 Mb\n" + "--- _7DXlVK8tSTGbk7_j2mSXkw.gms(234) 4 Mb\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "--- GDX File /tmp/tmpqreijagx/_wzUGve_OSG2F5FU6ucswQwout.gdx\n" + "--- GDX File (execute_unload) /tmp/tmp3mg4pv73/_SdeKENNdRNubAfw7AL_iKQ.gdx\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--- GDX File /tmp/tmp3mg4pv73/_7DXlVK8tSTGbk7_j2mSXkwout.gdx\n" ] }, { @@ -2051,7 +2061,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "--- Job _wzUGve_OSG2F5FU6ucswQw.gms Stop 02/17/26 13:38:39 elapsed 0:00:00.589\n" + "--- Job _7DXlVK8tSTGbk7_j2mSXkw.gms Stop 10/06/26 11:59:08 elapsed 0:00:00.422\n" ] }, { @@ -2088,25 +2098,25 @@ " \n", " \n", " 0\n", - " Normal\n", + " NormalCompletion\n", " OptimalGlobal\n", " 153.697337\n", - " 6\n", - " 7\n", + " 6.0\n", + " 7.0\n", " LP\n", " CUOPT\n", - " 0.183\n", + " 0.421\n", " \n", " \n", "\n", "" ], "text/plain": [ - " Solver Status Model Status Objective Num of Equations \\\n", - "0 Normal OptimalGlobal 153.697337 6 \n", + " Solver Status Model Status Objective Num of Equations \\\n", + "0 NormalCompletion OptimalGlobal 153.697337 6.0 \n", "\n", " Num of Variables Model Type Solver Solver Time \n", - "0 7 LP CUOPT 0.183 " + "0 7.0 LP CUOPT 0.421 " ] }, "execution_count": 26, @@ -2136,10 +2146,10 @@ "execution_count": 27, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.844581Z", - "iopub.status.busy": "2026-02-17T12:38:39.844443Z", - "iopub.status.idle": "2026-02-17T12:38:39.852194Z", - "shell.execute_reply": "2026-02-17T12:38:39.851382Z" + "iopub.execute_input": "2026-10-06T09:59:08.678946Z", + "iopub.status.busy": "2026-10-06T09:59:08.678811Z", + "iopub.status.idle": "2026-10-06T09:59:08.687002Z", + "shell.execute_reply": "2026-10-06T09:59:08.686209Z" } }, "outputs": [ @@ -2186,7 +2196,7 @@ " seattle\n", " new-york\n", " 49.736445\n", - " 0.0\n", + " -6.113223e-07\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2194,7 +2204,7 @@ " \n", " chicago\n", " 300.095559\n", - " 0.0\n", + " -3.299668e-07\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2202,7 +2212,7 @@ " \n", " topeka\n", " 0.000000\n", - " 0.0\n", + " 3.599978e-02\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2211,7 +2221,7 @@ " san-diego\n", " new-york\n", " 275.296520\n", - " 0.0\n", + " -6.113223e-07\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2219,7 +2229,7 @@ " \n", " chicago\n", " 0.000000\n", - " 0.0\n", + " 8.999670e-03\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2227,7 +2237,7 @@ " \n", " topeka\n", " 275.002378\n", - " 0.0\n", + " -2.164316e-07\n", " 0.0\n", " inf\n", " 1.0\n", @@ -2237,14 +2247,14 @@ "" ], "text/plain": [ - " level marginal lower upper scale\n", - "i j \n", - "seattle new-york 49.736445 0.0 0.0 inf 1.0\n", - " chicago 300.095559 0.0 0.0 inf 1.0\n", - " topeka 0.000000 0.0 0.0 inf 1.0\n", - "san-diego new-york 275.296520 0.0 0.0 inf 1.0\n", - " chicago 0.000000 0.0 0.0 inf 1.0\n", - " topeka 275.002378 0.0 0.0 inf 1.0" + " level marginal lower upper scale\n", + "i j \n", + "seattle new-york 49.736445 -6.113223e-07 0.0 inf 1.0\n", + " chicago 300.095559 -3.299668e-07 0.0 inf 1.0\n", + " topeka 0.000000 3.599978e-02 0.0 inf 1.0\n", + "san-diego new-york 275.296520 -6.113223e-07 0.0 inf 1.0\n", + " chicago 0.000000 8.999670e-03 0.0 inf 1.0\n", + " topeka 275.002378 -2.164316e-07 0.0 inf 1.0" ] }, "execution_count": 27, @@ -2276,17 +2286,17 @@ "execution_count": 28, "metadata": { "execution": { - "iopub.execute_input": "2026-02-17T12:38:39.853551Z", - "iopub.status.busy": "2026-02-17T12:38:39.853428Z", - "iopub.status.idle": "2026-02-17T12:38:39.856361Z", - "shell.execute_reply": "2026-02-17T12:38:39.855732Z" + "iopub.execute_input": "2026-10-06T09:59:08.689364Z", + "iopub.status.busy": "2026-10-06T09:59:08.689225Z", + "iopub.status.idle": "2026-10-06T09:59:08.693112Z", + "shell.execute_reply": "2026-10-06T09:59:08.692382Z" } }, "outputs": [ { "data": { "text/plain": [ - "153.6973372476197" + "153.69733724761986" ] }, "execution_count": 28, @@ -2324,7 +2334,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.14.4" } }, "nbformat": 4, diff --git a/fetch-cuoptlink.py b/fetch-cuoptlink.py index 93f2c80..f3af2d3 100644 --- a/fetch-cuoptlink.py +++ b/fetch-cuoptlink.py @@ -32,6 +32,17 @@ SOLVER_CONFIG_SECTION = "solverConfig" MARKER_BEGIN = f"# begin {SOLVER_NAME} solver configuration of cuoptlink" MARKER_END = f"# end {SOLVER_NAME} solver configuration of cuoptlink" +# Embedded instead of fetched via gamslib, which GAMSPy's gamspy_base does not ship +TEST_MODEL = """Positive Variable x, y; +Variable z; +Equation e1, e2, obj; +e1.. x + 2*y =g= 2; +e2.. 3*x + y =g= 3; +obj.. z =e= x + y; +Model m /all/; +solve m using lp minimizing z; +abort$(m.modelStat <> %modelStat.optimal%) 'cuOpt did not solve the test model to optimality', m.modelStat; +""" def _get_manifest_path(gams_dir: str) -> str: @@ -710,22 +721,17 @@ def _remove_cuopt_from_config(gams_dir: str) -> None: def _test_installation(gams_dir: str) -> None: - print("Testing installation with GAMS trnsport model...") - gamslib_bin = os.path.join(gams_dir, "gamslib") + print("Testing installation with a small LP model...") gams_bin = os.path.join(gams_dir, "gams") with tempfile.TemporaryDirectory() as temp_dir: try: - # Fetch model 1 (trnsport) using gamslib - subprocess.run( - [gamslib_bin, "-q", "1"], - cwd=temp_dir, - check=True, - ) + with open(os.path.join(temp_dir, "cuopttest.gms"), "w", encoding="utf-8") as file: + file.write(TEST_MODEL) # Execute gams with cuopt solver subprocess.run( - [gams_bin, "trnsport", "solver=cuopt", "lo=0"], + [gams_bin, "cuopttest", "solver=cuopt", "lo=0"], cwd=temp_dir, check=True, )