{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "425dc338-e648-4607-baa7-974f6b548444",
   "metadata": {},
   "source": [
    "## Installation of a new environment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1ceb786d-4a83-4929-b8f3-712516016207",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-23T15:51:32.125939Z",
     "iopub.status.busy": "2025-05-23T15:51:32.123017Z",
     "iopub.status.idle": "2025-05-23T15:51:34.966463Z",
     "shell.execute_reply": "2025-05-23T15:51:34.962209Z",
     "shell.execute_reply.started": "2025-05-23T15:51:32.125737Z"
    }
   },
   "outputs": [],
   "source": [
    "# Create new venv\n",
    "!python3 -m venv ~/my_venvs/venv\n",
    "!source ~/my_venvs/venv/bin/activate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "02407861-eed5-4ef3-99de-9c373d8e0e42",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-23T15:53:10.412668Z",
     "iopub.status.busy": "2025-05-23T15:53:10.409665Z",
     "iopub.status.idle": "2025-05-23T15:55:07.728096Z",
     "shell.execute_reply": "2025-05-23T15:55:07.724399Z",
     "shell.execute_reply.started": "2025-05-23T15:53:10.412532Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting ipykernel\n",
      "  Using cached ipykernel-6.29.5-py3-none-any.whl.metadata (6.3 kB)\n",
      "Collecting comm>=0.1.1 (from ipykernel)\n",
      "  Using cached comm-0.2.2-py3-none-any.whl.metadata (3.7 kB)\n",
      "Collecting debugpy>=1.6.5 (from ipykernel)\n",
      "  Using cached debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.3 kB)\n",
      "Collecting ipython>=7.23.1 (from ipykernel)\n",
      "  Using cached ipython-9.2.0-py3-none-any.whl.metadata (4.4 kB)\n",
      "Collecting jupyter-client>=6.1.12 (from ipykernel)\n",
      "  Using cached jupyter_client-8.6.3-py3-none-any.whl.metadata (8.3 kB)\n",
      "Collecting jupyter-core!=5.0.*,>=4.12 (from ipykernel)\n",
      "  Using cached jupyter_core-5.7.2-py3-none-any.whl.metadata (3.4 kB)\n",
      "Collecting matplotlib-inline>=0.1 (from ipykernel)\n",
      "  Using cached matplotlib_inline-0.1.7-py3-none-any.whl.metadata (3.9 kB)\n",
      "Collecting nest-asyncio (from ipykernel)\n",
      "  Using cached nest_asyncio-1.6.0-py3-none-any.whl.metadata (2.8 kB)\n",
      "Collecting packaging (from ipykernel)\n",
      "  Using cached packaging-25.0-py3-none-any.whl.metadata (3.3 kB)\n",
      "Collecting psutil (from ipykernel)\n",
      "  Using cached psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (22 kB)\n",
      "Collecting pyzmq>=24 (from ipykernel)\n",
      "  Using cached pyzmq-26.4.0-cp312-cp312-manylinux_2_28_x86_64.whl.metadata (6.0 kB)\n",
      "Collecting tornado>=6.1 (from ipykernel)\n",
      "  Using cached tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.8 kB)\n",
      "Collecting traitlets>=5.4.0 (from ipykernel)\n",
      "  Using cached traitlets-5.14.3-py3-none-any.whl.metadata (10 kB)\n",
      "Collecting decorator (from ipython>=7.23.1->ipykernel)\n",
      "  Using cached decorator-5.2.1-py3-none-any.whl.metadata (3.9 kB)\n",
      "Collecting ipython-pygments-lexers (from ipython>=7.23.1->ipykernel)\n",
      "  Using cached ipython_pygments_lexers-1.1.1-py3-none-any.whl.metadata (1.1 kB)\n",
      "Collecting jedi>=0.16 (from ipython>=7.23.1->ipykernel)\n",
      "  Using cached jedi-0.19.2-py2.py3-none-any.whl.metadata (22 kB)\n",
      "Collecting pexpect>4.3 (from ipython>=7.23.1->ipykernel)\n",
      "  Using cached pexpect-4.9.0-py2.py3-none-any.whl.metadata (2.5 kB)\n",
      "Collecting prompt_toolkit<3.1.0,>=3.0.41 (from ipython>=7.23.1->ipykernel)\n",
      "  Using cached prompt_toolkit-3.0.51-py3-none-any.whl.metadata (6.4 kB)\n",
      "Collecting pygments>=2.4.0 (from ipython>=7.23.1->ipykernel)\n",
      "  Using cached pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)\n",
      "Collecting stack_data (from ipython>=7.23.1->ipykernel)\n",
      "  Using cached stack_data-0.6.3-py3-none-any.whl.metadata (18 kB)\n",
      "Collecting python-dateutil>=2.8.2 (from jupyter-client>=6.1.12->ipykernel)\n",
      "  Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)\n",
      "Collecting platformdirs>=2.5 (from jupyter-core!=5.0.*,>=4.12->ipykernel)\n",
      "  Using cached platformdirs-4.3.8-py3-none-any.whl.metadata (12 kB)\n",
      "Collecting parso<0.9.0,>=0.8.4 (from jedi>=0.16->ipython>=7.23.1->ipykernel)\n",
      "  Using cached parso-0.8.4-py2.py3-none-any.whl.metadata (7.7 kB)\n",
      "Collecting ptyprocess>=0.5 (from pexpect>4.3->ipython>=7.23.1->ipykernel)\n",
      "  Using cached ptyprocess-0.7.0-py2.py3-none-any.whl.metadata (1.3 kB)\n",
      "Collecting wcwidth (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=7.23.1->ipykernel)\n",
      "  Using cached wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)\n",
      "Collecting six>=1.5 (from python-dateutil>=2.8.2->jupyter-client>=6.1.12->ipykernel)\n",
      "  Using cached six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)\n",
      "Collecting executing>=1.2.0 (from stack_data->ipython>=7.23.1->ipykernel)\n",
      "  Using cached executing-2.2.0-py2.py3-none-any.whl.metadata (8.9 kB)\n",
      "Collecting asttokens>=2.1.0 (from stack_data->ipython>=7.23.1->ipykernel)\n",
      "  Using cached asttokens-3.0.0-py3-none-any.whl.metadata (4.7 kB)\n",
      "Collecting pure-eval (from stack_data->ipython>=7.23.1->ipykernel)\n",
      "  Using cached pure_eval-0.2.3-py3-none-any.whl.metadata (6.3 kB)\n",
      "Using cached ipykernel-6.29.5-py3-none-any.whl (117 kB)\n",
      "Using cached comm-0.2.2-py3-none-any.whl (7.2 kB)\n",
      "Using cached debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.2 MB)\n",
      "Using cached ipython-9.2.0-py3-none-any.whl (604 kB)\n",
      "Using cached jupyter_client-8.6.3-py3-none-any.whl (106 kB)\n",
      "Using cached jupyter_core-5.7.2-py3-none-any.whl (28 kB)\n",
      "Using cached matplotlib_inline-0.1.7-py3-none-any.whl (9.9 kB)\n",
      "Using cached pyzmq-26.4.0-cp312-cp312-manylinux_2_28_x86_64.whl (855 kB)\n",
      "Using cached tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (443 kB)\n",
      "Using cached traitlets-5.14.3-py3-none-any.whl (85 kB)\n",
      "Using cached nest_asyncio-1.6.0-py3-none-any.whl (5.2 kB)\n",
      "Using cached packaging-25.0-py3-none-any.whl (66 kB)\n",
      "Using cached psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (277 kB)\n",
      "Using cached jedi-0.19.2-py2.py3-none-any.whl (1.6 MB)\n",
      "Using cached pexpect-4.9.0-py2.py3-none-any.whl (63 kB)\n",
      "Using cached platformdirs-4.3.8-py3-none-any.whl (18 kB)\n",
      "Using cached prompt_toolkit-3.0.51-py3-none-any.whl (387 kB)\n",
      "Using cached pygments-2.19.1-py3-none-any.whl (1.2 MB)\n",
      "Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)\n",
      "Using cached decorator-5.2.1-py3-none-any.whl (9.2 kB)\n",
      "Using cached ipython_pygments_lexers-1.1.1-py3-none-any.whl (8.1 kB)\n",
      "Using cached stack_data-0.6.3-py3-none-any.whl (24 kB)\n",
      "Using cached asttokens-3.0.0-py3-none-any.whl (26 kB)\n",
      "Using cached executing-2.2.0-py2.py3-none-any.whl (26 kB)\n",
      "Using cached parso-0.8.4-py2.py3-none-any.whl (103 kB)\n",
      "Using cached ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)\n",
      "Using cached six-1.17.0-py2.py3-none-any.whl (11 kB)\n",
      "Using cached pure_eval-0.2.3-py3-none-any.whl (11 kB)\n",
      "Using cached wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)\n",
      "Installing collected packages: wcwidth, pure-eval, ptyprocess, traitlets, tornado, six, pyzmq, pygments, psutil, prompt_toolkit, platformdirs, pexpect, parso, packaging, nest-asyncio, executing, decorator, debugpy, asttokens, stack_data, python-dateutil, matplotlib-inline, jupyter-core, jedi, ipython-pygments-lexers, comm, jupyter-client, ipython, ipykernel\n",
      "Successfully installed asttokens-3.0.0 comm-0.2.2 debugpy-1.8.14 decorator-5.2.1 executing-2.2.0 ipykernel-6.29.5 ipython-9.2.0 ipython-pygments-lexers-1.1.1 jedi-0.19.2 jupyter-client-8.6.3 jupyter-core-5.7.2 matplotlib-inline-0.1.7 nest-asyncio-1.6.0 packaging-25.0 parso-0.8.4 pexpect-4.9.0 platformdirs-4.3.8 prompt_toolkit-3.0.51 psutil-7.0.0 ptyprocess-0.7.0 pure-eval-0.2.3 pygments-2.19.1 python-dateutil-2.9.0.post0 pyzmq-26.4.0 six-1.17.0 stack_data-0.6.3 tornado-6.5.1 traitlets-5.14.3 wcwidth-0.2.13\n",
      "\n",
      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.1.1\u001b[0m\n",
      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython -m pip install --upgrade pip\u001b[0m\n",
      "Installed kernelspec venv in /home/.local/share/jupyter/kernels/venv\n"
     ]
    }
   ],
   "source": [
    "# Install ipykernel and register new kernel\n",
    "!~/my_venvs/venv/bin/python -m pip install ipykernel\n",
    "!~/my_venvs/venv/bin/python -m ipykernel install --user --name=venv --display-name='Python (venv)'\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ad4dcc5c-3143-4a05-a325-fbd981b0c2e9",
   "metadata": {},
   "source": [
    "# Use the new venv/kernel\n",
    "- refresh the page and in \"kernel\" choose \"Change kernel...\" and from the dropdown, choose your \"Python (venv)\"\n",
    "    - *it can also be changed on the top right of the console*\n",
    "    - check \"Always start the prefered kernel\" for it to be chosen by default\n",
    "- Then we can install amplpy as said in the readme but using {sys.executable} instead of python to make sure we install under the venv\n",
    "    - *This is only needed for terminal commands like this one*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c8ae5043-2253-478d-928b-85c0106a7491",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-05-23T15:57:41.635301Z",
     "iopub.status.busy": "2025-05-23T15:57:41.634126Z",
     "iopub.status.idle": "2025-05-23T15:58:09.310244Z",
     "shell.execute_reply": "2025-05-23T15:58:09.306053Z",
     "shell.execute_reply.started": "2025-05-23T15:57:41.635212Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting amplpy\n",
      "  Using cached amplpy-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n",
      "Collecting ampltools>=0.7.5 (from amplpy)\n",
      "  Using cached ampltools-0.7.5-py3-none-any.whl.metadata (1.2 kB)\n",
      "Collecting requests (from ampltools>=0.7.5->amplpy)\n",
      "  Using cached requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\n",
      "Collecting charset-normalizer<4,>=2 (from requests->ampltools>=0.7.5->amplpy)\n",
      "  Using cached charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)\n",
      "Collecting idna<4,>=2.5 (from requests->ampltools>=0.7.5->amplpy)\n",
      "  Using cached idna-3.10-py3-none-any.whl.metadata (10 kB)\n",
      "Collecting urllib3<3,>=1.21.1 (from requests->ampltools>=0.7.5->amplpy)\n",
      "  Using cached urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)\n",
      "Collecting certifi>=2017.4.17 (from requests->ampltools>=0.7.5->amplpy)\n",
      "  Using cached certifi-2025.4.26-py3-none-any.whl.metadata (2.5 kB)\n",
      "Using cached amplpy-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.7 MB)\n",
      "Using cached ampltools-0.7.5-py3-none-any.whl (18 kB)\n",
      "Using cached requests-2.32.3-py3-none-any.whl (64 kB)\n",
      "Using cached certifi-2025.4.26-py3-none-any.whl (159 kB)\n",
      "Using cached charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (148 kB)\n",
      "Using cached idna-3.10-py3-none-any.whl (70 kB)\n",
      "Using cached urllib3-2.4.0-py3-none-any.whl (128 kB)\n",
      "Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests, ampltools, amplpy\n",
      "Successfully installed amplpy-0.14.0 ampltools-0.7.5 certifi-2025.4.26 charset-normalizer-3.4.2 idna-3.10 requests-2.32.3 urllib3-2.4.0\n",
      "\n",
      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.1.1\u001b[0m\n",
      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython -m pip install --upgrade pip\u001b[0m\n",
      "$ /home/my_venvs/venv/bin/python -m pip install -i https://pypi.ampl.com ampl_module_base ampl_module_highs ampl_module_cbc ampl_module_gurobi\n",
      "Looking in indexes: https://pypi.ampl.com\n",
      "Collecting ampl_module_base\n",
      "  Using cached https://portal.ampl.com/dl/pypi/ampl-module-base/ampl_module_base-20250515-py3-none-manylinux2010_x86_64.whl (4.0 MB)\n",
      "Collecting ampl_module_highs\n",
      "  Using cached https://portal.ampl.com/dl/pypi/ampl-module-highs/ampl_module_highs-20250429-py3-none-manylinux2010_x86_64.whl (5.1 MB)\n",
      "Collecting ampl_module_cbc\n",
      "  Using cached https://portal.ampl.com/dl/pypi/ampl-module-cbc/ampl_module_cbc-20250429-py3-none-manylinux2010_x86_64.whl (4.0 MB)\n",
      "Collecting ampl_module_gurobi\n",
      "  Using cached https://portal.ampl.com/dl/pypi/ampl-module-gurobi/ampl_module_gurobi-20250429-py3-none-manylinux2010_x86_64.whl (13.3 MB)\n",
      "Installing collected packages: ampl_module_highs, ampl_module_gurobi, ampl_module_cbc, ampl_module_base\n",
      "Successfully installed ampl_module_base-20250515 ampl_module_cbc-20250429 ampl_module_gurobi-20250429 ampl_module_highs-20250429\n",
      "\n",
      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.1.1\u001b[0m\n",
      "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython -m pip install --upgrade pip\u001b[0m\n",
      "Imported ampl_module_base.\n",
      "Imported ampl_module_base.\n",
      "Imported ampl_module_highs.\n",
      "Imported ampl_module_cbc.\n",
      "Imported ampl_module_gurobi.\n",
      "$ amplkey activate --uuid 850435c5-9ae4-449f-a42a-a489c6f4a5d2\n",
      "Wrote license to /home/my_venvs/venv/lib/python3.12/site-packages/ampl_module_base/bin/ampl.lic\n",
      "License 850435c5-9ae4-449f-a42a-a489c6f4a5d2 activated!\n",
      "Please restart AMPL in order to start using the new license.\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "\n",
    "# Install Python API for AMPL\n",
    "!{sys.executable} -m pip install amplpy --upgrade\n",
    "\n",
    "# Install solver modules (e.g., HiGHS, CBC, Gurobi)\n",
    "!{sys.executable} -m amplpy.modules install highs cbc gurobi\n",
    "\n",
    "# Activate your license (e.g., free https://ampl.com/ce license)\n",
    "!{sys.executable} -m amplpy.modules activate 850435c5-9ae4-449f-a42a-a489c6f4a5d2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5c942328-e9ea-4740-ac48-364b27bb26dd",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python (venv)",
   "language": "python",
   "name": "venv"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
