From 93c92f7039fa025919748d125c10980095fe8a41 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Wed, 11 Dec 2024 18:05:31 +0100 Subject: [PATCH 01/14] refact noebooks --- .github/workflows/coverage.yml | 4 +- docs/notebooks/epanet_qubols.ipynb | 256 ---- docs/notebooks/epanet_vqls.ipynb | 293 ----- docs/notebooks/linear_solver/hhl_solver.ipynb | 236 ++++ .../noisy_vqls_solver.ipynb | 0 .../linear_solver/qubols_solver.ipynb | 209 +++ .../notebooks/linear_solver/vqls_solver.ipynb | 280 ++++ docs/notebooks/{ => qnr_hhl}/hhl_Net0.ipynb | 2 +- .../{ => qnr_hhl}/hhl_Net1Loop.ipynb | 2 +- .../{ => qnr_qubols}/qubo_Net1Loops.ipynb | 2 +- .../{ => qnr_qubols}/qubo_Net2Loops.ipynb | 0 .../{ => qnr_qubols}/qubo_poly_solver.ipynb | 0 .../notebooks/{ => qnr_vqls}/noisy_vqls.ipynb | 0 docs/notebooks/{ => qnr_vqls}/vqls_Net1.ipynb | 0 .../{ => qnr_vqls}/vqls_Net1Loops.ipynb | 0 .../{ => qnr_vqls}/vqls_Net2Loops.ipynb | 0 .../{ => qnr_vqls}/vqls_Net2Loops_D-W.ipynb | 0 .../{ => qnr_vqls}/vqls_solver_Net1.ipynb | 0 .../vqls_solver_Net1Loops.ipynb | 0 .../vqls_solver_Net2Loops.ipynb | 0 .../vqls_solver_Net3Loops.ipynb | 2 +- docs/notebooks/qubols_solver.ipynb | 292 ----- docs/notebooks/trash/aequbols.py | 33 - docs/notebooks/trash/epanet.ipynb | 485 ------- docs/notebooks/trash/epanet.py | 35 - docs/notebooks/trash/getting_stared.ipynb | 364 ------ docs/notebooks/trash/qubo_solver.py | 32 - docs/notebooks/trash/qubols.ipynb | 957 -------------- docs/notebooks/trash/vqls.ipynb | 998 --------------- docs/notebooks/vqls_solver.ipynb | 1126 ----------------- wntr_quantum/linear_solver/__init__.py | 6 + 31 files changed, 737 insertions(+), 4877 deletions(-) delete mode 100644 docs/notebooks/epanet_qubols.ipynb delete mode 100644 docs/notebooks/epanet_vqls.ipynb create mode 100644 docs/notebooks/linear_solver/hhl_solver.ipynb rename docs/notebooks/{ => linear_solver}/noisy_vqls_solver.ipynb (100%) create mode 100644 docs/notebooks/linear_solver/qubols_solver.ipynb create mode 100644 docs/notebooks/linear_solver/vqls_solver.ipynb rename docs/notebooks/{ => qnr_hhl}/hhl_Net0.ipynb (99%) rename docs/notebooks/{ => qnr_hhl}/hhl_Net1Loop.ipynb (99%) rename docs/notebooks/{ => qnr_qubols}/qubo_Net1Loops.ipynb (99%) rename docs/notebooks/{ => qnr_qubols}/qubo_Net2Loops.ipynb (100%) rename docs/notebooks/{ => qnr_qubols}/qubo_poly_solver.ipynb (100%) rename docs/notebooks/{ => qnr_vqls}/noisy_vqls.ipynb (100%) rename docs/notebooks/{ => qnr_vqls}/vqls_Net1.ipynb (100%) rename docs/notebooks/{ => qnr_vqls}/vqls_Net1Loops.ipynb (100%) rename docs/notebooks/{ => qnr_vqls}/vqls_Net2Loops.ipynb (100%) rename docs/notebooks/{ => qnr_vqls}/vqls_Net2Loops_D-W.ipynb (100%) rename docs/notebooks/{ => qnr_vqls}/vqls_solver_Net1.ipynb (100%) rename docs/notebooks/{ => qnr_vqls}/vqls_solver_Net1Loops.ipynb (100%) rename docs/notebooks/{ => qnr_vqls}/vqls_solver_Net2Loops.ipynb (100%) rename docs/notebooks/{ => qnr_vqls}/vqls_solver_Net3Loops.ipynb (99%) delete mode 100644 docs/notebooks/qubols_solver.ipynb delete mode 100644 docs/notebooks/trash/aequbols.py delete mode 100644 docs/notebooks/trash/epanet.ipynb delete mode 100644 docs/notebooks/trash/epanet.py delete mode 100644 docs/notebooks/trash/getting_stared.ipynb delete mode 100644 docs/notebooks/trash/qubo_solver.py delete mode 100644 docs/notebooks/trash/qubols.ipynb delete mode 100644 docs/notebooks/trash/vqls.ipynb delete mode 100644 docs/notebooks/vqls_solver.ipynb create mode 100644 wntr_quantum/linear_solver/__init__.py diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 5a6c28b..3e3b364 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -14,10 +14,10 @@ jobs: timeout-minutes: 60 steps: - uses: actions/checkout@v4 - - name: Set up Python 3.9 + - name: Set up Python 3.11 uses: actions/setup-python@v4 with: - python-version: '3.9' + python-version: '3.11' - name: Install tox run: | python -m pip install --upgrade pip diff --git a/docs/notebooks/epanet_qubols.ipynb b/docs/notebooks/epanet_qubols.ipynb deleted file mode 100644 index 00c5f90..0000000 --- a/docs/notebooks/epanet_qubols.ipynb +++ /dev/null @@ -1,256 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Define the system " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "metadata": {} - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlv0lEQVR4nO3dfXDU9YHH8c8mSx5IDAESECsEghhCUEMSTEKSzfMuFq1Tezr1oT7V8x6860wfZnRKb46O1dbTTp3qnC22pbbW3jjVG6diDXkiT4QkmBChQASRBwWKiQQa8pz87o/WnDEBAiT57v5+79eMf2R3s/vZrdO83f3trsuyLEsAAMCxgkwPAAAAZhEDAAA4HDEAAIDDEQMAADgcMQAAgMMRAwAAOBwxAACAwxEDAAA4HDEAAIDDEQNAALv//vsVGRlpeoZf+fWvfy2Xy6VDhw6ZngIEDGIAmKBXXnlFzz77rOkZU+7b3/62VqxYIen//7CGhYXpo48+GnPZvLw8rVy58pJu50KP5y9/+UslJiYqLCxMy5Yt03PPPXdJtwPgwogBYIKcEgObN2/WunXrRp3W19enH/3oR5N6O+d7PH/+85/roYceUlJSkp577jllZmbqG9/4hp566qkLXu/XvvY19fT0KC4ublL3AnZGDAAB6OzZs1NyvQcPHlRbW9uYGEhOTtaLL76oY8eOTcntflZPT4/Wr1+vdevW6Q9/+IP+8R//Ub/5zW9099136/HHH9epU6fO+/vBwcEKCwuTy+Wa8q2AXRADsK0NGzbI5XLpwIEDuv/++xUdHa1Zs2bpgQceUHd396jLvvzyy0pNTVV4eLjmzJmjr371qzp69OjI+Xl5edq8ebMOHz4sl8sll8ulxYsXy7IsxcTE6Fvf+tbIZYeHhxUdHa3g4GB1dnaOnP7UU0/J7Xarq6tr5LSKigrl5OQoIiJC0dHRuvXWW7V3795x78eePXt01113afbs2crOzj7n/d65c6diY2OVl5c3cls7duyQz+dTTEyMwsPDtWTJEj344INjfnfz5s2aNWvWmOv/7ne/q6GhoQk/O3Cpj6ckVVZWqqOjQ//6r/866jofeeQRnT17Vps3bz7vbY93zMDixYt18803q7a2VjfeeKPCwsIUHx+v3/zmN+P+bnV1tf7pn/5Jc+fOVVRUlO69994LRggQyNymBwBT7Y477tCSJUv0wx/+UM3NzfrFL36hefPmjTzl/MQTT+g//uM/dMcdd+ihhx7Sxx9/rOeee04ej0ctLS2Kjo7W+vXrdfr0aX344Yf6yU9+IkmKjIyUy+VSVlaWqqurR27v3Xff1enTpxUUFKS6urqR/8quqanRqlWrRg74Kysr00033aT4+Hht2LBBPT09eu6555SVlaXm5uaRP46fuv3227Vs2TI9+eSTOtc3jzc1Ncnn8yktLU1vvPGGwsPDdfLkSXm9XsXGxuqxxx5TdHS0Dh06pNdff33M77/11lsqLi6W2z36/xqWLFmie++9Vy+++KIee+wxXXXVVed8vC/n8ZSklpYWSVJaWtqo601NTVVQUJBaWlp0zz33nPP2z+XAgQP6h3/4B33961/Xfffdp1/96le6//77lZqaqqSkpFGX/bd/+zdFR0drw4YNamtr0wsvvKDDhw9r69atPOMAe7IAm/rP//xPS5L14IMPjjr9y1/+sjV37lzLsizr0KFDVnBwsPXEE0+MusyuXbsst9s96vR169ZZcXFxY27n6aeftoKDg60zZ85YlmVZP/3pT624uDjrxhtvtB599FHLsixraGjIio6Otr75zW+O/F5ycrI1b948q6OjY+S01tZWKygoyLr33nvH3I8777xzzG3fd999VkREhGVZllVbW2tFRUVZ69ats3p7e0cu87//+7+WJKupqem8j9fZs2etsLAwa9OmTSOnbdq0aeR333//fcvtdlvf+MY3Rs7Pzc21kpKSRn6ejMfzkUcesYKDg8fdGBsba331q1897/34dPMHH3wwclpcXJwlyaqurh457eTJk1ZoaKj17W9/e8zvpqamWv39/SOn/9d//ZclyXrjjTfOe9tAoOJlAtjeP//zP4/6OScnRx0dHTpz5oxef/11DQ8P64477lB7e/vIP1deeaWWLVumysrKC15/Tk6OhoaGtG3bNkl/ewYgJydHOTk5qqmpkSTt3r1bnZ2dysnJkSQdP35cO3fu1P333685c+aMXNf111+v4uJivfXWWxe8H59VWVkpn8+nwsJCvf766woNDR05Lzo6WpL05ptvamBg4JzXUVFRob6+Pt10003jnh8fH6+vfe1r2rhxo44fPz7uZSbj8ezp6VFISMi454WFhamnp+eC1zGeFStWjDz+khQbG6uEhAQdPHhwzGUffvhhzZgx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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import wntr\n", - "import wntr_quantum\n", - "\n", - "# Create a water network model\n", - "inp_file = \"networks/Net0.inp\"\n", - "# inp_file = 'networks/Net2Loops.inp'\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# Graph the network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run with the original simulator" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1x0lEQVR4nO3deXhU9aH/8c/JZCVhEpYsIGELhB0CCdkDXEUQ0bpWRXor4MK1eKtStfW2Rav1UltrsS7V6+8WbCvXtWprK1xERAgESNgh7CCgbCIkJBCyzPn9gZlLJDMkYTLnzOT96vN9Hjlz5sxnsM/z8XvO95wxTNM0BQAA/CLE6gAAALQlFC8AAH5E8QIA4EcULwAAfkTxAgDgRxQvAAB+RPECAOBHFC8AAH5E8QIA4EcUL9BGffrppzIMQ++8847VUYA2heJFs82bN0+GYbhHZGSkUlNTdd999+nIkSNWxwto8+fP15w5c5q8/5gxYxr8u6gfV111VeuFBHBJQq0OgMD1xBNPqFevXqqqqtLy5cv1hz/8Qf/85z+1efNmtWvXzup4AWn+/PnavHmzHnjggSa/p1u3bpo9e3aDbV27dvVxMgC+QvGixSZMmKCMjAxJ0l133aVOnTrp2Wef1QcffKBJkyY1+p7KykpFR0f7M+YlMU1TVVVVioqKsjqKR7Gxsfre975ndYxLVltbK5fLpfDwcKujAK2KU83wmcsvv1yStHfvXknSlClTFBMTo927d+vqq69W+/btNXnyZEmSy+XSnDlzNGjQIEVGRioxMVHTp0/XiRMnGhyzuLhY48ePV+fOnRUVFaVevXpp2rRpDfZ54403lJ6ervbt28vpdGrIkCF67rnn3K8//vjjMgzjgrz1p8z37dvn3tazZ09dc801WrhwoTIyMhQVFaVXXnlFknTy5Ek98MADSk5OVkREhPr06aOnn35aLpfron83H3zwgSZOnKiuXbsqIiJCKSkpevLJJ1VXV+feZ8yYMfrHP/6hzz//3H3KuGfPnhc9tnSutCoqKpq077e5XC499dRT6tatmyIjI3XFFVdo165dF+z39ttvKz09XVFRUercubO+973v6Ysvvmiwz5gxYzRmzJgL3jtlypQG32Xfvn0yDEPPPPOM5syZo5SUFEVERGjr1q2SpOeff16DBg1Su3bt1KFDB2VkZGj+/Pkt+n6A3TDjhc/s3r1bktSpUyf3ttraWo0fP175+fl65pln3Kegp0+frnnz5mnq1Kn64Q9/qL179+qFF17QunXrVFhYqLCwMB09elTjxo1TfHy8fvKTnyguLk779u3TX//6V/fxFy1apEmTJumKK67Q008/LUkqLS1VYWGh7r///hZ9j+3bt2vSpEmaPn267r77bvXr10+nT5/W6NGj9cUXX2j69Onq3r27VqxYoUcffVSHDh266HXZefPmKSYmRjNnzlRMTIw++eQTzZo1S+Xl5frNb34jSfrpT3+qsrIyHTx4UL/73e8kSTExMRfNu2PHDkVHR6u6ulqJiYm6++67NWvWLIWFhTXp+/7qV79SSEiIHnroIZWVlenXv/61Jk+erFWrVjXIP3XqVI0cOVKzZ8/WkSNH9Nxzz6mwsFDr1q1TXFxckz7r2+bOnauqqirdc889ioiIUMeOHfXqq6/qhz/8oW6++Wbdf//9qqqq0saNG7Vq1SrdfvvtLfocwFZMoJnmzp1rSjI//vhj89ixY+aBAwfMN954w+zUqZMZFRVlHjx40DRN07zjjjtMSeZPfvKTBu9ftmyZKcl8/fXXG2xfsGBBg+3vvfeeKclcs2aNxyz333+/6XQ6zdraWo/7PPbYY2Zj/1ev/x579+51b+vRo4cpyVywYEGDfZ988kkzOjra3LFjR4PtP/nJT0yHw2Hu37/f4+ebpmmePn36gm3Tp08327VrZ1ZVVbm3TZw40ezRo4fXY51v2rRp5uOPP26+++675p/+9CfzO9/5jinJvOWWWy763iVLlpiSzAEDBphnz551b3/uuedMSeamTZtM0zTN6upqMyEhwRw8eLB55swZ934ffvihKcmcNWuWe9vo0aPN0aNHX/BZd9xxR4PvtXfvXlOS6XQ6zaNHjzbY97rrrjMHDRrU1L8CIOBwqhktNnbsWMXHxys5OVm33XabYmJi9N577+myyy5rsN+9997b4M9vv/22YmNjdeWVV+qrr75yj/T0dMXExGjJkiWS5J5Fffjhh6qpqWk0Q1xcnCorK7Vo0SKffa9evXpp/PjxF2QuKChQhw4dGmQeO3as6urq9Nlnn3k95vnXiE+dOqWvvvpKBQUFOn36tLZt29birP/93/+txx57TDfeeKP+9V//VR988IHuvvtuvfXWWyoqKmrSMaZOndrgumpBQYEkac+ePZLO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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# define the classical simulator\n", - "sim = wntr.sim.EpanetSimulator(wn)\n", - "\n", - "# run the simulation\n", - "results = sim.run_sim()\n", - "\n", - "# Plot results on the network\n", - "pressure_at_5hr_ref = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr_ref,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run with the QUBOLS solver" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.1155474 -0.1155474]\n", - " [-0.1155474 2.454284 ]]\n", - "b = [ -1.614401 230.2773 ]\n", - "x = [80.88954057 97.50733138]\n", - "residue = 0.4376843814840416\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.02344142 -0.02344142]\n", - " [-0.02344142 0.6409284 ]]\n", - "b = [-0.7850911 60.92185 ]\n", - "x = [69.15933529 97.75171065]\n", - "residue = 0.15820189599283918\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.02888291 -0.02888291]\n", - " [-0.02888291 0.9473562 ]]\n", - "b = [-0.9894381 90.34328 ]\n", - "x = [62.31671554 97.2629521 ]\n", - "residue = 0.01991736905587443\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.02687917 -0.02687917]\n", - " [-0.02687917 0.8311499 ]]\n", - "b = [-0.9240913 79.15507 ]\n", - "x = [62.31671554 97.2629521 ]\n", - "residue = 0.018224089811839452\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.02694396 -0.02694396]\n", - " [-0.02694396 0.8374696 ]]\n", - "b = [-0.9263611 79.76565 ]\n", - "x = [58.40664712 97.01857283]\n", - "residue = 0.14477939561866032\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1xUlEQVR4nO3deXhU9aH/8c/JZCVhEpYsIAFCIOwQSMge4CqCiNZ9QXor4EIt3qpUbb1t0Wq91NZarEv1+rsF28p1rdraCkVFhUCAhB3CDgKyikBIIGSZ8/sDM5dIZkjCZM6ZyfvV5/s8cubMmc9gn+fj95zvOWOYpmkKAAD4RYjVAQAAaEsoXgAA/IjiBQDAjyheAAD8iOIFAMCPKF4AAPyI4gUAwI8oXgAA/IjiBQDAjyheoI369NNPZRiG3n77baujAG0KxYtmmzt3rgzDcI/IyEilpaXp3nvv1aFDh6yOF9DmzZun2bNnN3n/0aNHN/h3UT+uuOKK1gsJ4KKEWh0Agevxxx9XSkqKqqqqtGTJEv3hD3/QP//5T23YsEHt2rWzOl5AmjdvnjZs2KD777+/ye/p1q2bZs2a1WBb165dfZwMgK9QvGix8ePHKzMzU5J05513qlOnTnrmmWf0/vvva+LEiY2+p7KyUtHR0f6MeVFM01RVVZWioqKsjuJRbGysvvvd71od46LV1tbK5XIpPDzc6ihAq+JUM3zm0ksvlSTt2rVLkjR58mTFxMRox44duvLKK9W+fXtNmjRJkuRyuTR79mwNHDhQkZGRSkxM1LRp03Ts2LEGxywpKdG4cePUuXNnRUVFKSUlRVOnTm2wz+uvv66MjAy1b99eTqdTgwcP1rPPPut+/bHHHpNhGOflrT9lvnv3bve2nj176qqrrtKCBQuUmZmpqKgovfzyy5Kk48eP6/7771dycrIiIiLUu3dvPfXUU3K5XBf8u3n//fc1YcIEde3aVREREUpNTdUTTzyhuro69z6jR4/WP/7xD33xxRfuU8Y9e/a84LGls6VVUVHRpH2/zeVy6cknn1S3bt0UGRmpyy67TNu3bz9vv7feeksZGRmKiopS586d9d3vfldffvllg31Gjx6t0aNHn/feyZMnN/guu3fvlmEYevrppzV79mylpqYqIiJCmzZtkiQ999xzGjhwoNq1a6cOHTooMzNT8+bNa9H3A+yGGS98ZseOHZKkTp06ubfV1tZq3LhxKigo0NNPP+0+BT1t2jTNnTtXU6ZM0Q9/+EPt2rVLzz//vFavXq2ioiKFhYXp8OHDGjt2rOLj4/WTn/xEcXFx2r17t/7617+6j79w4UJNnDhRl112mZ566ilJUllZmYqKinTfffe16Hts2bJFEydO1LRp03TXXXepb9++OnXqlEaNGqUvv/xS06ZNU/fu3bV06VI98sgjOnDgwAWvy86dO1cxMTGaMWOGYmJi9Mknn2jmzJkqLy/Xb37zG0nST3/6U504cUL79u3T7373O0lSTEzMBfNu3bpV0dHRqq6uVmJiou666y7NnDlTYWFhTfq+v/rVrxQSEqIHH3xQJ06c0K9//WtNmjRJy5cvb5B/ypQpGjFihGbNmqVDhw7p2WefVVFRkVavXq24uLgmfda3zZkzR1VVVbr77rsVERGhjh076pVXXtEPf/hD3XjjjbrvvvtUVVWldevWafny5brtttta9DmArZhAM82ZM8eUZH700UfmkSNHzL1795qvv/662alTJzMqKsrct2+faZqmefvtt5uSzJ/85CcN3r948WJTkvnaa6812D5//vwG2999911Tkrly5UqPWe677z7T6XSatbW1Hvd59NFHzcb+r17/PXbt2uXe1qNHD1OSOX/+/Ab7PvHEE2Z0dLS5devWBtt/8pOfmA6Hw9yzZ4/HzzdN0zx16tR526ZNm2a2a9fOrKqqcm+bMGGC2aNHD6/HOtfUqVPNxx57zHznnXfMP/3pT+Z3vvMdU5J58803X/C9ixYtMiWZ/fv3N8+cOePe/uyzz5qSzPXr15umaZrV1dVmQkKCOWjQIPP06dPu/T744ANTkjlz5kz3tlGjRpmjRo0677Nuv/32Bt9r165dpiTT6XSahw8fbrDvNddcYw4cOLCpfwVAwOFUM1pszJgxio+PV3Jysm699VbFxMTo3Xff1SWXXNJgv3vuuafBn9966y3Fxsbq8ssv11dffeUeGRkZiomJ0aJFiyTJPYv64IMPVFNT02iGuLg4VVZWauHChT77XikpKRo3btx5mQsLC9WhQ4cGmceMGaO6ujp9/vnnXo957jXikydP6quvvlJhYaFOnTqlzZs3tzjr//zP/+jRRx/V9ddfr3//93/X+++/r7vuuktvvvmmiouLm3SMKVOmNLiuWlhYKEnauXOnpLOn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GjbE4qpvhISEaMCAAVq2bJnVUQAATeRt9bJdVzXb8z8HLJKVlcUCKwAIJOEh3ocN2TOVRQoLC3Xo0CEdOXLE6igAgCYIxPt4Kd5zZGVlSWKBFQAEjFCHFOZhhDqsTtcoivccKSkpiomJ0ZIlS6yOAgBoAsNheB12xOKqcxiGoUGDBrHACgAChbf7dTnVHBiysrK0bt06q2MAAJrA81Orzg47smcqCxUWFuro0aPav3+/1VEAABcSgPfx2jOVhVhgBQCB4+zPAnp6chWnmgNCcnKy4uLitHjxYqujAAAuxGF4HzbE4qpvMQxDgwcP1vLly62OAgC4EBZXBYfs7GytX79epmlaHQUA4IUR5vA67IjibURhYaGOHz+uffv2WR0FAOCND38WcNasWRoxYoTat2+vhIQEXXvttdqyZUuDfaqqqjR9+nR16tRJMTExuuGGG3To0KHmRW7W3m1EZmamJGnFihUWJwEAeBUS4n00w2effabp06eruLhYCxcuVE1NjcaOHavKykr3Pg888ID+/ve/66233tJnn32m/fv36/rrr2/W5xgm51Mb1blzZ02aNEnPPvus1VEAAN9SXl6u2NhYHXt7qpzR4Y3vU1mtDjf+USdOnJDT6Wz2Zxw5ckQJCQn67LPPNHLkSJ04cULx8fGaN2+ebrzxRknS5s2b1b9/fy1btkw5OTlNOi4zXg+GDBnCjBcA7K4JM97y8vIG48yZM0069IkTJyRJHTt2lCSVlpaqpqZGY8aMce/Tr18/de/evVlPPKR4PcjJydGGDRtYYAUAdhbq8D509jbR2NhY95g1a9YFD+tyuXT//fcrPz9fgwYNkiQdPHhQ4eHhiouLa7BvYmKiDh482PTITf92bUtBQYFmzZqlXbt2qVevXlbHAQA0JsTwfC33m8VVe/fubXCqOSIi4oKHnT59ujZs2NAqP5rDjNeDESNGSGKBFQDYWhNONTudzgbjQsV777336oMPPtCiRYvUrVs39/akpCRVV1fr+PHjDfY/dOiQkpKSmh656d+ubYmPj1diYiJPsAIAO2vCqeamMk1T9957r95991198sknSklJafB6RkaGwsLC9PHHH7u3bdmyRXv27FFubm7TIzcrVRszdOhQZrwAYGfebhtq5u1E06dP17x58/T++++rffv27uu2sbGxioqKUmxsrO644w7NmDFDHTt2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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from quantum_newton_raphson.qubo_solver import QUBO_SOLVER\n", - "\n", - "# define the solver\n", - "linear_solver = QUBO_SOLVER(\n", - " num_qbits=11,\n", - " num_reads=250,\n", - " range=250,\n", - " offset=0,\n", - " # iterations=5, # only valid for aequbols\n", - " # temperature=1e4, # only valid for AEqubols\n", - " use_aequbols=False,\n", - ")\n", - "\n", - "# define the quantum epanet simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "\n", - "# run the simulation\n", - "results = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Compare the pressure values obtained" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.scatter(pressure_at_5hr_ref.values, pressure_at_5hr.values)\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "plt.show()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/epanet_vqls.ipynb b/docs/notebooks/epanet_vqls.ipynb deleted file mode 100644 index 5ef1153..0000000 --- a/docs/notebooks/epanet_vqls.ipynb +++ /dev/null @@ -1,293 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Define the system " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "metadata": {} - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlv0lEQVR4nO3dfXDU9YHH8c8mSx5IDAESECsEghhCUEMSTEKSzfMuFq1Tezr1oT7V8x6860wfZnRKb46O1dbTTp3qnC22pbbW3jjVG6diDXkiT4QkmBChQASRBwWKiQQa8pz87o/WnDEBAiT57v5+79eMf2R3s/vZrdO83f3trsuyLEsAAMCxgkwPAAAAZhEDAAA4HDEAAIDDEQMAADgcMQAAgMMRAwAAOBwxAACAwxEDAAA4HDEAAIDDEQNAALv//vsVGRlpeoZf+fWvfy2Xy6VDhw6ZngIEDGIAmKBXXnlFzz77rOkZU+7b3/62VqxYIen//7CGhYXpo48+GnPZvLw8rVy58pJu50KP5y9/+UslJiYqLCxMy5Yt03PPPXdJtwPgwogBYIKcEgObN2/WunXrRp3W19enH/3oR5N6O+d7PH/+85/roYceUlJSkp577jllZmbqG9/4hp566qkLXu/XvvY19fT0KC4ublL3AnZGDAAB6OzZs1NyvQcPHlRbW9uYGEhOTtaLL76oY8eOTcntflZPT4/Wr1+vdevW6Q9/+IP+8R//Ub/5zW9099136/HHH9epU6fO+/vBwcEKCwuTy+Wa8q2AXRADsK0NGzbI5XLpwIEDuv/++xUdHa1Zs2bpgQceUHd396jLvvzyy0pNTVV4eLjmzJmjr371qzp69OjI+Xl5edq8ebMOHz4sl8sll8ulxYsXy7IsxcTE6Fvf+tbIZYeHhxUdHa3g4GB1dnaOnP7UU0/J7Xarq6tr5LSKigrl5OQoIiJC0dHRuvXWW7V3795x78eePXt01113afbs2crOzj7n/d65c6diY2OVl5c3cls7duyQz+dTTEyMwsPDtWTJEj344INjfnfz5s2aNWvWmOv/7ne/q6GhoQk/O3Cpj6ckVVZWqqOjQ//6r/866jofeeQRnT17Vps3bz7vbY93zMDixYt18803q7a2VjfeeKPCwsIUHx+v3/zmN+P+bnV1tf7pn/5Jc+fOVVRUlO69994LRggQyNymBwBT7Y477tCSJUv0wx/+UM3NzfrFL36hefPmjTzl/MQTT+g//uM/dMcdd+ihhx7Sxx9/rOeee04ej0ctLS2Kjo7W+vXrdfr0aX344Yf6yU9+IkmKjIyUy+VSVlaWqqurR27v3Xff1enTpxUUFKS6urqR/8quqanRqlWrRg74Kysr00033aT4+Hht2LBBPT09eu6555SVlaXm5uaRP46fuv3227Vs2TI9+eSTOtc3jzc1Ncnn8yktLU1vvPGGwsPDdfLkSXm9XsXGxuqxxx5TdHS0Dh06pNdff33M77/11lsqLi6W2z36/xqWLFmie++9Vy+++KIee+wxXXXVVed8vC/n8ZSklpYWSVJaWtqo601NTVVQUJBaWlp0zz33nPP2z+XAgQP6h3/4B33961/Xfffdp1/96le6//77lZqaqqSkpFGX/bd/+zdFR0drw4YNamtr0wsvvKDDhw9r69atPOMAe7IAm/rP//xPS5L14IMPjjr9y1/+sjV37lzLsizr0KFDVnBwsPXEE0+MusyuXbsst9s96vR169ZZcXFxY27n6aeftoKDg60zZ85YlmVZP/3pT624uDjrxhtvtB599FHLsixraGjIio6Otr75zW+O/F5ycrI1b948q6OjY+S01tZWKygoyLr33nvH3I8777xzzG3fd999VkREhGVZllVbW2tFRUVZ69ats3p7e0cu87//+7+WJKupqem8j9fZs2etsLAwa9OmTSOnbdq0aeR333//fcvtdlvf+MY3Rs7Pzc21kpKSRn6ejMfzkUcesYKDg8fdGBsba331q1897/34dPMHH3wwclpcXJwlyaqurh457eTJk1ZoaKj17W9/e8zvpqamWv39/SOn/9d//ZclyXrjjTfOe9tAoOJlAtjeP//zP4/6OScnRx0dHTpz5oxef/11DQ8P64477lB7e/vIP1deeaWWLVumysrKC15/Tk6OhoaGtG3bNkl/ewYgJydHOTk5qqmpkSTt3r1bnZ2dysnJkSQdP35cO3fu1P333685c+aMXNf111+v4uJivfXWWxe8H59VWVkpn8+nwsJCvf766woNDR05Lzo6WpL05ptvamBg4JzXUVFRob6+Pt10003jnh8fH6+vfe1r2rhxo44fPz7uZSbj8ezp6VFISMi454WFhamnp+eC1zGeFStWjDz+khQbG6uEhAQdPHhwzGUffvhhzZgx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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import wntr\n", - "import wntr_quantum\n", - "\n", - "# Create a water network model\n", - "inp_file = \"networks/Net0.inp\"\n", - "# inp_file = 'networks/Net2Loops.inp'\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# Graph the network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run with the original simulator" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1x0lEQVR4nO3deXhU9aH/8c/JZCVhEpYsIGELhB0CCdkDXEUQ0bpWRXor4MK1eKtStfW2Rav1UltrsS7V6+8WbCvXtWprK1xERAgESNgh7CCgbCIkJBCyzPn9gZlLJDMkYTLnzOT96vN9Hjlz5sxnsM/z8XvO95wxTNM0BQAA/CLE6gAAALQlFC8AAH5E8QIA4EcULwAAfkTxAgDgRxQvAAB+RPECAOBHFC8AAH5E8QIA4EcUL9BGffrppzIMQ++8847VUYA2heJFs82bN0+GYbhHZGSkUlNTdd999+nIkSNWxwto8+fP15w5c5q8/5gxYxr8u6gfV111VeuFBHBJQq0OgMD1xBNPqFevXqqqqtLy5cv1hz/8Qf/85z+1efNmtWvXzup4AWn+/PnavHmzHnjggSa/p1u3bpo9e3aDbV27dvVxMgC+QvGixSZMmKCMjAxJ0l133aVOnTrp2Wef1QcffKBJkyY1+p7KykpFR0f7M+YlMU1TVVVVioqKsjqKR7Gxsfre975ndYxLVltbK5fLpfDwcKujAK2KU83wmcsvv1yStHfvXknSlClTFBMTo927d+vqq69W+/btNXnyZEmSy+XSnDlzNGjQIEVGRioxMVHTp0/XiRMnGhyzuLhY48ePV+fOnRUVFaVevXpp2rRpDfZ54403lJ6ervbt28vpdGrIkCF67rnn3K8//vjjMgzjgrz1p8z37dvn3tazZ09dc801WrhwoTIyMhQVFaVXXnlFknTy5Ek98MADSk5OVkREhPr06aOnn35aLpfron83H3zwgSZOnKiuXbsqIiJCKSkpevLJJ1VXV+feZ8yYMfrHP/6hzz//3H3KuGfPnhc9tnSutCoqKpq077e5XC499dRT6tatmyIjI3XFFVdo165dF+z39ttvKz09XVFRUercubO+973v6Ysvvmiwz5gxYzRmzJgL3jtlypQG32Xfvn0yDEPPPPOM5syZo5SUFEVERGjr1q2SpOeff16DBg1Su3bt1KFDB2VkZGj+/Pkt+n6A3TDjhc/s3r1bktSpUyf3ttraWo0fP175+fl65pln3Kegp0+frnnz5mnq1Kn64Q9/qL179+qFF17QunXrVFhYqLCwMB09elTjxo1TfHy8fvKTnyguLk779u3TX//6V/fxFy1apEmTJumKK67Q008/LUkqLS1VYWGh7r///hZ9j+3bt2vSpEmaPn267r77bvXr10+nT5/W6NGj9cUXX2j69Onq3r27VqxYoUcffVSHDh266HXZefPmKSYmRjNnzlRMTIw++eQTzZo1S+Xl5frNb34jSfrpT3+qsrIyHTx4UL/73e8kSTExMRfNu2PHDkVHR6u6ulqJiYm6++67NWvWLIWFhTXp+/7qV79SSEiIHnroIZWVlenXv/61Jk+erFWrVjXIP3XqVI0cOVKzZ8/WkSNH9Nxzz6mwsFDr1q1TXFxckz7r2+bOnauqqirdc889ioiIUMeOHfXqq6/qhz/8oW6++Wbdf//9qqqq0saNG7Vq1SrdfvvtLfocwFZMoJnmzp1rSjI//vhj89ixY+aBAwfMN954w+zUqZMZFRVlHjx40DRN07zjjjtMSeZPfvKTBu9ftmyZKcl8/fXXG2xfsGBBg+3vvfeeKclcs2aNxyz333+/6XQ6zdraWo/7PPbYY2Zj/1ev/x579+51b+vRo4cpyVywYEGDfZ988kkzOjra3LFjR4PtP/nJT0yHw2Hu37/f4+ebpmmePn36gm3Tp08327VrZ1ZVVbm3TZw40ezRo4fXY51v2rRp5uOPP26+++675p/+9CfzO9/5jinJvOWWWy763iVLlpiSzAEDBphnz551b3/uuedMSeamTZtM0zTN6upqMyEhwRw8eLB55swZ934ffvihKcmcNWuWe9vo0aPN0aNHX/BZd9xxR4PvtXfvXlOS6XQ6zaNHjzbY97rrrjMHDRrU1L8CIOBwqhktNnbsWMXHxys5OVm33XabYmJi9N577+myyy5rsN+9997b4M9vv/22YmNjdeWVV+qrr75yj/T0dMXExGjJkiWS5J5Fffjhh6qpqWk0Q1xcnCorK7Vo0SKffa9evXpp/PjxF2QuKChQhw4dGmQeO3as6urq9Nlnn3k95vnXiE+dOqWvvvpKBQUFOn36tLZt29birP/93/+txx57TDfeeKP+9V//VR988IHuvvtuvfXWWyoqKmrSMaZOndrgumpBQYEkac+ePZLO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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# define the classical simulator\n", - "sim = wntr.sim.EpanetSimulator(wn)\n", - "\n", - "# run the simulation\n", - "results = sim.run_sim()\n", - "\n", - "# Plot results on the network\n", - "pressure_at_5hr_ref = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr_ref,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run with the VQLS solver" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 4/4 [00:00<00:00, 1933.30it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Solving the linear system Ax = b with:\n", - "A = [[ 0.1155474 -0.1155474]\n", - " [-0.1155474 2.454284 ]]\n", - "b = [ -1.614401 230.2773 ]\n", - "x = [83.79769706 97.77185692]\n", - "residue = 0.0002768448823826178\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 4/4 [00:00<00:00, 973.33it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Solving the linear system Ax = b with:\n", - "A = [[ 0.02715334 -0.02715334]\n", - " [-0.02715334 0.8397154 ]]\n", - "b = [-0.9336202 79.97099 ]\n", - "x = [63.01052121 97.27340263]\n", - "residue = 0.0032687535408205733\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 4/4 [00:00<00:00, 2181.98it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Solving the linear system Ax = b with:\n", - "A = [[ 0.02720346 -0.02720346]\n", - " [-0.02720346 0.8412898 ]]\n", - "b = [-0.9353407 80.12097 ]\n", - "x = [62.89924999 97.26975324]\n", - "residue = 0.0003441130815105085\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1x0lEQVR4nO3deXhU9aH/8c/JZCVhEpYsIGELhB0CCdkDXEUQ0bpWRXor4MK1eKtStfW2Rav1UltrsS7V6+8WbCvXtWprK1xERAgESNgh7CCgbCIkJBCyzPn9gZlLJDMkYTLnzOT96vN9Hjlz5sxnsM/z8XvO95wxTNM0BQAA/CLE6gAAALQlFC8AAH5E8QIA4EcULwAAfkTxAgDgRxQvAAB+RPECAOBHFC8AAH5E8QIA4EcUL9BGffrppzIMQ++8847VUYA2heJFs82bN0+GYbhHZGSkUlNTdd999+nIkSNWxwto8+fP15w5c5q8/5gxYxr8u6gfV111VeuFBHBJQq0OgMD1xBNPqFevXqqqqtLy5cv1hz/8Qf/85z+1efNmtWvXzup4AWn+/PnavHmzHnjggSa/p1u3bpo9e3aDbV27dvVxMgC+QvGixSZMmKCMjAxJ0l133aVOnTrp2Wef1QcffKBJkyY1+p7KykpFR0f7M+YlMU1TVVVVioqKsjqKR7Gxsfre975ndYxLVltbK5fLpfDwcKujAK2KU83wmcsvv1yStHfvXknSlClTFBMTo927d+vqq69W+/btNXnyZEmSy+XSnDlzNGjQIEVGRioxMVHTp0/XiRMnGhyzuLhY48ePV+fOnRUVFaVevXpp2rRpDfZ54403lJ6ervbt28vpdGrIkCF67rnn3K8//vjjMgzjgrz1p8z37dvn3tazZ09dc801WrhwoTIyMhQVFaVXXnlFknTy5Ek98MADSk5OVkREhPr06aOnn35aLpfron83H3zwgSZOnKiuXbsqIiJCKSkpevLJJ1VXV+feZ8yYMfrHP/6hzz//3H3KuGfPnhc9tnSutCoqKpq077e5XC499dRT6tatmyIjI3XFFVdo165dF+z39ttvKz09XVFRUercubO+973v6Ysvvmiwz5gxYzRmzJgL3jtlypQG32Xfvn0yDEPPPPOM5syZo5SUFEVERGjr1q2SpOeff16DBg1Su3bt1KFDB2VkZGj+/Pkt+n6A3TDjhc/s3r1bktSpUyf3ttraWo0fP175+fl65pln3Kegp0+frnnz5mnq1Kn64Q9/qL179+qFF17QunXrVFhYqLCwMB09elTjxo1TfHy8fvKTnyguLk779u3TX//6V/fxFy1apEmTJumKK67Q008/LUkqLS1VYWGh7r///hZ9j+3bt2vSpEmaPn267r77bvXr10+nT5/W6NGj9cUXX2j69Onq3r27VqxYoUcffVSHDh266HXZefPmKSYmRjNnzlRMTIw++eQTzZo1S+Xl5frNb34jSfrpT3+qsrIyHTx4UL/73e8kSTExMRfNu2PHDkVHR6u6ulqJiYm6++67NWvWLIWFhTXp+/7qV79SSEiIHnroIZWVlenXv/61Jk+erFWrVjXIP3XqVI0cOVKzZ8/WkSNH9Nxzz6mwsFDr1q1TXFxckz7r2+bOnauqqirdc889ioiIUMeOHfXqq6/qhz/8oW6++Wbdf//9qqqq0saNG7Vq1SrdfvvtLfocwFZMoJnmzp1rSjI//vhj89ixY+aBAwfMN954w+zUqZMZFRVlHjx40DRN07zjjjtMSeZPfvKTBu9ftmyZKcl8/fXXG2xfsGBBg+3vvfeeKclcs2aNxyz333+/6XQ6zdraWo/7PPbYY2Zj/1ev/x579+51b+vRo4cpyVywYEGDfZ988kkzOjra3LFjR4PtP/nJT0yHw2Hu37/f4+ebpmmePn36gm3Tp08327VrZ1ZVVbm3TZw40ezRo4fXY51v2rRp5uOPP26+++675p/+9CfzO9/5jinJvOWWWy763iVLlpiSzAEDBphnz551b3/uuedMSeamTZtM0zTN6upqMyEhwRw8eLB55swZ934ffvihKcmcNWuWe9vo0aPN0aNHX/BZd9xxR4PvtXfvXlOS6XQ6zaNHjzbY97rrrjMHDRrU1L8CIOBwqhktNnbsWMXHxys5OVm33XabYmJi9N577+myyy5rsN+9997b4M9vv/22YmNjdeWVV+qrr75yj/T0dMXExGjJkiWS5J5Fffjhh6qpqWk0Q1xcnCorK7Vo0SKffa9evXpp/PjxF2QuKChQhw4dGmQeO3as6urq9Nlnn3k95vnXiE+dOqWvvvpKBQUFOn36tLZt29birP/93/+txx57TDfeeKP+9V//VR988IHuvvtuvfXWWyoqKmrSMaZOndrgumpBQYEkac+ePZLO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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "from qiskit.primitives import Estimator\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit_algorithms.optimizers import CG\n", - "\n", - "# define the ansatz\n", - "qc = RealAmplitudes(1, reps=3, entanglement=\"full\")\n", - "\n", - "# define the estimator : WARNING This is redefined in vqls_solver becauseof a qiskit bug\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = VQLS_SOLVER(\n", - " estimator=estimator, ansatz=qc, optimizer=CG(), matrix_decomposition=\"pauli\"\n", - ")\n", - "\n", - "\n", - "# define the quantum epanet simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "\n", - "# run the simulation\n", - "results = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Compare the pressure values obtained" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/BUlEQVR4nO3deXRU9eH//+fMZDJJSDIQskOAEDAIyL4FAVnCEmRNQtX286lWq9Wi56N++mlrT6u1p+fQ035/XT9Wba1Lq4ImJGwqKFsQZJEosslq2MzGloUkM0lm7u8PPk6NrIFk7iR5Pc6Zc5g7NzOvc7lkXrzvfd9rMQzDQERERMRPrGYHEBERkY5F5UNERET8SuVDRERE/ErlQ0RERPxK5UNERET8SuVDRERE/ErlQ0RERPxK5UNERET8KsjsAN/k9XopLi4mIiICi8VidhwRERG5DoZhUF1dTWJiIlbr1cc2Aq58FBcXk5SUZHYMERERuQEnT56ke/fuV10n4MpHREQEcDF8ZGSkyWlERETkci5cuMCqVasYNWoUvXv3pqqqiqSkJN/3+NUEXPn46lBLZGSkyoeIiEgA+uKLL8jLy6OmpoaCggIGDRrke+16TpkIuPIhIiIigcnr9VJQUMCmTZsAiI2NJTs7+5rneHyTyoeIiIhcU3V1NUuXLuX48eMADBs2jBkzZmC325v9XiofIiIiclXV1dW88MIL1NbWEhwczKxZs7jttttu+P1UPkREROSqIiIi6Nu3L2VlZWRnZ9O1a9ebej+VDxEREblEZWUldrudsLAwAGbOnInVaiUo6OarQ7POEHn++ecZNGiQbyZKWloa7733nu91l8vFwoUL6dq1K+Hh4WRlZVFWVnbTIUVERMR/Dh06xIsvvsiyZcswDAOA4ODgFike0Mzy0b17d37zm99QWFjIzp07mTx5MnPnzmXfvn0APPHEE6xcuZKcnBwKCgooLi4mMzOzRYKKiIhI6/J4PKxZs4bFixdTV1fHhQsXcLlcLf45FuOrSnODoqKi+N3vfkd2djYxMTG8+eabZGdnA3DgwAFuvfVWtm7dypgxY67r/aqqqnA6nVRWVuo6HyIiIn5SUVFBbm4uX375JQCjR48mPT39ukc7mvP9fcPjJx6Ph5ycHGpqakhLS6OwsJCGhgbS09N96/Tr148ePXpctXy43W7cbneT8CIiItLyPF6DHUXnKK92ERsRwqjkKGxWCwcOHGD58uW4XC5CQkKYO3cu/fr1a7UczS4fe/bsIS0tDZfLRXh4OPn5+fTv359du3YRHBxM586dm6wfFxdHaWnpFd9v0aJFPPvss80OLiIiItdv9d4Snl25n5LKfx9GSXCG8IuZqRzeuAaXy0W3bt3Izs6+5Lu8pTW7fKSmprJr1y4qKyvJzc3l3nvvpaCg4IYDPPXUUzz55JO+519dG15ERERaxuq9JTzy+id88zyL0koXCxd/xu9mTqS/u5zJkydjs9laPU+zy0dwcDB9+vQBYPjw4Xz88cf86U9/4q677qK+vp6KioomjamsrIz4+Pgrvp/D4cDhcDQ/uYiIiFyTx2vw7Mr9TYpHL+s57BYvhz3RWID/b8sZNv8kHZv12vdlaQnNuxj7ZXi9XtxuN8OHD8dut7Nu3TrfawcPHuTEiROkpaXd7MeIiIjIDdhRdM53qMWGlzH240xyfMEY+3GcljoMoKTSxY6ic37L1KyRj6eeeoqMjAx69OhBdXU1b775Jhs3bmTNmjU4nU4eeOABnnzySaKiooiMjOSxxx4jLS3tume6iIiISMsqr75YPCItLiYGH6WrtQ6AfY1xVBkhl6znD80qH+Xl5Xz3u9+lpKQEp9PJoEGDWLNmDVOnTgXgD3/4A1arlaysLNxuN9OnT+evf/1rqwQXERGRa4uNCKG37Sxj7cexW7zUGUFsqk+m2Ou8ZD1/uenrfLQ0XedDRESkZRiGwapV7/DJJ4UAlHjCKajvTR3BvnUsQLwzhM0/mXxT53z45TofIiIiEtgsFgtO58UisKshgc8aE/Hy74Lx1Z+emd3fbyebgsqHiIhIu+N2u30zSceNG0dKSgp7zlsvuc5HvDOEZ2b3Z8bABL/mU/kQERFpJ+rr63n33XcpKSnh+9//Pna7HavVSrdu3ejWDab2j7/sFU79TeVDRESkHSgvLycnJ4czZ85gsVg4duwYffv2bbKOzWohLaWrSQn/TeVDRESkDTMMg08//ZT33nuPxsZGIiIiyMzMpFevXmZHuyKVDxERkTbK7XbzzjvvsGfPHgD69OnDvHnz6NSpk8nJrk7lQ0REpI1677332LNnDxaLhcmTJ3P77bdjsfj/HI7mUvkQERFpoyZNmkRZWZnv6uNtxU3f20VERET8w+VysXv3bt9zp9PJQw891KaKB2jkQ0REpE0oLi4mNzeX8+fP43A4SE1NBWgTh1m+SeVDREQkgBmGwY4dO/jggw/weDx07tyZ8PBws2PdFJUPERGRAFVXV8eKFSs4cOAAAP369WPu3LmEhPjvJnCtQeVDREQkAJ06dYrc3FwqKyux2WxMmzaNkSNHtsnDLN+k8iEiIhKAKisrqayspEuXLmRnZ5OYmGh2pBaj8iEiIhIgDMPwjWwMGDCA+vp6br311jZ/mOWbNNVWREQkAJw4cYKXXnqJCxcu+JYNHTq03RUPUPkQERExlWEYbN68mVdffZXi4mLWrVtndqRWp8MuIiIiJqmpqWHZsmUcOXIEgNtuu40ZM2aYnKr1qXyIiIiY4Pjx4yxdupTq6mqCgoLIyMhg6NCh7WI2y7WofIiIiPjZwYMHeeuttzAMg+joaBYsWEBsbKzZsfxG5UNERMTPkpOTiYqKIikpiYyMDIKDg82O5FcqHyIiIn5QUlJCfHw8FouF4OBgvv/977fLmSzXQ7NdREREWpHX62XDhg387W9/Y9u2bb7lHbV4gEY+REREWk11dTVLly7l+PHjAJw7d87kRIFB5UNERKQVHDlyhPz8fGprawkODmbWrFncdtttZscKCCofIiIiLcjr9bJ+/Xq2bNkCQHx8PNnZ2XTt2tXkZIFD5UNERKQFnT59mq1btwIwYsQIpk+fTlCQvm6/TltDRESkBcXFxZGRkUFoaCgDBgwwO05AUvkQERG5CR6Phw0bNjBw4EDi4+OBiyMecmWaaisiInKDKioqeOWVV9iyZQu5ubl4PB6zI7UJGvkQERG5AQcOHGD58uW4XC5CQkJIT0/HZrOZHatNUPkQERFphsbGRtauXcv27dsB6NatG9nZ2XTu3NncYG2IyoeIiMh1qq2t5fXXX6ekpASAtLQ0pkyZohGPZlL5EBERuU4hISGEhIQQGhrKvHnzuOWWW8yO1CapfIiIiFxFY2MjhmFgt9uxWq1kZmbi8XhwOp1mR2uzNNtFRETkCs6ePctLL73E6tWrfcvCw8NVPG6SRj5EREQuY8+ePaxatYr6+nqqq6uZNGkS4eHhZsdqF1Q+REREvqahoYH33nuPTz/9FICePXuSlZWl4tGCVD5ERET+z5kzZ8jJyaG8vByACRMmcMcdd2C16iyFlqTyISIiwsXLpL/++utUVlbSqVMnMjMz6d27t9mx2iWVDxEREcBms5GRkcGOHTuYP3++DrO0IpUPERHpsMrKyqipqfGNcKSmpnLLLbdgsVhMTta+qXyIiEiHYxgGn376Ke+99x52u50f/OAHvumzKh6tT+VDREQ6FLfbzTvvvMOePXsA6NWrF0FB+jr0J21tERHpMEpLS8nJyeHcuXNYLBYmT57M7bffrtEOP1P5EBGRDuHjjz9mzZo1eDweIiMjycrKokePHmbH6pCaNXF50aJFjBw5koiICGJjY5k3bx4HDx5sss7EiROxWCxNHg8//HCLhhYREWmusrIyPB4Pt9xyCz/4wQ9UPEzUrJGPgoICFi5cyMiRI2lsbORnP/sZ06ZNY//+/XTq1Mm33oMPPsivfvUr3/OwsLCWSywiInKdDMPwHVKZPn063bp1Y8iQITrMYrJmlY+v31gH4NVXXyU2NpbCwkImTJjgWx4WFkZ8fHzLJBQREWkmwzDYsWMHR48e5e6778ZqtWK32xk6dKjZ0YSbvKttZWUlAFFRUU2Wv/HGG0RHRzNw4ECeeuopamtrr/gebrebqqqqJg8REZEbVVdXx9tvv83q1as5fPgw+/fvNzuSfMMNn3Dq9Xp5/PHHuf322xk4cKBv+be//W169uxJYmIiu3fv5ic/+QkHDx4kLy/vsu+zaNEinn322RuNISIi4nPq1Clyc3OprKzEarUybdo0BgwYYHYs+QaLYRjGjfzgI488wnvvvcfmzZvp3r37Fddbv349U6ZM4ciRI6SkpFzyutvtxu12+55XVVWRlJREZWUlkZGRNxJNREQ6GMMw2Lp1K+vWrcPr9dKlSxeys7NJTEw0O1qHUVVVhdPpvK7v7xsa+Xj00UdZtWoVmzZtumrxABg9ejTAFcuHw+HA4XDcSAwRERHg4jmJO3bsAKB///7Mnj2bkJAQk1PJlTSrfBiGwWOPPUZ+fj4bN24kOTn5mj+za9cuABISEm4ooIiIyLUMHTqU3bt3M2XKFIYPH67ZLAGuWYddfvjDH/Lmm2+yfPlyUlNTfcudTiehoaEcPXqUN998k5kzZ9K1a1d2797NE088Qffu3SkoKLiuz2jOsI2IiHRMhmFQXFxMt27dfMtcLpdGO0zUnO/vZpWPKzXJV155hfvuu4+TJ0/yH//xH+zdu5eamhqSkpKYP38+P//5z6+7SKh8iIjI1dTU1LBs2TK++OIL7r///iYFRMzTaud8XKunJCUlXfcIh4iISHMdO3aMvLw8qqurCQoK4vz58yofbZDu7SIiIgHP6/Xy4YcfUlBQgGEYREdHs2DBAmJjY82OJjdA5UNERALahQsXyMvLo6ioCIDBgwczc+ZMgoODTU4mN0rlQ0REAtr+/fspKirCbrczc+ZMhgwZYnYkuUkqHyIiEtBGjhzJ+fPnGTZsGDExMWbHkRZwU/d2ERERaWnV1dUsX76c+vp64OJMy+nTp6t4tCMa+RARkYBx5MgR8vPzqa2txWq1Mnv2bLMjSStQ+RAREdN5vV7Wr1/Pli1bAIiLi2Ps2LEmp5LWovIhIiKmqqysZOnSpZw8eRKAESNGMH36dIKC9BXVXulvVkRETHPixAmWLFlCXV0dDoeD2bNnM2DAALNjSStT+RAREdNERUVhtVpJSEggOzubqKgosyOJH6h8iIiIX9XV1REaGgpAeHg49957L126dNFhlg5EU21FRMRvDhw4wJ///Gf27dvnWxYTE6Pi0cHob1tERFpdY2Mja9euZfv27QB88skn9O/f/4p3S5f2TeVDRERa1fnz58nJyaGkpASAtLQ0pkyZouLRgal8iIhIq9m/fz8rVqzA7XYTGhrK3LlzSU1NNTuWmEzlQ0REWkVZWRk5OTkAJCUlkZWVhdPpNDmVBAKVDxERaRVxcXGMGTMGm83GpEmTsNlsZkeSAKHyISIiLWbv3r0kJSX5RjimTZumczvkEppqKyIiN62hoYEVK1awdOlSli5disfjAVDxkMvSyIeIiNyU06dPk5ubS3l5OQDJyckqHXJVKh8iInLDPvvsM9555x0aGhro1KkTmZmZ9O7d2+xYEuBUPkREpNkaGhp499132bVrF3BxtCMzM5Pw8HBzg0mboPIhIiI3pLi4GIvFwh133MH48eOxWnUaoVwflQ8REbkuhmEAF08itdvtLFiwgAsXLtCrVy9zg0mbo5oqIiLX5Ha7yc/P58MPP/Qti46OVvGQG6KRDxERuarS0lJyc3M5e/YsNpuNoUOHEhERYXYsacNUPkRE5LIMw6CwsJDVq1fj8XiIjIwkKytLxUNumsqHiIhcwuVysWrVKvbt2wdA3759mTdvHmFhYSYnk/ZA5UNERJrwer28/PLLnD59GqvVypQpU0hLS9OFw6TF6IRTERFpwmq1MnLkSJxOJ9/73vcYO3asioe0KI18iIgILpeL6upqYmJiABgxYgSDBg3C4XCYnEzaI5UPEZEO7ssvvyQ3NxeAH/zgB4SEhGCxWFQ8pNWofIiIdFCGYbBt2zbWrl2L1+ulS5cuVFdXExISYnY0aedUPkREOqC6ujqWLVvGoUOHAOjfvz+zZ89W8RC/UPkQEelgTp48SW5uLlVVVdhsNqZPn86IESN0Uqn4jcqHiEgHs2XLFqqqqoiKimLBggXEx8ebHUk6GJUPEZEOZs6cORQUFDB58mSdVCqm0HU+RETauePHj/PBBx/4noeFhZGRkaHiIabRyIeISDvl9XrZvHkzGzduxDAMEhMTGTBggNmxRFQ+RETaowsXLpCXl0dRUREAgwcPpm/fvianErlI5UNEpJ354osvyMvLo6amBrvdzsyZMxkyZIjZsUR8VD5ERNqRrVu38v777wMQExPDggULfJdMFwkUKh8iIu1IbGwsAEOHDiUjIwO73W5yIpFLqXyIiLRxtbW1hIWFAZCSksLDDz9MXFycyalErkxTbUVE2iiv18u6dev4y1/+wrlz53zLVTwk0Kl8iIi0QVVVVbz22mts3rwZl8vFgQMHzI4kct2aVT4WLVrEyJEjiYiIIDY2lnnz5nHw4MEm67hcLhYuXEjXrl0JDw8nKyuLsrKyFg0tItKRHT58mBdeeIETJ07gcDjIzs5m7NixZscSuW7NKh8FBQUsXLiQbdu28cEHH9DQ0MC0adOoqanxrfPEE0+wcuVKcnJyKCgooLi4mMzMzBYPLiLS0Xg8Hj744APefPNN6urqSEhI4KGHHtKFw6TNsRiGYdzoD58+fZrY2FgKCgqYMGEClZWVxMTE8Oabb5KdnQ3AgQMHuPXWW9m6dStjxoy55ntWVVXhdDqprKwkMjLyRqOJiLQ7X59GO2rUKKZOnUpQkOYNSGBozvf3Te21lZWVAERFRQFQWFhIQ0MD6enpvnX69etHjx49rlg+3G43bre7SXgREbnUqFGjOHr0KCNGjKBfv35mxxG5YTd8wqnX6+Xxxx/n9ttvZ+DAgQCUlpYSHBxM586dm6wbFxdHaWnpZd9n0aJFOJ1O3yMpKelGI4mItCsej4ft27fj9XoBsNlsfOc731HxkDbvhsvHwoUL2bt3L0uWLLmpAE899RSVlZW+x8mTJ2/q/URE2oPz58/z8ssvs3r1ajZs2OBbbrFYTEwl0jJu6LDLo48+yqpVq9i0aRPdu3f3LY+Pj6e+vp6Kioomox9lZWXEx8df9r0cDodu6ywi8jX79+9nxYoVuN1uQkNDm/yeFWkPmlU+DMPgscceIz8/n40bN5KcnNzk9eHDh2O321m3bh1ZWVkAHDx4kBMnTpCWltZyqUVE2qHGxkbWrFnDzp07AUhKSiIrKwun02lyMpGW1azysXDhQt58802WL19ORESE7zwOp9NJaGgoTqeTBx54gCeffJKoqCgiIyN57LHHSEtLu66ZLiIi7Z3Ha7Cj6Bzl1S5iI0IYlRyFzWrh3Llz5OTk+H6v3n777UyaNAmbzWZyYpGW16zy8fzzzwMwceLEJstfeeUV7rvvPgD+8Ic/YLVaycrKwu12M336dP7617+2SFgRkbZs9d4Snl25n5JKl29ZgjOEZ2b3Z3hcEGfPniUsLIz58+fTp08fE5OKtK6bus5Ha9B1PkSkPVq9t4RHXv+Epr9wDSxcPIH0+f8YRp+QGmJjY/W7T9qk5nx/694uIiKtzOM1eHbl/ibFw2mpY47jc2Kt1QA8u3I/yb1TVDykQ1D5EBFpZTuKzjU51JJiO8tsx+d0tdYyyn4SA4OSShc7is5d5V1E2g9dl1dEpJWVV18sHkF4GGM/Qd+gswAUeyLYVN8b/u/Qy1fribR3Kh8iIq0sNiKEzpY6JgYfpYvVhdeAXY2J7G5MwMDSZD2RjkDlQ0SklfUO9zAn5HNseKk17Gys702ZN8L3ugWId16cdivSEah8iIi0stjYGGK69WTPibN8WJ9MHXbfa1+Nezwzuz82qy6dLh2DTjgVEWkFZWVluFwXz+GwWCw8fO89zF9wF52dEU3Wi3eG8Px/DGPGwAQzYoqYQiMfIiItyDAMCgsLWb16NampqWRnZ2OxWLDb7WTclsi0AQmXvcKpSEei8iEi0kLcbjcrV65k3759ADQ0NNDY2Ijd/u/DLDarhbSUrmZFFAkIKh8iIi2gpKSEnJwczp8/j9VqZcqUKaSlpWGxaFRD5JtUPkREboJhGHz88ce8//77eDwenE4n2dnZdO/e3exoIgFL5UNE5Ca43W42b96Mx+OhX79+zJkzh9DQULNjiQQ0lQ8RkZsQEhJCVlYWpaWljBo1SodZRK6DyoeISDMYhsG2bdsICwtj8ODBAPTs2ZOePXuanEyk7VD5EBG5TrW1tSxfvpxDhw5ht9vp1asXTqfT7FgibY7Kh4jIdTh58iS5ublUVVVhs9mYOnUqkZGRZscSaZNUPkRErsIwDLZs2cL69esxDIOoqCgWLFhAfHy82dFE2iyVDxGRK/B6vSxZsoTDhw8DMHDgQGbNmoXD4TA5mUjbpvIhInIFVquVuLg4ioqKyMjIYOjQoZrNItICVD5ERL7G6/XicrkICwsDYNKkSQwePJjo6GiTk4m0H7qrrYjI/7lw4QJvvPEGb7zxBh6PB7g4+qHiIdKyNPIhIgJ88cUX5OXlUVNTg91up6SkRJdIF2klKh8i0qF5vV4KCgrYtGkTADExMSxYsICYmBiTk4m0XyofItJhVVdXk5eXx7FjxwAYOnQoGRkZ2O12c4OJtHMqHyLSYa1YsYJjx44RHBzMrFmzuO2228yOJNIhqHyISIeVkZHBihUrmD17Nl27djU7jkiHodkuItJhVFVV8emnn/qeR0VFcd9996l4iPiZRj5EpEM4dOgQy5Yto66ujsjISFJSUsyOJNJhqXyISLvm8XhYt24dW7duBSAhIYEuXbqYnEqkY1P5EJF2q6KigqVLl3Lq1CkARo0axdSpUwkK0q8+ETPpX6CItEsHDx5k2bJluFwuQkJCmDNnDrfeeqvZsUQElQ8Raafq6upwuVx069aN7OxsOnfubHYkEfk/Kh8i0m4YhuG76+yQIUOw2Wz0798fm81mcjIR+TpNtRWRdmH//v08//zz1NbW+pbddtttKh4iAUjlQ0TatMbGRt555x1ycnI4ffo0H330kdmRROQadNhFRNqss2fPkpubS2lpKQC33347kyZNMjmViFyLyoeItEl79uxh1apV1NfXExYWxvz58+nTp4/ZsUTkOqh8iEibU1hYyKpVqwDo2bMnmZmZREZGmpxKRK6XyoeItDkDBgxgy5YtDBw4kIkTJ2K16vQ1kbZE5UNE2oRjx47Rs2dPLBYLISEhPPLII9jtdrNjicgN0H8XRCSg1dfXs3z5cl577TUKCwt9y1U8RNoujXyISMAqLy8nNzeX06dPY7FYcLlcZkcSkRag8iEiAccwDHbt2sW7775LY2Mj4eHhZGVl0atXL7OjiUgLUPkQkYBSX1/PqlWr2LNnDwApKSnMnz+fTp06mZxMRFqKyoeIBJSysjL27t2LxWJh0qRJjBs3zne/FhFpH5p9wummTZuYPXs2iYmJWCwWli1b1uT1++67D4vF0uQxY8aMlsorIu1cUlISM2bM4L777mP8+PEqHiLtULPLR01NDYMHD+a555674jozZsygpKTE91i8ePFNhRSR9svtdrN8+XLOnDnjWzZq1Ch69OhhYioRaU3NPuySkZFBRkbGVddxOBzEx8ffcCgR6RhKSkrIycnh/PnzlJWV8eCDD2qkQ6QDaJVzPjZu3EhsbCxdunRh8uTJ/PrXv6Zr166XXdftduN2u33Pq6qqWiOSiAQQwzD4+OOPef/99/F4PDidTmbOnKniIdJBtHj5mDFjBpmZmSQnJ3P06FF+9rOfkZGRwdatW7HZbJesv2jRIp599tmWjiEiAcrlcrFixQo+//xzAFJTU5k7dy6hoaEmJxMRf7EYhmHc8A9bLOTn5zNv3rwrrvPFF1+QkpLC2rVrmTJlyiWvX27kIykpicrKSt0oSqSdqaio4LXXXqOiogKr1crUqVMZPXq0RjxE2oGqqiqcTud1fX+3+lTb3r17Ex0dzZEjRy5bPhwOBw6Ho7VjiEgAiIyMJCIiAoDs7Gy6detmciIRMUOrl49Tp05x9uxZEhISWvujRCQA1dXVERwcjM1mw2q1smDBAux2OyEhIWZHExGTNLt8XLhwgSNHjvieFxUVsWvXLqKiooiKiuLZZ58lKyuL+Ph4jh49yo9//GP69OnD9OnTWzS4iAS+kydPkpubS//+/X2/A74a+RCRjqvZ1/nYuXMnQ4cOZejQoQA8+eSTDB06lKeffhqbzcbu3buZM2cOt9xyCw888ADDhw/nww8/1KEVkQ7EMAy2bNnCK6+8QlVVFYcOHaK+vt7sWCISIG7qhNPW0JwTVkQk8NTU1LBs2TLfCOnAgQOZNWuW/gMi0s4F1AmnItJxHD9+nKVLl1JdXU1QUBAzZsxg2LBhms0iIk2ofIhIi3C73SxZsgSXy0XXrl1ZsGABcXFxZscSkQCk8iEiLcLhcDBr1iwOHTrEnXfeSXBwsNmRRCRAqXyIyA0rKioCIDk5GYABAwYwYMAAMyOJSBug8iEizeb1etm0aRMFBQV06tSJhx9+mPDwcLNjiUgbofIhIs1SXV1NXl4ex44dA6Bv376aySIizaLyISLX7ejRo+Tl5VFbW4vdbmfWrFkMGjTI7Fgi0saofIjINRmGwfr169m8eTMAcXFxZGdnEx0dbXIyEWmLVD5E5LpUVVUBMHz4cKZPn47dbjc5kYi0VSofInJFXq8Xq9WKxWLhzjvv5NZbb6Vfv35mxxKRNq7Z93YRkfbP4/HwwQcf8Pbbb/PVHRiCg4NVPESkRWjkQ0SaqKioYOnSpZw6dQqAY8eO+a7jISLSElQ+RMTnwIEDLF++HJfLhcPhYO7cuSoeItLiVD5ExHeYZfv27QAkJiaSnZ1Nly5dTE4mIu2RyoeIkJeXx/79+wEYM2YM6enp2Gw2k1OJSHul8iEipKWlcfz4cWbPnk1qaqrZcUSknbMYX53KHiCqqqpwOp1UVlYSGRlpdhyRdqmxsZHi4mJ69OjhW9bQ0KBrd4jIDWvO97em2op0MOfOneMf//gH//znPykrK/MtV/EQEX/RYReRDmTv3r2sXLmS+vp6wsLCqK2tNTuSiHRAKh8iHUBDQwOrV6/mk08+AaBnz55kZmbq0KaImELlQ6SdO3PmDDk5OZSXlwMwfvx4Jk6ciNWqo64iYg6VD5F2bv/+/ZSXl9OpUyfmz59PSkqK2ZFEpINT+RBp58aNG0d9fT2jR48mIiLC7DgiIprtItLelJeXk5ubS0NDAwBWq5X09HQVDxEJGBr5EGknDMNg165dvPvuuzQ2NuJ0Opk6darZsURELqHyIdIO1NfX884777B7924AUlJSGDt2rMmpREQuT+VDpI0rKysjJyeHs2fPYrFYmDx5MrfffjsWi8XsaCIil6XyIdKGHThwgKVLl9LY2EhkZCRZWVlNLpkuIhKIVD5E2rCEhASCgoJITk5m3rx5hIWFmR1JROSaVD5E2pjq6mrfzBWn08mDDz5Ily5ddJhFRNoMTbUVaSMMw2DHjh386U9/4uDBg77lUVFRKh4i0qZo5EOkDXC5XKxYsYLPP/8cuHiuR2pqqsmpRERujMqHSID78ssvyc3NpaKiAqvVytSpUxk9erTZsUREbpjKh0iAMgyD7du388EHH+D1euncuTPZ2dl069bN7GgiIjdF5UMkQB0/fpw1a9YA0L9/f2bPnk1ISIjJqUREbp7Kh0iA6tWrF6NGjSI6OpoRI0bopFIRaTdUPkQCxFezWQYMGEB4eDgAGRkZJqcSEWl5mmorEgBqa2tZvHgxq1evJi8vD8MwzI4kItJqNPIhYrLjx4+zdOlSqqurCQoKYsCAAWZHEhFpVSofIiYxDIPNmzezYcMGDMOga9euLFiwgLi4OLOjiYi0KpUPERPU1taSl5fH0aNHARg0aBB33nknwcHBJicTEWl9Kh8iJrDZbFRUVGC325k5cyZDhgwxO5KIiN+ofIj4idfrxWKxYLFYcDgcfOtb38JisRATE2N2NBERv9JsFxE/qK6u5l//+hfbtm3zLYuNjVXxEJEOSSMfIq3s6NGj5OXlUVtbS2lpKUOHDtWVSkWkQ1P5EGklXq+XDRs2sHnzZgDi4uLIzs5W8RCRDq/Zh102bdrE7NmzSUxMxGKxsGzZsiavG4bB008/TUJCAqGhoaSnp3P48OGWyivSJlRVVfHaa6/5isfw4cN54IEHiI6ONjmZiIj5ml0+ampqGDx4MM8999xlX//tb3/Ln//8Z1544QW2b99Op06dmD59Oi6X66bDirQF9fX1/P3vf+fEiRMEBweTlZXFrFmzsNvtZkcTEQkIzT7skpGRccX7TRiGwR//+Ed+/vOfM3fuXAD++c9/EhcXx7Jly7j77rtvLq1IGxAcHExaWhp79+4lOzubqKgosyOJiASUFp3tUlRURGlpKenp6b5lTqeT0aNHs3Xr1sv+jNvtpqqqqslDpK2pqKjg9OnTvudpaWncf//9Kh4iIpfRouWjtLQU4JLLQ8fFxfle+6ZFixbhdDp9j6SkpJaMJNLqDhw4wIsvvshbb71FfX09ABaLhaAgnc8tInI5pl/n46mnnqKystL3OHnypNmRRK6Lx+Nh9erVvPXWW7hcLhwOB2632+xYIiIBr0X/axYfHw9AWVkZCQkJvuVlZWVXvHy0w+HA4XC0ZAyRVnf+/Hlyc3MpLi4GYMyYMaSnp2Oz2UxOJiIS+Fp05CM5OZn4+HjWrVvnW1ZVVcX27dtJS0tryY8SMc3+/ft58cUXKS4uJiQkhLvvvpvp06ereIiIXKdmj3xcuHCBI0eO+J4XFRWxa9cuoqKi6NGjB48//ji//vWv6du3L8nJyfziF78gMTGRefPmtWRuEVMYhsHOnTtxu910796d7OxsnE6n2bFERNqUZpePnTt3MmnSJN/zJ598EoB7772XV199lR//+MfU1NTw0EMPUVFRwbhx41i9erWu6ijtgsViITMzk507dzJ+/HiNdoiI3ACLYRiG2SG+rqqqCqfTSWVlJZGRkWbHEWHv3r0UFxczbdo0s6OIiASs5nx/ay6gyBU0NDSwevVqPvnkEwBSUlJISUkxOZWISNun8iFyGWfOnCEnJ4fy8nIAxo8fT3JyssmpRETaB5UPkW/47LPPeOedd2hoaKBTp07Mnz9fIx4iIi1I5UPka9asWcO2bdsA6NWrF5mZmURERJicSkSkfTH9CqcigaRXr15YLBYmTpzIf/7nf6p4iIi0As12kQ7NMAyqq6ub7Gvnzp3TDeFERJqpOd/fGvmQDqu+vp78/HxeeOGFJndTVvEQEWldOudDOqTS0lJyc3M5e/YsFouFY8eOMWjQILNjiYh0CCof0qEYhkFhYSGrV6/G4/EQERFBVlYWPXv2NDuaiEiHofIhHYbb7WblypXs27cPgL59+zJv3jzCwsJMTiYi0rGofEiHsWXLFvbt24fVamXy5MmMHTsWi8VidiwRkQ5H5UM6jPHjx1NWVsa4ceNISkoyO46ISIel2S7SbrlcLjZt2sRXs8ntdjv33HOPioeIiMk08iHt0pdffklubi4VFRUATJgwwdxAIiLio/Ih7YphGGzbto21a9fi9Xrp3Lmz7ssiIhJgVD6k3airq2P58uUcPHgQgFtvvZU5c+YQEhJicjIREfk6lQ9pF7788kvefvttqqqqsNlsTJs2jZEjR2o2i4hIAFL5kHbBZrNRU1NDVFQU2dnZJCQkmB1JRESuQOVD2iyPx4PNZgMgPj6ee+65h+7du+NwOExOJiIiV6OpttImHT9+nP/93//lyy+/9C1LSUlR8RARaQNUPqRNMQyDTZs28dprr1FRUcHGjRvNjiQiIs2kwy7SZly4cIH8/Hy++OILAAYNGsSdd95pcioREWkulQ9pE4qKisjLy+PChQsEBQUxc+ZMhgwZotksIiJtkMqHBLyTJ0/yr3/9C8MwiImJITs7m9jYWLNjiYjIDVL5kIDXvXt3+vTpQ6dOnZg5cyZ2u93sSCIichNUPiQgHTt2jMTERIKDg7FYLHzrW98iKEi7q4hIe6DZLhJQvF4v69ev57XXXuPdd9/1LVfxEBFpP/QbXQJGVVUVS5cu5cSJE8DFwuH1erFa1ZFFRNoTlQ8JCIcPHyY/P5+6ujqCg4OZPXs2AwcONDuWiIi0ApUPMZXH42H9+vV89NFHwMXLpC9YsICoqCiTk4mISGtR+RBT1dXVsWvXLgBGjhzJtGnTdH6HiEg7p9/yYqrw8HCysrJwuVz079/f7DgiIuIHKh/iVx6Ph7Vr19K9e3cGDBgAQO/evU1OJSIi/qTyIX5z/vx5cnNzKS4uxuFw0Lt3b0JDQ82OJSIifqbyIX7x+eefs3z5ctxuNyEhIcybN0/FQ0Skg1L5kFbV2NjI+++/z8cffwxcvFR6VlYWnTt3NjeYiIiYRuVDWk1jYyMvv/wyJSUlAIwdO5bJkydjs9lMTiYiImZS+ZBWExQURI8ePaioqGD+/Pn07dvX7EgiIhIAVD6kRTU0NFBfX0+nTp0ASE9PZ+zYsURGRpqcTEREAoVumiEt5syZM/zjH//g7bffxuv1AhdHP1Q8RETk6zTyIS1i9+7drFq1ioaGBsLCwjh37hzR0dFmxxIRkQCk8iE3paGhgXfffdd3ifRevXqRmZlJRESEucFERCRgqXzIDSsvLyc3N5fTp08DcMcddzBhwgSsVh3NExGRK1P5kBtiGAYrVqzg9OnThIeHk5mZSXJystmxRESkDVD5kBtisViYO3cu69atY9asWYSHh5sdSURE2giNj8t1Kysr45NPPvE9j4mJ4e6771bxEBGRZmnx8vHLX/4Si8XS5NGvX7+W/hjxI8MwKCws5KWXXmLVqlWcOHHC7EgiItKGtcphlwEDBrB27dp/f0iQju60VW63m1WrVrF3714A+vTpoym0IiJyU1qlFQQFBREfH98aby1+VFJSQm5uLufOncNisTBlyhTGjh2LxWIxO5qIiLRhrVI+Dh8+TGJiIiEhIaSlpbFo0SJ69Ohx2XXdbjdut9v3vKqqqjUiSTPt3LmT1atX4/F4iIyMJDs7m6SkJLNjiYhIO9Di53yMHj2aV199ldWrV/P8889TVFTE+PHjqa6uvuz6ixYtwul0+h76ggsMXq8Xj8dDamoqDz/8sP5eRESkxVgMwzBa8wMqKiro2bMnv//973nggQcuef1yIx9JSUlUVlbqniB+5vF4fLe7NwyDQ4cOccstt+gwi4iIXFNVVRVOp/O6vr9b/UzQzp07c8stt3DkyJHLvu5wOHA4HK0dQ67CMAy2b99OYWEhDzzwACEhIVgsFlJTU82OJiIi7VCrX+fjwoULHD16lISEhNb+KLkBdXV1vPXWW6xZs4YzZ8747tEiIiLSWlp85ONHP/oRs2fPpmfPnhQXF/PMM89gs9m45557Wvqj5CadOnWK3NxcKisrsdlsTJs2jZEjR5odS0RE2rkWLx+nTp3innvu4ezZs8TExDBu3Di2bdtGTExMS3+U3CDDMPjoo49Yv349Xq+XqKgosrOzNTolIiJ+0eLlY8mSJS39ltLCPvzwQzZs2ADAwIEDmTVrls67ERERv9GlRzugESNG8NlnnzF27FiGDRum2SwiIuJXKh8dwFfTZr+avRIWFsYPf/hD37RaERERf9Jdbdu5mpoaXn/9dZYsWcJnn33mW67iISIiZtHIRztWVFREXl4eFy5c0M39REQkYOgbqR3yer1s2rSJTZs2YRgGMTExLFiwQDOOREQkIKh8tDPV1dXk5+dTVFQEwJAhQ5g5cyZ2u93kZCIiIhepfLQz5eXlFBUVYbfbmTVrFoMGDTI7koiISBMqH+1MSkoKM2fOJDk5mejoaLPjiIiIXEKzXdq4qqoqFi9ezPnz533LRo4cqeIhIiIBSyMfbdiRI0fIz8+ntraWhoYGvvvd75odSURE5JpUPtogj8fDhg0b2LJlCwDx8fHceeedJqcSERG5PiofbUxlZSVLly7l5MmTwMVDLNOmTdN1PEREpM3QN1YbUlZWxmuvvUZdXR0Oh4M5c+bQv39/s2OJiIg0i8pHG9K1a1c6d+5Mly5dyM7OpkuXLmZHEhERaTaVjwBXWVlJREQEVquVoKAgvv3tbxMaGqp7s4iISJulqbYB7PPPP+f5559n48aNvmXh4eEqHiIi0qZp5CMANTY28v777/Pxxx8DcOzYMTwej0qHiIi0CyofAebcuXPk5uZSUlICwNixY5k8ebKKh4iItBsqHwFk3759rFixgvr6ekJDQ5k/fz59+/Y1O5aIiEiLUvkIEBcuXGD58uU0NDTQo0cPsrKyiIyMNDuWiIhIi1P5CBDh4eHMnDmTs2fPMmnSJKxWnQssIiLtk8qHiXbv3k3nzp3p0aMHAEOGDDE3kIiIiB+ofJigoaGBd999l127dhEZGcnDDz9MaGio2bFERET8QuXDz06fPk1OTg6nT58GYOjQoTgcDpNTiYiI+I/Khx/t2rWLd955h8bGRsLDw8nMzCQ5OdnsWCIiIn6l8uEHHo+HlStX8tlnnwHQu3dv5s+fT3h4uMnJRERE/E/lww+sViv19fVYLBYmTZrEuHHjsFgsZscSERExhcpHKzEMA4/HQ1BQEBaLhTlz5jBmzBjfzBYREZGOSuWjFbjdblatWoVhGGRlZWGxWAgJCVHxEBERQeWjxZWUlJCbm8u5c+ewWCyMGzeO+Ph4s2OJiIgEDJWPFmIYBh9//DHvv/8+Ho+HyMhIsrOzVTxERES+QeWjBbhcLlauXMn+/fsBSE1NZe7cubpwmIiIyGWofNwkwzBYvHgxJ06cwGq1MnXqVEaPHq3ZLCIiIlegu5fdJIvFwuTJk4mKiuL+++9nzJgxKh4iIiJXYTEMwzA7xNdVVVXhdDqprKwM2FvK19XVUVpa2uTqpB6PB5vNZmIqERER8zTn+1sjH8108uRJXnzxRRYvXsyZM2d8y1U8REREro/O+bhOhmHw0UcfsX79erxeL126dMHj8ZgdS0REpM1R+bgOtbW1LFu2jMOHDwMwYMAAZs+erbvRioiI3ACVj2s4fvw4S5cupbq6GpvNRkZGBsOGDdNJpSIiIjdI5eMajhw5QnV1NV27dmXBggXExcWZHUlERKRNU/m4hkmTJmG32xkzZgzBwcFmxxEREWnzNNvlG44dO8aSJUt8J5NarVYmTJig4iEiItJCNPLxf7xeL5s2bWLTpk0YhsHWrVsZN26c2bFERETaHZUPoLq6mvz8fIqKigAYMmQIo0aNMjmViIhI+9RhyofHa7Cj6Bzl1S5iI0IYlRyFzWrh6NGj5OfnU1NTg91u584772Tw4MFmxxUREWm3Wq18PPfcc/zud7+jtLSUwYMH85e//MW00YTVe0t4duV+SipdvmUJzhAeGWCh6NMPAYiNjWXBggVER0ebklFERKSjaJUTTt966y2efPJJnnnmGT755BMGDx7M9OnTKS8vb42Pu6rVe0t45PVPmhQPgNJKF/9v63msQXaGDRvG97//fRUPERERP2iV8vH73/+eBx98kO9973v079+fF154gbCwMF5++eXW+Lgr8ngNnl25n6/fOS/CcrGEGEC1EcI6yxBm3jkLu93u12wiIiIdVYuXj/r6egoLC0lPT//3h1itpKens3Xr1kvWd7vdVFVVNXm0lB1F53wjHha8jAg6RaZjLwnWi59hAMeqLp4LIiIiIv7R4uXjzJkzeDyeS64EGhcXR2lp6SXrL1q0CKfT6XskJSW1WJby6ovFo5PFTUbwQW6zl2K1QLy1+rLriYiISOsz/SJjTz31FJWVlb7HyZMnW+y9YyNCSLJWMNexnzhbDW7Dxnp3Cp82drtkPREREfGPFp/tEh0djc1mo6ysrMnysrIy4uPjL1nf4XC0yt1hPR4PlUd2ku44AsBpbxgb61O4YPz7syxAvPPitFsRERHxjxYf+QgODmb48OGsW7fOt8zr9bJu3TrS0tJa+uOu6NChQ2zftg2AfY2xvOfud0nxAHhmdn9sVt2hVkRExF9a5TofTz75JPfeey8jRoxg1KhR/PGPf6Smpobvfe97rfFxl9WvXz9GjhxJ7969Odbo5OQ3rvMR7wzhmdn9mTEwwW+ZREREpJXKx1133cXp06d5+umnKS0tZciQIaxevbpVb0ff2NjIpk2bGDNmDGFhYVgsFmbOnAlAP2Bq//jLXuFURERE/MtiGIZx7dX8p6qqCqfTSWVlJZGRkdf1M+fOnSM3N5eSkhJSU1O56667sFhULERERPylOd/fbf7eLvv27WPFihXU19cTGhrKsGHDVDxEREQCWJstHw0NDaxZs4bCwkIAevToQVZW1nWPloiIiIg52mT5qKioYMmSJb7pvOPGjWPSpElYraZftkRERESuoU2WD4fDgdvtJiwsjMzMTFJSUsyOJCIiItepzZSPxsZGbDYbFouF0NBQ7r77bsLCwoiIiDA7moiIiDRDmzhOcfr0af72t7/5zu+Ai/eKUfEQERFpewK+fOzatYu///3vnD59mi1bttDY2Gh2JBEREbkJAXvYpb6+nmXLlvHZZ58B0Lt3b+bPn09QUMBGFhERkesQsN/kr776KjU1NVgsFiZOnMj48eN1/Q4REZF2IODKx1cXXC0uLiY6Opo5c+bQo0cPqqurTU4mIiIiV1JVVQX8+3v8agLu8uqnTp0iKSnJ7BgiIiJyA06ePEn37t2vuk7AlQ+v10txcTEREREtfpilqqqKpKQkTp48qSuhXgdtr+bR9moeba/m0fZqHm2v5mmJ7WUYBtXV1SQmJl7zop8Bd9jFarVeszHdrMjISO2MzaDt1TzaXs2j7dU82l7No+3VPDe7vZxO53WtF/BTbUVERKR9UfkQERERv+pQ5cPhcPDMM8/gcDjMjtImaHs1j7ZX82h7NY+2V/NoezWPv7dXwJ1wKiIiIu1bhxr5EBEREfOpfIiIiIhfqXyIiIiIX6l8iIiIiF91mPLx3HPP0atXL0JCQhg9ejQ7duwwO1LA+uUvf4nFYmny6Nevn9mxAsamTZuYPXs2iYmJWCwWli1b1uR1wzB4+umnSUhIIDQ0lPT0dA4fPmxO2ABwre113333XbK/zZgxw5ywJlu0aBEjR44kIiKC2NhY5s2bx8GDB5us43K5WLhwIV27diU8PJysrCzKyspMSmyu69leEydOvGT/evjhh01KbK7nn3+eQYMG+S4klpaWxnvvved73Z/7VocoH2+99RZPPvkkzzzzDJ988gmDBw9m+vTplJeXmx0tYA0YMICSkhLfY/PmzWZHChg1NTUMHjyY55577rKv//a3v+XPf/4zL7zwAtu3b6dTp05Mnz4dl8vl56SB4VrbC2DGjBlN9rfFixf7MWHgKCgoYOHChWzbto0PPviAhoYGpk2bRk1NjW+dJ554gpUrV5KTk0NBQQHFxcVkZmaamNo817O9AB588MEm+9dvf/tbkxKbq3v37vzmN7+hsLCQnTt3MnnyZObOncu+ffsAP+9bRgcwatQoY+HChb7nHo/HSExMNBYtWmRiqsD1zDPPGIMHDzY7RpsAGPn5+b7nXq/XiI+PN373u9/5llVUVBgOh8NYvHixCQkDyze3l2EYxr333mvMnTvXlDyBrry83ACMgoICwzAu7kt2u93IycnxrfP5558bgLF161azYgaMb24vwzCMO+64w/iv//ov80IFuC5duhgvvfSS3/etdj/yUV9fT2FhIenp6b5lVquV9PR0tm7damKywHb48GESExPp3bs33/nOdzhx4oTZkdqEoqIiSktLm+xvTqeT0aNHa3+7io0bNxIbG0tqaiqPPPIIZ8+eNTtSQKisrAQgKioKgMLCQhoaGprsX/369aNHjx7av7h0e33ljTfeIDo6moEDB/LUU09RW1trRryA4vF4WLJkCTU1NaSlpfl93wq4G8u1tDNnzuDxeIiLi2uyPC4ujgMHDpiUKrCNHj2aV199ldTUVEpKSnj22WcZP348e/fuJSIiwux4Aa20tBTgsvvbV69JUzNmzCAzM5Pk5GSOHj3Kz372MzIyMti6dSs2m83seKbxer08/vjj3H777QwcOBC4uH8FBwfTuXPnJutq/7r89gL49re/Tc+ePUlMTGT37t385Cc/4eDBg+Tl5ZmY1jx79uwhLS0Nl8tFeHg4+fn59O/fn127dvl132r35UOaLyMjw/fnQYMGMXr0aHr27Mnbb7/NAw88YGIyaY/uvvtu359vu+02Bg0aREpKChs3bmTKlCkmJjPXwoUL2bt3r863uk5X2l4PPfSQ78+33XYbCQkJTJkyhaNHj5KSkuLvmKZLTU1l165dVFZWkpuby7333ktBQYHfc7T7wy7R0dHYbLZLztgtKysjPj7epFRtS+fOnbnllls4cuSI2VEC3lf7lPa3G9e7d2+io6M79P726KOPsmrVKjZs2ED37t19y+Pj46mvr6eioqLJ+h19/7rS9rqc0aNHA3TY/Ss4OJg+ffowfPhwFi1axODBg/nTn/7k932r3ZeP4OBghg8fzrp163zLvF4v69atIy0tzcRkbceFCxc4evQoCQkJZkcJeMnJycTHxzfZ36qqqti+fbv2t+t06tQpzp492yH3N8MwePTRR8nPz2f9+vUkJyc3eX348OHY7fYm+9fBgwc5ceJEh9y/rrW9LmfXrl0AHXL/uhyv14vb7fb/vtXip7AGoCVLlhgOh8N49dVXjf379xsPPfSQ0blzZ6O0tNTsaAHpv//7v42NGzcaRUVFxpYtW4z09HQjOjraKC8vNztaQKiurjY+/fRT49NPPzUA4/e//73x6aefGsePHzcMwzB+85vfGJ07dzaWL19u7N6925g7d66RnJxs1NXVmZzcHFfbXtXV1caPfvQjY+vWrUZRUZGxdu1aY9iwYUbfvn0Nl8tldnS/e+SRRwyn02ls3LjRKCkp8T1qa2t96zz88MNGjx49jPXr1xs7d+400tLSjLS0NBNTm+da2+vIkSPGr371K2Pnzp1GUVGRsXz5cqN3797GhAkTTE5ujp/+9KdGQUGBUVRUZOzevdv46U9/algsFuP99983DMO/+1aHKB+GYRh/+ctfjB49ehjBwcHGqFGjjG3btpkdKWDdddddRkJCghEcHGx069bNuOuuu4wjR46YHStgbNiwwQAuedx7772GYVycbvuLX/zCiIuLMxwOhzFlyhTj4MGD5oY20dW2V21trTFt2jQjJibGsNvtRs+ePY0HH3yww/7H4HLbCTBeeeUV3zp1dXXGD3/4Q6NLly5GWFiYMX/+fKOkpMS80Ca61vY6ceKEMWHCBCMqKspwOBxGnz59jP/5n/8xKisrzQ1ukvvvv9/o2bOnERwcbMTExBhTpkzxFQ/D8O++ZTEMw2j58RQRERGRy2v353yIiIhIYFH5EBEREb9S+RARERG/UvkQERERv1L5EBEREb9S+RARERG/UvkQERERv1L5EBEREb9S+RARERG/UvkQERERv1L5EBEREb9S+RARERG/+v8B/olv4eR+5cgAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.scatter(pressure_at_5hr_ref.values, pressure_at_5hr.values)\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/linear_solver/hhl_solver.ipynb b/docs/notebooks/linear_solver/hhl_solver.ipynb new file mode 100644 index 0000000..5834585 --- /dev/null +++ b/docs/notebooks/linear_solver/hhl_solver.ipynb @@ -0,0 +1,236 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# HHL Linear Solver \n", + "\n", + "This notebook illustrates how to use the HHL linear solver to solve individual linear systems. We will use sparse random matrices that mimc the matrices obtained by EPANET for small water networks.\n", + "\n", + "Let's define the system:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "matrix([[0.98565359, 0. , 0.36187767, 0. , 0. ,\n", + " 0. , 0.47823527, 0. ],\n", + " [0. , 0. , 0.3762659 , 0.10824806, 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0.36187767, 0.3762659 , 0. , 0. , 0. ,\n", + " 0.49122216, 0. , 0.17939193],\n", + " [0. , 0.10824806, 0. , 0. , 0.1658684 ,\n", + " 0. , 0.09509276, 0.344708 ],\n", + " [0. , 0. , 0. , 0.1658684 , 0. ,\n", + " 0.4238214 , 0. , 0.39627041],\n", + " [0. , 0. , 0.49122216, 0. , 0.4238214 ,\n", + " 0.91158043, 0.30766587, 0.08558759],\n", + " [0.47823527, 0. , 0. , 0.09509276, 0. ,\n", + " 0.30766587, 0. , 0. ],\n", + " [0. , 0. , 0.17939193, 0.344708 , 0.39627041,\n", + " 0.08558759, 0. , 0. ]])" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import scipy.sparse as sp \n", + "import numpy as np \n", + "\n", + "# set the seed\n", + "np.random.seed(134)\n", + "\n", + "# size of the linear system\n", + "size = 8\n", + "\n", + "# create the matrix\n", + "A = sp.random(size,size,density=0.25)\n", + "A = (A+A.T)/2\n", + "A = A.todense()\n", + "A" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.37177614, 0.18457065, 0.48317348, 0.46566253, 0.34640372,\n", + " 0.12657883, 0.12525871, 0.12461173])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# create the right hand side\n", + "b = np.random.rand(size)\n", + "b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve the problem classically\n", + "We can solve this sytem with a classical linear solver to obtain a reference solution" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.43756972, 0.57926785, 0.54508793, -0.18963252, 0.27896845,\n", + " -0.21442054, -0.53691392, 1.18286343])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reference = np.linalg.solve(A,b)\n", + "reference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve the problem with the HHL linear solver\n", + "We can now use the VQLS solver to solve the problem" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_18717/3699590503.py:5: DeprecationWarning: The class ``qiskit.primitives.estimator.Estimator`` is deprecated as of qiskit 1.2. It will be removed no earlier than 3 months after the release date. All implementations of the `BaseEstimatorV1` interface have been deprecated in favor of their V2 counterparts. The V2 alternative for the `Estimator` class is `StatevectorEstimator`.\n", + " estimator = Estimator()\n", + "/tmp/ipykernel_18717/3699590503.py:6: DeprecationWarning: The class ``qiskit.primitives.sampler.Sampler`` is deprecated as of qiskit 1.2. It will be removed no earlier than 3 months after the release date. All implementations of the `BaseSamplerV1` interface have been deprecated in favor of their V2 counterparts. The V2 alternative for the `Sampler` class is `StatevectorSampler`.\n", + " sampler = Sampler()\n" + ] + } + ], + "source": [ + "from wntr_quantum.linear_solver import HHL_SOLVER\n", + "from qiskit.primitives import Estimator, Sampler \n", + "\n", + "# define estimator\n", + "estimator = Estimator()\n", + "sampler = Sampler()\n", + "\n", + "# define the solver\n", + "hhl = HHL_SOLVER(\n", + " estimator=estimator,\n", + " sampler=sampler)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/nico/miniconda3/envs/vitens_wntr_1/lib/python3.9/site-packages/quantum_newton_raphson/utils.py:74: SparseEfficiencyWarning: spsolve requires A be CSC or CSR matrix format\n", + " warn(\"spsolve requires A be CSC or CSR matrix format\", SparseEfficiencyWarning)\n" + ] + } + ], + "source": [ + "res = hhl(A, b)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "HHLResult(solution=array([ 0.436, 0.593, 0.549, -0.181, 0.275, -0.218, -0.544, 1.182]), residue=0.007372666680640602, ref=array([0., 0., 0., 0., 0., 0., 0., 0.]))" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAGfCAYAAACz771sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABRwklEQVR4nO3deXhTZd4+8PskbZJu6UKXtFCglLVSKIutlVUItFCQrQ4oDssgDOo4C86ozDuCyLyD2/jjdYZX1BHRVxGkUHbKjohWyr6DUMreBVqadE2zPL8/mGYMtNCWhpM29+e6ckFOnnP6PYc0uXnOeZ4jCSEEiIiIiNyQQu4CiIiIiOTCIERERERui0GIiIiI3BaDEBEREbktBiEiIiJyWwxCRERE5LYYhIiIiMhtMQgRERGR22IQIiIiIrfFIERERERuy8OZG9+zZw/effddHDx4ELm5uUhPT8fo0aNrbb969Wp8+OGHOHLkCEwmEx555BG88cYbSEpKsrd54403MG/ePIf1OnXqhDNnztS5LpvNhuvXr8PPzw+SJNV7v4iIiOjhE0KgpKQEERERUCgapy/HqUGorKwM3bt3x69+9SuMHTv2vu337NmDIUOG4G9/+xsCAgLw2WefYeTIkdi3bx969Ohhb/fII49g+/bt9uceHvXbjevXryMyMrJe6xAREZFruHLlClq1atUo23JqEBo2bBiGDRtW5/YLFy50eP63v/0Na9euxfr16x2CkIeHB3Q6XYPr8vPzA3D7QGq12gZvh4iIiJzn9OnT2Lx5M7y9vTF16lSYTCZERkbav8cbg1OD0IOy2WwoKSlBUFCQw/Jz584hIiICGo0GiYmJWLBgAVq3bl3rdkwmE0wmk/15SUkJAECr1TIIERERuRiLxYItW7bgwIEDkCQJwcHB0Gg0UKvVANCol7W49MXS7733HkpLS/GLX/zCviwhIQFLly5FRkYGPvzwQ+Tk5KBfv372cFOTBQsWwN/f3/7gaTEiIiLXdPPmTfzrX//CgQMHAAB9+/bF5MmTG7UX6OckIYRwypbv/EGSdN+LpX9u2bJlmD59OtauXQu9Xl9ru+LiYrRp0wbvv/8+pk2bVmObO3uEjEYjIiMjYTAY2CNERETkIo4dO4YNGzbAbDbD29sbY8aMQfv27e2vG41G+Pv7N+r3t0ueGlu+fDmee+45rFy58p4hCAACAgLQsWNHnD9/vtY2arXa3p1GRERErkcIgWPHjsFsNqNt27YYO3as03qBfs7lTo19/fXXmDp1Kr7++mukpKTct31paSmys7MRHh7+EKojIiIiZ5AkCWPGjIFer8cvf/nLhxKCACcHodLSUhw5cgRHjhwBAOTk5ODIkSO4fPkyAGD27NmYNGmSvf2yZcswadIk/P3vf0dCQgLy8vKQl5cHg8Fgb/PHP/4R3377LS5evIgffvgBY8aMgVKpxNNPP+3MXSEiIqJGJITAoUOHsGnTJvsyHx8f9OnTp9HmCKoLp54aO3DgAJ544gn781mzZgEAJk+ejKVLlyI3N9ceigDg448/hsViwYsvvogXX3zRvry6PQBcvXoVTz/9NAoLCxESEoK+ffvixx9/REhIiDN3hYiIiBqJyWTChg0bcOLECQC3J0aOjo6WpZaHdrG0K3HGxVZERER0f7m5uUhLS0NRUREkScKgQYPQp0+fOg2Jd5uLpYmIiKh5EUJg//792Lp1K6xWK7RaLVJTU2Wf0oZBiIiIiBqF1SaQlVOEgpJKhPppEB8VBKXidk/Phg0bcOjQIQC3T4WNGjUKXl5ecpYLgEGIiIiIGkHGiVzMW38KuYZK+7Jwfw3mjoxBctdwdO7cGUePHoVer0dCQoLL3PSc1wjxGiEiIqIHknEiF89/eQiOgULAXzLBKDT48NmeSO4ajpKSkgcaFu+M72+Xm0eIiIiImg6rTWDe+lMOIUgNM/Sq80hRn4avZMK89adgtYmHNjdQfTAIERERUYNl5RQ5nA4LU5RglOYUIpUGKGFDoFSOXEMlsnKKZKyydrxGiIiIiBqsoOR2CJIgEOuRix4e16GQgGKbBrur2uGW8HZo52oYhIiIiKjBQv000MCM/qoLaKksAQCct7RAprk1LFA6tHNFDEJERETUYPFRQYj3KURLWwnMQoEfza1x3hpsf10CoPO/PZTeFfEaISIiImowpULChCeHItsShA2mLneFIACYOzLGPp+Qq2EQIiIionoxGo3YunUrbDYbAGB490g8Mz4VXtpAh3Y6//8MnXdVPDVGREREdXbu3Dmkp6ejoqICarUaAwYMAAAkdw3HkBhdrTNLuyoGISIiIrovq9WKHTt2IDMzEwCg0+nQtWtXhzZKhYTE6BZylNdgDEJERER0T8XFxUhLS8O1a9cAAPHx8RgyZAg8PJp+jGj6e0BEREROk52djbS0NFRWVkKj0eDJJ59Ely5d5C6r0TAIERERUa38/PxgsVjQsmVLpKamIiAgQO6SGhWDEBERETkwmUxQq9UAgNDQUEyePBnh4eFQKpX3WbPp4fB5IiIisjt+/DgWLlyIK1eu2Je1atWqWYYggD1CREREBMBsNiMjIwOHDh0CAOzfvx+RkZEyV+V8DEJERERu7saNG0hLS0NBQQEAoF+/fhg4cKC8RT0kDEJERERu7MiRI9i0aRPMZjN8fHwwduxYtGvXTu6yHhoGISIiIjeVnZ2NtWvXAgCioqIwduxY+Pr6ylzVw8UgRERE5KbatWuHmJgYhIWFoW/fvlAo3G8MFYMQERGRmxBC4NixY+jcuTPUajUkSUJqaiokybXvB+ZM7hf9iIiI3FBlZSXS0tKwZs0abNiwAUIIAHDrEASwR4iIiKjZu3btGlatWoVbt25BoVAgPDxc7pJcBoMQERFRMyWEwL59+7Bt2zbYbDb4+/sjNTUVrVq1krs0l8EgRERE1AxVVFRg7dq1OHv2LACgS5cuGDlyJLy8vGSuzLUwCBERETVDNpsN165dg1KpxNChQ/Hoo4+6/fVANWEQIiIiaiaEEPaw4+Pjg6eeegqenp68JugeOGqMiIioGSgrK8NXX32FY8eO2Ze1bt2aIeg+2CNERETUxF28eBGrVq1CaWkpcnNz0aVLF3h6espdVpPAIERERNRE2Ww27NmzB3v27IEQAsHBwfbTYVQ3DEJERERNUElJCVavXo2LFy8CAOLi4jBs2DCoVCp5C2tiGISIiIiamMrKSnz00UcoKyuDp6cnRowYgW7dusldVpPEIERERNTEaDQadO/eHdnZ2UhNTUVwcLDcJTVZkqi+2YgbMRqN8Pf3h8FggFarlbscIiKi+zIYDAAAf39/AIDVaoUQAh4e7tOn4Yzvbw6fJyIicnFnz57F4sWLkZaWBqvVCgBQKpVuFYKcxalBaM+ePRg5ciQiIiIgSRLWrFlz33V2796Nnj17Qq1Wo3379li6dOldbRYtWoS2bdtCo9EgISEBWVlZjV88ERGRzKxWKzIyMrB8+XJUVlbCZrOhoqJC7rKaFacGobKyMnTv3h2LFi2qU/ucnBykpKTgiSeewJEjR/D73/8ezz33HLZs2WJvs2LFCsyaNQtz587FoUOH0L17dyQlJaGgoMBZu0FERPTQ3bp1C0uWLMG+ffsAAI899hh+9atfwdfXV+bKmpeHdo2QJElIT0/H6NGja23z6quvYuPGjThx4oR92YQJE1BcXIyMjAwAQEJCAh599FH885//BHB7DoXIyEi89NJLeO211+pUC68RIiIiV3bq1CmsW7cOJpMJGo0Go0ePRqdOneQuS3bN/hqhzMxM6PV6h2VJSUnIzMwEAFRVVeHgwYMObRQKBfR6vb1NTUwmE4xGo8ODiIjIFdlsNnz33XcwmUyIjIzEzJkzGYKcyKWCUF5eHsLCwhyWhYWFwWg0oqKiAjdv3oTVaq2xTV5eXq3bXbBgAfz9/e2PyMhIp9RPRET0oBQKBVJTU9GvXz9MnjzZPkqMnMOlgpCzzJ49GwaDwf64cuWK3CURERHZHTt2DHv37rU/b9GiBQYNGgSlUiljVe7Bpcbd6XQ65OfnOyzLz8+HVquFl5cXlEollEpljW10Ol2t21Wr1VCr1U6pmYiIqKGqqqqwefNmHDlyBAAQFRWFli1byluUm3GpHqHExETs2LHDYdm2bduQmJgIAFCpVOjVq5dDG5vNhh07dtjbEBERNQUFBQX45JNP7CFowIABCA8Pl7coN+TUHqHS0lKcP3/e/jwnJwdHjhxBUFAQWrdujdmzZ+PatWv44osvAAAzZ87EP//5T7zyyiv41a9+hZ07d+Kbb77Bxo0b7duYNWsWJk+ejN69eyM+Ph4LFy5EWVkZpk6d6sxdISIiahRCCBw+fBibN2+GxWKBr68vxo4di6ioKLlLc0tODUIHDhzAE088YX8+a9YsAMDkyZOxdOlS5Obm4vLly/bXo6KisHHjRvzhD3/A//zP/6BVq1b417/+haSkJHub8ePH48aNG5gzZw7y8vIQFxeHjIyMuy6gJiIickXr16/H4cOHAQDR0dEYM2YMfHx8ZK7KffFeY5xHiIiIHqKDBw9i48aNGDRoEPr06QNJkuQuqclwxve3S10sTURE1NwIIVBaWgo/Pz8AQM+ePdGmTRveMd5FuNTF0kRERM1JZWUlVq5ciU8//dR+jzBJkhiCXAh7hIiIiJzg6tWrWLVqFYqLi6FQKHDlyhV07NhR7rLoDgxCREREjUgIgczMTOzYsQM2mw2BgYFITU1FRESE3KVRDRiEiIiIGkl5eTnWrFmDc+fOAQBiYmIwcuRIaDQamSuj2jAIERERNZIdO3bg3LlzUCqVSE5ORq9evTgqzMUxCBERETUSvV4Pg8EAvV5/z1s/kevgqDEiIqIGKi0txffff4/qKfm8vLzw7LPPMgQ1IewRIiIiaoALFy5g9erVKCsrg5eXF3r27Cl3SdQADEJERET1YLPZ8O2332LPnj0AgNDQUERGRspcFTUUgxAREVEdGY1GrF69GpcuXQJwe5bo5ORkeHp6ylwZNRSDEBERUR1kZ2dj1apVqKiogEqlwogRIxAbGyt3WfSAGISIiIjqQKFQoKKiAjqdDqmpqWjRooXcJVEjYBAiIiKqhdVqhVKpBABERUXhmWeeQVRUFDw8+PXZXHD4PBERUQ1Onz6NDz74AIWFhfZlHTp0YAhqZhiEiIiIfsZisWDz5s345ptvYDQa8f3338tdEjkRYy0REdG/FRUVIS0tDbm5uQCAxx9/HIMGDZK5KnImBiEiIiIAJ06cwPr161FVVQUvLy+MHj0aHTt2lLsscjIGISIicnunTp3CqlWrAACtW7fGuHHjoNVqZa6KHgYGISIicnudOnVCZGQk2rZti4EDB0Kh4CW07oJBiIiI3NKZM2fQoUMHKJVKKJVKTJ482T5UntwHIy8REbmVqqoqpKenY8WKFdi5c6d9OUOQe2KPEBERuY28vDykpaWhsLAQkiRBrVbLXRLJjEGIiIiaPSEEDh48iIyMDFitVvj5+WHcuHFo06aN3KWRzBiEiIioWausrMSGDRtw8uRJALdnhx49ejS8vb1lroxcAYMQERE1a2VlZfjpp5+gUCgwePBgJCYmQpIkucsiF8EgREREzVqLFi0wZswY+Pn5oVWrVnKXQy6Go8aIiKhZqaiowIoVK5CTk2Nf1qVLF4YgqhGDEBERNRtXrlzB4sWLcebMGaxbtw5Wq1XuksjF8dQYERE1eUIIfP/999i5cyeEEAgKCkJqairnBqL7YhAiIqImraysDOnp6cjOzgYAdO3aFSNGjOAcQVQnDEJERNRklZSU4OOPP0ZpaSk8PDwwbNgw9OjRg6PCqM4YhIiIqMny9fVF27ZtkZeXh6eeegqhoaFyl0RNDIMQERE1KSUlJfDw8ICXlxckScKIESMgSRJUKpXcpVETxFFjRETUZGRnZ2Px4sVYt24dhBAAALVazRBEDcYeISIicnk2mw27du3C3r17AQC3bt1CZWUlvLy8ZK6MmjoGISIicmkGgwGrVq3ClStXAAC9e/fG0KFD4enpKXNl1Bw8lFNjixYtQtu2baHRaJCQkICsrKxa2w4cOBCSJN31SElJsbeZMmXKXa8nJyc/jF0hIqKH6OzZs/joo49w5coVqNVqpKamIiUlhSGIGo3Te4RWrFiBWbNmYfHixUhISMDChQuRlJSEs2fP1nh1/+rVq1FVVWV/XlhYiO7du+Opp55yaJecnIzPPvvM/pzzRRARNS8WiwWbN29GRUUFIiIikJqaisDAQLnLombG6UHo/fffx/Tp0zF16lQAwOLFi7Fx40YsWbIEr7322l3tg4KCHJ4vX74c3t7edwUhtVoNnU7nvMKJiEhWHh4eGDduHE6dOgW9Xs9ZoskpnHpqrKqqCgcPHoRer//PD1QooNfrkZmZWadtfPrpp5gwYQJ8fHwclu/evRuhoaHo1KkTnn/+eRQWFjZq7URE9PCdOnUKR48etT+PjIxEUlISQxA5jVN7hG7evAmr1YqwsDCH5WFhYThz5sx918/KysKJEyfw6aefOixPTk7G2LFjERUVhezsbPz5z3/GsGHDkJmZWeMvi8lkgslksj83Go0N3CMiInIGi8WCLVu24MCBA/Dw8EDLli0RHBwsd1nkBlx61Ninn36K2NhYxMfHOyyfMGGC/e+xsbHo1q0boqOjsXv3bgwePPiu7SxYsADz5s1zer1ERFR/hYWFWLlyJfLz8wEACQkJvBaIHhqnnhoLDg6GUqm0v7mr5efn3/f6nrKyMixfvhzTpk27789p164dgoODcf78+Rpfnz17NgwGg/1RPQSTiIjkdezYMXz00UfIz8+Ht7c3Jk6cyOuB6KFyahBSqVTo1asXduzYYV9ms9mwY8cOJCYm3nPdlStXwmQy4dlnn73vz7l69SoKCwsRHh5e4+tqtRpardbhQURE8hFCYP369UhPT4fZbEbbtm0xc+ZMtG/fXu7SyM04/dTYrFmzMHnyZPTu3Rvx8fFYuHAhysrK7KPIJk2ahJYtW2LBggUO63366acYPXo0WrRo4bC8tLQU8+bNw7hx46DT6ZCdnY1XXnkF7du3R1JSkrN3h4iIGoEkSfD19QUADBgwAP3794dCwbs+0cPn9CA0fvx43LhxA3PmzEFeXh7i4uKQkZFhv4D68uXLd735z549i71792Lr1q13bU+pVOLYsWP4/PPPUVxcjIiICAwdOhTz58/nXEJERC5MCAGTyQSNRgPgdgDq2LEjWrZsKXNl5M4kUX3XOjdiNBrh7+8Pg8HA02RERA+ByWTChg0bcPPmTUybNg0eHi49VodclDO+v/lOJCIip8rNzUVaWhqKioogSRIuXbqE6OhoucsiAsAgRERETiKEwP79+7F161ZYrVZotVqkpqYiMjJS7tKI7BiEiIio0VVWVmLdunU4ffo0AKBTp04YNWoUvLy8ZK6MyBGDEBERNboNGzbg9OnTUCgUGDJkCBISEiBJktxlEd2FQYiIiBqdXq9HUVERRowYgYiICLnLIaoVJ20gIqIHVl5e7nCz1ICAAEyfPp0hiFwee4SIiOiBXLp0CatWrUJJSQm8vb3RoUMHAOCpMGoSGISIiKhBhBDYu3cvdu3aBSEEWrRoAT8/P7nLIqoXBiEiIqq30tJSpKen48KFCwCAbt26ISUlBSqVSubKiOqHQYiIiOolJycHq1evRmlpKTw9PTF8+HB0796dp8KoSWIQIiKieikpKUFpaSlCQ0ORmpqKkJAQuUsiajAGISIiui8hhL3Hp1u3bhBCICYmBp6enjJXRvRgOHyeiIju6dy5c/joo49QVlZmX9a9e3eGIGoWGISIiKhGVqsV27Ztw7Jly5Cfn4/vvvtO7pKIGh1PjRER0V2Ki4uxatUqXL16FQAQHx8PvV4vc1VEjY9BiIiIHJw5cwZr165FZWUlNBoNnnzySXTp0kXusoicgkGIiIjsjh49ijVr1gAAWrZsidTUVAQEBMhaE5EzMQgREZFd586dERQUhE6dOmHw4MFQKpVyl0TkVAxCRERu7uLFi2jTpg0kSYJarcavf/1rzhBNboNBiIioGbLaBLJyilBQUolQPw3io4KgVDjO/Gw2m5GRkYFDhw5h2LBhiI+PBwCGIHIrDEJERM1MxolczFt/CrmGSvuycH8N5o6MQXLXcADAjRs3kJaWhoKCAgBARUWFLLUSyY1BiIioGck4kYvnvzwEccfyPEMlnv/yED58tid0lnxs2rQJZrMZPj4+GDt2LNq1aydLvURyYxAiImomrDaBeetP3RWCAEAA8IQVq9PXoKXtdi9QVFQUxo4dC19f34daJ5ErYRAiImomsnKKHE6H3clfqkC4tQBQSHhi4ED07dsXCgVvMEDujb8BRETNREFJ7SEIAG4KX/xobo32fVLQv39/hiAiMAgRETUboX4ah+eesKCfZw4CpP9cCH3WGop2bds+5MqIXBeDEBFRMxEfFYRwfw0kAC2kMjypPo32HoXor7oAQEDC7dFj8VFBMldK5DoYhIiImgmlQsKcEV3QRZmPFPUZaBUmlNhUyKxqAwm35xCaOzLmrvmEiNwZL5YmImpiapsssaKiAoaTe5CgugIAuGQNwN6qtqiCx13zCBHRbQxCRERNSG2TJb42KBI5mZtgMBigVCqhHzIEthbRGFVqqnVmaSJiECIiajLuNVniH9J/wm8ivREUpERqairCw9nzQ1QXDEJERE1ATZMlqmGGGUrYoAAgYa0hEpv/8AS8vTS1bYaI7sCLpYmImoA7J0vUKYwYrTmFRz2vArg9c/Qlow1Hr5fJVCFR08QeISKiJqB6skQJAt09ctHd4zoUEhChMMIDVligdGhHRHXDIERE1ASE+mnghSoMUOUgXFkCAPjJ0gL7zK3tIai6HRHVHYMQEVET0MJ2C2O8Tt++LkgokGlug2xrC/vrEgAdJ0skqjcGISIiF2cymZC+ehXUMKPI5oXdVdEwiP/0/FQPiudkiUT1xyBEROTi1Go1nnzySWRnZ0MR2R1Zm36C4ecXTnOyRKIGeyijxhYtWoS2bdtCo9EgISEBWVlZtbZdunQpJElyeGg0jue8hRCYM2cOwsPD4eXlBb1ej3Pnzjl7N4iIHpqzZ88iOzvb/rxLly4YMWIEhnePxN5XB+Hr6Y/hfybE4evpj2Hvq4MYgogayOlBaMWKFZg1axbmzp2LQ4cOoXv37khKSkJBQUGt62i1WuTm5tofly5dcnj9nXfewQcffIDFixdj37598PHxQVJSEiorOVqCiJo2q9WKLVu2YPny5Vi9ejVKSkruaqNUSEiMboFRcS2RGN2Cp8OIHoDTg9D777+P6dOnY+rUqYiJicHixYvh7e2NJUuW1LqOJEnQ6XT2R1hYmP01IQQWLlyIv/zlLxg1ahS6deuGL774AtevX8eaNWucvTtERE5z69YtLFmyBD/++CMAIDY2Fl5eXjJXRdS8OTUIVVVV4eDBg9Dr9f/5gQoF9Ho9MjMza12vtLQUbdq0QWRkJEaNGoWTJ0/aX8vJyUFeXp7DNv39/ZGQkFDrNk0mE4xGo8ODiMiVnDp1Ch999BGuX78OjUaDCRMmIDk5GR4evJSTyJmcGoRu3rwJq9Xq0KMDAGFhYcjLy6txnU6dOmHJkiVYu3YtvvzyS9hsNjz++OO4evX27KnV69VnmwsWLIC/v7/9ERkZ+aC7RkTUKGw2GzZu3IiVK1fCZDKhVatWmDlzJjp16iR3aURuweVusZGYmIhJkyYhLi4OAwYMwOrVqxESEoKPPvqowducPXs2DAaD/XHlypVGrJiIqOEUCgUsFgsAoE+fPpgyZQr8/f1lrorIfTi1zzU4OBhKpRL5+fkOy/Pz86HT6eq0DU9PT/To0QPnz58HAPt6+fn5DndXzs/PR1xcXI3bUKvVUKvVDdgDIiLnsFgs9tNew4YNQ7du3RAVFSVzVUTux6k9QiqVCr169cKOHTvsy2w2G3bs2IHExMQ6bcNqteL48eP20BMVFQWdTuewTaPRiH379tV5m0REcqmqqsLatWuxYsUKCHH7XvIqlYohiEgmTr8Kb9asWZg8eTJ69+6N+Ph4LFy4EGVlZZg6dSoAYNKkSWjZsiUWLFgAAHjzzTfx2GOPoX379iguLsa7776LS5cu4bnnngNwe0TZ73//e/z1r39Fhw4dEBUVhddffx0REREYPXq0s3eHiKjBCgoKkJaWhhs3bgAArly5gtatW8tcFZF7c3oQGj9+PG7cuIE5c+YgLy8PcXFxyMjIsF/sfPnyZSgU/+mYunXrFqZPn468vDwEBgaiV69e+OGHHxATE2Nv88orr6CsrAwzZsxAcXEx+vbti4yMjLsmXiQicgVCCBw+fBibN2+GxWKBr68vxo4dyxBE5AIkUd0360aMRiP8/f1hMBig1WrlLoeImjGTyYSNGzfi+PHjAIDo6GiMGTMGPj4+MldG1PQ44/ubE1QQETlRWloazp8/D0mSMGjQIPTp0weSxJmgiVwFgxAR0QOy2gSycopQUFKJUD8N4qOC7Le9eOKJJ1BYWIjRo0fzVBiRC+KpMZ4aI6IHkHEiF/PWn0Luv+8Gr4IFnfyq8OKovvYbodpsNodrIYmoYXhqjIjIhWScyMXzXx5C9f8mg6VSDFRdgLfZjP/6CsDE22GIIYjIdfG3k4ioAaw2gXnrT/07BAk84pGHFPVZ+CmqUC48Adx+3Wpzu053oiaFPUJERA2QlVOEXEMl1LCgryoHrZUGAECONRDfV7WBGR6AoRJZOUVIjG4hc7VEVBsGISKiBigoqUSoogQDPS/AR2GGRUjIMkfirDUEgOTQjohcF4MQEVEDhPppEKYohY/CDINNjV1V0bglvGtsR0Sui0GIiKgB4qOCcNO7LfaXSzhjCYEFSofXJQA6/9tD6YnIdfFiaSKiOrpw4QK++OILmM1mKBUS5j75CE5adLDWEIIAYO7IGPt8QkTkmhiEiIjuw2azYdeuXfi///s/5OTkYO/evQCA5K7h+PDZntD5O57+0vlr8OGzPe3zCBGR6+KpMSKiezAajVi9ejUuXboEAOjRowf69u1rfz25aziGxOhqnVmaiFwbgxARUS3OnTuHNWvWoLy8HCqVCiNGjEBsbOxd7ZQKiUPkiZooBiEiohocPHgQGzZsAADodDqkpqaiRQuGHaLmhkGIiKgGHTp0gLe3N7p27YohQ4bAw4Mfl0TNEX+ziYj+LT8/H2FhYQAArVaLF154AT4+PjJXRUTOxFFjROT2LBYLNm/ejMWLF+PMmTP25QxBRM0fe4SIyK0VFRUhLS0Nubm5AG73CnXu3FnmqojoYWEQIiK3deLECaxfvx5VVVXw8vLC6NGj0bFjR7nLIqKHiEGIiNyO2WxGRkYGDh06BABo3bo1xo0bB61WK3NlRPSwMQgRkdu5ePGiPQT169cPAwcOhELBSyaJ3BGDEBG5nQ4dOqB///5o3bo1oqOj5S6HiGTE/wIRUbNXVVWFTZs2oaSkxL7siSeeYAgiIvYIEVHzlp+fj5UrV6KwsBCFhYV49tlnIUm8DxgR3cYgRETNkhACBw8eREZGBqxWK/z8/NC/f3+GICJywCBERM2OyWTC+vXrcfLkSQC3rwkaPXo0vL29Za6MiFwNgxARNSuFhYX46quvcOvWLSgUCgwePBiJiYnsCSKiGjEIEVGz4ufnB6VSCX9/f6SmpqJVq1Zyl0RELoxBiIiavMrKSqjVakiSBJVKhaeffhpeXl7w8vKSuzQicnEcPk9ETdqVK1ewePFi/PDDD/ZlQUFBDEFEVCcMQkTUJAkh8P333+Ozzz6DwWDAkSNHYLVa5S6LiJoYnhojoianrKwMa9aswfnz5wEAXbt2xYgRI6BUKmWujIiaGgYhInJZVptAVk4RCkoqEeqnQXxUEK5cvoTVq1ejpKQEHh4eGDZsGHr06MFRYUTUIAxCROSSMk7kYt76U8g1VNqXtdEqoLcdhM1qRXBwMFJTUxEWFiZjlUTU1DEIEZHLyTiRi+e/PARxx/LLRhsylREY0cELzz0zDiqVSpb6iKj54MXSRORSrDaBeetP2UNQhMKAIKkcACAAnLaG4v9yQ6H08JStRiJqPhiEiMilZOUUIddQCQkCPT2uIkl9Dk+osuGB2yPCBCTkGiqRlVMkc6VE1Bzw1BgRuZSCkkr4SFUY4HkBYcpSAMB1mxYC0l3tiIge1EPpEVq0aBHatm0LjUaDhIQEZGVl1dr2k08+Qb9+/RAYGIjAwEDo9fq72k+ZMgWSJDk8kpOTnb0bRPQwGHLxpPokwpSlqBJK7Kpqh0xzG1jv+LgK9dPIVCARNSdOD0IrVqzArFmzMHfuXBw6dAjdu3dHUlISCgoKamy/e/duPP3009i1axcyMzMRGRmJoUOH4tq1aw7tkpOTkZuba398/fXXzt4VInIiq9WKLVu24MjujdBIVty0eWOdqQsuWoMc2kkAwv1vD6UnInpQTg9C77//PqZPn46pU6ciJiYGixcvhre3N5YsWVJj+6+++govvPAC4uLi0LlzZ/zrX/+CzWbDjh07HNqp1WrodDr7IzAw0Nm7QkROpFAo7P9B0rXvik2mzigVjr0+1SfH5o6MgVLBeYOI6ME59RqhqqoqHDx4ELNnz7YvUygU0Ov1yMzMrNM2ysvLYTabERTk+L+/3bt3IzQ0FIGBgRg0aBD++te/okWLFjVuw2QywWQy2Z8bjcYG7A0ROYMQwn6Ke+zYsbh27Ro6duyINjXMI6Tz12DuyBgkdw2XsWIiak6cGoRu3rwJq9V614RnYWFhOHPmTJ228eqrryIiIgJ6vd6+LDk5GWPHjkVUVBSys7Px5z//GcOGDUNmZmaNU+wvWLAA8+bNe7CdIaJGZbFYsGXLFlitVjz55JMAAB8fH3Ts2BEAkNw1HENidHfNLM2eICJqTC49auytt97C8uXLsXv3bmg0/+kinzBhgv3vsbGx6NatG6Kjo7F7924MHjz4ru3Mnj0bs2bNsj83Go2IjIx0bvFEVKvCwkKsXLkS+fn5AID4+HjodLq72ikVEhKja+7pJSJqDE4NQsHBwVAqlfYPu2r5+fk1fuj93HvvvYe33noL27dvR7du3e7Ztl27dggODsb58+drDEJqtRpqtbr+O0BEje7YsWPYsGEDzGYzvL29MWbMmPt+HhAROYtTL5ZWqVTo1auXw4XO1Rc+JyYm1rreO++8g/nz5yMjIwO9e/e+78+5evUqCgsLER7O6waIXFVVVRXWrl2L9PR0mM1mtG3bFjNnzkT79u3lLo2I3JjTT43NmjULkydPRu/evREfH4+FCxeirKwMU6dOBQBMmjQJLVu2xIIFCwAAb7/9NubMmYNly5ahbdu2yMvLAwD4+vrC19cXpaWlmDdvHsaNGwedTofs7Gy88soraN++PZKSkpy9O0TUAEIILFu2DJcuXQIADBgwAP3794dCwcntiUheTg9C48ePx40bNzBnzhzk5eUhLi4OGRkZ9guoL1++7PBh+OGHH6KqqgqpqakO25k7dy7eeOMNKJVKHDt2DJ9//jmKi4sRERGBoUOHYv78+Tz9ReSiJEnC448/jqKiIowZMwZRUVFyl0REBACQhBB33uC52TMajfD394fBYIBWq5W7HKJmyWQy4caNG2jVqpV9mdlshqcnb5ZKRA3jjO9v9ksTUaPLzc3Fxx9/jK+++grFxcX25QxBRORqXHr4PBE1LUII7N+/H1u3boXVaoVWq0V5eTkCAgLkLo2IqEYMQkTUKCorK7Fu3TqcPn0aANCxY0eMGjUK3t7eMldGRFQ7BiEiemDXrl1DWloaiouLoVAoMGTIECQkJECSOAs0Ebk2BiEiemBHjx5FcXExAgICkJqaipYtW8pdEhFRnTAIEdEDGzp0KFQqFfr27etwOxwiIlfHUWNEVG+XL1/G6tWrYbPZAAAeHh7Q6/UMQUTU5LBHiIjqTAiBvXv3YteuXRBCICIiAo899pjcZRERNRiDEBHVSWlpKdLT03HhwgUAQGxsLHr06CFzVURED4ZBiIju68KFC0hPT0dpaSk8PDwwfPhwxMXFcVQYETV5DEJEdE/79+/Hpk2bAAAhISF46qmnEBISInNVRESNg0GIiO6pdevW8PDwQGxsLIYNG8bbZBBRs8IgRER3qZ4TCADCwsLwwgsvIDAwUN6iiIicgMPnicjOarVi27Zt+Mc//oGrV6/alzMEEVFzxR4hIgJwuxdo1apV9gB04cIFtGrVSuaqiIici0GIiHDmzBmsXbsWlZWVUKvVGDVqFLp06SJ3WURETscgROTGLBYLtm3bhqysLABAy5YtMW7cOJ4KIyK3wSBE5MZOnjxpD0GJiYkYPHgwlEqlzFURET08DEJEbqxbt264ePEiunTpgo4dO8pdDhHRQ8dRY0RuxGw2Y+fOnTCZTAAASZIwatQohiAiclvsESJyEzdu3EBaWhoKCgpQXFyMsWPHyl0SEZHsGISI3MCRI0ewadMmmM1m+Pj4oHv37nKXRETkEhiEiJqxqqoqbNq0CUePHgUAREVFYezYsfD19ZW5MiIi18AgRNRM3bx5EytWrMDNmzchSRIGDhyIvn37QqHgpYFERNUYhIiaKY1Gg4qKCvj5+WHcuHFo06aN3CUREbkcBiGiZsRiscDD4/avta+vL5555hkEBATA29tb5sqIiFwT+8iJmonr16/jf//3f3H8+HH7soiICIYgIqJ7YI8QURMnhEBWVha2bt0Km82GvXv34pFHHuG1QEREdcAgRNSEVVRUYO3atTh79iwAoHPnznjyyScZgoiI6ohBiKiJunLlClatWgWDwQClUokhQ4YgPj4ekiTJXRoRUZPBIETUBBUXF2Pp0qWw2WwIDAxEamoqIiIi5C6LiKjJYRAiaoICAgKQkJCAkpISjBgxAmq1Wu6SiIiaJAYhoibi4sWLCAgIQEBAAABAr9dDkiSeCiMiegC8opLIxdlsNnz77bf44osvsGrVKlitVgCAQqFgCCIiekDsESJyYSUlJUhPT0dOTg4AIDg4GDabDUqlUubKiIiaBwYhIheVnZ2N9PR0lJWVwdPTEykpKbxrPBFRI2MQInIxNpsNu3btwt69ewEAYWFhSE1NRXBwsMyVERE1Pw/lGqFFixahbdu20Gg0SEhIQFZW1j3br1y5Ep07d4ZGo0FsbCw2bdrk8LoQAnPmzEF4eDi8vLyg1+tx7tw5Z+4C0UNjs9ns7+devXph2rRpDEFERE7i9CC0YsUKzJo1C3PnzsWhQ4fQvXt3JCUloaCgoMb2P/zwA55++mlMmzYNhw8fxujRozF69GicOHHC3uadd97BBx98gMWLF2Pfvn3w8fFBUlISKisrnb07RE4jhAAAeHh4IDU1FampqRgxYgQ8PT1lroyIqPmSRPWnr5MkJCTg0UcfxT//+U8At/+3GxkZiZdeegmvvfbaXe3Hjx+PsrIybNiwwb7sscceQ1xcHBYvXgwhBCIiIvDyyy/jj3/8IwDAYDAgLCwMS5cuxYQJE+5bk9FohL+/PwwGA7RabSPtKVHDWK1WbN++HRqNBgMGDJC7HCIil+WM72+n9ghVVVXh4MGD0Ov1//mBCgX0ej0yMzNrXCczM9OhPQAkJSXZ2+fk5CAvL8+hjb+/PxISEmrdJpGrunXrFpYsWYIff/wR3377LYqKiuQuiYjIrTj1YumbN2/CarUiLCzMYXlYWBjOnDlT4zp5eXk1ts/Ly7O/Xr2stjZ3MplMMJlM9udGo7F+O0LkBKdOncK6detgMpmg0WgwatQoBAUFyV0WEZFbcYtRYwsWLMC8efPkLoMIAGCxWLBlyxYcOHAAANCqVSukpqbC399f5sqIiNyPU0+NBQcHQ6lUIj8/32F5fn4+dDpdjevodLp7tq/+sz7bnD17NgwGg/1x5cqVBu0P0YMSQuDzzz+3h6A+ffpgypQpDEFERDJxahBSqVTo1asXduzYYV9ms9mwY8cOJCYm1rhOYmKiQ3sA2LZtm719VFQUdDqdQxuj0Yh9+/bVuk21Wg2tVuvwIJKDJEmIi4uDt7c3Jk6cCL1ez1miiYhk5PRTY7NmzcLkyZPRu3dvxMfHY+HChSgrK8PUqVMBAJMmTULLli2xYMECAMDvfvc7DBgwAH//+9+RkpKC5cuX48CBA/j4448B3P4i+f3vf4+//vWv6NChA6KiovD6668jIiICo0ePdvbuENWb2WyGwWCwzwXUs2dPdOnSBd7e3jJXRkRETg9C48ePx40bNzBnzhzk5eUhLi4OGRkZ9oudL1++DIXiPx1Tjz/+OJYtW4a//OUv+POf/4wOHTpgzZo16Nq1q73NK6+8grKyMsyYMQPFxcXo27cvMjIyoNFonL07RPVSUFCAtLQ0VFVV4de//jW8vLwgSRJDEBGRi3D6PEKuiPMIkbMJIXDkyBFs2rQJFosFvr6+eOaZZxAeHi53aURETZYzvr/dYtQY0cNkMpmwceNGHD9+HAAQHR2NMWPGwMfHR+bKiIjoTgxCRI0oLy8PK1euRFFRESRJwqBBg9CnTx9IkiR3aUREVAMGIaJG9N1336GoqAharRbjxo1D69at5S6JiIjugUGIqBGNGDECGo0GgwcP5gXRRERNgNPvPk/UnF27dg3btm2z3zney8sLI0eOZAgiImoi2CNE1ABCCPz444/Yvn07bDYbwsLC0K1bN7nLIiKiemIQIqqn8vJyrF27Fj/99BMAICYmBh07dpS5KiIiaggGIaJ6uHz5MlatWgWj0QilUomkpCT07t2bo8KIiJooBiGiOsrKykJGRgaEEGjRogVSU1NrvdEvERE1DQxCRHUUHBwMIQRiY2ORkpICtVotd0lERPSAGISI7qG8vNw+Aqxdu3aYMWMGdDodT4URETUTHD5PVAObzYZdu3bhgw8+QFFRkX15eHg4QxARUTPCIER0B6PRiC+++AJ79uyByWTCqVOn5C6JiIichKfGiH7m3LlzWLNmDcrLy6FSqTBixAjExsbKXRYRETkJgxARAKvVip07d+KHH34AAOh0OqSmpqJFixYyV0ZERM7EIEQE4MCBA/YQ9Oijj2Lo0KHw8OCvBxFRc8dPeiIAvXv3xrlz59CrVy906dJF7nKIiOgh4cXS5JYsFgsyMzNhtVoBAEqlEhMnTmQIIiJyM+wRIrdTVFSEtLQ05ObmoqysDHq9HgA4LJ6IyA0xCJFbOXHiBNavX4+qqip4eXmhdevWcpdEREQyYhAit2A2m5GRkYFDhw4BAFq3bo1x48ZBq9XKXBkREcmJQYiavcLCQnzzzTcoKCgAAPTr1w8DBw6EQsFL5IiI3B2DEDV7QgjcunULPj4+GDNmDKKjo+UuiYiIXASDEDVLNpvN3uMTHByM8ePHIywsDL6+vjJXRkREroTnBqhJstoEMrMLsfbINWRmF8JqE/bX8vPzsXjxYly8eNG+LDo6miGIiIjuwh4hanIyTuRi3vpTyDVU2peF+2swZ0QXhJiuIyMjA1arFdu3b8e0adM4LJ6IiGrFIERNSsaJXDz/5SGIO5YXGsqw4ps0RHncAgC0b98eo0ePZggiIqJ7YhCiJsNqE5i3/tRdIaiFVIaBqgvQKkywQcIQ/WD0efxxhiAiIrovXiNETUZWTpHD6TAACJAqkKI+A63ChBKbCpsqO0Gp68wQREREdcIeIWoyCkoq71pWLDS4ZA2AUhLYW9UWVfCosR0REVFNGISoyQj10wAAgqVSGIUGVfAAIGGvOQpWSAAkh3ZERET3wyBELstqE8jKKUJBSSVC/TTo2ToAj/veRAfLRVy2BWBXVTQACdZ/n+GVAOj8NYiPCpK1biIiajoYhMgl3TlEXg0zhnhfRidxC5AAISQoIf7dE1TdFwTMHRkDpYLXBxERUd0wCJHLuXOIfJiiBANUF+AjzLAICeqonjh7TQOr2WRfR+evwdyRMUjuGi5P0URE1CQxCJFL+fkQeQkC3TxyEedxHQoJKLZpsLuqHTTXvfDtK0/g4KVb9tNm8VFB7AkiIqJ6YxAil/LzIfKesKKT8gYUEnDO0gI/mlvDAiVgqMTBS7eQGN1C5mqJiKipYxAil/Lzoe9V8MBuczv4SSZkW4NrbUdERNRQnFCRXIbNZoMh+zDaK2/alxXY/O4KQQCHyBMRUeNwWhAqKirCxIkTodVqERAQgGnTpqG0tPSe7V966SV06tQJXl5eaN26NX7729/CYDA4tJMk6a7H8uXLnbUb9JAYDAYsXboUOScO4nHVZXijqsZ2Em7fYJVD5ImIqDE47dTYxIkTkZubi23btsFsNmPq1KmYMWMGli1bVmP769ev4/r163jvvfcQExODS5cuYebMmbh+/TrS0tIc2n722WdITk62Pw8ICHDWbtBD8NNPP2HNmjWoqKiASqVC67h+qPjWAAlwuK8Yh8gTEVFjk4QQd97D8oGdPn0aMTEx2L9/P3r37g0AyMjIwPDhw3H16lVERETUaTsrV67Es88+i7KyMnh43M5skiQhPT0do0ePbnB9RqMR/v7+MBgM0Gq1Dd4OPRir1Yrt27fjxx9/BACEh4cjNTUVQUFBd80jBNzuCeIQeSIi9+WM72+n9AhlZmYiICDAHoIAQK/XQ6FQYN++fRgzZkydtlO9o9UhqNqLL76I5557Du3atcPMmTMxderUe95k02QywWT6z5wzRqOxnntEjc1qtWLp0qW4evUqACAhIQF6vd7+b53cNRxDYnQOM0tziDwRETU2pwShvLw8hIaGOv4gDw8EBQUhLy+vTtu4efMm5s+fjxkzZjgsf/PNNzFo0CB4e3tj69ateOGFF1BaWorf/va3tW5rwYIFmDdvXv13hJxGqVQiKioKN2/exKhRo9C5c+e72ygkDpEnIiKnqlcQeu211/D222/fs83p06cfqCDgdo9NSkoKYmJi8MYbbzi89vrrr9v/3qNHD5SVleHdd9+9ZxCaPXs2Zs2a5bD9yMjIB66T6sdisaCiogJ+fn4AgIEDB6J37948PUlERLKpVxB6+eWXMWXKlHu2adeuHXQ6HQoKChyWWywWFBUVQafT3XP9kpISJCcnw8/PD+np6fD09Lxn+4SEBMyfPx8mkwlqtbrGNmq1utbX6OEoLCzEypUroVAo8Ktf/QoeHh5QKBQMQUREJKt6BaGQkBCEhITct11iYiKKi4tx8OBB9OrVCwCwc+dO2Gw2JCQk1Lqe0WhEUlIS1Go11q1bB43m/nPFHDlyBIGBgQw6Luz48ePYsGEDqqqq4O3tjcLCQoSFhcldFhERkXOuEerSpQuSk5Mxffp0LF68GGazGb/5zW8wYcIE+4ixa9euYfDgwfjiiy8QHx8Po9GIoUOHory8HF9++SWMRqP9ouaQkBAolUqsX78e+fn5eOyxx6DRaLBt2zb87W9/wx//+Edn7AY9ILPZjM2bN+Pw4cMAgDZt2mDcuHH2U2NERERyc9o8Ql999RV+85vfYPDgwVAoFBg3bhw++OAD++tmsxlnz55FeXk5AODQoUPYt28fAKB9+/YO28rJyUHbtm3h6emJRYsW4Q9/+AOEEGjfvj3ef/99TJ8+3Vm7QQ1UUFCAtLQ03LhxAwAwYMAA9O/fHwoFJzMnIiLX4ZR5hFwd5xFyvs8//xwXL16Er68vxo4di6ioKLlLIiKiJq7JzCNE9OSTT2L79u0YPnw4fHx85C6HiIioRjxPQY0iLy/PPkM0AAQGBuKpp55iCCIiIpfGHiF6IEIIHDhwAFu2bIHVakVISAiio6PlLouIiKhOGISowSorK7Fu3Tr7JJodO3ZEeDjvA0ZERE0HgxA1yLVr15CWlobi4mIoFAro9Xo89thj97znGxERkathEKJ6279/PzIyMmCz2RAQEIDU1FS0bNlS7rKIiIjqjUGI6k2lUsFmsyEmJgYjR46s0wzgRERErohBiOrEbDbb7/vWvXt3+Pn5ISoqiqfCiIioSePwebonIQS+++47LFq0CGVlZfbl7dq1YwgiIqImjz1CVKvS0lKkp6fjwoULAIBjx44hMTFR5qqIiIgaD4MQ1SgnJwerV69GaWkpPDw8MHz4cMTFxcldFhERUaNiECIHNpsN3377Lfbs2QMACAkJQWpqKkJDQ2WujIiIqPExCJGD7777zh6CevTogWHDhtkvkiYiImpuGITIQUJCAs6cOYPHH38csbGxcpdDRETkVAxCbs5qteLEiRPo1q0bJEmCRqPBjBkzOCKMiIjcAoOQGysuLsaqVatw9epVVFVV4dFHHwUAhiAiInIbDEJu6syZM1i7di0qKyuhVqvh6+srd0lEREQPHYOQm7FYLNi+fTv27dsHAGjZsiXGjRuHwMBAmSsjIiJ6+BiE3EhRURHS0tKQm5sLAEhMTMTgwYOhVCplroyIiEgeDEJupLS0FHl5efDy8sLo0aPRsWNHuUsiIiKSFYNQMyeEsF/83Lp1a4wZMwZt2rSBVquVuTIiIiL58aarzdjNmzexZMkS3Lhxw74sNjaWIYiIiOjfGISaqaNHj+Ljjz/G1atXsXnzZrnLISIickk8NdbMVFVVYdOmTTh69CgAICoqCmPGjJG5KiIiItfEINSM5OfnIy0tDTdv3oQkSRgwYAD69esHhYIdf0RERDVhEGomrl27hqVLl8JiscDPzw/jxo1DmzZt5C6LiIjIpTEINRPh4eGIiIiASqXC6NGj4ePjI3dJRERELo9BqAnLz89HixYt4OHhAYVCgaeffhpqtZr3CiMiIqojXjzSBAkhsG/fPnz88cfYvn27fblGo2EIIiIiqgf2CDUxFRUVWLduHc6cOQMAMBgMsNlsvCCaiIioARiEmpCrV68iLS0NBoMBSqUSQ4YMQXx8PHuBiIiIGohBqAkQQuCHH37Azp07YbPZEBgYiNTUVERERMhdGhERUZPGINQElJSU4LvvvoPNZsMjjzyCkSNHQq1Wy10WERFRk8cg1ARotVqMGjUK5eXl6NmzJ0+FERERNRIGIRdks9nw3XffoWXLlmjfvj0AoEuXLjJXRURE1PwwCLmYkpISpKenIycnB97e3njppZeg0WjkLouIiKhZYhByIdnZ2UhPT0dZWRk8PT0xdOhQhiAiIiInYhByATabDbt27cLevXsBAKGhoXjqqacQHBwsc2VERETNm9Nm4SsqKsLEiROh1WoREBCAadOmobS09J7rDBw4EJIkOTxmzpzp0Oby5ctISUmBt7c3QkND8ac//QkWi8VZu+F0ZrMZn3/+uT0E9erVC8899xxDEBER0UPgtB6hiRMnIjc3F9u2bYPZbMbUqVMxY8YMLFu27J7rTZ8+HW+++ab9ube3t/3vVqsVKSkp0Ol0+OGHH5Cbm4tJkybB09MTf/vb35y1K07l6emJwMBA5OXlYeTIkejatavcJREREbkNSQghGnujp0+fRkxMDPbv34/evXsDADIyMjB8+HBcvXq11okABw4ciLi4OCxcuLDG1zdv3owRI0bg+vXrCAsLAwAsXrwYr776Km7cuAGVSlWn+oxGI/z9/WEwGKDVauu/gw/IarXCbDbbr/+pqqpCaWkpgoKCHnotRERETYUzvr+dcmosMzMTAQEB9hAEAHq9HgqFAvv27bvnul999RWCg4PRtWtXzJ49G+Xl5Q7bjY2NtYcgAEhKSoLRaMTJkydr3abJZILRaHR4yOXWrVtYsmQJVq1aheoMqlKpGIKIiIhk4JRTY3l5eQgNDXX8QR4eCAoKQl5eXq3rPfPMM2jTpg0iIiJw7NgxvPrqqzh79ixWr15t3+7PQxAA+/N7bXfBggWYN29eQ3en0Zw6dQrr1q2DyWSCRqNBUVERWrRoIXdZREREbqteQei1117D22+/fc82p0+fbnAxM2bMsP89NjYW4eHhGDx4MLKzsxEdHd3g7c6ePRuzZs2yPzcajYiMjGzw9urLYrFg69at2L9/PwCgVatWGDduHAICAh5aDURERHS3egWhl19+GVOmTLlnm3bt2kGn06GgoMBhucViQVFREXQ6XZ1/XkJCAgDg/PnziI6Ohk6nQ1ZWlkOb/Px8ALjndtVqtWz35iosLERaWpq9x6pPnz544oknoFQqZamHiIiI/qNeQSgkJAQhISH3bZeYmIji4mIcPHgQvXr1AgD7ndOrw01dHDlyBAAQHh5u3+5///d/o6CgwH7qbdu2bdBqtYiJianPrjiF1SaQlVOEgpJKhPpp8GjbQKxcuRL5+fnw9vbGmDFj7LfMICIiIvk5ZdQYAAwbNgz5+flYvHixffh879697cPnr127hsGDB+OLL75AfHw8srOzsWzZMgwfPhwtWrTAsWPH8Ic//AGtWrXCt99+C+D2aKu4uDhERETgnXfeQV5eHn75y1/iueeeq9fweWdcdZ5xIhfz1p9CrqHSvizcX4OX+wSj8vJxjBo1Cn5+fo3ys4iIiNxRkxk1Btwe/dW5c2cMHjwYw4cPR9++ffHxxx/bXzebzTh79qx9VJhKpcL27dsxdOhQdO7cGS+//DLGjRuH9evX29dRKpXYsGEDlEolEhMT8eyzz2LSpEkO8w7JIeNELp7/8hByDZUIkCoQpSwCAOQZKvGnTVcRHDeYIYiIiMgFOa1HyJU1ZqK02gT6vr0TuYYKdFAW4jHPywAENpq6oEh4QwKg89dg76uDoFRIjVI/ERGRO2pSPULuIiunCDcMZejvmYO+qovwkGzIt/mhXHgCAASAXEMlsnKK5C2UiIiI7sKbrj6gi1ev4Un1KfgrTLAJ4JClJY5bdAAce38KSipr3gARERHJhkHoARw4cADn92TAX2FFmc0Tu83tUGCr+VqgUD/NQ66OiIiI7odB6AFUVFTAZrOiQArEDlMbVNZwOKuvEYqP4i00iIiIXA2DUD3ZbDYoFLcvrerbty+CgoJw2RaITV8dhoTb1wRVqz45NndkDC+UJiIickG8WLqOhBDIzMzEJ598ArPZDACQJAmPPPIIhsVG4MNne0Ln73j6S+evwYfP9kRy13A5SiYiIqL7YI9QHZSXl2Pt2rX46aefAABHjx5F7969Hdokdw3HkBidw8zS8VFB7AkiIiJyYQxC93H58mWsWrUKRqMRSqUSSUlJ9tuG3EmpkJAYzbvJExERNRUMQrUQQmDv3r3YtWsXhBBo0aIFUlNT63XTWCIiInJtDEK12LFjB77//nsAQGxsLFJSUmS7gz0RERE5B4NQLeLj43H8+HEMHDgQcXFxkCRe60NERNTc8F5j/75Xic1mQ3Z2Njp06GBvZ7FY4OHBrEhEROQKeK8xJzEajfjiiy+wbNkynD171r6cIYiIiKh5c/tv+nPnzmHNmjUoLy+HSqWCxWKRuyQiIiJ6SNw6CO3cuRNHjx4FAOh0OqSmpqJFCw5/JyIichduHYT27dsHjUaDRx99FEOHDuWpMCIiIjfj1t/8arUaTz31FGJiYuQuhYiIiGTglkGoeqBcamoqWrVqBaPRKHNFREREdD/V39eNOeDdLYNQSUkJgNsTJRIREVHTUlJSAn9//0bZllvOI2Sz2XD9+nX4+fnJMlGi0WhEZGQkrly50mjzIDRFPA48BtV4HHgMqvE48BhUq+k4CCFQUlKCiIgIKBSNMwOQW/YIKRQKtGrVSu4yoNVq3fpNXo3HgcegGo8Dj0E1Hgceg2p3HofG6gmqxgkViYiIyG0xCBEREZHbYhCSgVqtxty5c93+bvY8DjwG1XgceAyq8TjwGFR7WMfBLS+WJiIiIgLYI0RERERujEGIiIiI3BaDEBEREbktBiEiIiJyWwxCTlJUVISJEydCq9UiICAA06ZNQ2lp6T3XGThwICRJcnjMnDnToc3ly5eRkpICb29vhIaG4k9/+hMsFoszd6XB6nsMioqK8NJLL6FTp07w8vJC69at8dvf/hYGg8Gh3Z3HSJIkLF++3Nm7U2eLFi1C27ZtodFokJCQgKysrHu2X7lyJTp37gyNRoPY2Fhs2rTJ4XUhBObMmYPw8HB4eXlBr9fj3LlzztyFB1afY/DJJ5+gX79+CAwMRGBgIPR6/V3tp0yZcte/eXJysrN344HV5zgsXbr0rn3UaDQObZr7e6Gmz0BJkpCSkmJv0xTfC3v27MHIkSMREREBSZKwZs2a+66ze/du9OzZE2q1Gu3bt8fSpUvvalPfzxo51fcYrF69GkOGDEFISAi0Wi0SExOxZcsWhzZvvPHGXe+Fzp071784QU6RnJwsunfvLn788Ufx3Xffifbt24unn376nusMGDBATJ8+XeTm5tofBoPB/rrFYhFdu3YVer1eHD58WGzatEkEBweL2bNnO3t3GqS+x+D48eNi7NixYt26deL8+fNix44dokOHDmLcuHEO7QCIzz77zOE4VVRUOHt36mT58uVCpVKJJUuWiJMnT4rp06eLgIAAkZ+fX2P777//XiiVSvHOO++IU6dOib/85S/C09NTHD9+3N7mrbfeEv7+/mLNmjXi6NGj4sknnxRRUVEus893qu8xeOaZZ8SiRYvE4cOHxenTp8WUKVOEv7+/uHr1qr3N5MmTRXJyssO/eVFR0cPapQap73H47LPPhFarddjHvLw8hzbN/b1QWFjosP8nTpwQSqVSfPbZZ/Y2TfG9sGnTJvFf//VfYvXq1QKASE9Pv2f7CxcuCG9vbzFr1ixx6tQp8Y9//EMolUqRkZFhb1PfYyu3+h6D3/3ud+Ltt98WWVlZ4qeffhKzZ88Wnp6e4tChQ/Y2c+fOFY888ojDe+HGjRv1ro1ByAlOnTolAIj9+/fbl23evFlIkiSuXbtW63oDBgwQv/vd72p9fdOmTUKhUDh8OH744YdCq9UKk8nUKLU3loYegzt98803QqVSCbPZbF9Wl18iucTHx4sXX3zR/txqtYqIiAixYMGCGtv/4he/ECkpKQ7LEhISxK9//WshhBA2m03odDrx7rvv2l8vLi4WarVafP31107YgwdX32NwJ4vFIvz8/MTnn39uXzZ58mQxatSoxi7Vqep7HD777DPh7+9f6/bc8b3w//7f/xN+fn6itLTUvqwpvhd+ri6fX6+88op45JFHHJaNHz9eJCUl2Z8/6LGVU0M/w2NiYsS8efPsz+fOnSu6d+/+wPXw1JgTZGZmIiAgAL1797Yv0+v1UCgU2Ldv3z3X/eqrrxAcHIyuXbti9uzZKC8vd9hubGwswsLC7MuSkpJgNBpx8uTJxt+RB/Agx+DnDAYDtFotPDwcb4v34osvIjg4GPHx8ViyZAmEC0yHVVVVhYMHD0Kv19uXKRQK6PV6ZGZm1rhOZmamQ3vg9r9pdfucnBzk5eU5tPH390dCQkKt25RTQ47BncrLy2E2mxEUFOSwfPfu3QgNDUWnTp3w/PPPo7CwsFFrb0wNPQ6lpaVo06YNIiMjMWrUKIffa3d8L3z66aeYMGECfHx8HJY3pfdCQ9zvc6Exjm1TY7PZUFJSctfnwrlz5xAREYF27dph4sSJuHz5cr237ZY3XXW2vLw8hIaGOizz8PBAUFAQ8vLyal3vmWeeQZs2bRAREYFjx47h1VdfxdmzZ7F69Wr7dn8eggDYn99ru3Jo6DH4uZs3b2L+/PmYMWOGw/I333wTgwYNgre3N7Zu3YoXXngBpaWl+O1vf9to9TfEzZs3YbVaa/w3OnPmTI3r1PZvWn2Mqv+8VxtX0pBjcKdXX30VERERDh/yycnJGDt2LKKiopCdnY0///nPGDZsGDIzM6FUKht1HxpDQ45Dp06dsGTJEnTr1g0GgwHvvfceHn/8cZw8eRKtWrVyu/dCVlYWTpw4gU8//dRheVN7LzREbZ8LRqMRFRUVuHXr1gP/njU17733HkpLS/GLX/zCviwhIQFLly5Fp06dkJubi3nz5qFfv344ceIE/Pz86rxtBqF6eO211/D222/fs83p06cbvP2ff+HHxsYiPDwcgwcPRnZ2NqKjoxu83cbk7GNQzWg0IiUlBTExMXjjjTccXnv99dftf+/RowfKysrw7rvvyh6E6MG99dZbWL58OXbv3u1wofCECRPsf4+NjUW3bt0QHR2N3bt3Y/DgwXKU2ugSExORmJhof/7444+jS5cu+OijjzB//nwZK5PHp59+itjYWMTHxzssd4f3AjlatmwZ5s2bh7Vr1zr8B3vYsGH2v3fr1g0JCQlo06YNvvnmG0ybNq3O22cQqoeXX34ZU6ZMuWebdu3aQafToaCgwGG5xWJBUVERdDpdnX9eQkICAOD8+fOIjo6GTqe7a1RAfn4+ANRruw/iYRyDkpISJCcnw8/PD+np6fD09Lxn+4SEBMyfPx8mk0nWe/MEBwdDqVTa/02q5efn17rPOp3unu2r/8zPz0d4eLhDm7i4uEasvnE05BhUe++99/DWW29h+/bt6Nat2z3btmvXDsHBwTh//rxLfvk9yHGo5unpiR49euD8+fMA3Ou9UFZWhuXLl+PNN9+8789x9fdCQ9T2uaDVauHl5QWlUvnA76+mYvny5XjuueewcuXKu04X3ikgIAAdO3a0/87UFa8RqoeQkBB07tz5ng+VSoXExEQUFxfj4MGD9nV37twJm81mDzd1ceTIEQCwf+glJibi+PHjDgFj27Zt0Gq1iImJaZydvA9nHwOj0YihQ4dCpVJh3bp1dw0frsmRI0cQGBgo+w0KVSoVevXqhR07dtiX2Ww27Nixw+F/+j+XmJjo0B64/W9a3T4qKgo6nc6hjdFoxL59+2rdppwacgwA4J133sH8+fORkZHhcF1Zba5evYrCwkKHQOBKGnocfs5qteL48eP2fXSX9wJwe0oJk8mEZ5999r4/x9XfCw1xv8+Fxnh/NQVff/01pk6diq+//tphCoXalJaWIjs7u/7vhQe+3JpqlJycLHr06CH27dsn9u7dKzp06OAwdPzq1auiU6dOYt++fUIIIc6fPy/efPNNceDAAZGTkyPWrl0r2rVrJ/r3729fp3r4/NChQ8WRI0dERkaGCAkJcenh8/U5BgaDQSQkJIjY2Fhx/vx5hyGRFotFCCHEunXrxCeffCKOHz8uzp07J/73f/9XeHt7izlz5siyj3davny5UKvVYunSpeLUqVNixowZIiAgwD7S75e//KV47bXX7O2///574eHhId577z1x+vRpMXfu3BqHzwcEBIi1a9eKY8eOiVGjRrn8kOn6HIO33npLqFQqkZaW5vBvXlJSIoQQoqSkRPzxj38UmZmZIicnR2zfvl307NlTdOjQQVRWVsqyj3VR3+Mwb948sWXLFpGdnS0OHjwoJkyYIDQajTh58qS9TXN/L1Tr27evGD9+/F3Lm+p7oaSkRBw+fFgcPnxYABDvv/++OHz4sLh06ZIQQojXXntN/PKXv7S3rx4+/6c//UmcPn1aLFq0qMbh8/c6tq6mvsfgq6++Eh4eHmLRokUOnwvFxcX2Ni+//LLYvXu3yMnJEd9//73Q6/UiODhYFBQU1Ks2BiEnKSwsFE8//bTw9fUVWq1WTJ061f7BLoQQOTk5AoDYtWuXEEKIy5cvi/79+4ugoCChVqtF+/btxZ/+9CeHeYSEEOLixYti2LBhwsvLSwQHB4uXX37ZYWi5K6nvMdi1a5cAUOMjJydHCHF7CH5cXJzw9fUVPj4+onv37mLx4sXCarXKsIc1+8c//iFat24tVCqViI+PFz/++KP9tQEDBojJkyc7tP/mm29Ex44dhUqlEo888ojYuHGjw+s2m028/vrrIiwsTKjVajF48GBx9uzZh7ErDVafY9CmTZsa/83nzp0rhBCivLxcDB06VISEhAhPT0/Rpk0bMX36dJf9wP+5+hyH3//+9/a2YWFhYvjw4Q5zpgjR/N8LQghx5swZAUBs3br1rm011fdCbZ9t1fs+efJkMWDAgLvWiYuLEyqVSrRr185hLqVq9zq2rqa+x2DAgAH3bC/E7SkFwsPDhUqlEi1bthTjx48X58+fr3dtkhAuMO6YiIiISAa8RoiIiIjcFoMQERERuS0GISIiInJbDEJERETkthiEiIiIyG0xCBEREZHbYhAiIiIit8UgRERERG6LQYiIiIjcFoMQERERuS0GISIiInJbDEJERETktv4/xwdYTpMuJFsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.scatter(reference, res.solution)\n", + "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "vitens_wntr_1", + "language": "python", + "name": "python3" + }, + "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.9.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/noisy_vqls_solver.ipynb b/docs/notebooks/linear_solver/noisy_vqls_solver.ipynb similarity index 100% rename from docs/notebooks/noisy_vqls_solver.ipynb rename to docs/notebooks/linear_solver/noisy_vqls_solver.ipynb diff --git a/docs/notebooks/linear_solver/qubols_solver.ipynb b/docs/notebooks/linear_solver/qubols_solver.ipynb new file mode 100644 index 0000000..9a8a154 --- /dev/null +++ b/docs/notebooks/linear_solver/qubols_solver.ipynb @@ -0,0 +1,209 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# QUBO Linear Solver \n", + "\n", + "This notebook illustrates how to use the QUBO linear solver to solve individual linear systems. We will use sparse random matrices that mimc the matrices obtained by EPANET for small water networks.\n", + "\n", + "Let's define the system:" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "matrix([[0. , 0.131, 0. , 0. , 0.84 , 0.3 , 0.215, 0.382],\n", + " [0.131, 0. , 0. , 0. , 0.199, 0. , 0. , 0. ],\n", + " [0. , 0. , 0.068, 0. , 0.04 , 0.082, 0.475, 0. ],\n", + " [0. , 0. , 0. , 0. , 0. , 0.237, 0. , 0. ],\n", + " [0.84 , 0.199, 0.04 , 0. , 0. , 0. , 0. , 0. ],\n", + " [0.3 , 0. , 0.082, 0.237, 0. , 0.383, 0. , 0. ],\n", + " [0.215, 0. , 0.475, 0. , 0. , 0. , 0.328, 0.059],\n", + " [0.382, 0. , 0. , 0. , 0. , 0. , 0.059, 0. ]])" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import scipy.sparse as sp \n", + "import numpy as np \n", + "\n", + "# set the seed\n", + "np.random.seed(1234)\n", + "\n", + "# size of the linear system\n", + "size = 8\n", + "\n", + "# create the matrix\n", + "A = sp.random(size,size,density=0.25)\n", + "A = (A+A.T)/2\n", + "A = A.todense()\n", + "A" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.896, 0.764, 0.375, 0.026, 0.907, 0.786, 0.619, 0.212])" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# create the right hand side\n", + "b = np.random.rand(size)\n", + "b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve the problem classically\n", + "We can solve this sytem with a classical linear solver to obtain a reference solution" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.518, 2.03 , 1.693, 1.902, 3.508, 0.109, 0.23 , -6.275])" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reference = np.linalg.solve(A,b)\n", + "reference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve the problem with the QUBO linear solver\n", + "We can now use the QUBO solver to solve the problem" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "from wntr_quantum.linear_solver import QUBO_SOLVER\n", + "\n", + "qubols = QUBO_SOLVER(\n", + " num_qbits=11, # Number of qubits used to encode each float\n", + " num_reads=500, # number of reads of the simulated annealing\n", + " range=10, # max absolute value of the encoded floats \n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "res = qubols(A, b)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "QUBOResult(solution=array([ 0.45 , 2.297, 1.877, 2.111, 3.754, -0.01 , 0.176, -6.794]), residue=0.06341486167248815, ref=array([0., 0., 0., 0., 0., 0., 0., 0.]))" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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w4YN04kTJ7wZMah09/1ev369tm3bdtUZEePHj9ejjz6qN954w4spg0d33+/LamtrNW3aNN1///367W9/6+V0oSExMVFhYWFqaGi44npDQ4NSUlIsShUann32Wa1cuVKbNm1Senq61XHwJRSRL0lKSlJSUtJNH5eTk6OoqCgdPHhQkydPliR1dHTo2LFjGjJkiLdjBo3uvt//+Z//qX/5l3/p+r62tlazZs3S22+/rby8PG9GDCrdfb+lSyMh06ZN6xrts9kYPO0NkZGRysnJ0bp167qW+3s8Hq1bt07PPvusteGClGma+t73vqfS0lJt2LBBmZmZVkfC36GI3IL4+Hg9/fTTWrRokTIyMjRkyBAtXbpUkvS1r33N4nTBZ/DgwVd837dvX0nS8OHD+ZuNF9TU1Cg/P19DhgzRL3/5SzU2Nnb9Gn9rv33PPfecHn/8cY0fP165ubl68cUXdfHiRT355JNWRwtKzzzzjP70pz+pvLxccXFxXXNx7Ha7YmJiLE4HiSJyy5YuXarw8HA99thjam1tVV5entavX6+EhASrowG3Ze3atTp06JAOHTp0VdFjtf/t+8Y3vqHGxkb97Gc/U319vcaOHavKysqrJrCidyxbtkySlJ+ff8X111577aa3KuEb7CMCAAAsw41fAABgGYoIAACwDEUEAABYhiICAAAsQxEBAACWoYgAAADLUEQAAIBlKCIAAMAyFBEAAGAZiggAALAMRQQAAFiGIgIAACzz/wPc5RaQUHhqwQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.scatter(reference, res.solution)\n", + "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "vitens_wntr_1", + "language": "python", + "name": "python3" + }, + "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.9.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/linear_solver/vqls_solver.ipynb b/docs/notebooks/linear_solver/vqls_solver.ipynb new file mode 100644 index 0000000..efc8c1c --- /dev/null +++ b/docs/notebooks/linear_solver/vqls_solver.ipynb @@ -0,0 +1,280 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# VQLS Linear Solver \n", + "\n", + "This notebook illustrates how to use the VQLS linear solver to solve individual linear systems. We will use sparse random matrices that mimc the matrices obtained by EPANET for small water networks.\n", + "\n", + "Let's define the system:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "matrix([[0.986, 0. , 0.362, 0. , 0. , 0. , 0.478, 0. ],\n", + " [0. , 0. , 0.376, 0.108, 0. , 0. , 0. , 0. ],\n", + " [0.362, 0.376, 0. , 0. , 0. , 0.491, 0. , 0.179],\n", + " [0. , 0.108, 0. , 0. , 0.166, 0. , 0.095, 0.345],\n", + " [0. , 0. , 0. , 0.166, 0. , 0.424, 0. , 0.396],\n", + " [0. , 0. , 0.491, 0. , 0.424, 0.912, 0.308, 0.086],\n", + " [0.478, 0. , 0. , 0.095, 0. , 0.308, 0. , 0. ],\n", + " [0. , 0. , 0.179, 0.345, 0.396, 0.086, 0. , 0. ]])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import scipy.sparse as sp \n", + "import numpy as np \n", + "\n", + "# set the seed\n", + "np.random.seed(134)\n", + "\n", + "# size of the linear system\n", + "size = 8\n", + "\n", + "# create the matrix\n", + "A = sp.random(size,size,density=0.25)\n", + "A = (A+A.T)/2\n", + "A = A.todense()\n", + "A" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.372, 0.185, 0.483, 0.466, 0.346, 0.127, 0.125, 0.125])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# create the right hand side\n", + "b = np.random.rand(size)\n", + "b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve the problem classically\n", + "We can solve this sytem with a classical linear solver to obtain a reference solution" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.438, 0.579, 0.545, -0.19 , 0.279, -0.214, -0.537, 1.183])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reference = np.linalg.solve(A,b)\n", + "reference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve the problem with the VQlS linear solver\n", + "We can now use the VQLS solver to solve the problem" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_13880/2584234180.py:10: DeprecationWarning: The class ``qiskit.primitives.estimator.Estimator`` is deprecated as of qiskit 1.2. It will be removed no earlier than 3 months after the release date. All implementations of the `BaseEstimatorV1` interface have been deprecated in favor of their V2 counterparts. The V2 alternative for the `Estimator` class is `StatevectorEstimator`.\n", + " estimator = Estimator()\n" + ] + } + ], + "source": [ + "from wntr_quantum.linear_solver import VQLS_SOLVER\n", + "from qiskit.primitives import Estimator\n", + "from qiskit.circuit.library import RealAmplitudes\n", + "from qiskit_algorithms.optimizers import CG, COBYLA, ADAM, SPSA, AQGD\n", + "\n", + "# define the ansatz\n", + "qc = RealAmplitudes(3, reps=5, entanglement=\"full\")\n", + "\n", + "# define estimator\n", + "estimator = Estimator()\n", + "\n", + "# define the solver\n", + "vqls = VQLS_SOLVER(\n", + " estimator=estimator,\n", + " ansatz=qc,\n", + " optimizer=[COBYLA(maxiter=500), CG(disp=True, maxiter=50)],\n", + " matrix_decomposition=\"symmetric\",\n", + " verbose=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Current function value: 0.000001\n", + " Iterations: 50\n", + " Function evaluations: 1615\n", + " Gradient evaluations: 85\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/nico/miniconda3/envs/vitens_wntr_1/lib/python3.9/site-packages/scipy/optimize/_minimize.py:703: OptimizeWarning: Maximum number of iterations has been exceeded.\n", + " res = _minimize_cg(fun, x0, args, jac, callback, **options)\n" + ] + } + ], + "source": [ + "res = vqls(A, b)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "VQLSResult(solution=array([ 0.435, 0.583, 0.543, -0.183, 0.275, -0.214, -0.53 , 1.18 ]), residue=0.0008701401282325145, logger=VQLSLog(values=[0.3207876539263782, 0.4716285874399877, 0.5452589274695767, 0.5556439196548859, 0.5814438954957406, 0.586357126464855, 0.5482767865061453, 0.5635784973420686, 0.3931045271445829, 0.27217358669527814, 0.16442557106000988, 0.3253899851181421, 0.2573977751574311, 0.208305849100218, 0.1841306119493582, 0.320044619470608, 0.3134084096630484, 0.3689639427064243, 0.16154101716552804, 0.34337101990009444, 0.2318540688486822, 0.14068335297752166, 0.15679598898929803, 0.16065356260380004, 0.13073977330869568, 0.18197220648684964, 0.11247668627902796, 0.10607688103103607, 0.12486878017079428, 0.1419334125041175, 0.06864071319896514, 0.04479310544620141, 0.057290585178884745, 0.31015898018266763, 0.07072382318008152, 0.10626745377549252, 0.06574770878108505, 0.10449715453263109, 0.040795972235473266, 0.06529445352861629, 0.04487106930965945, 0.06490367599974423, 0.08482252619943531, 0.10716116898390249, 0.08906441215486727, 0.14224302640946485, 0.050487620572300274, 0.0503531547454259, 0.061064705243290995, 0.03596315288564289, 0.06295270653143148, 0.042264236763370544, 0.055923114081170455, 0.04468481433366134, 0.06984530288081547, 0.03680186536471686, 0.042091418710347384, 0.04164023578569731, 0.038297964550897734, 0.04267675590495967, 0.03673811929872817, 0.03741641767005677, 0.03571440275984472, 0.03834158531970577, 0.03726362298515484, 0.03893044560114711, 0.03915867016495356, 0.041134196856232874, 0.03762645872348436, 0.044695694626825655, 0.036359730465537754, 0.03533412066999908, 0.03631163301551732, 0.0360423499698711, 0.03550232486807037, 0.03633728980085926, 0.03684766288119601, 0.03525137672144274, 0.034836005529958136, 0.03576302847451529, 0.03726382959342711, 0.03504663856481516, 0.03353387818788567, 0.03258051075907009, 0.03321667498130654, 0.03302467498767814, 0.032394365131588776, 0.03238622091257626, 0.03380468054062835, 0.03276560544258089, 0.033769961922774705, 0.03329670028401022, 0.03446072229465169, 0.033324965520825534, 0.0339774500980462, 0.03200251155113587, 0.033362419479551764, 0.03238232104965866, 0.031810261872883716, 0.03163996542482128, 0.034506325250237, 0.031802516570146766, 0.03446093615415302, 0.03245678648558448, 0.03147785525513902, 0.03101544113986432, 0.030118925988896095, 0.029070073320491496, 0.028976012647081717, 0.028953954046402552, 0.02921997197511239, 0.028604371158443276, 0.028331777264061997, 0.028332117624857434, 0.027198871666480384, 0.026370825625061323, 0.026758403134912512, 0.026455907753863972, 0.027154941004488453, 0.026261391326958372, 0.02602822693133089, 0.025829888583887795, 0.026598118614664212, 0.025672278362664946, 0.02535203116063367, 0.025089892254775648, 0.024554705189231973, 0.023869015101686708, 0.024165529096087046, 0.02416453539537111, 0.023943689766270815, 0.023538295491907668, 0.02378208793802139, 0.02370323140578412, 0.023517861431795573, 0.024254108345873715, 0.022880546255100276, 0.021746494064003197, 0.02233138445662708, 0.021815660081406785, 0.021753555852637385, 0.02177204941067279, 0.022057686579830427, 0.021886379011177626, 0.021587508198218197, 0.022117083847344232, 0.022104211492090076, 0.022073206112192212, 0.021475532799089758, 0.021463668778768263, 0.021054759275139112, 0.021229340161629806, 0.020819941202382508, 0.02088512864637182, 0.0204291509718304, 0.02020263401993494, 0.022069543488929866, 0.0205695177967945, 0.01964326223343149, 0.019793220576687087, 0.01980068332064444, 0.019933521837839363, 0.019961073384516803, 0.01948030492599473, 0.019699412428066165, 0.01929499857935124, 0.019329094518143575, 0.01928094036792205, 0.019218639577120777, 0.019343627894538362, 0.01939831153534899, 0.01983537576917127, 0.018875305726012703, 0.019284748012910247, 0.019147638067603112, 0.01916639455593616, 0.01870958957217872, 0.020150996595317938, 0.019020066450074702, 0.0186023440272004, 0.018757135930493996, 0.018726726467392707, 0.018763588410351528, 0.018801875189158546, 0.018719324482637134, 0.01834281205328625, 0.018454492102968345, 0.018315836801555685, 0.018217736551899066, 0.018141965782563663, 0.01857722905864856, 0.0180985694709328, 0.018137247337087326, 0.018200804215147248, 0.01795383766824521, 0.01796910093199866, 0.01839636972345826, 0.017993493315995757, 0.018183476202047855, 0.017826657474562912, 0.017697748923870327, 0.017943874444315, 0.01756617498939128, 0.01760685171062626, 0.017508094083231063, 0.01757757193602194, 0.017424878586696724, 0.017488026091494913, 0.01722946858001484, 0.017425998322385006, 0.017210876680703646, 0.017289741637658507, 0.01744443418740438, 0.0172521808290772, 0.016970394362141983, 0.016888119312737593, 0.016864720765282337, 0.016830674204556417, 0.01697792281777466, 0.016823903212735525, 0.016716035042916078, 0.016688073188253605, 0.01674371322868906, 0.016733227313057042, 0.016689352471284336, 0.01667170249975769, 0.01709842197016931, 0.016783832815672417, 0.0167126785955809, 0.016204414185386096, 0.016136774083366445, 0.01614622705237112, 0.016161932018995517, 0.016099937162650235, 0.016241104860595268, 0.016122356236677238, 0.01608947004020289, 0.016077134353308264, 0.016066990005678905, 0.016106352625491982, 0.016191598036452093, 0.016080134728393314, 0.015919269179253348, 0.015968080282831698, 0.01585691400724276, 0.01571709823013967, 0.015725580576318232, 0.015682985391240245, 0.015702635022060707, 0.01607350285910969, 0.015830838721287654, 0.015427632098835575, 0.01565189220381047, 0.01557444233590477, 0.015397162636389683, 0.015326101485865551, 0.015542325082469999, 0.015326942332743787, 0.01544326898618209, 0.015254861849618218, 0.01520390352711054, 0.015218536163390084, 0.015443916711853634, 0.015218325185433534, 0.015228169125248936, 0.015205535278322801, 0.014993222135773254, 0.015127076223265257, 0.015026717741261408, 0.01520357640514769, 0.015188807019792194, 0.015364620253185413, 0.015025364042893008, 0.014850508577396226, 0.015053274980546538, 0.014856821673286724, 0.014921614879476408, 0.014870087180823055, 0.015201653568437501, 0.014787937892168701, 0.014784922890953345, 0.014828849487605877, 0.014794206858215642, 0.014798701150276039, 0.014760371358140234, 0.014651512653412135, 0.014670195984280765, 0.01464535385861443, 0.014770606481769089, 0.014635567965364804, 0.014611048967256735, 0.014583935483610588, 0.014579749571804634, 0.014697500163761146, 0.01443394624165395, 0.014398588449582306, 0.014377142119926356, 0.014322538349741953, 0.014326034375432117, 0.014407267879686936, 0.01432561082078676, 0.014338084182703326, 0.014314041952462775, 0.014291179407278753, 0.014277651980686756, 0.014303067767225564, 0.014287585580236462, 0.014244635470125333, 0.014203892348172875, 0.01427229125476992, 0.014208786341718072, 0.014220665065301619, 0.014209577355051906, 0.0142865770020989, 0.014216492748751142, 0.01419568961884976, 0.01416599533795082, 0.014209301740314761, 0.014130355356128832, 0.014070034306012502, 0.014061645706295978, 0.014097217840636111, 0.01406934821595418, 0.014071081639212779, 0.014057558803973302, 0.014050767276115983, 0.014059144745244279, 0.014172495316276068, 0.014002360167140626, 0.013954970100805597, 0.013986302626100344, 0.013968700677248092, 0.013966879445538316, 0.0139436512634733, 0.013949937606103968, 0.013903598215657342, 0.013880113853214193, 0.01383740647349807, 0.014031475016165085, 0.013833159966845643, 0.013786027908973097, 0.013784835908822957, 0.013712667921576882, 0.013779285173300848, 0.013716285744129308, 0.013693634219464013, 0.013703760599303783, 0.013749490785352148, 0.01375281566317188, 0.013731261191126776, 0.013670620986062754, 0.013626178173761327, 0.013629649249360831, 0.013658445878694248, 0.013681636300975408, 0.013562023936770307, 0.013579615416572377, 0.01356412339977009, 0.013619044538709102, 0.013550854788457412, 0.013575960081938954, 0.013617362128992117, 0.013545476444792204, 0.013517057005219879, 0.013418355201497367, 0.013391236752304803, 0.013394742655899128, 0.013410084971733904, 0.013396430716327346, 0.013379416709786596, 0.013388093683517122, 0.013418791886858461, 0.013381262762067414, 0.01342814654559521, 0.013399493724479239, 0.013543607379711609, 0.013408527084018407, 0.013329093589477758, 0.013332969155708252, 0.013394224242746722, 0.013315038227696974, 0.013292157246502234, 0.013296490373147396, 0.013357892110758107, 0.013358294204793397, 0.013270563147120829, 0.013281563888545955, 0.013251606993275433, 0.013229157004789216, 0.013148669218598918, 0.013164827067555396, 0.013161839025852773, 0.013171137286639212, 0.013161188706386051, 0.013139221741740204, 0.013140957886168092, 0.013046984417750873, 0.01304090076697606, 0.013048277958477739, 0.012952268475507123, 0.012931962262571761, 0.012917310617157951, 0.01285367239649815, 0.012799576173145533, 0.012798964900388898, 0.012792802923237478, 0.012830237995064442, 0.01286255460386998, 0.012717306129173767, 0.012770143103046472, 0.012748215681519515, 0.01273455306799387, 0.012725521123670869, 0.01268244482064429, 0.012687848419766445, 0.012725189957537797, 0.0126966517832382, 0.012691157887424809, 0.012682995905522354, 0.012674744578377362, 0.01267638654223291, 0.012863188351581956, 0.012686116721807972, 0.012680231838841594, 0.012656794163731888, 0.012597811960588512, 0.012557047176665614, 0.012556031699261005, 0.01269524775153108, 0.012534600838910226, 0.012574163344298617, 0.012545168155025932, 0.012517864383914556, 0.012476901315008226, 0.012433945763048126, 0.012428845107980369, 0.012465728132245557, 0.012435319543060652, 0.012450948310885113, 0.012442063404105363, 0.012426112830442038, 0.012435575774108587, 0.012445411529251271, 0.012416226621238091, 0.0125257289220283, 0.012394262283430102, 0.01238211890852714, 0.01239288129397731, 0.01236248414625929, 0.012363633570327104, 0.012419392194245704, 0.012411890755839372, 0.012538064621388179, 0.012434436455062814, 0.012299933999732504, 0.012270163535510581, 0.012257516828808268, 0.012268179661354628, 0.012257326226461918, 0.012312255793538673, 0.012269476294184622, 0.012263016154260842, 0.012274579011624986, 0.012276925958876639, 0.012255249237623667, 0.01229788306627111, 0.012221492282633917, 0.012164971635804656, 0.01222222545624052, 0.012167005979247358, 0.012146756654507151, 0.012144566456423922, 0.012137326044985408, 0.012129956724512225, 0.012156212713961279, 0.01215442268371969, 0.012083383852135365, 0.012093424892431592, 0.012067645479068578, 0.012093605042765687, 0.012066748782073144, 0.012083350479116017, 0.012073113306324323, 0.012077562548755028, 0.012059957127711685, 0.012113021490254283, 0.012033809442204002, 0.012076882095632291, 0.012037571739071717, 0.01204113142751384, 0.012043053199866094, 0.012059783284145476, 0.012033719410119104, 0.012024270842539653, 0.012016205126628932, 0.012013950417398167, 0.012020868167344823, 0.012025367717649171, 0.012129959055316775, 0.011903337725295948, 0.011903337725295948, 0.011903337703119132, 0.011903337763456756, 0.01190333778409447, 0.011903337722247054, 0.011903337587364504, 0.011903337667399483, 0.01190333774446628, 0.011903337716372864, 0.011903337652750201, 0.011903337710463813, 0.01190333774885377, 0.011903337745751252, 0.011903337790069357, 0.01190333770522678, 0.01190333780648034, 0.0119033377021176, 0.01190333772243335, 0.01190333771051022, 0.01179942206110407, 0.011799422057880538, 0.01179942215902341, 0.01179942208702367, 0.011799422072718557, 0.011799422154607608, 0.011799422023891837, 0.011799422130445603, 0.011799422161512307, 0.011799422049483366, 0.011799422013767602, 0.011799421962506162, 0.011799421940908106, 0.011799422151674066, 0.011799422117320102, 0.011799422140338023, 0.011799422266639326, 0.011799422147663385, 0.011799421983824554, 0.01159678490823024, 0.01159678490214866, 0.011596785002373378, 0.011596784909026048, 0.011596784899433499, 0.011596785006345756, 0.011596784876037769, 0.011596784956640738, 0.01159678501175776, 0.011596784885303801, 0.011596784850817832, 0.011596784822165973, 0.011596784806947702, 0.011596784982439212, 0.011596784959469475, 0.011596784993474607, 0.011596785101025353, 0.011596785012454314, 0.011596784810715133, 0.010926194757796104, 0.010926194743006268, 0.010926194836921588, 0.010926194656404653, 0.010926194672058687, 0.010926194882066587, 0.010926194738304695, 0.010926194730191185, 0.010926194872697526, 0.010926194694805269, 0.010926194661995403, 0.010926194714866111, 0.010926194723291038, 0.010926194765590758, 0.010926194786907928, 0.01092619487238855, 0.010926194911841325, 0.01092619493507374, 0.010926194581010518, 0.010121072359135397, 0.01012107234221793, 0.010121072379223994, 0.010121071918479552, 0.01012107208240176, 0.010121072635698503, 0.010121072294818512, 0.010121072187504798, 0.010121072482539795, 0.010121072237410877, 0.010121072185493962, 0.01012107239071236, 0.010121072444190471, 0.010121072138445375, 0.010121072282023302, 0.010121072627458538, 0.01012107250684846, 0.010121072784361584, 0.010121071962661432, 0.008698846670683658, 0.008698846817447814, 0.00869884639154872, 0.008698846411324901, 0.008698846921287307, 0.008698846510554192, 0.008698846104252311, 0.008698846923989034, 0.008698846377418246, 0.008698846832836504, 0.008698847158810974, 0.008698846762109524, 0.00869884648957242, 0.008698846151893536, 0.008698846307889418, 0.008698847283870936, 0.00869884664705911, 0.008698846476209221, 0.008698846953521522, 0.0073502589565435095, 0.00735025911425391, 0.007350258912475205, 0.007350259061051245, 0.007350259081573385, 0.007350258730494441, 0.007350258660482556, 0.007350258930955311, 0.007350258877603322, 0.007350258822892086, 0.007350259352015054, 0.007350258930566289, 0.007350259037083529, 0.007350258743137661, 0.007350258925529207, 0.0073502591660440375, 0.007350258673661236, 0.007350258578565416, 0.007350259351956212, 0.007213733371917108, 0.007213733177363957, 0.007213733764941055, 0.007213733366091213, 0.007213732798508454, 0.007213733835695346, 0.007213733633299357, 0.007213732963691655, 0.007213733796447075, 0.007213733043616166, 0.007213733047700899, 0.007213733059547978, 0.007213733744064421, 0.007213733687843615, 0.007213733736008865, 0.0072137330597418226, 0.007213733540092027, 0.0072137337024147374, 0.007213733016572466, 0.006608791224661736, 0.006608791217080245, 0.006608791389944191, 0.006608791281469406, 0.0066087910132899275, 0.006608791325540708, 0.006608791199207875, 0.006608791010132009, 0.006608791387362367, 0.0066087909922530885, 0.006608791273126746, 0.006608791064582897, 0.006608791450649187, 0.006608791268069236, 0.006608791386428781, 0.006608791179716578, 0.006608791150188975, 0.006608791185643725, 0.006608791262531777, 0.006359874793312126, 0.00635987492284007, 0.006359874724645387, 0.006359874549563438, 0.006359874912606034, 0.006359875075163224, 0.006359874507177454, 0.0063598750943915094, 0.006359874777466357, 0.0063598750944816596, 0.006359875047564856, 0.006359874656834963, 0.006359874523414799, 0.00635987457072118, 0.0063598746870646705, 0.00635987512858649, 0.006359875175069751, 0.006359874891985529, 0.006359874795593079, 0.006155308295526796, 0.006155308369964141, 0.006155308321334263, 0.006155308179211394, 0.0061553082804673975, 0.006155308499137813, 0.006155308116629898, 0.006155308383088198, 0.00615530835210687, 0.006155308374304114, 0.006155308464054987, 0.006155308153035111, 0.006155308230735734, 0.006155308181203467, 0.006155308301077689, 0.006155308472640675, 0.006155308485222277, 0.006155308329086395, 0.006155308316598385, 0.005885393936269523, 0.005885394075839656, 0.005885393925358029, 0.005885393844395348, 0.0058853939025217406, 0.005885393831463692, 0.005885393995622601, 0.005885393830360908, 0.005885393901005842, 0.005885393793461424, 0.005885393827190555, 0.005885394061902027, 0.005885394064631844, 0.005885393931074234, 0.005885393859281884, 0.005885393952875129, 0.0058853938257006355, 0.005885394104758079, 0.005885393761001834, 0.005832018599367439, 0.005832018721260157, 0.005832018598350919, 0.005832018502066383, 0.005832018572264008, 0.005832018580677389, 0.005832018590627874, 0.0058320185496001375, 0.005832018589551846, 0.00583201851978854, 0.005832018571038211, 0.005832018647997206, 0.0058320186731047885, 0.005832018562256125, 0.005832018545546713, 0.005832018662778715, 0.005832018571804931, 0.005832018728105237, 0.00583201848116488, 0.005648409999408965, 0.005648410111317448, 0.005648410017578764, 0.0056484100264901915, 0.005648410097658041, 0.00564840992595339, 0.005648409987730751, 0.005648410047847663, 0.005648410014723382, 0.005648410015873018, 0.005648410051102726, 0.005648410002995541, 0.005648409959443823, 0.005648410023004646, 0.005648410019758465, 0.00564841003155514, 0.005648410019242767, 0.005648409979351232, 0.005648409987603409, 0.005575099511973436, 0.005575099532653005, 0.005575099635909075, 0.005575099586112575, 0.005575099466607392, 0.005575099502853509, 0.005575099633735703, 0.0055750994285842514, 0.005575099631311975, 0.00557509942764689, 0.005575099423559826, 0.005575099464236732, 0.005575099580129694, 0.005575099675723338, 0.005575099640760528, 0.005575099393037353, 0.005575099542557527, 0.005575099554946394, 0.005575099393408944, 0.00543697525947795, 0.005436975249400788, 0.005436975396929888, 0.005436975334561667, 0.005436975198415017, 0.005436975272819056, 0.0054369753856848835, 0.005436975170108105, 0.005436975394283228, 0.005436975182034565, 0.005436975168990887, 0.00543697519281372, 0.005436975323266702, 0.005436975437406066, 0.005436975404955691, 0.005436975133676247, 0.005436975319478066, 0.005436975303210412, 0.005436975132823596, 0.005088374280781016, 0.005088374138323304, 0.005088374483541824, 0.005088374362486547, 0.005088374140995389, 0.005088374391238326, 0.005088374439030763, 0.0050883741544952565, 0.005088374488413594, 0.005088374219834768, 0.005088374166018261, 0.005088374132167006, 0.005088374344999758, 0.005088374527461026, 0.005088374503888771, 0.00508837411245, 0.005088374450933575, 0.005088374331471912, 0.005088374108712546, 0.004783623090309441, 0.004783623126005776, 0.00478362302769475, 0.004783623060825359, 0.004783623312839658, 0.004783622903299034, 0.004783622900213835, 0.0047836232221641906, 0.0047836230222114695, 0.004783623220408262, 0.00478362333463922, 0.004783623126076497, 0.004783622893749562, 0.004783622969181223, 0.00478362305520541, 0.0047836233143006, 0.00478362319674952, 0.004783622960432221, 0.004783623243347135, 0.005599431405851951, 0.005599431563908408, 0.005599431077766059, 0.005599431129240662, 0.005599431797041254, 0.005599430632666991, 0.005599431005676281, 0.005599431336570704, 0.005599430958608598, 0.005599431241774755, 0.0055994316717002945, 0.005599431911684105, 0.005599431277227951, 0.005599430997992427, 0.005599431005606781, 0.005599431919204423, 0.0055994311005460595, 0.00559943132243057, 0.005599431742983607, 0.004733075401789355, 0.00473307546945867, 0.004733075279080401, 0.004733075327591929, 0.004733075664659969, 0.004733075095978645, 0.004733075164808365, 0.0047330755076187, 0.0047330752545119426, 0.004733075487738825, 0.004733075664111852, 0.00473307553128588, 0.004733075214883198, 0.0047330752107098695, 0.004733075291118327, 0.004733075691375599, 0.004733075424478095, 0.004733075270547227, 0.004733075594719582, 0.0046384111523430915, 0.00463841119981645, 0.004638411053426439, 0.004638411083978666, 0.004638411372875906, 0.004638410868245346, 0.0046384109531220075, 0.004638411219220484, 0.004638411026587463, 0.004638411206356663, 0.004638411370198936, 0.004638411273133136, 0.004638411003229592, 0.004638410998107911, 0.004638411060843284, 0.004638411401893805, 0.0046384111682126195, 0.004638411044718738, 0.004638411306810308, 0.004411072910010638, 0.004411072873725885, 0.004411072906959412, 0.0044110728643532715, 0.004411072957373641, 0.004411072717985465, 0.004411072864702437, 0.004411072819991424, 0.004411072870676436, 0.004411072835651675, 0.004411072946820527, 0.004411072994247145, 0.004411072914445646, 0.004411072906306268, 0.004411072894604295, 0.004411072997586363, 0.004411072900058266, 0.0044110728995476745, 0.004411072905796454, 0.004373468912019285, 0.004373468765034971, 0.004373469046009659, 0.0043734688715358905, 0.0043734688141046085, 0.004373469081761505, 0.004373468950005899, 0.004373468891885501, 0.004373469064603119, 0.004373468961222593, 0.004373468896578969, 0.004373468762533639, 0.0043734688933247945, 0.004373469032548316, 0.004373469045103717, 0.004373468888024812, 0.004373469193124535, 0.004373469004704256, 0.004373468761744048, 0.0043137145875692395, 0.004313714491456011, 0.004313714660321599, 0.004313714545411962, 0.004313714555818304, 0.004313714593779383, 0.004313714588040418, 0.004313714535735702, 0.004313714653945699, 0.004313714580891248, 0.004313714596557494, 0.004313714543537572, 0.0043137145790818066, 0.004313714651903, 0.004313714654294087, 0.00431371461326302, 0.004313714737013363, 0.004313714633050858, 0.004313714503604071, 0.004140159474653515, 0.004140159421043066, 0.0041401595264008995, 0.004140159435950808, 0.004140159497106, 0.004140159472878269, 0.004140159429833479, 0.004140159485042871, 0.004140159527863285, 0.004140159516973108, 0.004140159541635935, 0.004140159425116141, 0.004140159415607525, 0.004140159496918816, 0.0041401595301996386, 0.004140159539541499, 0.004140159638542973, 0.004140159486237138, 0.004140159440546243, 0.003880891498481809, 0.0038808915862417193, 0.0038808914885083423, 0.003880891461770286, 0.003880891698675115, 0.003880891481339188, 0.0038808913032377657, 0.0038808917161285983, 0.003880891517957008, 0.0038808917089875328, 0.0038808917586662384, 0.0038808914304997444, 0.003880891271887288, 0.003880891380607987, 0.0038808915246896225, 0.003880891689255317, 0.0038808917113696273, 0.00388089139890313, 0.0038808916195618437, 0.0035326567460292058, 0.0035326568559322924, 0.0035326568307001427, 0.003532656817732849, 0.0035326567419865507, 0.0035326567297735423, 0.0035326567985365376, 0.003532656708684856, 0.003532656827027858, 0.0035326566777530433, 0.0035326567242596196, 0.0035326566976117135, 0.0035326567999984793, 0.003532656817983204, 0.003532656834440262, 0.0035326566660917047, 0.003532656714524296, 0.0035326567345995707, 0.0035326566915034885, 0.003519311123175717, 0.0035193113453543257, 0.003519311139494774, 0.0035193111160263246, 0.003519311171459205, 0.003519311100312228, 0.0035193111157709733, 0.003519311147594517, 0.0035193111369489216, 0.0035193110857131282, 0.0035193111481253148, 0.0035193111280235057, 0.0035193111471721883, 0.0035193110829818686, 0.0035193111058798854, 0.0035193111112862274, 0.003519311055598995, 0.0035193111673245125, 0.003519311079812737, 0.0034857545683976143, 0.0034857547408809753, 0.003485754614492076, 0.00348575459778222, 0.003485754595834001, 0.003485754544795161, 0.0034857545860456085, 0.003485754565667243, 0.003485754611186387, 0.0034857545169715287, 0.0034857545742512652, 0.003485754550659026, 0.0034857546049222865, 0.003485754577470135, 0.0034857545987847516, 0.0034857545279665114, 0.003485754515996753, 0.0034857545840594195, 0.003485754522672302, 0.0034027924746168337, 0.003402792642666297, 0.003402792511849606, 0.003402792479169525, 0.0034027925198663045, 0.003402792483081618, 0.0034027924552070266, 0.003402792519307307, 0.003402792518991893, 0.0034027924760783312, 0.003402792519908493, 0.0034027924387104447, 0.003402792471023486, 0.0034027924565648293, 0.0034027924997950265, 0.0034027924723368796, 0.0034027924764734596, 0.0034027924900486006, 0.0034027924443641444, 0.0032954769115411953, 0.0032954770666415723, 0.003295476922445695, 0.003295476839792366, 0.0032954770097589625, 0.0032954770176401027, 0.0032954767797901408, 0.0032954771017386086, 0.003295476962340227, 0.0032954770736954853, 0.0032954770785595944, 0.0032954768195878614, 0.0032954767871375967, 0.003295476808499509, 0.0032954769213147106, 0.0032954770248673215, 0.003295477080483833, 0.003295476929227714, 0.003295476928191765, 0.002981693074660008, 0.0029816931477550934, 0.0029816931174647676, 0.0029816929951341775, 0.00298169306799434, 0.0029816932233670546, 0.0029816930061594693, 0.002981693172652955, 0.002981693148444542, 0.0029816931623320997, 0.0029816931564109472, 0.002981692966279592, 0.002981693039013744, 0.0029816930333151914, 0.002981693098713767, 0.0029816931351758225, 0.0029816932367621174, 0.002981693153772058, 0.0029816930214118242, 0.0027929543866500595, 0.0027929543104079357, 0.002792954484809873, 0.0027929542942921604, 0.002792954195631303, 0.002792954610294829, 0.002792954435406725, 0.0027929543136289148, 0.002792954494726163, 0.002792954334616904, 0.0027929543108733412, 0.0027929542556993647, 0.0027929545175070514, 0.002792954464588937, 0.002792954431624972, 0.0027929543481350905, 0.0027929545168344783, 0.0027929545666296463, 0.0027929542045542766, 0.0031741589165800166, 0.0031741589155741545, 0.003174158831173779, 0.003174158778621816, 0.0031741590933058728, 0.003174158433664198, 0.0031741586660847254, 0.0031741587483723466, 0.0031741587388796066, 0.003174158724533971, 0.003174159071059668, 0.0031741591485865417, 0.00317415887898842, 0.0031741587202654964, 0.0031741588027522916, 0.0031741591938707625, 0.003174158687343942, 0.0031741587945934846, 0.0031741591752019183, 0.002601306966753647, 0.002601306925524405, 0.0026013069973360725, 0.0026013068602736, 0.002601306914473689, 0.0026013069363844954, 0.0026013069057844174, 0.002601306867316522, 0.00260130697127281, 0.002601306871085507, 0.002601306987666474, 0.0026013069660826282, 0.0026013070385737525, 0.0026013069370632858, 0.0026013069524198906, 0.0026013070418988704, 0.0026013069642035758, 0.0026013070315203946, 0.002601306943232351, 0.002452714092693098, 0.002452714078834961, 0.0024527141335655145, 0.0024527140340241393, 0.0024527141547717735, 0.0024527140490946397, 0.0024527139709176193, 0.0024527141324444113, 0.002452714136400913, 0.002452714141822687, 0.0024527142200987395, 0.002452714045293014, 0.0024527140212016185, 0.002452714027600167, 0.0024527141430747967, 0.002452714209084217, 0.0024527141841231836, 0.002452714051833227, 0.0024527141573005284, 0.0023358044323540383, 0.002335804351200843, 0.0023358045564575436, 0.0023358044784611565, 0.0023358043641561466, 0.0023358044281582835, 0.0023358045164232344, 0.0023358043247554416, 0.0023358045377485093, 0.002335804353320259, 0.0023358043357964986, 0.0023358043617259794, 0.0023358045001057315, 0.002335804572607625, 0.002335804555303911, 0.0023358043408544527, 0.0023358044478263285, 0.0023358044330028527, 0.0023358043370361736, 0.002261405755925483, 0.0022614057362408957, 0.002261405870230049, 0.0022614058519438984, 0.0022614057529413145, 0.0022614056505422253, 0.0022614059152100685, 0.0022614056390294346, 0.0022614058334147202, 0.002261405652954851, 0.0022614055769666352, 0.002261405762004398, 0.0022614058015175686, 0.002261405946617945, 0.0022614058586583052, 0.0022614055921860166, 0.002261405708190556, 0.0022614057569878554, 0.002261405617790979, 0.0021550051822359917, 0.0021550052205102643, 0.0021550052542675946, 0.0021550052346193116, 0.002155005276640698, 0.0021550050443281954, 0.0021550052467756986, 0.00215500516716427, 0.0021550052313440426, 0.0021550051693634, 0.002155005113560704, 0.0021550052106484863, 0.00215500512957556, 0.002155005274675048, 0.002155005250535247, 0.0021550051132800396, 0.002155005179260594, 0.0021550051626606503, 0.0021550051167444906, 0.002132476412494033, 0.002132476492170743, 0.002132476454418497, 0.0021324764326757784, 0.0021324765763234277, 0.0021324762519245866, 0.002132476409107964, 0.0021324764705844546, 0.0021324764415323605, 0.00213247646450343, 0.0021324764230153948, 0.00213247645706105, 0.002132476289425478, 0.002132476434556496, 0.002132476456150445, 0.00213247641156622, 0.002132476442485709, 0.0021324763790672163, 0.002132476398300387, 0.001940638115478066, 0.0019406381697953945, 0.0019406381572740772, 0.0019406380767972298, 0.0019406381865412214, 0.0019406381024384967, 0.0019406381272396578, 0.001940638182447163, 0.0019406381566873243, 0.0019406381770573633, 0.0019406380999101858, 0.0019406381069874135, 0.001940638050469401, 0.0019406381435157494, 0.0019406381256019678, 0.0019406381053199695, 0.0019406382068427597, 0.0019406381885016533, 0.0019406380286532965, 0.0018903825083155246, 0.0018903825372408312, 0.0018903825488655324, 0.0018903824175154904, 0.0018903824926495005, 0.0018903826320242345, 0.0018903825366534122, 0.001890382583809802, 0.001890382560701065, 0.0018903825791823925, 0.0018903824664432411, 0.001890382451593564, 0.0018903824989423557, 0.0018903825448833844, 0.0018903824882171572, 0.0018903824877025688, 0.0018903826535660029, 0.001890382679317515, 0.0018903823543503506, 0.0016882268009200674, 0.001688226877664012, 0.0016882267855864441, 0.0016882266807297652, 0.0016882267921902727, 0.001688226758634448, 0.0016882267446028942, 0.0016882267412898777, 0.0016882267554428898, 0.0016882267083426772, 0.0016882268224190922, 0.0016882268470190809, 0.0016882268610862727, 0.00168822672482416, 0.0016882267071884893, 0.001688226862799791, 0.001688226727586506, 0.0016882269149788298, 0.0016882267810052198, 0.0015600814353388115, 0.0015600814246164996, 0.0015600815090431874, 0.0015600814228090565, 0.0015600813541981617, 0.0015600814879629388, 0.0015600813876363029, 0.0015600813783395173, 0.0015600815092893239, 0.001560081375207023, 0.0015600814850202926, 0.0015600813317496742, 0.0015600815195455642, 0.0015600814052876277, 0.0015600815064698015, 0.0015600814647228622, 0.0015600813814029557, 0.0015600814056098145, 0.0015600814715850397, 0.001364678192592006, 0.0013646782230861687, 0.0013646782539358249, 0.0013646781780127792, 0.0013646782098875043, 0.0013646781870502167, 0.0013646780855131047, 0.0013646782189835616, 0.0013646782670511115, 0.001364678212654069, 0.0013646783187459821, 0.0013646781081971815, 0.0013646781772037597, 0.0013646781024261312, 0.0013646782764189513, 0.001364678275307618, 0.0013646781726346369, 0.0013646781071251501, 0.0013646782943652624, 0.0011833999617067992, 0.0011834000880538431, 0.0011834000034808279, 0.0011833999372502513, 0.0011834002075080674, 0.0011833998162735782, 0.0011833997290797704, 0.0011834001826381835, 0.0011834000501026454, 0.0011834001711876763, 0.0011834002534149013, 0.001183399934815088, 0.001183399711301658, 0.0011833997361508919, 0.001183400082786279, 0.0011834001615080858, 0.0011834000176550452, 0.001183399762196613, 0.0011834001964236007, 0.0007698125447965776, 0.000769812540656778, 0.0007698126336137534, 0.0007698126247699388, 0.000769812594489383, 0.0007698125406414569, 0.0007698126204804812, 0.0007698126176342024, 0.0007698126457234, 0.0007698126239772396, 0.0007698124768361625, 0.0007698124855457511, 0.0007698124864088385, 0.0007698126077686496, 0.0007698126338392397, 0.0007698124602697476, 0.000769812517424695, 0.0007698124883016577, 0.0007698124989594657, 0.000654260751863478, 0.0006542607995748684, 0.0006542607273204437, 0.0006542607153732227, 0.0006542608166908437, 0.0006542606555597352, 0.0006542608201308697, 0.0006542607208093187, 0.0006542606791636318, 0.0006542606933078732, 0.000654260647927507, 0.0006542608595290211, 0.0006542607302879588, 0.000654260783573668, 0.0006542606180264254, 0.0006542606785099325, 0.000654260619875835, 0.0006542608708572928, 0.0006542606935985296, 0.0005815962772679484, 0.0005815963622182174, 0.0005815961842881023, 0.0005815961035150474, 0.0005815963699582483, 0.0005815962457232926, 0.0005815962105044648, 0.0005815963646641498, 0.000581596167450793, 0.0005815963168170901, 0.0005815963281534664, 0.0005815963938190505, 0.0005815962189540391, 0.0005815961777869694, 0.0005815960676572862, 0.0005815963291001536, 0.0005815962359850824, 0.0005815964878987945, 0.0005815962887272264, 0.00046207924948205026, 0.00046207927449160024, 0.0004620791901883692, 0.00046207911510365296, 0.0004620792630433135, 0.0004620793042431348, 0.0004620792284810715, 0.00046207932150121866, 0.00046207918340568366, 0.0004620792851897093, 0.00046207925315222553, 0.0004620792934586504, 0.00046207925500552083, 0.00046207920552654436, 0.00046207908782192053, 0.00046207926074481875, 0.00046207921272478636, 0.0004620794439383902, 0.00046207922253493905, 0.00038713313540972294, 0.0003871330556411978, 0.0003871331321627647, 0.00038713306825621796, 0.00038713300999970723, 0.00038713334302353797, 0.000387133196072309, 0.00038713318266681007, 0.00038713314291671796, 0.00038713316566219014, 0.0003871330531106665, 0.0003871330539241269, 0.00038713325527317544, 0.00038713318911220984, 0.00038713305310200674, 0.0003871330752430735, 0.0003871331047836657, 0.00038713330453921113, 0.00038713303818882494, 0.0003182816268610944, 0.00031828162434788254, 0.0003182816725597615, 0.00031828159444546866, 0.0003182817178395414, 0.00031828153243262935, 0.00031828149117019144, 0.00031828169989700505, 0.00031828169211089996, 0.00031828169001713036, 0.0003182817686150363, 0.0003182816113047604, 0.0003182815220900137, 0.00031828148265189427, 0.00031828171528403004, 0.00031828176810699826, 0.00031828157662594503, 0.0003182815035875919, 0.0003182817985497577, 0.00026921953329783754, 0.00026921950125724514, 0.0002692195597623348, 0.00026921948826308384, 0.00026921954028802375, 0.00026921955627356997, 0.00026921947376468136, 0.00026921959620562763, 0.0002692195758930982, 0.00026921958356196374, 0.0002692195884830273, 0.00026921949168245973, 0.00026921951671299293, 0.00026921946658542417, 0.00026921955539782605, 0.00026921959542214324, 0.0002692194896661837, 0.0002692195225484362, 0.0002692196006801595, 0.0002705727961345161, 0.00027057269402075423, 0.0002705728512266692, 0.00027057287443366107, 0.00027057273385111547, 0.00027057273620367805, 0.0002705728966084786, 0.00027057262955987316, 0.00027057279609321583, 0.0002705726338606551, 0.00027057264559327, 0.0002705727913644429, 0.0002705728689285092, 0.0002705729011956981, 0.0002705728103417071, 0.0002705727175988937, 0.00027057260844243203, 0.00027057274586361757, 0.00027057277760988985, 0.00022826710983503418, 0.00022826704363865247, 0.0002282671510482892, 0.00022826712602186383, 0.00022826708260126338, 0.00022826709067591544, 0.00022826712923440517, 0.00022826705856238139, 0.00022826713188006664, 0.00022826705442080542, 0.00022826706350254078, 0.00022826708682288643, 0.00022826713799195542, 0.00022826712775769753, 0.0002282671289906002, 0.00022826710247203508, 0.0002282669937888615, 0.00022826707891532294, 0.00022826713541246324, 0.0001634275959150333, 0.00016342757166243338, 0.00016342762115351128, 0.0001634276009806479, 0.00016342761901988467, 0.00016342752961140405, 0.0001634275949979891, 0.00016342755923104413, 0.00016342760045517934, 0.00016342755380671647, 0.00016342757747156433, 0.00016342761069942924, 0.00016342757945075892, 0.00016342759377929728, 0.00016342760205223517, 0.00016342760345910978, 0.0001634275115792727, 0.00016342756754705867, 0.00016342763023113882, 0.00013394473576366916, 0.00013394476664163601, 0.0001339447387999071, 0.00013394472623229348, 0.00013394482465578506, 0.000133944606792058, 0.00013394470910577105, 0.00013394471601935187, 0.000133944715596912, 0.00013394470944516623, 0.00013394475327921374, 0.00013394480189976576, 0.00013394466091731783, 0.00013394470812411186, 0.00013394472327332707, 0.00013394476209738215, 0.00013394469287852928, 0.0001339447119773629, 0.0001339447812546135, 0.00030897251634909306, 0.00030897243018224163, 0.00030897255273643065, 0.00030897257263406974, 0.0003089723357000418, 0.00030897279813235645, 0.0003089727168130718, 0.00030897254452366685, 0.0003089725713434355, 0.00030897256468376266, 0.00030897230316095925, 0.0003089723733907812, 0.0003089726919706104, 0.0003089727500144024, 0.0003089725086264927, 0.0003089723059658267, 0.00030897262839890693, 0.00030897265538487595, 0.00030897224572346005, 0.00010852750927015098, 0.00010852751109657888, 0.00010852752139267619, 0.00010852751626178048, 0.00010852752955692324, 0.00010852748526446465, 0.0001085275402101793, 0.00010852750130219135, 0.00010852750889656093, 0.00010852750170342595, 0.00010852746948231129, 0.00010852752191725656, 0.00010852749722212174, 0.0001085275471102154, 0.00010852749876455459, 0.00010852747586165279, 0.00010852750667877942, 0.00010852752745738048, 0.00010852747433875987, 0.00010920494352195664, 0.00010920497874189472, 0.00010920495568944588, 0.00010920490537280614, 0.00010920498884881003, 0.00010920495776600703, 0.00010920489141330592, 0.00010920503688904848, 0.00010920498116051558, 0.00010920503464073583, 0.00010920501166256091, 0.00010920492353827527, 0.00010920489401367028, 0.00010920489656074395, 0.00010920497034005994, 0.00010920498506827858, 0.00010920502049727165, 0.00010920494940391823, 0.00010920495794131124, 9.917186640717723e-05, 9.917188463481885e-05, 9.917187860297716e-05, 9.917185143404339e-05, 9.91718991285584e-05, 9.917186101793263e-05, 9.917185666030726e-05, 9.917190808084175e-05, 9.91718846639067e-05, 9.917190721386859e-05, 9.917187961228091e-05, 9.917186301411363e-05, 9.917183583185718e-05, 9.917186271812817e-05, 9.917187418739815e-05, 9.917186979235826e-05, 9.917190269281839e-05, 9.917187847385822e-05, 9.917185567875908e-05, 8.586572557200967e-05, 8.586572645918888e-05, 8.586574223923282e-05, 8.586571560542655e-05, 8.586572286606309e-05, 8.586574842228689e-05, 8.586572765378886e-05, 8.586574672098113e-05, 8.586574659974477e-05, 8.586574678715042e-05, 8.586572287117011e-05, 8.586570337087984e-05, 8.586572912039347e-05, 8.586573531932373e-05, 8.58657357034609e-05, 8.586571889590555e-05, 8.586574951308101e-05, 8.586574203361952e-05, 8.58657048481426e-05, 8.323143530186705e-05, 8.323142413668716e-05, 8.32314549737978e-05, 8.323142875621414e-05, 8.323140804300522e-05, 8.323147789801588e-05, 8.323144559163609e-05, 8.323144243294056e-05, 8.323145820543498e-05, 8.323144315469655e-05, 8.32314216130392e-05, 8.323140007016061e-05, 8.323146251287827e-05, 8.323145444100177e-05, 8.323144696442686e-05, 8.323142169208708e-05, 8.323145074529137e-05, 8.323145496491602e-05, 8.323140758104142e-05, 0.00010367693741075712, 0.00010367698199109654, 0.00010367693170565406, 0.00010367689730328422, 0.00010367699760360782, 0.00010367683237832992, 0.00010367685999390641, 0.00010367690673240837, 0.00010367691428758707, 0.00010367689692214466, 0.0001036770132618603, 0.00010367698637281375, 0.0001036768879171257, 0.0001036768590579884, 0.0001036769299003204, 0.00010367701230107329, 0.0001036769057414233, 0.00010367691461465878, 0.00010367702076696794, 7.833739324181188e-05, 7.833739927431971e-05, 7.833740521345778e-05, 7.833737658824447e-05, 7.833739277685048e-05, 7.833739048124233e-05, 7.833737665852158e-05, 7.833738874540863e-05, 7.833740213680773e-05, 7.833738625140363e-05, 7.833740696461255e-05, 7.833738388018929e-05, 7.833739710394472e-05, 7.833738251838973e-05, 7.833739918972071e-05, 7.833740667584355e-05, 7.833739390306071e-05, 7.833739962681552e-05, 7.833739960994013e-05, 7.498712010112207e-05, 7.498711590592233e-05, 7.498713145048796e-05, 7.498711850983941e-05, 7.498710822095855e-05, 7.498710767439576e-05, 7.498712989806311e-05, 7.498708075726057e-05, 7.498711618125764e-05, 7.498707925024384e-05, 7.498710019571142e-05, 7.49871196552565e-05, 7.498713901987752e-05, 7.498713609033203e-05, 7.498711403208791e-05, 7.498710978859346e-05, 7.498709454301089e-05, 7.498713018416758e-05, 7.498711068243402e-05, 6.885995782968113e-05, 6.88599599999451e-05, 6.885996723338117e-05, 6.885995703587167e-05, 6.885995737981876e-05, 6.885993230298926e-05, 6.885996493488644e-05, 6.885992002569896e-05, 6.885995106731269e-05, 6.885991828931015e-05, 6.885994187866284e-05, 6.885996568672947e-05, 6.885996597139066e-05, 6.885996955519058e-05, 6.885995046923554e-05, 6.885994996796985e-05, 6.885993152816461e-05, 6.88599639580012e-05, 6.885995304040105e-05, 5.7126686368369484e-05, 5.7126713339683555e-05, 5.712668803714571e-05, 5.7126689171904665e-05, 5.7126730754974986e-05, 5.712660928336444e-05, 5.712668417856559e-05, 5.712665367529901e-05, 5.712666811796829e-05, 5.712665128898564e-05, 5.7126684905539626e-05, 5.712672764568438e-05, 5.7126652004191314e-05, 5.712668239010732e-05, 5.712667336554844e-05, 5.712668699175971e-05, 5.7126656994865854e-05, 5.7126677606600396e-05, 5.712669873048082e-05, 4.221231808598791e-05, 4.221232300560818e-05, 4.221233217649445e-05, 4.221233541723546e-05, 4.2212317677758904e-05, 4.2212336362146274e-05, 4.2212350801373866e-05, 4.221233448420403e-05, 4.221233464063445e-05, 4.2212337796221355e-05, 4.2212288900334016e-05, 4.221230333523174e-05, 4.2212319885215344e-05, 4.221235014978397e-05, 4.221232436119049e-05, 4.2212281734954615e-05, 4.22123295876764e-05, 4.221232677836806e-05, 4.221227720513365e-05, 4.9187630477565136e-05, 4.9187680519091614e-05, 4.9187632653602265e-05, 4.918760445338233e-05, 4.9187683184181985e-05, 4.9187646707027355e-05, 4.9187588405996685e-05, 4.918774477047361e-05, 4.918766670369834e-05, 4.918774342810295e-05, 4.918770054407329e-05, 4.9187620179913516e-05, 4.918757314587019e-05, 4.91875780144202e-05, 4.918765392281088e-05, 4.918766082007142e-05, 4.918769865824846e-05, 4.9187631546043775e-05, 4.9187641114056824e-05, 3.7248125810962485e-05, 3.724814842653856e-05, 3.724813524175197e-05, 3.7248126381950186e-05, 3.724814679961774e-05, 3.724814273797783e-05, 3.724812894578822e-05, 3.724818037964539e-05, 3.724814986771907e-05, 3.724818186146006e-05, 3.724813570671337e-05, 3.72481128129154e-05, 3.724810374428067e-05, 3.7248124578947994e-05, 3.724813877303834e-05, 3.724811596539368e-05, 3.724815958272565e-05, 3.7248130913436484e-05, 3.724810564120773e-05, 2.8560636439189935e-05, 2.8560657857945593e-05, 2.8560641711083967e-05, 2.8560637350016904e-05, 2.856065842826716e-05, 2.856063899170369e-05, 2.856064118750279e-05, 2.8560672904798245e-05, 2.856064933898228e-05, 2.8560673181909912e-05, 2.8560641341490722e-05, 2.856063462497449e-05, 2.8560615306205683e-05, 2.8560636239016723e-05, 2.856063973322165e-05, 2.8560626139761958e-05, 2.8560653978493278e-05, 2.8560642524433355e-05, 2.8560621135875763e-05, 1.8582394365029842e-05, 1.858241143015693e-05, 1.8582387999455108e-05, 1.858239632113179e-05, 1.8582418436219328e-05, 1.8582358791818798e-05, 1.858240436602987e-05, 1.8582380745924e-05, 1.8582376175690918e-05, 1.8582377696918506e-05, 1.858238464402806e-05, 1.8582422762425388e-05, 1.8582375935882744e-05, 1.8582398348954143e-05, 1.8582370198361176e-05, 1.8582382103171646e-05, 1.8582367606101435e-05, 1.8582404197498015e-05, 1.8582391585697522e-05, 1.0862856479443295e-05, 1.0862833135671934e-05, 1.0862863166871684e-05, 1.0862865482241801e-05, 1.0862817845458395e-05, 1.0862897501739965e-05, 1.0862880853057533e-05, 1.0862847618420268e-05, 1.0862862666716211e-05, 1.086284643425639e-05, 1.0862828463409357e-05, 1.0862831055669098e-05, 1.086289371776683e-05, 1.0862878136896903e-05, 1.086285273987908e-05, 1.0862834526781384e-05, 1.0862827760860227e-05, 1.0862867960925726e-05, 1.086283719642367e-05, 9.231892919125961e-06, 9.231881966886846e-06, 9.231895780170696e-06, 9.231899746220407e-06, 9.231873565607174e-06, 9.231910402585086e-06, 9.231912684204424e-06, 9.231882550642112e-06, 9.231891821004368e-06, 9.231880841564788e-06, 9.231870796155839e-06, 9.231883876248403e-06, 9.231912913798546e-06, 9.231908971285563e-06, 9.231883156046727e-06, 9.23187412282811e-06, 9.2318649781431e-06, 9.231903690509746e-06, 9.231878911220015e-06, 3.841557445238841e-05, 3.8415624755039346e-05, 3.841557403627682e-05, 3.841552428196504e-05, 3.841564395701269e-05, 3.841552862726694e-05, 3.841547029026504e-05, 3.8415652160783686e-05, 3.8415599250996024e-05, 3.841564392115249e-05, 3.841570104046177e-05, 3.841558829742464e-05, 3.8415497576993474e-05, 3.841545623883835e-05, 3.8415608912711896e-05, 3.841567458651163e-05, 3.841560270578803e-05, 3.841553826167132e-05, 3.841566935103291e-05, 7.3796880856180636e-06, 7.379689147546387e-06, 7.3796902989586854e-06, 7.379683871544529e-06, 7.379686310815536e-06, 7.3796930728509125e-06, 7.379683536368198e-06, 7.379694988651764e-06, 7.379692021469708e-06, 7.37969203745692e-06, 7.379695130205199e-06, 7.3796834767492214e-06, 7.379688977793286e-06, 7.379677859353784e-06, 7.379686980168998e-06, 7.379692615328004e-06, 7.37967104247339e-06, 7.379689466291417e-06, 7.379695491027682e-06, 4.688676296327188e-06, 4.688677786801598e-06, 4.688679223763259e-06, 4.688674197783627e-06, 4.688678372444244e-06, 4.688675074415727e-06, 4.688672214814282e-06, 4.688680827702463e-06, 4.688679983044786e-06, 4.688678843400851e-06, 4.688682138986877e-06, 4.688674328345854e-06, 4.688673530872656e-06, 4.688668029051435e-06, 4.688677337272296e-06, 4.6886806617241206e-06, 4.688663259866388e-06, 4.688674206887455e-06, 4.6886834601522764e-06, 1.891978412937867e-06, 1.8919809774420315e-06, 1.891983059554292e-06, 1.8919817028617558e-06, 1.8919903027603269e-06, 1.8919613528067813e-06, 1.8919757107660473e-06, 1.8919766676672722e-06, 1.8919812299067473e-06, 1.891977095547226e-06, 1.8919809187112335e-06, 1.8919833266739516e-06, 1.8919664122041269e-06, 1.891975230927656e-06, 1.891984643842548e-06, 1.8919822515339746e-06, 1.8919753638213521e-06, 1.8919677035045268e-06, 1.891984880542097e-06, 6.317452308501892e-06, 6.317427514002105e-06, 6.317457478255406e-06, 6.3174655504649735e-06, 6.317413829171059e-06, 6.317499259389514e-06, 6.317489555374145e-06, 6.317444371850556e-06, 6.317456764604046e-06, 6.3174474773664e-06, 6.317408184908224e-06, 6.317427364233019e-06, 6.317491982099632e-06, 6.317496896168784e-06, 6.317447779347063e-06, 6.317414992018655e-06, 6.31745650780946e-06, 6.317472452277428e-06, 6.317409384282158e-06, 1.4145238325102838e-06, 1.4145199447312962e-06, 1.4145286132416501e-06, 1.4145294527923014e-06, 1.4145237968721247e-06, 1.4145218929506598e-06, 1.414530572230177e-06, 1.4145205999849253e-06, 1.4145270391674458e-06, 1.4145216619132484e-06, 1.4145153222067108e-06, 1.4145216670202743e-06, 1.4145240270213577e-06, 1.414531923371598e-06, 1.4145275222254838e-06, 1.4145179536573238e-06, 1.4145225032402564e-06, 1.4145204226823083e-06, 1.4145186191250048e-06, 1.1902387068163378e-06, 1.1902415273379319e-06, 1.1902384332573845e-06, 1.1902332165414364e-06, 1.1902422345499986e-06, 1.1902406579222813e-06, 1.1902347895054177e-06, 1.190246591398214e-06, 1.1902401886310088e-06, 1.1902461370949524e-06, 1.1902431484855924e-06, 1.1902383624251556e-06, 1.1902357839321809e-06, 1.1902364301930035e-06, 1.1902380642192512e-06, 1.190240990767144e-06, 1.1902469190250287e-06, 1.1902436198862887e-06, 1.19023792721773e-06, 1.1001698567714158e-06, 1.1001703289492681e-06, 1.1001713584590789e-06, 1.1001682453937178e-06, 1.1001721395009767e-06, 1.1001704497415332e-06, 1.1001696588186505e-06, 1.1001738506877246e-06, 1.100171930779048e-06, 1.100173932733206e-06, 1.1001697718393544e-06, 1.10016886945008e-06, 1.1001680251254697e-06, 1.100171201029454e-06, 1.1001707294067131e-06, 1.1001692844514466e-06, 1.1001747320937838e-06, 1.1001718630554436e-06, 1.1001675220834173e-06, 9.815837548332595e-07, 9.81584536874358e-07, 9.815825527947908e-07, 9.815804810076045e-07, 9.815858575956682e-07, 9.815795248835357e-07, 9.815831035764333e-07, 9.815800222634508e-07, 9.815800630086358e-07, 9.815792990641725e-07, 9.815828477810484e-07, 9.81587578663401e-07, 9.815830100956546e-07, 9.815847679117695e-07, 9.815789093758909e-07, 9.81583719750212e-07, 9.815826034209607e-07, 9.81588493376151e-07, 9.81583587966739e-07, 9.586310504294815e-07, 9.586317433196712e-07, 9.586306264353084e-07, 9.586282477824781e-07, 9.586331966016104e-07, 9.586282031515125e-07, 9.586305287356822e-07, 9.586295310892723e-07, 9.58629020053614e-07, 9.586290362628702e-07, 9.58630373415481e-07, 9.58633491587868e-07, 9.586299907216045e-07, 9.586321504384543e-07, 9.586278418849403e-07, 9.586308645781472e-07, 9.586316226384284e-07, 9.586350062651405e-07, 9.586302648356693e-07], parameters=[array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -3.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 2.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -3.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 2.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -3.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 4.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -3.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, 0.509, -1.381, -1.076, -2.8 , 2.11 , -3.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -0.381, -1.076, -2.8 , 2.11 , -3.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -0.076, -2.8 , 2.11 , -3.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -1.8 , 2.11 , -3.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 3.11 , -3.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 1.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 1.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -1.934, -1.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -2.934, -0.55 , 2.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -2.934, -1.55 , 3.136, -0.204, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -2.934, -1.55 , 2.136, 0.796, 1.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 2.735, 1.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 2.321, -0.329]), array([ 1.261, 1.716, 3.108, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, 0.671]), array([ 1.052, 1.405, 2.783, -0.852, -1.749, -1.391, -3.137, 2.01 , -1.958, 2.453, 0.106, -3.062, -1.611, 2.109, -0.419, 1.528, 1.038, 0.675]), array([ 1.234, 2.2 , 3.065, -0.538, -1.429, -1.118, -2.844, 2.097, -2.017, 2.323, 0.299, -2.95 , -1.558, 2.133, -0.232, 1.708, 1.284, 0.671]), array([ 1.471, 1.716, 2.973, -0.491, -1.381, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, 0.671]), array([ 1.745, 1.694, 3.362, -0.555, -1.446, -1.132, -2.86 , 2.092, -2.014, 2.33 , 0.289, -2.956, -1.561, 2.132, -0.242, 1.698, 1.271, 0.672]), array([ 1.471, 1.716, 2.973, -0.313, -1.556, -1.076, -2.8 , 2.11 , -2.026, 2.304, 0.328, -2.934, -1.55 , 2.136, -0.204, 1.735, 1.321, 0.671]), array([ 1.508, 1.678, 2.965, -0.201, -1.037, -1.172, -2.902, 2.079, -2.005, 2.349, 0.261, -2.973, -1.568, 2.128, -0.269, 1.672, 1.235, 0.672]), array([ 1.508, 1.678, 2.965, -0.201, -1.037, -1.354, -2.731, 2.079, -2.005, 2.349, 0.261, -2.973, -1.568, 2.128, -0.269, 1.672, 1.235, 0.672]), array([ 1.557, 1.628, 2.954, -0.194, -0.966, -0.797, -2.672, 2.038, -1.978, 2.41 , 0.17 , -3.025, -1.593, 2.117, -0.357, 1.588, 1.119, 0.674]), array([ 1.557, 1.628, 2.954, -0.194, -0.966, -0.797, -2.672, 2.178, -1.77 , 2.41 , 0.17 , -3.025, -1.593, 2.117, -0.357, 1.588, 1.119, 0.674]), array([ 1.574, 1.611, 2.951, -0.191, -0.941, -0.761, -2.691, 2.589, -2.041, 2.431, 0.139, -3.043, -1.602, 2.113, -0.387, 1.559, 1.08 , 0.674]), array([ 1.557, 1.628, 2.954, -0.194, -0.966, -0.797, -2.672, 2.178, -1.77 , 2.41 , -0.027, -3.025, -1.593, 2.117, -0.357, 1.588, 1.274, 0.674]), array([ 1.617, 1.567, 2.942, -0.185, -0.879, -0.668, -2.738, 2.168, -1.743, 2.484, 0.503, -3.089, -1.623, 2.103, -0.464, 1.486, 1.384, 0.676]), array([ 1.667, 1.516, 2.931, -0.177, -0.805, -0.558, -2.795, 2.16 , -1.72 , 2.546, 0.586, -3.142, -1.649, 2.092, -0.016, 1.4 , 1.355, 0.677]), array([ 1.667, 1.516, 2.931, -0.177, -0.805, -0.558, -2.795, 2.16 , -1.72 , 2.749, 0.586, -3.142, -1.649, 2.092, -0.016, 1.546, 1.355, 0.677]), array([ 1.744e+00, 1.438e+00, 2.915e+00, -1.659e-01, -6.936e-01, -3.922e-01, -2.880e+00, 2.148e+00, -1.684e+00, 2.276e+00, 7.117e-01, -3.224e+00, -1.687e+00, 2.075e+00, -2.042e-03, 1.699e+00, 1.312e+00, 6.798e-01]), array([ 1.667, 1.516, 2.931, -0.177, -0.805, -0.558, -2.795, 2.16 , -1.72 , 2.546, 0.586, -3.036, -1.875, 2.092, -0.016, 1.4 , 1.355, 0.677]), array([ 1.692, 1.491, 2.926, -0.174, -0.769, -0.504, -2.822, 2.156, -1.708, 2.621, 0.627, -2.732, -1.422, 2.086, -0.011, 1.272, 1.342, 0.678]), array([ 1.662, 1.508, 2.922, -0.187, -0.815, -0.567, -2.804, 2.157, -1.718, 2.55 , 0.58 , -3.146, -1.65 , 1.843, -0.021, 1.394, 1.348, 0.677]), array([ 1.618, 1.36 , 2.796, -0.314, -0.902, -0.611, -2.964, 2.116, -1.678, 2.704, 0.552, -3.294, -1.677, 2.17 , -0.094, 1.149, 1.226, 0.678]), array([ 1.667, 1.521, 2.931, -0.178, -0.805, -0.559, -2.795, 2.16 , -1.72 , 2.546, 0.586, -3.143, -1.649, 2.092, -0.016, 1.4 , 1.355, 0.927]), array([ 1.684, 1.991, 2.918, -0.183, -0.783, -0.519, -2.828, 2.154, -1.708, 2.617, 0.616, -3.214, -1.653, 2.102, -0.017, 1.281, 1.336, 0.922]), array([ 1.466e+00, 1.531e+00, 2.800e+00, -1.485e-01, -7.757e-01, -5.331e-01, -2.768e+00, 2.168e+00, -1.725e+00, 2.534e+00, 6.036e-01, -3.132e+00, -1.644e+00, 2.094e+00, 1.592e-03, 1.416e+00, 1.378e+00, 9.269e-01]), array([ 1.399, 1.497, 3.339, -0.174, -0.784, -0.527, -2.809, 2.158, -1.714, 2.587, 0.609, -3.184, -1.65 , 2.098, -0.012, 1.33 , 1.349, 0.931]), array([ 1.685, 1.503, 2.927, 0.009, -0.679, -0.606, -2.846, 2.145, -1.709, 2.569, 0.552, -3.162, -1.658, 2.088, -0.048, 1.369, 1.313, 0.928]), array([ 1.676, 1.518, 2.931, 0.103, -1.2 , -0.482, -2.756, 2.174, -1.724, 2.56 , 0.641, -3.16 , -1.641, 2.102, 0.02 , 1.369, 1.393, 0.93 ]), array([ 1.688, 1.517, 2.94 , -0.162, -0.772, -0.637, -2.642, 2.173, -1.728, 2.494, 0.614, -3.212, -1.596, 2.162, 0.047, 1.34 , 1.391, 0.851]), array([ 1.666, 1.495, 2.899, -0.315, -0.821, -0.686, -2.616, 2.155, -1.7 , 2.781, 0.669, -3.037, -1.782, 1.924, -0.105, 1.407, 1.336, 1.158]), array([ 1.672e+00, 1.518e+00, 2.928e+00, -2.036e-01, -7.998e-01, -5.248e-01, -2.824e+00, 2.157e+00, -1.714e+00, 2.571e+00, 4.267e-01, -3.146e+00, -1.653e+00, 2.086e+00, 1.365e-03, 1.381e+00, 1.536e+00, 9.453e-01]), array([ 1.655, 1.533, 2.933, -0.179, -0.823, -0.632, -2.833, 2.097, -1.677, 2.532, 0.607, -3.13 , -1.643, 2.095, 0.005, 1.42 , 1.383, 0.927]), array([ 1.658, 1.531, 2.932, -0.189, -0.819, -0.662, -2.893, 2.323, -1.828, 2.542, 0.619, -3.132, -1.645, 2.092, 0.01 , 1.411, 1.39 , 0.934]), array([ 1.672, 1.516, 2.929, -0.177, -0.798, -0.548, -2.801, 2.093, -1.816, 2.552, 0.613, -3.148, -1.651, 2.091, -0.025, 1.391, 1.377, 0.927]), array([ 1.644, 1.546, 2.935, -0.197, -0.841, -0.592, -2.78 , 2.054, -1.891, 2.529, 0.455, -3.116, -1.638, 2.095, 0.042, 1.433, 1.249, 0.937]), array([ 1.686, 1.548, 2.959, -0.146, -0.773, -0.53 , -2.766, 2.102, -1.824, 2.516, 0.625, -3.111, -1.65 , 2.065, -0.011, 1.467, 1.404, 0.942]), array([ 1.689, 1.481, 2.906, -0.28 , -0.784, -0.409, -2.902, 2.075, -1.8 , 2.482, 0.656, -3.222, -1.637, 2.13 , -0.052, 1.453, 1.349, 0.935]), array([ 1.685, 1.502, 2.926, -0.176, -0.779, -0.519, -2.816, 2.09 , -1.81 , 2.581, 0.634, -3.135, -1.658, 2.077, 0.083, 1.371, 1.369, 0.939]), array([ 1.679, 1.513, 2.929, -0.199, -0.79 , -0.507, -2.821, 2.09 , -1.814, 2.556, 0.626, -2.967, -1.518, 2.13 , -0.071, 1.324, 1.375, 0.899]), array([ 1.683, 1.63 , 2.928, -0.187, -0.795, -0.525, -2.806, 2.102, -1.804, 2.568, 0.616, -3.163, -1.654, 2.092, -0.029, 1.363, 1.36 , 0.929]), array([ 1.599, 1.562, 2.909, -0.162, -0.786, -0.62 , -2.871, 1.979, -1.913, 2.569, 0.651, -3.191, -1.668, 2.089, -0.022, 1.392, 1.505, 0.887]), array([ 1.674, 1.515, 2.926, -0.118, -0.901, -0.514, -2.801, 2.094, -1.819, 2.556, 0.626, -3.16 , -1.653, 2.093, -0.026, 1.389, 1.388, 0.934]), array([ 1.704, 1.519, 2.878, -0.177, -0.799, -0.557, -2.797, 2.09 , -1.819, 2.55 , 0.612, -3.142, -1.652, 2.089, -0.025, 1.399, 1.38 , 0.928]), array([ 1.659, 1.505, 2.935, -0.22 , -0.806, -0.557, -2.764, 2.085, -1.815, 2.61 , 0.636, -3.148, -1.692, 2.053, -0.064, 1.393, 1.379, 0.986]), array([ 1.675, 1.515, 2.931, -0.17 , -0.794, -0.546, -2.801, 2.095, -1.814, 2.597, 0.611, -3.156, -1.635, 2.108, -0.027, 1.422, 1.372, 0.912]), array([ 1.679, 1.504, 2.931, -0.096, -0.743, -0.548, -2.835, 2.085, -1.808, 2.558, 0.596, -3.168, -1.669, 2.079, -0.062, 1.371, 1.351, 0.955]), array([ 1.672, 1.518, 2.931, -0.175, -0.796, -0.548, -2.799, 2.092, -1.818, 2.551, 0.614, -3.131, -1.684, 2.14 , -0.023, 1.392, 1.38 , 0.939]), array([ 1.675, 1.512, 2.934, -0.176, -0.797, -0.532, -2.805, 2.097, -1.81 , 2.557, 0.61 , -3.107, -1.756, 2.106, -0.038, 1.393, 1.368, 0.849]), array([ 1.702, 1.518, 2.952, -0.176, -0.803, -0.571, -2.805, 2.079, -1.829, 2.547, 0.646, -3.132, -1.683, 2.142, -0.025, 1.394, 1.355, 0.935]), array([ 1.745, 1.512, 2.977, -0.194, -0.804, -0.545, -2.817, 2.087, -1.815, 2.564, 0.554, -3.141, -1.689, 2.138, -0.025, 1.378, 1.436, 0.944]), array([ 1.669, 1.52 , 2.93 , -0.179, -0.802, -0.56 , -2.832, 2.136, -1.838, 2.555, 0.616, -3.123, -1.688, 2.133, -0.023, 1.4 , 1.381, 0.947]), array([ 1.67 , 1.508, 2.934, -0.166, -0.772, -0.566, -2.734, 2.141, -1.828, 2.533, 0.625, -3.196, -1.683, 2.167, -0.023, 1.359, 1.397, 0.909]), array([ 1.655, 1.513, 2.944, -0.19 , -0.806, -0.558, -2.795, 2.086, -1.838, 2.531, 0.58 , -3.136, -1.676, 2.127, -0.015, 1.388, 1.355, 0.934]), array([ 1.684, 1.553, 2.892, -0.142, -0.793, -0.549, -2.78 , 2.062, -1.833, 2.593, 0.579, -3.139, -1.723, 2.188, -0.013, 1.436, 1.35 , 0.961]), array([ 1.65 , 1.528, 2.929, -0.173, -0.791, -0.564, -2.817, 2.062, -1.84 , 2.551, 0.624, -3.141, -1.685, 2.138, -0.022, 1.39 , 1.412, 0.927]), array([ 1.673, 1.515, 2.929, -0.185, -0.796, -0.537, -2.809, 2.09 , -1.815, 2.542, 0.618, -3.15 , -1.691, 2.14 , -0.023, 1.404, 1.378, 0.941]), array([ 1.669, 1.508, 2.925, -0.199, -0.784, -0.506, -2.818, 2.08 , -1.814, 2.534, 0.625, -3.133, -1.666, 2.16 , -0.05 , 1.393, 1.376, 0.935]), array([ 1.672, 1.517, 2.929, -0.197, -0.774, -0.551, -2.811, 2.09 , -1.804, 2.542, 0.615, -3.146, -1.691, 2.142, -0.021, 1.408, 1.375, 0.94 ]), array([ 1.658, 1.515, 2.932, -0.174, -0.826, -0.55 , -2.818, 2.086, -1.769, 2.529, 0.619, -3.152, -1.683, 2.146, -0.027, 1.404, 1.383, 0.938]), array([ 1.673, 1.521, 2.927, -0.203, -0.808, -0.537, -2.799, 2.092, -1.817, 2.543, 0.622, -3.144, -1.688, 2.147, -0.014, 1.413, 1.384, 0.935]), array([ 1.671, 1.526, 2.95 , -0.164, -0.784, -0.526, -2.794, 2.092, -1.814, 2.514, 0.622, -3.136, -1.685, 2.125, -0.026, 1.435, 1.392, 0.947]), array([ 1.672, 1.542, 2.933, -0.189, -0.796, -0.532, -2.809, 2.092, -1.812, 2.543, 0.619, -3.155, -1.691, 2.134, -0.027, 1.395, 1.374, 0.943]), array([ 1.657, 1.525, 2.94 , -0.205, -0.802, -0.533, -2.791, 2.084, -1.806, 2.561, 0.631, -3.157, -1.706, 2.112, -0.052, 1.391, 1.378, 0.971]), array([ 1.655, 1.517, 2.947, -0.209, -0.798, -0.526, -2.795, 2.086, -1.801, 2.558, 0.641, -3.155, -1.701, 2.101, -0.034, 1.379, 1.38 , 0.971]), array([ 1.653, 1.531, 2.925, -0.184, -0.801, -0.516, -2.789, 2.057, -1.799, 2.584, 0.624, -3.162, -1.723, 2.128, -0.039, 1.397, 1.362, 0.993]), array([ 1.642, 1.525, 2.93 , -0.201, -0.798, -0.537, -2.781, 2.091, -1.808, 2.556, 0.646, -3.162, -1.705, 2.115, -0.052, 1.391, 1.367, 0.966]), array([ 1.671, 1.517, 2.95 , -0.199, -0.795, -0.535, -2.767, 2.097, -1.802, 2.559, 0.623, -3.192, -1.708, 2.129, -0.065, 1.371, 1.399, 0.965]), array([ 1.664, 1.515, 2.964, -0.199, -0.794, -0.529, -2.769, 2.099, -1.8 , 2.566, 0.622, -3.188, -1.724, 2.131, -0.068, 1.373, 1.396, 0.947]), array([ 1.684, 1.511, 2.933, -0.196, -0.797, -0.525, -2.764, 2.094, -1.793, 2.555, 0.618, -3.187, -1.746, 2.105, -0.083, 1.364, 1.399, 0.92 ]), array([ 1.665, 1.514, 2.964, -0.197, -0.793, -0.527, -2.766, 2.095, -1.796, 2.581, 0.621, -3.197, -1.707, 2.121, -0.07 , 1.383, 1.393, 0.937]), array([ 1.66 , 1.511, 2.966, -0.192, -0.801, -0.532, -2.798, 2.143, -1.808, 2.58 , 0.62 , -3.195, -1.735, 2.132, -0.09 , 1.376, 1.405, 0.95 ]), array([ 1.643, 1.51 , 2.962, -0.197, -0.801, -0.526, -2.794, 2.146, -1.81 , 2.576, 0.597, -3.196, -1.733, 2.127, -0.087, 1.374, 1.407, 0.95 ]), array([ 1.647, 1.501, 2.992, -0.201, -0.816, -0.545, -2.796, 2.14 , -1.83 , 2.56 , 0.586, -3.211, -1.737, 2.127, -0.101, 1.364, 1.376, 0.943]), array([ 1.633, 1.512, 2.957, -0.199, -0.801, -0.535, -2.805, 2.132, -1.82 , 2.581, 0.601, -3.203, -1.734, 2.13 , -0.086, 1.366, 1.419, 0.944]), array([ 1.634, 1.522, 2.985, -0.173, -0.789, -0.52 , -2.785, 2.143, -1.818, 2.553, 0.601, -3.193, -1.738, 2.116, -0.1 , 1.4 , 1.435, 0.951]), array([ 1.649, 1.509, 2.96 , -0.203, -0.786, -0.515, -2.791, 2.147, -1.833, 2.58 , 0.598, -3.194, -1.733, 2.127, -0.088, 1.373, 1.404, 0.951]), array([ 1.634, 1.502, 2.962, -0.202, -0.802, -0.502, -2.805, 2.139, -1.792, 2.566, 0.601, -3.183, -1.712, 2.15 , -0.12 , 1.36 , 1.407, 0.943]), array([ 1.643, 1.511, 2.961, -0.197, -0.826, -0.515, -2.787, 2.147, -1.82 , 2.577, 0.602, -3.196, -1.731, 2.13 , -0.083, 1.375, 1.412, 0.947]), array([ 1.644, 1.519, 2.964, -0.234, -0.794, -0.55 , -2.78 , 2.161, -1.791, 2.583, 0.592, -3.194, -1.747, 2.143, -0.08 , 1.391, 1.416, 0.941]), array([ 1.643, 1.507, 2.959, -0.203, -0.8 , -0.513, -2.803, 2.142, -1.806, 2.569, 0.599, -3.215, -1.741, 2.13 , -0.083, 1.385, 1.403, 0.955]), array([ 1.641, 1.51 , 2.956, -0.169, -0.796, -0.51 , -2.8 , 2.133, -1.79 , 2.595, 0.585, -3.221, -1.767, 2.144, -0.074, 1.378, 1.392, 0.971]), array([ 1.642, 1.533, 2.964, -0.207, -0.8 , -0.508, -2.804, 2.144, -1.803, 2.57 , 0.601, -3.219, -1.74 , 2.123, -0.086, 1.375, 1.399, 0.957]), array([ 1.64 , 1.483, 2.978, -0.205, -0.791, -0.506, -2.813, 2.155, -1.791, 2.563, 0.613, -3.218, -1.741, 2.109, -0.051, 1.362, 1.411, 0.952]), array([ 1.637, 1.475, 2.974, -0.212, -0.794, -0.506, -2.804, 2.15 , -1.788, 2.569, 0.618, -3.218, -1.752, 2.093, -0.065, 1.359, 1.413, 0.96 ]), array([ 1.66 , 1.476, 2.943, -0.202, -0.794, -0.506, -2.81 , 2.153, -1.78 , 2.55 , 0.609, -3.218, -1.769, 2.075, -0.069, 1.353, 1.414, 0.928]), array([ 1.624, 1.474, 2.966, -0.207, -0.79 , -0.509, -2.791, 2.159, -1.789, 2.564, 0.631, -3.228, -1.751, 2.099, -0.067, 1.356, 1.406, 0.955]), array([ 1.611, 1.478, 2.968, -0.214, -0.797, -0.511, -2.827, 2.148, -1.789, 2.57 , 0.633, -3.19 , -1.754, 2.078, -0.053, 1.38 , 1.386, 0.967]), array([ 1.639, 1.475, 2.965, -0.207, -0.794, -0.516, -2.802, 2.157, -1.783, 2.563, 0.609, -3.218, -1.738, 2.087, -0.064, 1.355, 1.413, 0.977]), array([ 1.652, 1.468, 2.982, -0.228, -0.796, -0.503, -2.812, 2.138, -1.804, 2.567, 0.644, -3.25 , -1.753, 2.111, -0.065, 1.365, 1.433, 0.98 ]), array([ 1.654, 1.465, 2.986, -0.227, -0.794, -0.501, -2.81 , 2.136, -1.799, 2.584, 0.643, -3.263, -1.738, 2.102, -0.067, 1.375, 1.431, 0.971]), array([ 1.652, 1.462, 2.985, -0.222, -0.794, -0.494, -2.815, 2.132, -1.799, 2.581, 0.645, -3.262, -1.732, 2.104, -0.073, 1.37 , 1.43 , 0.972]), array([ 1.648, 1.456, 2.99 , -0.232, -0.79 , -0.488, -2.816, 2.133, -1.782, 2.583, 0.644, -3.258, -1.725, 2.118, -0.084, 1.367, 1.434, 0.969]), array([ 1.649, 1.448, 3.007, -0.233, -0.795, -0.495, -2.817, 2.129, -1.785, 2.576, 0.637, -3.266, -1.725, 2.119, -0.094, 1.361, 1.419, 0.966]), array([ 1.647, 1.448, 3.009, -0.231, -0.796, -0.496, -2.824, 2.14 , -1.787, 2.578, 0.636, -3.267, -1.727, 2.119, -0.1 , 1.362, 1.423, 0.967]), array([ 1.641, 1.45 , 3.023, -0.219, -0.788, -0.492, -2.817, 2.133, -1.783, 2.567, 0.637, -3.265, -1.726, 2.115, -0.106, 1.372, 1.436, 0.968]), array([ 1.648, 1.448, 3.008, -0.227, -0.785, -0.498, -2.827, 2.137, -1.785, 2.582, 0.634, -3.269, -1.733, 2.121, -0.1 , 1.361, 1.42 , 0.97 ]), array([ 1.645, 1.442, 3.012, -0.213, -0.796, -0.486, -2.823, 2.133, -1.778, 2.596, 0.631, -3.273, -1.736, 2.131, -0.099, 1.354, 1.42 , 0.975]), array([ 1.644, 1.441, 3.016, -0.216, -0.79 , -0.481, -2.818, 2.136, -1.786, 2.6 , 0.629, -3.269, -1.733, 2.132, -0.098, 1.353, 1.418, 0.979]), array([ 1.658, 1.433, 3.004, -0.213, -0.786, -0.471, -2.827, 2.131, -1.777, 2.595, 0.628, -3.276, -1.736, 2.132, -0.11 , 1.346, 1.419, 0.964]), array([ 1.652, 1.425, 3.002, -0.214, -0.78 , -0.459, -2.844, 2.124, -1.773, 2.6 , 0.637, -3.271, -1.732, 2.135, -0.118, 1.349, 1.408, 0.962]), array([ 1.639, 1.421, 2.998, -0.216, -0.777, -0.463, -2.852, 2.113, -1.78 , 2.606, 0.632, -3.273, -1.727, 2.137, -0.121, 1.336, 1.42 , 0.954]), array([ 1.657, 1.418, 3.002, -0.21 , -0.78 , -0.466, -2.842, 2.124, -1.774, 2.603, 0.643, -3.264, -1.73 , 2.138, -0.119, 1.35 , 1.41 , 0.961]), array([ 1.661, 1.442, 3.009, -0.214, -0.777, -0.455, -2.846, 2.125, -1.767, 2.606, 0.65 , -3.27 , -1.728, 2.133, -0.126, 1.336, 1.405, 0.961]), array([ 1.652, 1.419, 3.006, -0.214, -0.778, -0.458, -2.846, 2.128, -1.769, 2.598, 0.64 , -3.272, -1.731, 2.129, -0.109, 1.343, 1.41 , 0.963]), array([ 1.656, 1.409, 2.995, -0.21 , -0.773, -0.457, -2.849, 2.13 , -1.76 , 2.593, 0.632, -3.277, -1.716, 2.13 , -0.115, 1.342, 1.408, 0.978]), array([ 1.655, 1.405, 2.993, -0.215, -0.775, -0.458, -2.846, 2.128, -1.76 , 2.593, 0.636, -3.276, -1.724, 2.124, -0.121, 1.339, 1.41 , 0.984]), array([ 1.659, 1.404, 2.991, -0.217, -0.774, -0.452, -2.854, 2.127, -1.765, 2.577, 0.639, -3.273, -1.733, 2.143, -0.118, 1.333, 1.412, 0.992]), array([ 1.651, 1.404, 2.99 , -0.214, -0.773, -0.458, -2.841, 2.13 , -1.762, 2.592, 0.644, -3.285, -1.722, 2.128, -0.122, 1.339, 1.408, 0.983]), array([ 1.639, 1.403, 2.982, -0.205, -0.769, -0.458, -2.833, 2.139, -1.756, 2.585, 0.641, -3.274, -1.726, 2.127, -0.126, 1.332, 1.397, 0.975]), array([ 1.637, 1.401, 2.984, -0.214, -0.767, -0.459, -2.83 , 2.141, -1.747, 2.588, 0.639, -3.273, -1.726, 2.133, -0.128, 1.333, 1.4 , 0.974]), array([ 1.639, 1.385, 2.98 , -0.218, -0.759, -0.452, -2.827, 2.142, -1.74 , 2.596, 0.635, -3.28 , -1.735, 2.127, -0.131, 1.343, 1.392, 0.966]), array([ 1.646, 1.392, 2.983, -0.219, -0.751, -0.445, -2.826, 2.145, -1.727, 2.605, 0.645, -3.282, -1.732, 2.122, -0.144, 1.332, 1.384, 0.964]), array([ 1.645, 1.384, 2.983, -0.221, -0.771, -0.428, -2.819, 2.149, -1.723, 2.607, 0.648, -3.281, -1.723, 2.122, -0.149, 1.33 , 1.386, 0.959]), array([ 1.646, 1.388, 2.993, -0.218, -0.752, -0.448, -2.825, 2.143, -1.728, 2.6 , 0.642, -3.286, -1.731, 2.122, -0.149, 1.33 , 1.379, 0.963]), array([ 1.642, 1.395, 2.987, -0.208, -0.738, -0.436, -2.821, 2.14 , -1.72 , 2.6 , 0.649, -3.279, -1.731, 2.117, -0.149, 1.342, 1.399, 0.965]), array([ 1.645, 1.392, 2.984, -0.217, -0.752, -0.446, -2.832, 2.157, -1.729, 2.607, 0.644, -3.283, -1.734, 2.121, -0.149, 1.334, 1.387, 0.965]), array([ 1.648, 1.392, 2.977, -0.234, -0.746, -0.449, -2.836, 2.163, -1.733, 2.596, 0.651, -3.28 , -1.727, 2.109, -0.155, 1.34 , 1.386, 0.955]), array([ 1.646, 1.393, 2.98 , -0.214, -0.757, -0.451, -2.837, 2.154, -1.721, 2.604, 0.646, -3.287, -1.737, 2.12 , -0.15 , 1.335, 1.389, 0.96 ]), array([ 1.632, 1.392, 2.984, -0.219, -0.747, -0.449, -2.836, 2.165, -1.72 , 2.624, 0.651, -3.282, -1.736, 2.118, -0.15 , 1.339, 1.379, 0.977]), array([ 1.639, 1.395, 2.986, -0.218, -0.75 , -0.449, -2.829, 2.172, -1.718, 2.62 , 0.652, -3.282, -1.739, 2.116, -0.147, 1.345, 1.376, 0.981]), array([ 1.628, 1.389, 2.976, -0.22 , -0.738, -0.451, -2.833, 2.169, -1.722, 2.637, 0.642, -3.289, -1.736, 2.115, -0.157, 1.324, 1.391, 0.971]), array([ 1.628, 1.383, 2.971, -0.223, -0.727, -0.439, -2.846, 2.171, -1.723, 2.635, 0.648, -3.287, -1.746, 2.131, -0.161, 1.315, 1.391, 0.972]), array([ 1.631, 1.383, 2.968, -0.215, -0.718, -0.436, -2.856, 2.177, -1.719, 2.638, 0.64 , -3.291, -1.727, 2.14 , -0.157, 1.318, 1.386, 0.966]), array([ 1.632, 1.374, 2.974, -0.22 , -0.726, -0.444, -2.846, 2.173, -1.722, 2.636, 0.654, -3.282, -1.744, 2.129, -0.157, 1.312, 1.394, 0.971]), array([ 1.634, 1.382, 2.963, -0.219, -0.727, -0.447, -2.843, 2.165, -1.73 , 2.645, 0.651, -3.278, -1.747, 2.141, -0.18 , 1.322, 1.39 , 0.969]), array([ 1.624, 1.386, 2.973, -0.223, -0.726, -0.44 , -2.842, 2.173, -1.727, 2.636, 0.656, -3.294, -1.747, 2.135, -0.159, 1.316, 1.391, 0.965]), array([ 1.627, 1.39 , 2.98 , -0.227, -0.725, -0.432, -2.856, 2.169, -1.724, 2.646, 0.644, -3.275, -1.758, 2.128, -0.158, 1.313, 1.392, 0.958]), array([ 1.633, 1.383, 2.976, -0.231, -0.727, -0.44 , -2.848, 2.169, -1.721, 2.639, 0.648, -3.292, -1.744, 2.134, -0.161, 1.319, 1.398, 0.975]), array([ 1.633, 1.38 , 2.966, -0.217, -0.726, -0.431, -2.857, 2.164, -1.737, 2.641, 0.657, -3.298, -1.748, 2.119, -0.164, 1.311, 1.391, 0.98 ]), array([ 1.635, 1.39 , 2.968, -0.216, -0.727, -0.432, -2.858, 2.165, -1.736, 2.64 , 0.662, -3.295, -1.744, 2.12 , -0.167, 1.303, 1.392, 0.982]), array([ 1.615, 1.371, 2.956, -0.22 , -0.727, -0.433, -2.863, 2.164, -1.748, 2.636, 0.654, -3.295, -1.754, 2.127, -0.162, 1.31 , 1.402, 0.986]), array([ 1.635, 1.378, 2.963, -0.222, -0.735, -0.432, -2.858, 2.167, -1.739, 2.644, 0.656, -3.299, -1.747, 2.121, -0.162, 1.306, 1.384, 0.979]), array([ 1.627, 1.372, 2.966, -0.215, -0.735, -0.41 , -2.85 , 2.166, -1.728, 2.642, 0.662, -3.297, -1.743, 2.117, -0.174, 1.312, 1.398, 0.975]), array([ 1.626, 1.37 , 2.974, -0.208, -0.738, -0.41 , -2.849, 2.163, -1.727, 2.645, 0.658, -3.3 , -1.746, 2.122, -0.175, 1.309, 1.397, 0.979]), array([ 1.621, 1.359, 2.983, -0.214, -0.725, -0.413, -2.852, 2.161, -1.726, 2.636, 0.657, -3.306, -1.749, 2.116, -0.191, 1.307, 1.388, 0.974]), array([ 1.621, 1.358, 2.986, -0.218, -0.72 , -0.409, -2.844, 2.158, -1.733, 2.638, 0.656, -3.302, -1.745, 2.117, -0.188, 1.306, 1.384, 0.978]), array([ 1.621, 1.356, 2.972, -0.215, -0.718, -0.413, -2.847, 2.141, -1.711, 2.637, 0.661, -3.311, -1.755, 2.118, -0.186, 1.302, 1.384, 0.971]), array([ 1.614, 1.357, 2.972, -0.216, -0.716, -0.414, -2.849, 2.145, -1.706, 2.646, 0.665, -3.31 , -1.755, 2.116, -0.186, 1.305, 1.38 , 0.978]), array([ 1.633, 1.354, 2.968, -0.212, -0.708, -0.407, -2.839, 2.153, -1.707, 2.634, 0.659, -3.317, -1.773, 2.118, -0.189, 1.305, 1.386, 0.974]), array([ 1.635, 1.353, 2.97 , -0.212, -0.709, -0.403, -2.844, 2.152, -1.707, 2.627, 0.665, -3.313, -1.775, 2.123, -0.187, 1.31 , 1.381, 0.977]), array([ 1.636, 1.35 , 2.974, -0.204, -0.711, -0.404, -2.837, 2.143, -1.704, 2.619, 0.666, -3.315, -1.781, 2.109, -0.187, 1.331, 1.377, 0.977]), array([ 1.636, 1.35 , 2.966, -0.209, -0.708, -0.405, -2.842, 2.154, -1.706, 2.624, 0.665, -3.32 , -1.766, 2.126, -0.188, 1.312, 1.379, 0.982]), array([ 1.637, 1.352, 2.97 , -0.206, -0.695, -0.392, -2.86 , 2.154, -1.704, 2.634, 0.657, -3.312, -1.773, 2.13 , -0.185, 1.311, 1.378, 0.964]), array([ 1.634, 1.353, 2.974, -0.209, -0.695, -0.389, -2.862, 2.157, -1.701, 2.629, 0.656, -3.316, -1.772, 2.125, -0.176, 1.307, 1.379, 0.966]), array([ 1.622, 1.345, 2.963, -0.21 , -0.69 , -0.391, -2.868, 2.154, -1.711, 2.628, 0.658, -3.308, -1.784, 2.142, -0.188, 1.306, 1.391, 0.968]), array([ 1.636, 1.36 , 2.969, -0.213, -0.697, -0.388, -2.86 , 2.151, -1.704, 2.635, 0.652, -3.318, -1.774, 2.133, -0.188, 1.316, 1.379, 0.966]), array([ 1.65 , 1.342, 2.981, -0.217, -0.693, -0.396, -2.864, 2.152, -1.7 , 2.642, 0.664, -3.315, -1.771, 2.135, -0.182, 1.315, 1.392, 0.966]), array([ 1.641, 1.35 , 2.968, -0.207, -0.696, -0.391, -2.864, 2.153, -1.7 , 2.633, 0.65 , -3.305, -1.772, 2.126, -0.188, 1.309, 1.379, 0.971]), array([ 1.647, 1.365, 2.973, -0.203, -0.689, -0.388, -2.867, 2.154, -1.693, 2.63 , 0.66 , -3.299, -1.772, 2.129, -0.198, 1.292, 1.379, 0.972]), array([ 1.644, 1.349, 2.965, -0.205, -0.697, -0.388, -2.869, 2.149, -1.707, 2.636, 0.654, -3.31 , -1.773, 2.121, -0.189, 1.307, 1.378, 0.975]), array([ 1.65 , 1.339, 2.959, -0.214, -0.708, -0.386, -2.873, 2.157, -1.706, 2.641, 0.651, -3.31 , -1.78 , 2.127, -0.189, 1.295, 1.363, 0.968]), array([ 1.641, 1.344, 2.966, -0.205, -0.7 , -0.376, -2.864, 2.15 , -1.705, 2.638, 0.656, -3.309, -1.77 , 2.12 , -0.193, 1.307, 1.38 , 0.974]), array([ 1.644, 1.343, 2.97 , -0.212, -0.685, -0.371, -2.853, 2.145, -1.719, 2.642, 0.651, -3.3 , -1.768, 2.123, -0.185, 1.302, 1.371, 0.981]), array([ 1.642, 1.341, 2.977, -0.204, -0.688, -0.371, -2.852, 2.142, -1.718, 2.645, 0.647, -3.303, -1.771, 2.128, -0.185, 1.299, 1.37 , 0.984]), array([ 1.65 , 1.352, 2.957, -0.205, -0.694, -0.365, -2.852, 2.148, -1.719, 2.65 , 0.653, -3.292, -1.769, 2.129, -0.168, 1.303, 1.379, 0.984]), array([ 1.644, 1.344, 2.975, -0.211, -0.688, -0.371, -2.855, 2.155, -1.726, 2.641, 0.649, -3.298, -1.765, 2.123, -0.187, 1.304, 1.373, 0.982]), array([ 1.647, 1.335, 2.965, -0.204, -0.678, -0.367, -2.856, 2.131, -1.714, 2.64 , 0.653, -3.293, -1.779, 2.111, -0.184, 1.31 , 1.364, 0.972]), array([ 1.651, 1.325, 2.95 , -0.195, -0.669, -0.367, -2.856, 2.129, -1.708, 2.633, 0.654, -3.301, -1.766, 2.118, -0.184, 1.311, 1.356, 0.977]), array([ 1.653, 1.335, 2.963, -0.203, -0.678, -0.367, -2.852, 2.128, -1.718, 2.636, 0.647, -3.296, -1.78 , 2.11 , -0.185, 1.306, 1.37 , 0.965]), array([ 1.642, 1.334, 2.957, -0.203, -0.667, -0.371, -2.848, 2.14 , -1.707, 2.658, 0.648, -3.299, -1.787, 2.101, -0.188, 1.305, 1.368, 0.973]), array([ 1.643, 1.336, 2.965, -0.203, -0.676, -0.366, -2.863, 2.128, -1.714, 2.646, 0.649, -3.291, -1.772, 2.112, -0.182, 1.308, 1.364, 0.965]), array([ 1.632, 1.334, 2.962, -0.208, -0.686, -0.377, -2.86 , 2.111, -1.714, 2.65 , 0.656, -3.284, -1.766, 2.103, -0.181, 1.3 , 1.362, 0.968]), array([ 1.652, 1.337, 2.971, -0.204, -0.677, -0.368, -2.861, 2.128, -1.711, 2.651, 0.65 , -3.294, -1.767, 2.108, -0.181, 1.311, 1.362, 0.964]), array([ 1.648, 1.323, 2.97 , -0.213, -0.667, -0.366, -2.874, 2.124, -1.711, 2.65 , 0.656, -3.291, -1.778, 2.122, -0.18 , 1.308, 1.379, 0.967]), array([ 1.651, 1.326, 2.972, -0.208, -0.663, -0.366, -2.875, 2.126, -1.708, 2.649, 0.663, -3.286, -1.778, 2.122, -0.182, 1.299, 1.379, 0.966]), array([ 1.648, 1.34 , 2.967, -0.221, -0.661, -0.353, -2.881, 2.116, -1.706, 2.651, 0.652, -3.297, -1.785, 2.129, -0.188, 1.311, 1.375, 0.969]), array([ 1.644, 1.327, 2.973, -0.209, -0.662, -0.365, -2.873, 2.121, -1.711, 2.647, 0.656, -3.293, -1.774, 2.117, -0.177, 1.313, 1.387, 0.972]), array([ 1.644, 1.319, 2.974, -0.219, -0.668, -0.357, -2.88 , 2.13 , -1.704, 2.642, 0.651, -3.299, -1.781, 2.114, -0.161, 1.299, 1.374, 0.966]), array([ 1.644, 1.324, 2.97 , -0.215, -0.664, -0.367, -2.869, 2.124, -1.715, 2.651, 0.664, -3.297, -1.778, 2.125, -0.176, 1.31 , 1.378, 0.96 ]), array([ 1.646, 1.318, 2.974, -0.194, -0.671, -0.36 , -2.883, 2.128, -1.714, 2.655, 0.654, -3.288, -1.791, 2.128, -0.178, 1.319, 1.377, 0.962]), array([ 1.643, 1.319, 2.976, -0.195, -0.669, -0.363, -2.879, 2.13 , -1.706, 2.652, 0.649, -3.282, -1.791, 2.133, -0.177, 1.323, 1.377, 0.958]), array([ 1.644, 1.315, 2.976, -0.194, -0.672, -0.354, -2.881, 2.128, -1.713, 2.655, 0.655, -3.288, -1.789, 2.127, -0.181, 1.319, 1.378, 0.961]), array([ 1.641, 1.312, 2.983, -0.195, -0.669, -0.359, -2.884, 2.128, -1.714, 2.651, 0.653, -3.292, -1.79 , 2.125, -0.189, 1.32 , 1.373, 0.96 ]), array([ 1.642, 1.311, 2.985, -0.195, -0.666, -0.358, -2.882, 2.125, -1.717, 2.652, 0.651, -3.29 , -1.791, 2.126, -0.187, 1.319, 1.371, 0.962]), array([ 1.643, 1.31 , 2.984, -0.199, -0.662, -0.355, -2.886, 2.134, -1.725, 2.652, 0.651, -3.285, -1.789, 2.125, -0.188, 1.323, 1.37 , 0.962]), array([ 1.642, 1.31 , 2.982, -0.195, -0.664, -0.358, -2.882, 2.122, -1.716, 2.652, 0.653, -3.287, -1.793, 2.122, -0.187, 1.32 , 1.37 , 0.959]), array([ 1.634, 1.306, 2.984, -0.195, -0.671, -0.36 , -2.884, 2.113, -1.717, 2.655, 0.653, -3.285, -1.795, 2.123, -0.187, 1.317, 1.368, 0.962]), array([ 1.644, 1.308, 2.982, -0.194, -0.665, -0.357, -2.884, 2.12 , -1.716, 2.647, 0.654, -3.287, -1.789, 2.125, -0.186, 1.321, 1.368, 0.96 ]), array([ 1.641, 1.304, 2.975, -0.19 , -0.658, -0.359, -2.881, 2.123, -1.712, 2.656, 0.65 , -3.292, -1.792, 2.122, -0.188, 1.319, 1.367, 0.962]), array([ 1.64 , 1.303, 2.973, -0.19 , -0.657, -0.358, -2.88 , 2.122, -1.714, 2.653, 0.648, -3.292, -1.794, 2.123, -0.189, 1.317, 1.371, 0.96 ]), array([ 1.649, 1.301, 2.979, -0.188, -0.659, -0.359, -2.879, 2.118, -1.71 , 2.662, 0.645, -3.296, -1.793, 2.119, -0.189, 1.319, 1.368, 0.957]), array([ 1.643, 1.304, 2.974, -0.19 , -0.658, -0.361, -2.878, 2.122, -1.713, 2.656, 0.652, -3.291, -1.794, 2.123, -0.193, 1.322, 1.368, 0.964]), array([ 1.641, 1.301, 2.975, -0.192, -0.66 , -0.356, -2.878, 2.126, -1.709, 2.651, 0.652, -3.295, -1.802, 2.119, -0.185, 1.318, 1.365, 0.968]), array([ 1.642, 1.304, 2.975, -0.194, -0.655, -0.357, -2.884, 2.121, -1.71 , 2.657, 0.651, -3.292, -1.795, 2.125, -0.189, 1.32 , 1.37 , 0.962]), array([ 1.64 , 1.314, 2.973, -0.193, -0.655, -0.351, -2.885, 2.118, -1.709, 2.657, 0.647, -3.295, -1.796, 2.125, -0.194, 1.32 , 1.363, 0.962]), array([ 1.637, 1.315, 2.973, -0.193, -0.655, -0.351, -2.884, 2.117, -1.71 , 2.657, 0.645, -3.297, -1.795, 2.123, -0.192, 1.325, 1.366, 0.964]), array([ 1.638, 1.319, 2.977, -0.186, -0.648, -0.35 , -2.887, 2.117, -1.706, 2.656, 0.653, -3.291, -1.796, 2.123, -0.195, 1.315, 1.366, 0.964]), array([ 1.636, 1.319, 2.977, -0.183, -0.648, -0.349, -2.887, 2.118, -1.707, 2.657, 0.655, -3.293, -1.798, 2.125, -0.194, 1.317, 1.366, 0.961]), array([ 1.635, 1.321, 2.975, -0.194, -0.644, -0.353, -2.882, 2.115, -1.705, 2.657, 0.659, -3.295, -1.793, 2.123, -0.195, 1.309, 1.365, 0.962]), array([ 1.633, 1.321, 2.976, -0.194, -0.643, -0.354, -2.879, 2.115, -1.701, 2.656, 0.657, -3.293, -1.793, 2.126, -0.195, 1.31 , 1.365, 0.96 ]), array([ 1.633, 1.321, 2.972, -0.198, -0.638, -0.351, -2.887, 2.12 , -1.708, 2.661, 0.659, -3.288, -1.794, 2.125, -0.2 , 1.306, 1.362, 0.962]), array([ 1.631, 1.318, 2.973, -0.198, -0.639, -0.345, -2.885, 2.12 , -1.707, 2.661, 0.66 , -3.288, -1.792, 2.124, -0.203, 1.306, 1.363, 0.961]), array([ 1.642, 1.321, 2.974, -0.196, -0.636, -0.351, -2.89 , 2.117, -1.706, 2.667, 0.657, -3.29 , -1.796, 2.124, -0.203, 1.3 , 1.359, 0.957]), array([ 1.646, 1.32 , 2.971, -0.194, -0.634, -0.35 , -2.895, 2.112, -1.706, 2.661, 0.66 , -3.29 , -1.79 , 2.131, -0.203, 1.298, 1.353, 0.958]), array([ 1.643, 1.323, 2.972, -0.196, -0.636, -0.349, -2.887, 2.116, -1.707, 2.669, 0.657, -3.287, -1.796, 2.126, -0.199, 1.299, 1.36 , 0.959]), array([ 1.643, 1.326, 2.964, -0.196, -0.642, -0.348, -2.892, 2.118, -1.701, 2.673, 0.661, -3.288, -1.796, 2.126, -0.199, 1.297, 1.365, 0.957]), array([ 1.646, 1.324, 2.972, -0.196, -0.633, -0.348, -2.886, 2.121, -1.707, 2.668, 0.656, -3.289, -1.794, 2.127, -0.198, 1.3 , 1.361, 0.959]), array([ 1.639, 1.323, 2.976, -0.195, -0.64 , -0.35 , -2.888, 2.116, -1.709, 2.674, 0.654, -3.29 , -1.795, 2.134, -0.2 , 1.292, 1.36 , 0.964]), array([ 1.642, 1.319, 2.969, -0.194, -0.633, -0.348, -2.886, 2.117, -1.705, 2.67 , 0.656, -3.29 , -1.798, 2.125, -0.198, 1.298, 1.358, 0.961]), array([ 1.643, 1.318, 2.97 , -0.197, -0.635, -0.346, -2.886, 2.116, -1.703, 2.668, 0.659, -3.289, -1.81 , 2.122, -0.197, 1.293, 1.354, 0.965]), array([ 1.644, 1.319, 2.972, -0.198, -0.635, -0.347, -2.885, 2.116, -1.701, 2.671, 0.663, -3.289, -1.809, 2.122, -0.197, 1.297, 1.352, 0.968]), array([ 1.647, 1.319, 2.968, -0.196, -0.635, -0.351, -2.88 , 2.113, -1.705, 2.67 , 0.664, -3.287, -1.814, 2.125, -0.207, 1.298, 1.355, 0.97 ]), array([ 1.647, 1.319, 2.967, -0.193, -0.637, -0.353, -2.877, 2.116, -1.706, 2.67 , 0.665, -3.285, -1.812, 2.123, -0.207, 1.295, 1.352, 0.969]), array([ 1.643, 1.317, 2.964, -0.195, -0.629, -0.352, -2.881, 2.106, -1.704, 2.678, 0.661, -3.289, -1.816, 2.12 , -0.207, 1.299, 1.354, 0.974]), array([ 1.642, 1.321, 2.963, -0.194, -0.629, -0.349, -2.882, 2.105, -1.703, 2.676, 0.66 , -3.29 , -1.816, 2.121, -0.209, 1.299, 1.35 , 0.974]), array([ 1.646, 1.314, 2.959, -0.192, -0.627, -0.349, -2.887, 2.099, -1.701, 2.671, 0.665, -3.29 , -1.813, 2.127, -0.208, 1.298, 1.347, 0.977]), array([ 1.648, 1.313, 2.958, -0.196, -0.629, -0.35 , -2.887, 2.099, -1.7 , 2.67 , 0.661, -3.289, -1.811, 2.125, -0.208, 1.297, 1.346, 0.979]), array([ 1.646, 1.31 , 2.956, -0.196, -0.631, -0.348, -2.886, 2.1 , -1.705, 2.675, 0.664, -3.294, -1.818, 2.131, -0.206, 1.303, 1.341, 0.971]), array([ 1.648, 1.313, 2.96 , -0.188, -0.63 , -0.347, -2.89 , 2.1 , -1.703, 2.671, 0.663, -3.289, -1.815, 2.125, -0.208, 1.3 , 1.347, 0.978]), array([ 1.645, 1.313, 2.961, -0.19 , -0.626, -0.35 , -2.886, 2.098, -1.692, 2.67 , 0.659, -3.283, -1.817, 2.132, -0.207, 1.301, 1.346, 0.974]), array([ 1.646, 1.315, 2.962, -0.188, -0.628, -0.354, -2.885, 2.096, -1.691, 2.669, 0.658, -3.286, -1.818, 2.132, -0.204, 1.302, 1.347, 0.975]), array([ 1.645, 1.309, 2.965, -0.189, -0.63 , -0.341, -2.88 , 2.095, -1.688, 2.671, 0.66 , -3.286, -1.815, 2.13 , -0.211, 1.301, 1.348, 0.972]), array([ 1.639, 1.312, 2.96 , -0.19 , -0.628, -0.35 , -2.885, 2.098, -1.692, 2.668, 0.66 , -3.282, -1.817, 2.132, -0.206, 1.303, 1.347, 0.976]), array([ 1.644, 1.313, 2.959, -0.192, -0.618, -0.344, -2.887, 2.107, -1.691, 2.67 , 0.659, -3.283, -1.819, 2.135, -0.211, 1.301, 1.344, 0.978]), array([ 1.646, 1.316, 2.96 , -0.195, -0.613, -0.337, -2.886, 2.104, -1.697, 2.672, 0.66 , -3.273, -1.818, 2.135, -0.208, 1.303, 1.342, 0.977]), array([ 1.648, 1.316, 2.955, -0.196, -0.613, -0.336, -2.887, 2.104, -1.694, 2.671, 0.662, -3.272, -1.819, 2.132, -0.208, 1.305, 1.344, 0.974]), array([ 1.644, 1.32 , 2.956, -0.196, -0.616, -0.333, -2.891, 2.105, -1.695, 2.68 , 0.662, -3.271, -1.819, 2.141, -0.21 , 1.297, 1.345, 0.979]), array([ 1.646, 1.316, 2.961, -0.197, -0.614, -0.336, -2.887, 2.103, -1.696, 2.671, 0.661, -3.273, -1.824, 2.133, -0.208, 1.301, 1.34 , 0.978]), array([ 1.643, 1.315, 2.965, -0.201, -0.61 , -0.337, -2.894, 2.104, -1.697, 2.669, 0.662, -3.271, -1.823, 2.132, -0.218, 1.302, 1.338, 0.974]), array([ 1.648, 1.316, 2.963, -0.197, -0.615, -0.338, -2.886, 2.104, -1.694, 2.674, 0.664, -3.272, -1.823, 2.132, -0.209, 1.304, 1.337, 0.98 ]), array([ 1.644, 1.313, 2.957, -0.192, -0.613, -0.336, -2.883, 2.109, -1.697, 2.67 , 0.66 , -3.269, -1.823, 2.13 , -0.21 , 1.294, 1.332, 0.976]), array([ 1.646, 1.312, 2.955, -0.191, -0.612, -0.338, -2.88 , 2.107, -1.699, 2.671, 0.661, -3.268, -1.826, 2.131, -0.214, 1.295, 1.334, 0.977]), array([ 1.644, 1.302, 2.956, -0.192, -0.607, -0.34 , -2.881, 2.11 , -1.699, 2.677, 0.662, -3.266, -1.827, 2.128, -0.211, 1.293, 1.339, 0.978]), array([ 1.645, 1.304, 2.959, -0.191, -0.606, -0.341, -2.881, 2.111, -1.697, 2.674, 0.664, -3.263, -1.825, 2.127, -0.211, 1.291, 1.342, 0.98 ]), array([ 1.648, 1.299, 2.958, -0.196, -0.612, -0.34 , -2.88 , 2.118, -1.702, 2.675, 0.665, -3.265, -1.828, 2.134, -0.209, 1.294, 1.34 , 0.973]), array([ 1.646, 1.299, 2.955, -0.192, -0.606, -0.34 , -2.884, 2.107, -1.698, 2.675, 0.664, -3.266, -1.826, 2.131, -0.21 , 1.292, 1.337, 0.979]), array([ 1.645, 1.305, 2.953, -0.192, -0.598, -0.336, -2.88 , 2.114, -1.698, 2.676, 0.661, -3.27 , -1.833, 2.13 , -0.209, 1.295, 1.338, 0.984]), array([ 1.647, 1.31 , 2.953, -0.192, -0.592, -0.332, -2.878, 2.108, -1.704, 2.679, 0.66 , -3.264, -1.836, 2.129, -0.202, 1.295, 1.336, 0.983]), array([ 1.643, 1.304, 2.955, -0.188, -0.598, -0.332, -2.878, 2.113, -1.697, 2.677, 0.664, -3.272, -1.833, 2.13 , -0.209, 1.295, 1.339, 0.982]), array([ 1.646, 1.3 , 2.954, -0.193, -0.599, -0.323, -2.873, 2.111, -1.694, 2.678, 0.659, -3.273, -1.831, 2.128, -0.213, 1.295, 1.339, 0.985]), array([ 1.644, 1.301, 2.954, -0.197, -0.596, -0.325, -2.869, 2.11 , -1.692, 2.677, 0.661, -3.273, -1.83 , 2.129, -0.213, 1.293, 1.339, 0.983]), array([ 1.635, 1.298, 2.951, -0.194, -0.601, -0.32 , -2.871, 2.111, -1.695, 2.674, 0.661, -3.269, -1.831, 2.127, -0.212, 1.3 , 1.34 , 0.99 ]), array([ 1.635, 1.298, 2.952, -0.193, -0.601, -0.321, -2.87 , 2.11 , -1.69 , 2.673, 0.658, -3.266, -1.834, 2.13 , -0.211, 1.302, 1.34 , 0.989]), array([ 1.634, 1.296, 2.949, -0.191, -0.602, -0.316, -2.866, 2.109, -1.692, 2.674, 0.66 , -3.279, -1.836, 2.124, -0.212, 1.299, 1.341, 0.995]), array([ 1.636, 1.296, 2.953, -0.194, -0.599, -0.322, -2.869, 2.11 , -1.696, 2.67 , 0.66 , -3.27 , -1.831, 2.125, -0.212, 1.303, 1.339, 0.989]), array([ 1.632, 1.299, 2.952, -0.198, -0.596, -0.315, -2.878, 2.113, -1.696, 2.675, 0.662, -3.266, -1.832, 2.129, -0.221, 1.3 , 1.339, 0.989]), array([ 1.629, 1.299, 2.955, -0.195, -0.594, -0.315, -2.876, 2.113, -1.7 , 2.679, 0.657, -3.268, -1.824, 2.137, -0.222, 1.301, 1.339, 0.992]), array([ 1.631, 1.299, 2.948, -0.198, -0.595, -0.314, -2.879, 2.112, -1.696, 2.673, 0.66 , -3.267, -1.831, 2.129, -0.22 , 1.299, 1.343, 0.986]), array([ 1.635, 1.302, 2.947, -0.197, -0.595, -0.314, -2.877, 2.115, -1.691, 2.681, 0.668, -3.264, -1.826, 2.127, -0.222, 1.308, 1.338, 0.989]), array([ 1.635, 1.3 , 2.945, -0.195, -0.595, -0.314, -2.876, 2.118, -1.691, 2.681, 0.667, -3.262, -1.826, 2.126, -0.223, 1.305, 1.334, 0.988]), array([ 1.638, 1.298, 2.947, -0.2 , -0.598, -0.309, -2.874, 2.127, -1.693, 2.68 , 0.672, -3.26 , -1.83 , 2.131, -0.223, 1.305, 1.333, 0.986]), array([ 1.636, 1.3 , 2.944, -0.193, -0.594, -0.316, -2.873, 2.117, -1.693, 2.68 , 0.669, -3.26 , -1.828, 2.126, -0.227, 1.305, 1.337, 0.99 ]), array([ 1.635, 1.304, 2.95 , -0.193, -0.592, -0.311, -2.877, 2.121, -1.687, 2.677, 0.67 , -3.257, -1.822, 2.122, -0.222, 1.299, 1.337, 0.993]), array([ 1.635, 1.294, 2.945, -0.195, -0.592, -0.315, -2.877, 2.118, -1.691, 2.683, 0.669, -3.261, -1.826, 2.125, -0.221, 1.304, 1.336, 0.989]), array([ 1.638, 1.292, 2.941, -0.193, -0.592, -0.313, -2.881, 2.112, -1.689, 2.677, 0.673, -3.262, -1.824, 2.132, -0.222, 1.303, 1.33 , 0.991]), array([ 1.637, 1.289, 2.942, -0.193, -0.596, -0.316, -2.883, 2.114, -1.687, 2.676, 0.673, -3.264, -1.822, 2.131, -0.225, 1.302, 1.331, 0.991]), array([ 1.636, 1.29 , 2.942, -0.195, -0.597, -0.313, -2.883, 2.104, -1.691, 2.683, 0.675, -3.254, -1.823, 2.128, -0.224, 1.3 , 1.327, 0.988]), array([ 1.64 , 1.291, 2.939, -0.198, -0.592, -0.313, -2.881, 2.112, -1.689, 2.677, 0.669, -3.26 , -1.823, 2.13 , -0.222, 1.302, 1.329, 0.994]), array([ 1.636, 1.295, 2.937, -0.194, -0.589, -0.322, -2.889, 2.116, -1.69 , 2.679, 0.674, -3.261, -1.828, 2.132, -0.221, 1.302, 1.326, 0.995]), array([ 1.64 , 1.29 , 2.942, -0.189, -0.594, -0.311, -2.885, 2.113, -1.691, 2.677, 0.671, -3.261, -1.825, 2.13 , -0.222, 1.305, 1.33 , 0.993]), array([ 1.636, 1.29 , 2.939, -0.191, -0.589, -0.308, -2.879, 2.111, -1.684, 2.681, 0.673, -3.269, -1.83 , 2.13 , -0.226, 1.301, 1.328, 0.996]), array([ 1.636, 1.286, 2.942, -0.192, -0.582, -0.309, -2.878, 2.111, -1.684, 2.675, 0.674, -3.271, -1.831, 2.123, -0.229, 1.306, 1.322, 0.995]), array([ 1.631, 1.289, 2.937, -0.192, -0.591, -0.307, -2.878, 2.111, -1.685, 2.679, 0.675, -3.268, -1.829, 2.129, -0.224, 1.303, 1.328, 0.999]), array([ 1.641, 1.291, 2.937, -0.191, -0.591, -0.309, -2.878, 2.111, -1.69 , 2.683, 0.678, -3.277, -1.827, 2.124, -0.223, 1.296, 1.328, 0.998]), array([ 1.638, 1.29 , 2.937, -0.191, -0.592, -0.31 , -2.878, 2.111, -1.68 , 2.679, 0.674, -3.268, -1.833, 2.127, -0.222, 1.301, 1.328, 0.995]), array([ 1.633, 1.288, 2.941, -0.185, -0.587, -0.31 , -2.875, 2.111, -1.682, 2.686, 0.668, -3.27 , -1.826, 2.137, -0.224, 1.301, 1.325, 1.001]), array([ 1.635, 1.291, 2.937, -0.19 , -0.585, -0.307, -2.877, 2.11 , -1.685, 2.679, 0.675, -3.269, -1.829, 2.132, -0.223, 1.3 , 1.329, 0.993]), array([ 1.633, 1.289, 2.93 , -0.192, -0.587, -0.304, -2.886, 2.113, -1.683, 2.681, 0.669, -3.27 , -1.83 , 2.128, -0.231, 1.298, 1.333, 0.993]), array([ 1.634, 1.286, 2.932, -0.197, -0.587, -0.297, -2.887, 2.121, -1.685, 2.681, 0.674, -3.269, -1.835, 2.134, -0.234, 1.298, 1.331, 0.992]), array([ 1.635, 1.29 , 2.928, -0.191, -0.586, -0.303, -2.886, 2.115, -1.681, 2.683, 0.672, -3.269, -1.827, 2.126, -0.232, 1.301, 1.333, 0.994]), array([ 1.631, 1.292, 2.936, -0.19 , -0.583, -0.301, -2.889, 2.115, -1.68 , 2.676, 0.67 , -3.267, -1.828, 2.125, -0.232, 1.291, 1.335, 0.998]), array([ 1.634, 1.29 , 2.933, -0.194, -0.586, -0.304, -2.888, 2.11 , -1.682, 2.682, 0.669, -3.272, -1.831, 2.129, -0.232, 1.301, 1.336, 0.995]), array([ 1.628, 1.286, 2.922, -0.19 , -0.582, -0.302, -2.887, 2.111, -1.685, 2.675, 0.669, -3.273, -1.829, 2.126, -0.227, 1.302, 1.339, 0.992]), array([ 1.631, 1.288, 2.93 , -0.192, -0.587, -0.303, -2.887, 2.109, -1.684, 2.683, 0.67 , -3.268, -1.83 , 2.127, -0.233, 1.297, 1.331, 0.991]), array([ 1.63 , 1.288, 2.931, -0.193, -0.587, -0.301, -2.888, 2.109, -1.684, 2.684, 0.67 , -3.269, -1.829, 2.126, -0.231, 1.297, 1.329, 0.99 ]), array([ 1.629, 1.294, 2.93 , -0.192, -0.589, -0.3 , -2.887, 2.109, -1.684, 2.682, 0.668, -3.27 , -1.829, 2.126, -0.234, 1.298, 1.327, 0.989]), array([ 1.63 , 1.288, 2.932, -0.193, -0.588, -0.3 , -2.886, 2.109, -1.683, 2.684, 0.669, -3.269, -1.829, 2.125, -0.232, 1.297, 1.331, 0.989]), array([ 1.627, 1.291, 2.932, -0.194, -0.586, -0.304, -2.887, 2.112, -1.685, 2.687, 0.669, -3.268, -1.831, 2.124, -0.231, 1.297, 1.331, 0.989]), array([ 1.631, 1.289, 2.93 , -0.193, -0.586, -0.3 , -2.888, 2.109, -1.684, 2.684, 0.668, -3.268, -1.831, 2.126, -0.23 , 1.297, 1.329, 0.992]), array([ 1.629, 1.288, 2.931, -0.19 , -0.585, -0.3 , -2.887, 2.108, -1.683, 2.689, 0.665, -3.268, -1.829, 2.129, -0.232, 1.297, 1.327, 0.994]), array([ 1.632, 1.288, 2.93 , -0.19 , -0.586, -0.3 , -2.888, 2.108, -1.686, 2.692, 0.666, -3.272, -1.827, 2.127, -0.232, 1.294, 1.327, 0.995]), array([ 1.629, 1.288, 2.93 , -0.193, -0.585, -0.301, -2.886, 2.108, -1.682, 2.688, 0.664, -3.268, -1.828, 2.129, -0.232, 1.296, 1.327, 0.994]), array([ 1.631, 1.288, 2.93 , -0.194, -0.586, -0.303, -2.888, 2.108, -1.685, 2.688, 0.661, -3.264, -1.825, 2.13 , -0.232, 1.296, 1.327, 0.994]), array([ 1.629, 1.287, 2.931, -0.193, -0.583, -0.301, -2.886, 2.108, -1.683, 2.687, 0.664, -3.269, -1.828, 2.128, -0.234, 1.297, 1.325, 0.994]), array([ 1.631, 1.286, 2.931, -0.192, -0.584, -0.303, -2.886, 2.107, -1.678, 2.689, 0.662, -3.269, -1.831, 2.125, -0.235, 1.296, 1.323, 0.994]), array([ 1.632, 1.286, 2.93 , -0.191, -0.582, -0.302, -2.886, 2.107, -1.678, 2.689, 0.662, -3.269, -1.831, 2.126, -0.235, 1.295, 1.324, 0.992]), array([ 1.629, 1.284, 2.927, -0.189, -0.578, -0.301, -2.886, 2.104, -1.677, 2.69 , 0.661, -3.271, -1.831, 2.126, -0.234, 1.295, 1.324, 0.992]), array([ 1.629, 1.285, 2.928, -0.188, -0.578, -0.303, -2.885, 2.102, -1.677, 2.69 , 0.661, -3.271, -1.83 , 2.126, -0.233, 1.296, 1.324, 0.992]), array([ 1.628, 1.283, 2.927, -0.19 , -0.577, -0.298, -2.886, 2.106, -1.677, 2.693, 0.663, -3.271, -1.834, 2.13 , -0.236, 1.294, 1.322, 0.992]), array([ 1.627, 1.287, 2.926, -0.189, -0.578, -0.295, -2.886, 2.106, -1.677, 2.692, 0.661, -3.272, -1.835, 2.131, -0.24 , 1.294, 1.32 , 0.991]), array([ 1.627, 1.287, 2.925, -0.188, -0.578, -0.295, -2.885, 2.108, -1.677, 2.691, 0.661, -3.271, -1.834, 2.13 , -0.24 , 1.292, 1.319, 0.991]), array([ 1.626, 1.288, 2.929, -0.188, -0.576, -0.293, -2.888, 2.107, -1.674, 2.691, 0.661, -3.27 , -1.834, 2.129, -0.241, 1.29 , 1.321, 0.994]), array([ 1.625, 1.288, 2.929, -0.189, -0.576, -0.293, -2.888, 2.107, -1.676, 2.689, 0.66 , -3.271, -1.836, 2.13 , -0.241, 1.288, 1.321, 0.994]), array([ 1.627, 1.288, 2.928, -0.188, -0.574, -0.292, -2.888, 2.113, -1.672, 2.69 , 0.66 , -3.273, -1.835, 2.131, -0.241, 1.29 , 1.323, 0.996]), array([ 1.627, 1.287, 2.929, -0.188, -0.577, -0.291, -2.887, 2.106, -1.674, 2.69 , 0.661, -3.271, -1.833, 2.13 , -0.242, 1.29 , 1.322, 0.994]), array([ 1.624, 1.289, 2.931, -0.189, -0.575, -0.291, -2.884, 2.109, -1.675, 2.694, 0.659, -3.27 , -1.835, 2.127, -0.242, 1.29 , 1.324, 0.992]), array([ 1.627, 1.288, 2.928, -0.188, -0.575, -0.294, -2.886, 2.107, -1.675, 2.69 , 0.662, -3.269, -1.835, 2.13 , -0.243, 1.289, 1.323, 0.995]), array([ 1.624, 1.287, 2.928, -0.187, -0.577, -0.296, -2.887, 2.108, -1.673, 2.69 , 0.665, -3.271, -1.834, 2.131, -0.247, 1.288, 1.324, 0.992]), array([ 1.624, 1.287, 2.928, -0.188, -0.577, -0.295, -2.887, 2.108, -1.673, 2.689, 0.667, -3.272, -1.835, 2.13 , -0.246, 1.288, 1.324, 0.992]), array([ 1.625, 1.286, 2.926, -0.19 , -0.576, -0.293, -2.89 , 2.108, -1.674, 2.689, 0.667, -3.269, -1.837, 2.129, -0.249, 1.286, 1.323, 0.99 ]), array([ 1.623, 1.287, 2.928, -0.188, -0.576, -0.295, -2.886, 2.108, -1.671, 2.687, 0.666, -3.27 , -1.836, 2.131, -0.246, 1.289, 1.324, 0.991]), array([ 1.624, 1.288, 2.93 , -0.187, -0.575, -0.294, -2.884, 2.106, -1.672, 2.69 , 0.67 , -3.272, -1.836, 2.132, -0.246, 1.285, 1.321, 0.992]), array([ 1.62 , 1.289, 2.928, -0.184, -0.572, -0.294, -2.884, 2.102, -1.671, 2.69 , 0.67 , -3.273, -1.835, 2.13 , -0.247, 1.284, 1.321, 0.992]), array([ 1.618, 1.287, 2.928, -0.184, -0.575, -0.294, -2.883, 2.102, -1.67 , 2.691, 0.67 , -3.272, -1.837, 2.128, -0.248, 1.285, 1.319, 0.996]), array([ 1.62 , 1.288, 2.929, -0.181, -0.572, -0.294, -2.885, 2.102, -1.672, 2.69 , 0.67 , -3.273, -1.836, 2.129, -0.247, 1.286, 1.321, 0.991]), array([ 1.62 , 1.29 , 2.926, -0.18 , -0.575, -0.293, -2.885, 2.102, -1.671, 2.692, 0.671, -3.272, -1.837, 2.132, -0.244, 1.283, 1.324, 0.991]), array([ 1.619, 1.289, 2.928, -0.184, -0.572, -0.293, -2.884, 2.102, -1.673, 2.689, 0.671, -3.273, -1.834, 2.131, -0.247, 1.285, 1.322, 0.993]), array([ 1.621, 1.293, 2.93 , -0.184, -0.572, -0.295, -2.884, 2.1 , -1.672, 2.687, 0.671, -3.272, -1.832, 2.128, -0.248, 1.282, 1.322, 0.991]), array([ 1.621, 1.287, 2.928, -0.183, -0.571, -0.295, -2.884, 2.103, -1.671, 2.689, 0.671, -3.271, -1.834, 2.129, -0.245, 1.283, 1.322, 0.992]), array([ 1.621, 1.287, 2.929, -0.186, -0.57 , -0.295, -2.885, 2.098, -1.671, 2.692, 0.672, -3.274, -1.836, 2.131, -0.246, 1.286, 1.324, 0.992]), array([ 1.621, 1.287, 2.93 , -0.186, -0.569, -0.295, -2.886, 2.099, -1.669, 2.692, 0.671, -3.275, -1.836, 2.132, -0.246, 1.285, 1.325, 0.993]), array([ 1.622, 1.286, 2.927, -0.184, -0.565, -0.294, -2.885, 2.101, -1.667, 2.692, 0.671, -3.278, -1.837, 2.134, -0.247, 1.285, 1.325, 0.993]), array([ 1.622, 1.287, 2.929, -0.186, -0.569, -0.295, -2.889, 2.098, -1.669, 2.691, 0.672, -3.274, -1.836, 2.133, -0.246, 1.285, 1.324, 0.994]), array([ 1.622, 1.286, 2.928, -0.188, -0.567, -0.291, -2.891, 2.098, -1.67 , 2.692, 0.672, -3.272, -1.838, 2.131, -0.249, 1.282, 1.324, 0.992]), array([ 1.622, 1.286, 2.927, -0.188, -0.567, -0.291, -2.891, 2.098, -1.669, 2.694, 0.673, -3.27 , -1.836, 2.131, -0.25 , 1.284, 1.324, 0.992]), array([ 1.62 , 1.284, 2.929, -0.187, -0.567, -0.293, -2.892, 2.098, -1.67 , 2.695, 0.669, -3.27 , -1.834, 2.135, -0.252, 1.281, 1.323, 0.991]), array([ 1.624, 1.285, 2.927, -0.187, -0.568, -0.289, -2.89 , 2.097, -1.669, 2.693, 0.673, -3.27 , -1.835, 2.131, -0.251, 1.284, 1.324, 0.992]), array([ 1.621, 1.286, 2.928, -0.189, -0.568, -0.288, -2.893, 2.098, -1.666, 2.694, 0.672, -3.273, -1.833, 2.131, -0.247, 1.283, 1.321, 0.99 ]), array([ 1.624, 1.287, 2.927, -0.187, -0.566, -0.291, -2.891, 2.098, -1.671, 2.696, 0.672, -3.272, -1.835, 2.13 , -0.25 , 1.283, 1.323, 0.993]), array([ 1.624, 1.288, 2.927, -0.187, -0.563, -0.289, -2.891, 2.096, -1.67 , 2.695, 0.669, -3.268, -1.836, 2.132, -0.247, 1.285, 1.322, 0.995]), array([ 1.624, 1.287, 2.925, -0.188, -0.564, -0.289, -2.892, 2.097, -1.671, 2.695, 0.667, -3.268, -1.836, 2.131, -0.247, 1.286, 1.324, 0.995]), array([ 1.626, 1.292, 2.927, -0.189, -0.561, -0.288, -2.895, 2.095, -1.671, 2.693, 0.67 , -3.267, -1.835, 2.13 , -0.249, 1.283, 1.324, 0.995]), array([ 1.622, 1.288, 2.926, -0.186, -0.563, -0.289, -2.891, 2.094, -1.67 , 2.696, 0.669, -3.268, -1.836, 2.13 , -0.248, 1.284, 1.322, 0.996]), array([ 1.621, 1.286, 2.926, -0.187, -0.565, -0.288, -2.891, 2.095, -1.668, 2.698, 0.669, -3.267, -1.84 , 2.13 , -0.249, 1.285, 1.319, 1. ]), array([ 1.621, 1.281, 2.926, -0.186, -0.563, -0.289, -2.891, 2.096, -1.667, 2.698, 0.671, -3.264, -1.839, 2.128, -0.246, 1.282, 1.319, 1.001]), array([ 1.623, 1.286, 2.926, -0.186, -0.566, -0.289, -2.892, 2.095, -1.666, 2.699, 0.669, -3.267, -1.841, 2.129, -0.248, 1.284, 1.32 , 0.999]), array([ 1.619, 1.287, 2.924, -0.185, -0.567, -0.285, -2.893, 2.095, -1.669, 2.7 , 0.672, -3.266, -1.84 , 2.133, -0.247, 1.284, 1.322, 1.001]), array([ 1.622, 1.285, 2.928, -0.187, -0.564, -0.288, -2.893, 2.094, -1.668, 2.699, 0.67 , -3.268, -1.84 , 2.13 , -0.249, 1.287, 1.32 , 0.999]), array([ 1.621, 1.285, 2.929, -0.182, -0.564, -0.287, -2.894, 2.097, -1.67 , 2.697, 0.67 , -3.268, -1.841, 2.128, -0.251, 1.288, 1.317, 0.999]), array([ 1.622, 1.285, 2.927, -0.186, -0.562, -0.287, -2.893, 2.095, -1.667, 2.699, 0.67 , -3.27 , -1.841, 2.131, -0.249, 1.286, 1.321, 1. ]), array([ 1.621, 1.283, 2.923, -0.185, -0.559, -0.287, -2.891, 2.094, -1.667, 2.7 , 0.671, -3.271, -1.842, 2.132, -0.25 , 1.287, 1.317, 0.998]), array([ 1.621, 1.283, 2.923, -0.186, -0.559, -0.285, -2.89 , 2.094, -1.667, 2.702, 0.67 , -3.271, -1.843, 2.131, -0.251, 1.287, 1.318, 0.997]), array([ 1.618, 1.283, 2.925, -0.185, -0.557, -0.285, -2.886, 2.095, -1.665, 2.705, 0.669, -3.273, -1.844, 2.129, -0.251, 1.289, 1.32 , 0.998]), array([ 1.621, 1.283, 2.923, -0.185, -0.558, -0.287, -2.889, 2.094, -1.668, 2.702, 0.67 , -3.27 , -1.844, 2.131, -0.253, 1.287, 1.32 , 0.997]), array([ 1.619, 1.281, 2.924, -0.185, -0.558, -0.288, -2.892, 2.093, -1.668, 2.704, 0.667, -3.269, -1.842, 2.134, -0.255, 1.284, 1.318, 0.997]), array([ 1.619, 1.281, 2.923, -0.185, -0.558, -0.288, -2.893, 2.094, -1.667, 2.705, 0.668, -3.268, -1.84 , 2.134, -0.256, 1.285, 1.318, 0.997]), array([ 1.619, 1.282, 2.922, -0.187, -0.555, -0.286, -2.896, 2.092, -1.667, 2.704, 0.669, -3.268, -1.842, 2.133, -0.259, 1.283, 1.318, 0.997]), array([ 1.622, 1.284, 2.925, -0.188, -0.553, -0.284, -2.896, 2.093, -1.668, 2.704, 0.67 , -3.265, -1.843, 2.136, -0.259, 1.282, 1.316, 0.996]), array([ 1.621, 1.282, 2.922, -0.187, -0.556, -0.285, -2.896, 2.091, -1.669, 2.705, 0.668, -3.269, -1.841, 2.132, -0.259, 1.282, 1.318, 0.999]), array([ 1.62 , 1.279, 2.922, -0.186, -0.557, -0.283, -2.894, 2.09 , -1.665, 2.7 , 0.669, -3.266, -1.841, 2.134, -0.262, 1.284, 1.32 , 0.997]), array([ 1.62 , 1.279, 2.923, -0.186, -0.558, -0.284, -2.894, 2.09 , -1.665, 2.701, 0.672, -3.268, -1.841, 2.134, -0.263, 1.282, 1.32 , 0.996]), array([ 1.622, 1.276, 2.92 , -0.189, -0.558, -0.283, -2.897, 2.094, -1.666, 2.7 , 0.668, -3.267, -1.842, 2.134, -0.263, 1.285, 1.322, 0.995]), array([ 1.62 , 1.282, 2.922, -0.186, -0.557, -0.283, -2.894, 2.089, -1.666, 2.7 , 0.669, -3.268, -1.841, 2.135, -0.263, 1.285, 1.32 , 0.995]), array([ 1.62 , 1.277, 2.921, -0.184, -0.553, -0.283, -2.894, 2.089, -1.666, 2.698, 0.67 , -3.265, -1.839, 2.133, -0.26 , 1.281, 1.322, 0.994]), array([ 1.622, 1.279, 2.923, -0.187, -0.557, -0.284, -2.894, 2.089, -1.663, 2.7 , 0.668, -3.267, -1.842, 2.133, -0.263, 1.283, 1.319, 0.996]), array([ 1.623, 1.28 , 2.921, -0.183, -0.559, -0.284, -2.896, 2.088, -1.661, 2.702, 0.668, -3.266, -1.845, 2.133, -0.261, 1.281, 1.32 , 0.994]), array([ 1.624, 1.28 , 2.92 , -0.185, -0.559, -0.285, -2.895, 2.087, -1.66 , 2.703, 0.668, -3.266, -1.844, 2.134, -0.261, 1.28 , 1.321, 0.995]), array([ 1.622, 1.282, 2.918, -0.183, -0.561, -0.283, -2.894, 2.091, -1.66 , 2.7 , 0.666, -3.264, -1.844, 2.132, -0.262, 1.278, 1.318, 0.995]), array([ 1.623, 1.28 , 2.921, -0.184, -0.561, -0.285, -2.896, 2.087, -1.663, 2.702, 0.668, -3.264, -1.844, 2.132, -0.261, 1.281, 1.319, 0.993]), array([ 1.621, 1.278, 2.922, -0.182, -0.556, -0.283, -2.896, 2.087, -1.657, 2.704, 0.667, -3.266, -1.847, 2.13 , -0.263, 1.28 , 1.321, 0.997]), array([ 1.622, 1.276, 2.919, -0.18 , -0.555, -0.286, -2.898, 2.085, -1.656, 2.703, 0.668, -3.268, -1.848, 2.133, -0.263, 1.281, 1.317, 1. ]), array([ 1.621, 1.278, 2.922, -0.181, -0.556, -0.286, -2.895, 2.087, -1.659, 2.704, 0.667, -3.265, -1.848, 2.131, -0.265, 1.28 , 1.322, 0.998]), array([ 1.622, 1.279, 2.926, -0.182, -0.558, -0.284, -2.9 , 2.087, -1.655, 2.702, 0.667, -3.266, -1.845, 2.13 , -0.262, 1.278, 1.322, 1.001]), array([ 1.622, 1.279, 2.922, -0.182, -0.556, -0.284, -2.897, 2.087, -1.656, 2.706, 0.668, -3.265, -1.845, 2.13 , -0.264, 1.281, 1.321, 0.997]), array([ 1.624, 1.28 , 2.92 , -0.182, -0.555, -0.283, -2.894, 2.088, -1.655, 2.705, 0.671, -3.265, -1.847, 2.126, -0.263, 1.283, 1.322, 0.998]), array([ 1.621, 1.278, 2.921, -0.181, -0.558, -0.285, -2.896, 2.088, -1.656, 2.706, 0.667, -3.266, -1.844, 2.129, -0.263, 1.282, 1.322, 0.997]), array([ 1.624, 1.277, 2.925, -0.181, -0.554, -0.282, -2.894, 2.089, -1.654, 2.709, 0.668, -3.263, -1.846, 2.133, -0.263, 1.281, 1.319, 0.997]), array([ 1.622, 1.278, 2.925, -0.182, -0.554, -0.283, -2.895, 2.09 , -1.653, 2.708, 0.669, -3.262, -1.847, 2.133, -0.263, 1.281, 1.319, 0.995]), array([ 1.624, 1.274, 2.923, -0.184, -0.553, -0.282, -2.898, 2.093, -1.653, 2.709, 0.668, -3.263, -1.849, 2.133, -0.266, 1.281, 1.32 , 0.994]), array([ 1.623, 1.273, 2.922, -0.183, -0.548, -0.282, -2.899, 2.093, -1.653, 2.707, 0.668, -3.262, -1.848, 2.132, -0.265, 1.278, 1.322, 0.991]), array([ 1.624, 1.271, 2.922, -0.182, -0.549, -0.281, -2.898, 2.092, -1.652, 2.705, 0.668, -3.262, -1.848, 2.133, -0.267, 1.279, 1.323, 0.991]), array([ 1.623, 1.276, 2.921, -0.184, -0.545, -0.281, -2.901, 2.092, -1.651, 2.708, 0.666, -3.264, -1.85 , 2.133, -0.269, 1.279, 1.323, 0.989]), array([ 1.623, 1.273, 2.921, -0.183, -0.548, -0.281, -2.899, 2.093, -1.652, 2.707, 0.665, -3.26 , -1.848, 2.132, -0.264, 1.279, 1.322, 0.992]), array([ 1.622, 1.273, 2.92 , -0.183, -0.55 , -0.281, -2.897, 2.096, -1.651, 2.706, 0.669, -3.262, -1.848, 2.131, -0.268, 1.274, 1.32 , 0.992]), array([ 1.621, 1.274, 2.919, -0.181, -0.551, -0.28 , -2.898, 2.096, -1.651, 2.708, 0.67 , -3.262, -1.849, 2.132, -0.267, 1.273, 1.321, 0.992]), array([ 1.618, 1.271, 2.92 , -0.185, -0.547, -0.278, -2.897, 2.098, -1.654, 2.706, 0.671, -3.262, -1.847, 2.133, -0.269, 1.275, 1.32 , 0.994]), array([ 1.622, 1.273, 2.921, -0.18 , -0.55 , -0.281, -2.898, 2.097, -1.652, 2.706, 0.669, -3.262, -1.848, 2.13 , -0.269, 1.275, 1.319, 0.991]), array([ 1.622, 1.271, 2.919, -0.185, -0.55 , -0.282, -2.899, 2.094, -1.652, 2.708, 0.67 , -3.258, -1.85 , 2.129, -0.269, 1.273, 1.318, 0.99 ]), array([ 1.623, 1.274, 2.918, -0.183, -0.55 , -0.281, -2.896, 2.097, -1.653, 2.707, 0.669, -3.262, -1.848, 2.132, -0.268, 1.275, 1.319, 0.989]), array([ 1.626, 1.274, 2.922, -0.184, -0.55 , -0.282, -2.901, 2.099, -1.651, 2.703, 0.67 , -3.261, -1.846, 2.133, -0.267, 1.272, 1.321, 0.991]), array([ 1.622, 1.274, 2.921, -0.184, -0.55 , -0.28 , -2.896, 2.097, -1.652, 2.707, 0.669, -3.261, -1.848, 2.129, -0.267, 1.274, 1.322, 0.991]), array([ 1.624, 1.273, 2.917, -0.182, -0.547, -0.282, -2.897, 2.096, -1.649, 2.705, 0.672, -3.263, -1.851, 2.129, -0.267, 1.275, 1.319, 0.994]), array([ 1.624, 1.273, 2.917, -0.183, -0.548, -0.28 , -2.897, 2.096, -1.648, 2.705, 0.672, -3.265, -1.85 , 2.129, -0.265, 1.276, 1.318, 0.993]), array([ 1.623, 1.269, 2.915, -0.18 , -0.547, -0.284, -2.895, 2.098, -1.646, 2.707, 0.67 , -3.265, -1.851, 2.128, -0.267, 1.277, 1.321, 0.994]), array([ 1.626, 1.274, 2.916, -0.181, -0.547, -0.281, -2.897, 2.096, -1.648, 2.707, 0.673, -3.262, -1.849, 2.129, -0.268, 1.276, 1.319, 0.994]), array([ 1.629, 1.272, 2.917, -0.181, -0.546, -0.279, -2.895, 2.095, -1.65 , 2.709, 0.671, -3.264, -1.85 , 2.13 , -0.268, 1.273, 1.318, 0.996]), array([ 1.629, 1.272, 2.916, -0.181, -0.547, -0.278, -2.896, 2.095, -1.652, 2.708, 0.671, -3.266, -1.849, 2.128, -0.268, 1.273, 1.319, 0.997]), array([ 1.627, 1.275, 2.917, -0.178, -0.544, -0.279, -2.893, 2.091, -1.65 , 2.708, 0.672, -3.265, -1.849, 2.129, -0.267, 1.272, 1.316, 0.998]), array([ 1.629, 1.271, 2.918, -0.181, -0.548, -0.279, -2.894, 2.095, -1.651, 2.709, 0.672, -3.264, -1.85 , 2.13 , -0.266, 1.274, 1.317, 0.998]), array([ 1.629, 1.275, 2.918, -0.182, -0.547, -0.278, -2.896, 2.095, -1.649, 2.711, 0.67 , -3.267, -1.853, 2.131, -0.271, 1.276, 1.317, 0.998]), array([ 1.629, 1.274, 2.919, -0.182, -0.548, -0.279, -2.896, 2.095, -1.649, 2.711, 0.673, -3.269, -1.853, 2.131, -0.271, 1.275, 1.317, 0.997]), array([ 1.633, 1.277, 2.917, -0.183, -0.544, -0.278, -2.9 , 2.097, -1.647, 2.709, 0.669, -3.267, -1.853, 2.133, -0.272, 1.274, 1.317, 0.998]), array([ 1.635, 1.277, 2.917, -0.182, -0.546, -0.279, -2.9 , 2.095, -1.647, 2.709, 0.669, -3.266, -1.854, 2.132, -0.272, 1.273, 1.316, 0.996]), array([ 1.634, 1.274, 2.916, -0.185, -0.543, -0.277, -2.903, 2.094, -1.647, 2.71 , 0.671, -3.263, -1.856, 2.131, -0.274, 1.273, 1.315, 0.996]), array([ 1.635, 1.276, 2.917, -0.187, -0.541, -0.274, -2.902, 2.095, -1.647, 2.711, 0.671, -3.262, -1.858, 2.127, -0.275, 1.273, 1.318, 0.995]), array([ 1.633, 1.275, 2.916, -0.186, -0.542, -0.279, -2.904, 2.095, -1.648, 2.712, 0.671, -3.264, -1.856, 2.13 , -0.273, 1.272, 1.314, 0.996]), array([ 1.636, 1.274, 2.912, -0.186, -0.542, -0.276, -2.901, 2.094, -1.649, 2.71 , 0.671, -3.263, -1.856, 2.133, -0.275, 1.274, 1.313, 0.992]), array([ 1.635, 1.274, 2.918, -0.186, -0.542, -0.278, -2.903, 2.093, -1.647, 2.71 , 0.67 , -3.264, -1.855, 2.131, -0.274, 1.275, 1.315, 0.996]), array([ 1.634, 1.274, 2.915, -0.183, -0.543, -0.275, -2.906, 2.092, -1.647, 2.713, 0.671, -3.262, -1.858, 2.134, -0.272, 1.274, 1.318, 0.996]), array([ 1.634, 1.274, 2.914, -0.185, -0.543, -0.276, -2.905, 2.091, -1.646, 2.713, 0.671, -3.263, -1.857, 2.134, -0.271, 1.273, 1.319, 0.996]), array([ 1.633, 1.271, 2.913, -0.181, -0.541, -0.276, -2.907, 2.092, -1.644, 2.715, 0.669, -3.264, -1.859, 2.133, -0.274, 1.274, 1.318, 0.996]), array([ 1.631, 1.27 , 2.915, -0.182, -0.541, -0.275, -2.909, 2.092, -1.644, 2.717, 0.665, -3.262, -1.857, 2.134, -0.277, 1.271, 1.319, 0.993]), array([ 1.631, 1.27 , 2.915, -0.181, -0.541, -0.278, -2.908, 2.092, -1.645, 2.717, 0.665, -3.261, -1.858, 2.135, -0.278, 1.271, 1.32 , 0.995]), array([ 1.629, 1.271, 2.914, -0.179, -0.538, -0.275, -2.91 , 2.088, -1.641, 2.717, 0.666, -3.263, -1.857, 2.133, -0.278, 1.27 , 1.317, 0.994]), array([ 1.627, 1.27 , 2.914, -0.18 , -0.538, -0.276, -2.911, 2.087, -1.641, 2.714, 0.664, -3.265, -1.862, 2.133, -0.278, 1.268, 1.317, 0.993]), array([ 1.629, 1.268, 2.915, -0.18 , -0.537, -0.274, -2.909, 2.086, -1.642, 2.715, 0.663, -3.266, -1.863, 2.133, -0.277, 1.267, 1.316, 0.994]), array([ 1.629, 1.266, 2.913, -0.179, -0.536, -0.274, -2.911, 2.084, -1.638, 2.716, 0.663, -3.265, -1.865, 2.132, -0.279, 1.266, 1.314, 0.996]), array([ 1.63 , 1.265, 2.909, -0.178, -0.534, -0.273, -2.91 , 2.083, -1.639, 2.716, 0.663, -3.266, -1.866, 2.134, -0.281, 1.267, 1.312, 0.992]), array([ 1.631, 1.263, 2.911, -0.178, -0.533, -0.274, -2.911, 2.082, -1.638, 2.718, 0.668, -3.27 , -1.866, 2.134, -0.283, 1.265, 1.312, 0.991]), array([ 1.631, 1.264, 2.909, -0.178, -0.535, -0.274, -2.912, 2.081, -1.639, 2.718, 0.667, -3.271, -1.866, 2.133, -0.285, 1.265, 1.313, 0.991]), array([ 1.631, 1.26 , 2.907, -0.177, -0.533, -0.274, -2.913, 2.081, -1.641, 2.715, 0.667, -3.27 , -1.863, 2.13 , -0.283, 1.262, 1.314, 0.991]), array([ 1.63 , 1.263, 2.909, -0.178, -0.536, -0.274, -2.911, 2.08 , -1.64 , 2.719, 0.667, -3.271, -1.866, 2.131, -0.284, 1.266, 1.312, 0.991]), array([ 1.628, 1.263, 2.908, -0.179, -0.531, -0.27 , -2.912, 2.083, -1.639, 2.718, 0.667, -3.274, -1.866, 2.135, -0.286, 1.266, 1.313, 0.994]), array([ 1.63 , 1.265, 2.907, -0.176, -0.528, -0.27 , -2.913, 2.084, -1.635, 2.717, 0.665, -3.277, -1.866, 2.137, -0.288, 1.265, 1.313, 0.995]), array([ 1.627, 1.263, 2.908, -0.178, -0.531, -0.272, -2.913, 2.082, -1.64 , 2.718, 0.667, -3.274, -1.865, 2.137, -0.285, 1.267, 1.312, 0.995]), array([ 1.629, 1.264, 2.909, -0.181, -0.526, -0.271, -2.915, 2.082, -1.64 , 2.721, 0.667, -3.273, -1.867, 2.133, -0.285, 1.268, 1.314, 0.994]), array([ 1.629, 1.262, 2.909, -0.178, -0.531, -0.27 , -2.912, 2.081, -1.639, 2.716, 0.667, -3.273, -1.865, 2.136, -0.287, 1.268, 1.314, 0.994]), array([ 1.628, 1.265, 2.909, -0.175, -0.531, -0.267, -2.915, 2.084, -1.642, 2.717, 0.669, -3.272, -1.867, 2.135, -0.288, 1.266, 1.311, 0.994]), array([ 1.628, 1.264, 2.91 , -0.175, -0.53 , -0.268, -2.915, 2.085, -1.642, 2.715, 0.669, -3.273, -1.866, 2.134, -0.289, 1.267, 1.309, 0.994]), array([ 1.628, 1.266, 2.908, -0.18 , -0.53 , -0.266, -2.915, 2.082, -1.642, 2.714, 0.671, -3.271, -1.866, 2.137, -0.289, 1.264, 1.308, 0.996]), array([ 1.627, 1.264, 2.91 , -0.176, -0.531, -0.267, -2.916, 2.084, -1.642, 2.718, 0.668, -3.272, -1.866, 2.136, -0.289, 1.265, 1.311, 0.993]), array([ 1.628, 1.262, 2.908, -0.177, -0.533, -0.264, -2.917, 2.086, -1.64 , 2.716, 0.67 , -3.274, -1.867, 2.135, -0.285, 1.268, 1.309, 0.993]), array([ 1.627, 1.264, 2.909, -0.176, -0.531, -0.268, -2.915, 2.084, -1.642, 2.715, 0.669, -3.273, -1.87 , 2.135, -0.287, 1.265, 1.311, 0.994]), array([ 1.63 , 1.262, 2.907, -0.176, -0.532, -0.268, -2.915, 2.088, -1.643, 2.718, 0.67 , -3.27 , -1.869, 2.137, -0.291, 1.267, 1.312, 0.996]), array([ 1.628, 1.262, 2.906, -0.176, -0.532, -0.269, -2.917, 2.088, -1.641, 2.717, 0.671, -3.269, -1.869, 2.137, -0.291, 1.268, 1.312, 0.995]), array([ 1.629, 1.265, 2.907, -0.176, -0.531, -0.268, -2.914, 2.09 , -1.646, 2.716, 0.672, -3.271, -1.867, 2.139, -0.29 , 1.268, 1.315, 0.993]), array([ 1.629, 1.264, 2.909, -0.177, -0.533, -0.269, -2.915, 2.088, -1.642, 2.718, 0.67 , -3.27 , -1.87 , 2.138, -0.291, 1.268, 1.312, 0.997]), array([ 1.629, 1.26 , 2.909, -0.175, -0.531, -0.268, -2.918, 2.089, -1.642, 2.716, 0.671, -3.269, -1.867, 2.134, -0.289, 1.264, 1.315, 1. ]), array([ 1.63 , 1.261, 2.908, -0.175, -0.532, -0.269, -2.916, 2.087, -1.643, 2.718, 0.673, -3.272, -1.869, 2.137, -0.292, 1.266, 1.313, 0.995]), array([ 1.627, 1.259, 2.907, -0.174, -0.532, -0.267, -2.914, 2.085, -1.642, 2.721, 0.673, -3.272, -1.872, 2.135, -0.293, 1.266, 1.311, 0.997]), array([ 1.63 , 1.26 , 2.906, -0.171, -0.531, -0.266, -2.915, 2.085, -1.637, 2.721, 0.672, -3.274, -1.874, 2.135, -0.295, 1.265, 1.31 , 0.997]), array([ 1.631, 1.26 , 2.904, -0.172, -0.532, -0.266, -2.916, 2.085, -1.639, 2.721, 0.671, -3.275, -1.873, 2.134, -0.296, 1.265, 1.311, 0.998]), array([ 1.634, 1.259, 2.905, -0.17 , -0.536, -0.268, -2.916, 2.083, -1.638, 2.722, 0.672, -3.272, -1.875, 2.131, -0.295, 1.263, 1.309, 0.996]), array([ 1.632, 1.261, 2.905, -0.173, -0.53 , -0.266, -2.917, 2.084, -1.639, 2.723, 0.671, -3.275, -1.874, 2.132, -0.296, 1.266, 1.311, 0.998]), array([ 1.631, 1.259, 2.903, -0.172, -0.528, -0.268, -2.92 , 2.083, -1.64 , 2.725, 0.671, -3.277, -1.875, 2.135, -0.294, 1.268, 1.308, 1. ]), array([ 1.631, 1.262, 2.903, -0.173, -0.53 , -0.267, -2.917, 2.086, -1.64 , 2.724, 0.671, -3.275, -1.874, 2.132, -0.295, 1.264, 1.31 , 0.998]), array([ 1.63 , 1.262, 2.904, -0.171, -0.527, -0.262, -2.916, 2.085, -1.639, 2.723, 0.672, -3.277, -1.875, 2.132, -0.298, 1.267, 1.315, 0.998]), array([ 1.63 , 1.263, 2.904, -0.171, -0.527, -0.261, -2.917, 2.085, -1.641, 2.722, 0.674, -3.276, -1.876, 2.133, -0.299, 1.266, 1.313, 0.998]), array([ 1.63 , 1.262, 2.902, -0.176, -0.525, -0.26 , -2.915, 2.083, -1.638, 2.721, 0.674, -3.277, -1.875, 2.133, -0.301, 1.265, 1.312, 1. ]), array([ 1.63 , 1.263, 2.903, -0.175, -0.524, -0.261, -2.915, 2.082, -1.639, 2.721, 0.674, -3.276, -1.875, 2.134, -0.303, 1.264, 1.313, 1. ]), array([ 1.628, 1.261, 2.905, -0.177, -0.524, -0.258, -2.917, 2.083, -1.638, 2.724, 0.671, -3.275, -1.874, 2.135, -0.305, 1.262, 1.313, 0.998]), array([ 1.631, 1.264, 2.903, -0.175, -0.524, -0.261, -2.914, 2.082, -1.638, 2.723, 0.674, -3.275, -1.872, 2.133, -0.303, 1.265, 1.313, 1.001]), array([ 1.63 , 1.262, 2.905, -0.175, -0.522, -0.263, -2.914, 2.084, -1.64 , 2.719, 0.672, -3.277, -1.875, 2.131, -0.306, 1.266, 1.31 , 1. ]), array([ 1.629, 1.265, 2.903, -0.176, -0.524, -0.261, -2.914, 2.08 , -1.639, 2.722, 0.673, -3.277, -1.875, 2.134, -0.303, 1.264, 1.312, 0.998]), array([ 1.628, 1.264, 2.905, -0.174, -0.523, -0.26 , -2.916, 2.079, -1.638, 2.72 , 0.674, -3.277, -1.873, 2.131, -0.3 , 1.261, 1.313, 1.002]), array([ 1.629, 1.264, 2.907, -0.174, -0.523, -0.259, -2.914, 2.079, -1.639, 2.72 , 0.673, -3.278, -1.873, 2.131, -0.299, 1.26 , 1.313, 1.003]), array([ 1.626, 1.267, 2.909, -0.176, -0.525, -0.26 , -2.917, 2.08 , -1.635, 2.721, 0.674, -3.278, -1.875, 2.131, -0.301, 1.263, 1.313, 1.005]), array([ 1.627, 1.264, 2.904, -0.174, -0.523, -0.259, -2.915, 2.079, -1.638, 2.72 , 0.672, -3.275, -1.874, 2.13 , -0.299, 1.262, 1.313, 1.003]), array([ 1.628, 1.268, 2.903, -0.175, -0.521, -0.258, -2.916, 2.081, -1.638, 2.716, 0.67 , -3.274, -1.873, 2.132, -0.298, 1.262, 1.314, 1.004]), array([ 1.628, 1.264, 2.904, -0.173, -0.523, -0.258, -2.915, 2.079, -1.636, 2.72 , 0.671, -3.276, -1.875, 2.13 , -0.3 , 1.261, 1.312, 1.003]), array([ 1.629, 1.263, 2.903, -0.172, -0.523, -0.257, -2.915, 2.077, -1.635, 2.721, 0.675, -3.274, -1.878, 2.127, -0.302, 1.26 , 1.311, 1.004]), array([ 1.629, 1.263, 2.901, -0.173, -0.525, -0.257, -2.916, 2.076, -1.637, 2.721, 0.674, -3.275, -1.878, 2.126, -0.303, 1.26 , 1.312, 1.004]), array([ 1.628, 1.261, 2.901, -0.171, -0.52 , -0.258, -2.918, 2.075, -1.636, 2.722, 0.676, -3.275, -1.879, 2.129, -0.301, 1.261, 1.308, 1.007]), array([ 1.628, 1.26 , 2.902, -0.17 , -0.521, -0.257, -2.917, 2.073, -1.635, 2.721, 0.675, -3.275, -1.879, 2.131, -0.302, 1.262, 1.309, 1.007]), array([ 1.625, 1.261, 2.899, -0.169, -0.523, -0.258, -2.915, 2.076, -1.635, 2.721, 0.677, -3.277, -1.878, 2.131, -0.303, 1.258, 1.306, 1.008]), array([ 1.629, 1.261, 2.902, -0.172, -0.522, -0.259, -2.918, 2.074, -1.636, 2.722, 0.675, -3.274, -1.879, 2.13 , -0.301, 1.26 , 1.307, 1.007]), array([ 1.627, 1.258, 2.9 , -0.171, -0.519, -0.26 , -2.915, 2.074, -1.633, 2.725, 0.674, -3.277, -1.88 , 2.128, -0.301, 1.262, 1.312, 1.007]), array([ 1.628, 1.262, 2.901, -0.169, -0.521, -0.26 , -2.917, 2.075, -1.637, 2.722, 0.676, -3.275, -1.88 , 2.129, -0.3 , 1.262, 1.309, 1.007]), array([ 1.626, 1.26 , 2.903, -0.168, -0.521, -0.254, -2.921, 2.076, -1.637, 2.724, 0.674, -3.275, -1.879, 2.13 , -0.303, 1.26 , 1.308, 1.004]), array([ 1.626, 1.258, 2.905, -0.168, -0.518, -0.255, -2.92 , 2.078, -1.638, 2.722, 0.673, -3.276, -1.879, 2.127, -0.306, 1.262, 1.305, 1.004]), array([ 1.626, 1.257, 2.905, -0.168, -0.518, -0.255, -2.921, 2.079, -1.638, 2.721, 0.673, -3.275, -1.879, 2.127, -0.307, 1.261, 1.306, 1.006]), array([ 1.627, 1.26 , 2.904, -0.169, -0.514, -0.251, -2.923, 2.079, -1.638, 2.719, 0.673, -3.274, -1.88 , 2.128, -0.309, 1.261, 1.306, 1.006]), array([ 1.625, 1.256, 2.906, -0.169, -0.518, -0.255, -2.922, 2.079, -1.639, 2.72 , 0.673, -3.275, -1.882, 2.127, -0.306, 1.261, 1.307, 1.006]), array([ 1.622, 1.255, 2.906, -0.171, -0.518, -0.254, -2.921, 2.078, -1.642, 2.721, 0.677, -3.273, -1.88 , 2.126, -0.307, 1.262, 1.307, 1.007]), array([ 1.624, 1.258, 2.907, -0.169, -0.518, -0.257, -2.921, 2.078, -1.639, 2.72 , 0.672, -3.274, -1.882, 2.127, -0.308, 1.26 , 1.308, 1.007]), array([ 1.624, 1.258, 2.908, -0.171, -0.521, -0.253, -2.923, 2.081, -1.636, 2.721, 0.675, -3.277, -1.884, 2.127, -0.306, 1.263, 1.306, 1.008]), array([ 1.624, 1.257, 2.907, -0.169, -0.518, -0.254, -2.922, 2.078, -1.639, 2.719, 0.673, -3.276, -1.881, 2.125, -0.305, 1.259, 1.307, 1.007]), array([ 1.628, 1.256, 2.908, -0.169, -0.519, -0.253, -2.919, 2.079, -1.643, 2.722, 0.672, -3.277, -1.883, 2.128, -0.306, 1.259, 1.307, 1.008]), array([ 1.626, 1.256, 2.906, -0.169, -0.518, -0.256, -2.922, 2.079, -1.638, 2.72 , 0.675, -3.276, -1.882, 2.127, -0.307, 1.259, 1.307, 1.005]), array([ 1.625, 1.256, 2.908, -0.17 , -0.517, -0.258, -2.924, 2.081, -1.64 , 2.719, 0.675, -3.279, -1.878, 2.13 , -0.306, 1.26 , 1.309, 1.003]), array([ 1.626, 1.255, 2.905, -0.17 , -0.516, -0.256, -2.922, 2.078, -1.637, 2.722, 0.675, -3.277, -1.883, 2.126, -0.307, 1.259, 1.308, 1.005]), array([ 1.626, 1.251, 2.905, -0.169, -0.516, -0.254, -2.923, 2.079, -1.634, 2.723, 0.672, -3.277, -1.884, 2.125, -0.31 , 1.26 , 1.31 , 1.004]), array([ 1.626, 1.251, 2.904, -0.165, -0.513, -0.255, -2.923, 2.081, -1.634, 2.724, 0.672, -3.278, -1.887, 2.123, -0.309, 1.262, 1.312, 1.003]), array([ 1.625, 1.251, 2.906, -0.168, -0.515, -0.254, -2.921, 2.08 , -1.633, 2.723, 0.673, -3.276, -1.884, 2.127, -0.309, 1.259, 1.309, 1.003]), array([ 1.624, 1.25 , 2.902, -0.168, -0.518, -0.253, -2.922, 2.08 , -1.633, 2.723, 0.672, -3.28 , -1.884, 2.125, -0.313, 1.257, 1.309, 1.005]), array([ 1.624, 1.249, 2.901, -0.168, -0.517, -0.254, -2.924, 2.079, -1.633, 2.723, 0.672, -3.281, -1.884, 2.127, -0.313, 1.258, 1.308, 1.007]), array([ 1.625, 1.248, 2.9 , -0.171, -0.517, -0.255, -2.925, 2.081, -1.632, 2.725, 0.67 , -3.279, -1.885, 2.125, -0.313, 1.255, 1.305, 1.006]), array([ 1.625, 1.247, 2.901, -0.172, -0.516, -0.256, -2.924, 2.081, -1.632, 2.723, 0.67 , -3.28 , -1.885, 2.124, -0.314, 1.256, 1.303, 1.007]), array([ 1.627, 1.246, 2.898, -0.174, -0.517, -0.257, -2.922, 2.078, -1.628, 2.722, 0.669, -3.28 , -1.885, 2.126, -0.314, 1.256, 1.306, 1.008]), array([ 1.625, 1.247, 2.9 , -0.172, -0.516, -0.255, -2.923, 2.08 , -1.632, 2.724, 0.671, -3.278, -1.885, 2.123, -0.315, 1.256, 1.303, 1.007]), array([ 1.623, 1.244, 2.902, -0.175, -0.515, -0.256, -2.925, 2.082, -1.632, 2.724, 0.67 , -3.281, -1.881, 2.125, -0.316, 1.257, 1.305, 1.005]), array([ 1.626, 1.242, 2.904, -0.175, -0.515, -0.254, -2.923, 2.083, -1.635, 2.727, 0.668, -3.283, -1.882, 2.127, -0.316, 1.255, 1.304, 1.006]), array([ 1.623, 1.244, 2.901, -0.174, -0.513, -0.256, -2.925, 2.081, -1.634, 2.724, 0.669, -3.28 , -1.88 , 2.126, -0.317, 1.255, 1.305, 1.004]), array([ 1.624, 1.246, 2.901, -0.176, -0.511, -0.251, -2.927, 2.082, -1.632, 2.722, 0.669, -3.28 , -1.881, 2.127, -0.319, 1.256, 1.304, 1.004]), array([ 1.623, 1.244, 2.9 , -0.175, -0.514, -0.256, -2.924, 2.081, -1.634, 2.725, 0.669, -3.28 , -1.881, 2.127, -0.318, 1.257, 1.304, 1.002]), array([ 1.621, 1.244, 2.901, -0.174, -0.513, -0.255, -2.924, 2.077, -1.632, 2.725, 0.667, -3.283, -1.878, 2.124, -0.316, 1.255, 1.303, 0.999]), array([ 1.622, 1.243, 2.9 , -0.176, -0.514, -0.257, -2.924, 2.08 , -1.635, 2.723, 0.669, -3.281, -1.883, 2.127, -0.317, 1.256, 1.304, 1.001]), array([ 1.622, 1.246, 2.902, -0.174, -0.513, -0.259, -2.924, 2.079, -1.634, 2.726, 0.667, -3.279, -1.881, 2.128, -0.322, 1.255, 1.305, 1.003]), array([ 1.625, 1.244, 2.901, -0.174, -0.514, -0.257, -2.925, 2.08 , -1.633, 2.725, 0.672, -3.281, -1.881, 2.126, -0.319, 1.255, 1.304, 1.001]), array([ 1.626, 1.241, 2.901, -0.172, -0.517, -0.257, -2.927, 2.082, -1.634, 2.722, 0.67 , -3.28 , -1.879, 2.128, -0.32 , 1.255, 1.303, 0.998]), array([ 1.625, 1.243, 2.9 , -0.172, -0.512, -0.256, -2.925, 2.081, -1.632, 2.725, 0.671, -3.281, -1.883, 2.126, -0.319, 1.256, 1.305, 1. ]), array([ 1.625, 1.242, 2.898, -0.172, -0.508, -0.259, -2.925, 2.084, -1.634, 2.727, 0.672, -3.284, -1.882, 2.124, -0.319, 1.257, 1.307, 0.999]), array([ 1.626, 1.243, 2.9 , -0.173, -0.513, -0.256, -2.927, 2.079, -1.633, 2.725, 0.67 , -3.282, -1.883, 2.124, -0.32 , 1.257, 1.306, 1. ]), array([ 1.627, 1.24 , 2.898, -0.174, -0.512, -0.257, -2.923, 2.079, -1.628, 2.724, 0.67 , -3.281, -1.882, 2.128, -0.319, 1.257, 1.308, 1.001]), array([ 1.626, 1.242, 2.902, -0.173, -0.511, -0.257, -2.925, 2.08 , -1.633, 2.725, 0.67 , -3.279, -1.882, 2.125, -0.317, 1.257, 1.306, 1. ]), array([ 1.625, 1.244, 2.903, -0.175, -0.513, -0.256, -2.925, 2.081, -1.63 , 2.728, 0.671, -3.282, -1.885, 2.127, -0.319, 1.261, 1.303, 0.997]), array([ 1.625, 1.242, 2.898, -0.172, -0.513, -0.255, -2.924, 2.081, -1.633, 2.726, 0.671, -3.28 , -1.881, 2.125, -0.319, 1.258, 1.304, 1. ]), array([ 1.623, 1.239, 2.899, -0.173, -0.512, -0.254, -2.924, 2.078, -1.633, 2.728, 0.674, -3.279, -1.884, 2.122, -0.322, 1.257, 1.305, 1.001]), array([ 1.623, 1.238, 2.899, -0.172, -0.512, -0.254, -2.925, 2.077, -1.634, 2.728, 0.674, -3.279, -1.884, 2.124, -0.322, 1.257, 1.303, 1.002]), array([ 1.627, 1.237, 2.901, -0.173, -0.512, -0.251, -2.921, 2.078, -1.636, 2.731, 0.672, -3.281, -1.885, 2.124, -0.322, 1.255, 1.303, 1.003]), array([ 1.626, 1.237, 2.902, -0.171, -0.512, -0.251, -2.92 , 2.077, -1.637, 2.729, 0.673, -3.282, -1.885, 2.125, -0.323, 1.257, 1.304, 1.003]), array([ 1.625, 1.238, 2.901, -0.17 , -0.513, -0.249, -2.923, 2.077, -1.637, 2.734, 0.673, -3.281, -1.885, 2.127, -0.32 , 1.254, 1.307, 1.002]), array([ 1.627, 1.236, 2.901, -0.171, -0.514, -0.254, -2.92 , 2.078, -1.636, 2.731, 0.672, -3.281, -1.886, 2.124, -0.321, 1.255, 1.303, 1.002]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.628, 1.239, 2.9 , -0.172, -0.508, -0.247, -2.923, 2.078, -1.635, 2.729, 0.671, -3.281, -1.887, 2.125, -0.324, 1.254, 1.303, 1.004]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.629, 1.237, 2.896, -0.172, -0.499, -0.243, -2.924, 2.079, -1.63 , 2.73 , 0.67 , -3.282, -1.891, 2.126, -0.329, 1.256, 1.303, 1.005]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.631, 1.232, 2.891, -0.172, -0.492, -0.238, -2.927, 2.077, -1.625, 2.732, 0.67 , -3.28 , -1.898, 2.127, -0.337, 1.253, 1.301, 1.008]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.637, 1.212, 2.873, -0.173, -0.462, -0.219, -2.939, 2.07 , -1.604, 2.741, 0.673, -3.275, -1.924, 2.127, -0.366, 1.24 , 1.294, 1.019]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.658, 1.149, 2.814, -0.173, -0.37 , -0.157, -2.977, 2.048, -1.537, 2.768, 0.682, -3.257, -2.008, 2.127, -0.461, 1.198, 1.271, 1.055]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.682, 1.077, 2.771, -0.159, -0.28 , -0.083, -3.01 , 2.015, -1.453, 2.808, 0.691, -3.241, -2.091, 2.133, -0.584, 1.143, 1.22 , 1.118]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.703, 1.009, 2.733, -0.151, -0.182, 0.009, -3.051, 1.99 , -1.372, 2.837, 0.697, -3.219, -2.163, 2.148, -0.729, 1.086, 1.173, 1.176]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.695, 1.011, 2.728, -0.157, -0.171, 0.024, -3.05 , 1.994, -1.365, 2.818, 0.698, -3.223, -2.153, 2.149, -0.739, 1.1 , 1.191, 1.157]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.699, 1.01 , 2.731, -0.154, -0.176, 0.017, -3.051, 1.992, -1.368, 2.828, 0.697, -3.221, -2.158, 2.149, -0.734, 1.093, 1.182, 1.167]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.696, 1. , 2.725, -0.143, -0.178, 0.025, -3.036, 1.983, -1.351, 2.816, 0.708, -3.238, -2.157, 2.139, -0.735, 1.104, 1.193, 1.156]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.697, 1.004, 2.727, -0.147, -0.177, 0.021, -3.042, 1.987, -1.358, 2.821, 0.704, -3.231, -2.157, 2.143, -0.735, 1.099, 1.188, 1.16 ]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.691, 0.996, 2.73 , -0.139, -0.189, 0.036, -3.037, 1.978, -1.35 , 2.804, 0.719, -3.238, -2.15 , 2.136, -0.745, 1.096, 1.194, 1.152]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.693, 0.999, 2.729, -0.141, -0.186, 0.032, -3.039, 1.98 , -1.352, 2.809, 0.715, -3.236, -2.152, 2.138, -0.742, 1.097, 1.192, 1.154]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.683, 0.995, 2.736, -0.136, -0.19 , 0.039, -3.034, 1.977, -1.344, 2.804, 0.717, -3.244, -2.147, 2.139, -0.751, 1.098, 1.186, 1.159]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.67 , 0.993, 2.738, -0.141, -0.186, 0.043, -3.034, 1.975, -1.341, 2.798, 0.718, -3.245, -2.146, 2.138, -0.757, 1.097, 1.184, 1.162]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.657, 0.988, 2.739, -0.144, -0.183, 0.045, -3.034, 1.97 , -1.337, 2.794, 0.72 , -3.247, -2.147, 2.135, -0.761, 1.095, 1.181, 1.167]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.602, 0.968, 2.741, -0.159, -0.169, 0.053, -3.031, 1.952, -1.319, 2.775, 0.728, -3.256, -2.154, 2.122, -0.779, 1.089, 1.171, 1.188]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.576, 0.951, 2.74 , -0.163, -0.164, 0.052, -3.026, 1.935, -1.307, 2.769, 0.737, -3.263, -2.166, 2.108, -0.784, 1.08 , 1.164, 1.204]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.485, 0.896, 2.737, -0.192, -0.136, 0.064, -3.017, 1.884, -1.276, 2.729, 0.764, -3.274, -2.197, 2.063, -0.816, 1.042, 1.147, 1.251]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.559, 0.94 , 2.739, -0.169, -0.158, 0.055, -3.024, 1.926, -1.301, 2.761, 0.742, -3.265, -2.172, 2.099, -0.791, 1.072, 1.16 , 1.213]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.557, 0.94 , 2.739, -0.17 , -0.157, 0.056, -3.025, 1.925, -1.301, 2.76 , 0.742, -3.265, -2.172, 2.099, -0.792, 1.072, 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.551, 0.938, 2.74 , -0.174, -0.153, 0.059, -3.025, 1.924, -1.3 , 2.755, 0.742, -3.263, -2.171, 2.097, -0.796, 1.07 , 1.161, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.554, 0.938, 2.743, -0.177, -0.14 , 0.062, -3.019, 1.926, -1.295, 2.753, 0.737, -3.264, -2.171, 2.099, -0.802, 1.07 , 1.162, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.553, 0.938, 2.742, -0.176, -0.145, 0.06 , -3.022, 1.925, -1.298, 2.754, 0.739, -3.264, -2.171, 2.098, -0.8 , 1.07 , 1.161, 1.214]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.558, 0.935, 2.745, -0.176, -0.138, 0.062, -3.016, 1.924, -1.294, 2.752, 0.738, -3.263, -2.174, 2.096, -0.804, 1.064, 1.16 , 1.218]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.578, 0.925, 2.758, -0.177, -0.114, 0.068, -2.997, 1.919, -1.284, 2.746, 0.734, -3.263, -2.183, 2.088, -0.819, 1.043, 1.154, 1.231]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.6 , 0.911, 2.775, -0.185, -0.082, 0.081, -2.978, 1.912, -1.276, 2.73 , 0.73 , -3.255, -2.192, 2.076, -0.845, 1.009, 1.15 , 1.245]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.609, 0.896, 2.782, -0.191, -0.058, 0.088, -2.962, 1.902, -1.266, 2.719, 0.731, -3.253, -2.202, 2.062, -0.859, 0.986, 1.148, 1.258]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.605, 0.903, 2.779, -0.188, -0.069, 0.085, -2.969, 1.906, -1.271, 2.724, 0.73 , -3.254, -2.197, 2.069, -0.853, 0.996, 1.149, 1.252]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.6 , 0.901, 2.778, -0.189, -0.068, 0.085, -2.969, 1.905, -1.269, 2.724, 0.731, -3.255, -2.198, 2.068, -0.852, 0.997, 1.149, 1.254]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.585, 0.897, 2.776, -0.192, -0.065, 0.083, -2.968, 1.901, -1.264, 2.723, 0.732, -3.258, -2.199, 2.065, -0.848, 1.001, 1.147, 1.258]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.561, 0.89 , 2.774, -0.198, -0.064, 0.085, -2.972, 1.894, -1.262, 2.718, 0.737, -3.259, -2.198, 2.06 , -0.847, 1.002, 1.145, 1.264]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.521, 0.879, 2.772, -0.208, -0.062, 0.087, -2.978, 1.883, -1.257, 2.709, 0.744, -3.261, -2.196, 2.052, -0.844, 1.004, 1.141, 1.273]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.45 , 0.853, 2.773, -0.215, -0.071, 0.088, -2.984, 1.855, -1.246, 2.697, 0.766, -3.273, -2.198, 2.036, -0.838, 1. , 1.122, 1.302]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.495, 0.87 , 2.772, -0.21 , -0.065, 0.087, -2.98 , 1.872, -1.253, 2.705, 0.752, -3.266, -2.197, 2.046, -0.842, 1.003, 1.134, 1.284]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.866, 2.78 , -0.207, -0.063, 0.092, -2.974, 1.871, -1.246, 2.703, 0.753, -3.271, -2.195, 2.046, -0.847, 1.003, 1.129, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.494, 0.862, 2.789, -0.207, -0.06 , 0.101, -2.97 , 1.867, -1.242, 2.695, 0.756, -3.273, -2.191, 2.044, -0.856, 0.999, 1.126, 1.287]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.498, 0.848, 2.804, -0.204, -0.054, 0.114, -2.958, 1.857, -1.231, 2.686, 0.765, -3.279, -2.188, 2.036, -0.87 , 0.991, 1.12 , 1.29 ]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.845, 2.805, -0.203, -0.052, 0.114, -2.955, 1.855, -1.228, 2.686, 0.766, -3.28 , -2.189, 2.034, -0.87 , 0.99 , 1.119, 1.292]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.499, 0.843, 2.806, -0.203, -0.05 , 0.114, -2.953, 1.853, -1.226, 2.687, 0.766, -3.281, -2.191, 2.032, -0.87 , 0.99 , 1.119, 1.294]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.497, 0.836, 2.806, -0.209, -0.04 , 0.115, -2.951, 1.849, -1.225, 2.687, 0.766, -3.278, -2.194, 2.027, -0.87 , 0.987, 1.119, 1.297]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.495, 0.831, 2.807, -0.215, -0.032, 0.115, -2.95 , 1.845, -1.223, 2.687, 0.766, -3.275, -2.197, 2.022, -0.87 , 0.986, 1.119, 1.3 ]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.488, 0.815, 2.814, -0.228, -0.019, 0.114, -2.951, 1.832, -1.225, 2.691, 0.768, -3.267, -2.206, 2.013, -0.869, 0.972, 1.11 , 1.317]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.477, 0.804, 2.827, -0.237, -0.006, 0.117, -2.948, 1.826, -1.22 , 2.692, 0.767, -3.265, -2.208, 2.012, -0.873, 0.967, 1.095, 1.331]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.471e+00, 7.920e-01, 2.837e+00, -2.375e-01, -5.899e-04, 1.224e-01, -2.942e+00, 1.816e+00, -1.212e+00, 2.689e+00, 7.735e-01, -3.269e+00, -2.207e+00, 2.006e+00, -8.771e-01, 9.667e-01, 1.086e+00, 1.338e+00]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.454, 0.759, 2.864, -0.239, 0.013, 0.136, -2.927, 1.791, -1.192, 2.683, 0.79 , -3.281, -2.205, 1.992, -0.889, 0.967, 1.064, 1.357]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.433, 0.723, 2.892, -0.246, 0.031, 0.156, -2.914, 1.762, -1.174, 2.67 , 0.808, -3.288, -2.199, 1.974, -0.905, 0.966, 1.044, 1.373]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.425, 0.703, 2.898, -0.252, 0.038, 0.158, -2.914, 1.744, -1.173, 2.669, 0.819, -3.287, -2.201, 1.961, -0.905, 0.967, 1.04 , 1.382]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.414, 0.68 , 2.907, -0.263, 0.052, 0.158, -2.913, 1.727, -1.168, 2.674, 0.827, -3.284, -2.204, 1.952, -0.902, 0.975, 1.029, 1.396]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.409, 0.676, 2.911, -0.267, 0.056, 0.159, -2.913, 1.724, -1.167, 2.675, 0.828, -3.283, -2.204, 1.953, -0.902, 0.978, 1.024, 1.399]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.402, 0.667, 2.919, -0.273, 0.062, 0.16 , -2.915, 1.718, -1.166, 2.676, 0.829, -3.281, -2.204, 1.953, -0.902, 0.983, 1.015, 1.405]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.396, 0.657, 2.931, -0.277, 0.063, 0.159, -2.918, 1.711, -1.165, 2.68 , 0.833, -3.282, -2.205, 1.957, -0.899, 0.99 , 0.996, 1.417]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.399, 0.661, 2.926, -0.276, 0.063, 0.159, -2.917, 1.713, -1.165, 2.678, 0.831, -3.282, -2.205, 1.956, -0.9 , 0.987, 1.004, 1.412]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.654, 2.936, -0.278, 0.062, 0.163, -2.922, 1.707, -1.169, 2.677, 0.836, -3.282, -2.201, 1.956, -0.903, 0.994, 0.995, 1.414]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.398, 0.658, 2.931, -0.277, 0.062, 0.161, -2.919, 1.71 , -1.167, 2.678, 0.834, -3.282, -2.203, 1.956, -0.902, 0.99 , 0.999, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.4 , 0.653, 2.935, -0.277, 0.062, 0.162, -2.921, 1.706, -1.167, 2.679, 0.837, -3.283, -2.201, 1.955, -0.903, 0.998, 0.996, 1.413]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.403, 0.646, 2.941, -0.277, 0.062, 0.164, -2.922, 1.7 , -1.166, 2.68 , 0.842, -3.284, -2.2 , 1.955, -0.904, 1.008, 0.992, 1.412]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.405, 0.634, 2.951, -0.284, 0.071, 0.168, -2.923, 1.692, -1.163, 2.681, 0.845, -3.281, -2.195, 1.955, -0.909, 1.028, 0.986, 1.409]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.403, 0.643, 2.943, -0.279, 0.065, 0.165, -2.922, 1.698, -1.165, 2.68 , 0.842, -3.283, -2.199, 1.955, -0.906, 1.013, 0.99 , 1.412]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.64 , 2.944, -0.281, 0.068, 0.163, -2.922, 1.697, -1.164, 2.683, 0.842, -3.282, -2.2 , 1.955, -0.904, 1.016, 0.988, 1.413]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.404, 0.641, 2.944, -0.28 , 0.066, 0.164, -2.922, 1.698, -1.165, 2.682, 0.842, -3.282, -2.199, 1.955, -0.905, 1.015, 0.989, 1.412]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.64 , 2.945, -0.282, 0.068, 0.164, -2.923, 1.696, -1.166, 2.683, 0.842, -3.281, -2.2 , 1.955, -0.904, 1.015, 0.988, 1.414]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.638, 2.946, -0.284, 0.069, 0.163, -2.924, 1.696, -1.166, 2.683, 0.842, -3.28 , -2.201, 1.955, -0.904, 1.016, 0.987, 1.415]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.634, 2.948, -0.286, 0.069, 0.162, -2.927, 1.692, -1.168, 2.686, 0.844, -3.278, -2.203, 1.955, -0.902, 1.015, 0.983, 1.418]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.403, 0.637, 2.946, -0.285, 0.069, 0.163, -2.925, 1.694, -1.167, 2.684, 0.843, -3.279, -2.202, 1.955, -0.903, 1.016, 0.985, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.635, 2.948, -0.285, 0.069, 0.164, -2.925, 1.693, -1.167, 2.684, 0.844, -3.279, -2.201, 1.954, -0.903, 1.015, 0.984, 1.416]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.402, 0.633, 2.949, -0.285, 0.07 , 0.164, -2.925, 1.692, -1.166, 2.684, 0.845, -3.28 , -2.202, 1.954, -0.904, 1.016, 0.983, 1.417]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.4 , 0.626, 2.956, -0.286, 0.072, 0.167, -2.923, 1.686, -1.163, 2.684, 0.85 , -3.281, -2.202, 1.952, -0.905, 1.017, 0.977, 1.419]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.398, 0.618, 2.962, -0.289, 0.076, 0.17 , -2.92 , 1.682, -1.159, 2.684, 0.852, -3.281, -2.202, 1.951, -0.906, 1.02 , 0.972, 1.421]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.394, 0.604, 2.972, -0.293, 0.082, 0.172, -2.916, 1.673, -1.153, 2.686, 0.858, -3.282, -2.205, 1.949, -0.905, 1.023, 0.962, 1.427]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.396, 0.613, 2.966, -0.29 , 0.079, 0.171, -2.918, 1.679, -1.156, 2.684, 0.855, -3.281, -2.203, 1.95 , -0.906, 1.021, 0.968, 1.423]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.395, 0.61 , 2.968, -0.291, 0.079, 0.171, -2.919, 1.677, -1.156, 2.685, 0.856, -3.281, -2.204, 1.95 , -0.906, 1.021, 0.966, 1.424]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.393, 0.604, 2.972, -0.294, 0.081, 0.172, -2.919, 1.672, -1.156, 2.685, 0.859, -3.281, -2.205, 1.948, -0.905, 1.021, 0.962, 1.428]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.388, 0.596, 2.977, -0.299, 0.086, 0.172, -2.919, 1.667, -1.154, 2.686, 0.861, -3.278, -2.207, 1.948, -0.903, 1.023, 0.955, 1.433]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.389, 0.598, 2.975, -0.297, 0.085, 0.172, -2.919, 1.669, -1.155, 2.686, 0.86 , -3.279, -2.206, 1.948, -0.904, 1.023, 0.957, 1.431]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.387, 0.592, 2.979, -0.3 , 0.087, 0.171, -2.918, 1.665, -1.153, 2.688, 0.863, -3.279, -2.209, 1.948, -0.901, 1.026, 0.952, 1.435]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.389, 0.597, 2.976, -0.298, 0.085, 0.172, -2.919, 1.668, -1.154, 2.687, 0.861, -3.279, -2.207, 1.948, -0.903, 1.023, 0.956, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.388, 0.596, 2.977, -0.298, 0.085, 0.172, -2.919, 1.667, -1.154, 2.686, 0.862, -3.279, -2.207, 1.948, -0.903, 1.025, 0.955, 1.432]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.593, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.665, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.386, 0.591, 2.98 , -0.3 , 0.087, 0.173, -2.92 , 1.663, -1.154, 2.686, 0.864, -3.278, -2.205, 1.948, -0.903, 1.032, 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.863, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.299, 0.086, 0.172, -2.92 , 1.664, -1.154, 2.686, 0.864, -3.279, -2.206, 1.948, -0.903, 1.031, 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.952, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433]), array([ 1.387, 0.592, 2.979, -0.3 , 0.086, 0.172, -2.92 , 1.664, -1.154, 2.687, 0.864, -3.279, -2.206, 1.948, -0.903, 1.03 , 0.953, 1.433])]), ref=array([0., 0., 0., 0., 0., 0., 0., 0.]))" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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m83efimys2fPHixcuBDJyckQBAGbN292OC+KIl544QWMGTMGoaGhyM/Px5kzZxyuaWlpwSOPPIKoqCjExMTgu9/9Ljo7Ox2uOXbsGObOnYuQkBCkpqbilVde8fRLk53rvVePPfbYoH9nCxYscLiG75XnrVy5EtnZ2YiMjERCQgLuv/9+VFdXO1zjrt95u3btwi233AKtVovJkyejtLTU0y/PLRhehmHjxo0oKSnBiy++iMOHDyMjIwMFBQVoamrydWlBZcaMGbh06ZL09cknn0jnfvjDH+Ldd9/FW2+9hd27d6O+vh6LFi2SzlssFtx7770wmUzYu3cv/vd//xelpaV44YUXfPFSZMVgMCAjIwM6nc7p+VdeeQVr167F+vXrsX//foSHh6OgoAA9PT3SNY888ghOnjyJHTt2YMuWLdizZw8ef/xx6bxer8f8+fMxbtw4VFRUYNWqVXjppZfwhz/8weOvT06u914BwIIFCxz+nb3xxhsO5/leed7u3btRXFyMffv2YceOHejt7cX8+fNhMBika9zxO6+2thb33nsv5s2bh8rKSjzzzDP43ve+hw8++MCrr/eGiHRdOTk5YnFxsXTbYrGIycnJ4sqVK31YVXB58cUXxYyMDKfn2traRLVaLb711lvSsc8++0wEIJaXl4uiKIrvvfeeqFAoxIaGBuma3/3ud2JUVJRoNBo9WnswASBu2rRJum21WsWkpCRx1apV0rG2tjZRq9WKb7zxhiiKolhVVSUCEA8ePChd8/7774uCIIgXL14URVEUf/vb34qxsbEO79WPf/xjcdq0aR5+RfI18L0SRVEsKioS77vvviHvw/fKN5qamkQA4u7du0VRdN/vvOeff16cMWOGw3M99NBDYkFBgadf0oix5eU6TCYTKioqkJ+fLx1TKBTIz89HeXm5DysLPmfOnEFycjImTpyIRx55BOfPnwcAVFRUoLe31+E9mj59OtLS0qT3qLy8HLNmzUJiYqJ0TUFBAfR6PU6ePOndFxJEamtr0dDQ4PDeREdHIzc31+G9iYmJwZw5c6Rr8vPzoVAosH//fumaO+64AxqNRrqmoKAA1dXVaG1t9dKrCQ67du1CQkICpk2bhieeeAJXrlyRzvG98o329nYAQFxcHAD3/c4rLy93eAz7NYHw2cbwch3Nzc2wWCwOfwEAIDExEQ0NDT6qKvjk5uaitLQU27Ztw+9+9zvU1tZi7ty56OjoQENDAzQaDWJiYhzuc/V71NDQ4PQ9tJ8jz7D/2V7r309DQwMSEhIczqtUKsTFxfH987IFCxbg9ddfR1lZGX71q19h9+7dKCwshMViAcD3yhesViueeeYZ3HbbbZg5cyYAuO133lDX6PV6dHd3e+LluI3K1wUQDUdhYaH08+zZs5Gbm4tx48bhH//4B0JDQ31YGZF8fOtb35J+njVrFmbPno1JkyZh165duOuuu3xYWfAqLi7GiRMnHMb4EVteris+Ph5KpXLQKO7GxkYkJSX5qCqKiYnB1KlTUVNTg6SkJJhMJrS1tTlcc/V7lJSU5PQ9tJ8jz7D/2V7r309SUtKgwe9msxktLS18/3xs4sSJiI+PR01NDQC+V9721FNPYcuWLdi5cyfGjh0rHXfX77yhromKivL7/xQyvFyHRqNBVlYWysrKpGNWqxVlZWXIy8vzYWXBrbOzE59//jnGjBmDrKwsqNVqh/eouroa58+fl96jvLw8HD9+3OEX744dOxAVFYX09HSv1x8sJkyYgKSkJIf3Rq/XY//+/Q7vTVtbGyoqKqRrPvroI1itVuTm5krX7NmzB729vdI1O3bswLRp0xAbG+ulVxN8Lly4gCtXrmDMmDEA+F55iyiKeOqpp7Bp0yZ89NFHmDBhgsN5d/3Oy8vLc3gM+zUB8dnm6xHDgeDNN98UtVqtWFpaKlZVVYmPP/64GBMT4zCKmzzrRz/6kbhr1y6xtrZW/PTTT8X8/HwxPj5ebGpqEkVRFL///e+LaWlp4kcffSQeOnRIzMvLE/Py8qT7m81mcebMmeL8+fPFyspKcdu2beLo0aPF5cuX++olyUZHR4d45MgR8ciRIyIAcfXq1eKRI0fEc+fOiaIoir/85S/FmJgY8Z133hGPHTsm3nfffeKECRPE7u5u6TEWLFgg3nzzzeL+/fvFTz75RJwyZYr48MMPS+fb2trExMRE8dFHHxVPnDghvvnmm2JYWJj4+9//3uuvN5Bd673q6OgQn332WbG8vFysra0VP/zwQ/GWW24Rp0yZIvb09EiPwffK85544gkxOjpa3LVrl3jp0iXpq6urS7rGHb/zvvjiCzEsLEx87rnnxM8++0zU6XSiUqkUt23b5tXXeyMYXobp1VdfFdPS0kSNRiPm5OSI+/bt83VJQeWhhx4Sx4wZI2o0GjElJUV86KGHxJqaGul8d3e3+OSTT4qxsbFiWFiY+MADD4iXLl1yeIyzZ8+KhYWFYmhoqBgfHy/+6Ec/Ent7e739UmRn586dIoBBX0VFRaIo2qZL/+xnPxMTExNFrVYr3nXXXWJ1dbXDY1y5ckV8+OGHxYiICDEqKkpcvHix2NHR4XDN0aNHxdtvv13UarViSkqK+Mtf/tJbL1E2rvVedXV1ifPnzxdHjx4tqtVqcdy4ceLSpUsH/SeN75XnOXuPAIivvfaadI27fuft3LlTzMzMFDUajThx4kSH5/BngiiKordbe4iIiIhuFMe8EBERUUBheCEiIqKAwvBCREREAYXhhYiIiAIKwwsREREFFIYXIiIiCigML0RERBRQGF6IiIgooDC8EBERUUBheCEiIqKAwvBCREREAeX/A0AzaWdp5ZXdAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.semilogy(res.logger.values)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.scatter(reference, res.solution)\n", + "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "vitens_wntr_1", + "language": "python", + "name": "python3" + }, + "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.9.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/hhl_Net0.ipynb b/docs/notebooks/qnr_hhl/hhl_Net0.ipynb similarity index 99% rename from docs/notebooks/hhl_Net0.ipynb rename to docs/notebooks/qnr_hhl/hhl_Net0.ipynb index 9b5ce29..9bbbf85 100644 --- a/docs/notebooks/hhl_Net0.ipynb +++ b/docs/notebooks/qnr_hhl/hhl_Net0.ipynb @@ -363,7 +363,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "vitens_wntr_1", "language": "python", "name": "python3" }, diff --git a/docs/notebooks/hhl_Net1Loop.ipynb b/docs/notebooks/qnr_hhl/hhl_Net1Loop.ipynb similarity index 99% rename from docs/notebooks/hhl_Net1Loop.ipynb rename to docs/notebooks/qnr_hhl/hhl_Net1Loop.ipynb index 0364cd1..c0ea5f5 100644 --- a/docs/notebooks/hhl_Net1Loop.ipynb +++ b/docs/notebooks/qnr_hhl/hhl_Net1Loop.ipynb @@ -357,7 +357,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "vitens_wntr_1", "language": "python", "name": "python3" }, diff --git a/docs/notebooks/qubo_Net1Loops.ipynb b/docs/notebooks/qnr_qubols/qubo_Net1Loops.ipynb similarity index 99% rename from docs/notebooks/qubo_Net1Loops.ipynb rename to docs/notebooks/qnr_qubols/qubo_Net1Loops.ipynb index 72b3e55..888ee00 100644 --- a/docs/notebooks/qubo_Net1Loops.ipynb +++ b/docs/notebooks/qnr_qubols/qubo_Net1Loops.ipynb @@ -362,7 +362,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "vitens_wntr_1", "language": "python", "name": "python3" }, diff --git a/docs/notebooks/qubo_Net2Loops.ipynb b/docs/notebooks/qnr_qubols/qubo_Net2Loops.ipynb similarity index 100% rename from docs/notebooks/qubo_Net2Loops.ipynb rename to docs/notebooks/qnr_qubols/qubo_Net2Loops.ipynb diff --git a/docs/notebooks/qubo_poly_solver.ipynb b/docs/notebooks/qnr_qubols/qubo_poly_solver.ipynb similarity index 100% rename from docs/notebooks/qubo_poly_solver.ipynb rename to docs/notebooks/qnr_qubols/qubo_poly_solver.ipynb diff --git a/docs/notebooks/noisy_vqls.ipynb b/docs/notebooks/qnr_vqls/noisy_vqls.ipynb similarity index 100% rename from docs/notebooks/noisy_vqls.ipynb rename to docs/notebooks/qnr_vqls/noisy_vqls.ipynb diff --git a/docs/notebooks/vqls_Net1.ipynb b/docs/notebooks/qnr_vqls/vqls_Net1.ipynb similarity index 100% rename from docs/notebooks/vqls_Net1.ipynb rename to docs/notebooks/qnr_vqls/vqls_Net1.ipynb diff --git a/docs/notebooks/vqls_Net1Loops.ipynb b/docs/notebooks/qnr_vqls/vqls_Net1Loops.ipynb similarity index 100% rename from docs/notebooks/vqls_Net1Loops.ipynb rename to docs/notebooks/qnr_vqls/vqls_Net1Loops.ipynb diff --git a/docs/notebooks/vqls_Net2Loops.ipynb b/docs/notebooks/qnr_vqls/vqls_Net2Loops.ipynb similarity index 100% rename from docs/notebooks/vqls_Net2Loops.ipynb rename to docs/notebooks/qnr_vqls/vqls_Net2Loops.ipynb diff --git a/docs/notebooks/vqls_Net2Loops_D-W.ipynb b/docs/notebooks/qnr_vqls/vqls_Net2Loops_D-W.ipynb similarity index 100% rename from docs/notebooks/vqls_Net2Loops_D-W.ipynb rename to docs/notebooks/qnr_vqls/vqls_Net2Loops_D-W.ipynb diff --git a/docs/notebooks/vqls_solver_Net1.ipynb b/docs/notebooks/qnr_vqls/vqls_solver_Net1.ipynb similarity index 100% rename from docs/notebooks/vqls_solver_Net1.ipynb rename to docs/notebooks/qnr_vqls/vqls_solver_Net1.ipynb diff --git a/docs/notebooks/vqls_solver_Net1Loops.ipynb b/docs/notebooks/qnr_vqls/vqls_solver_Net1Loops.ipynb similarity index 100% rename from docs/notebooks/vqls_solver_Net1Loops.ipynb rename to docs/notebooks/qnr_vqls/vqls_solver_Net1Loops.ipynb diff --git a/docs/notebooks/vqls_solver_Net2Loops.ipynb b/docs/notebooks/qnr_vqls/vqls_solver_Net2Loops.ipynb similarity index 100% rename from docs/notebooks/vqls_solver_Net2Loops.ipynb rename to docs/notebooks/qnr_vqls/vqls_solver_Net2Loops.ipynb diff --git a/docs/notebooks/vqls_solver_Net3Loops.ipynb b/docs/notebooks/qnr_vqls/vqls_solver_Net3Loops.ipynb similarity index 99% rename from docs/notebooks/vqls_solver_Net3Loops.ipynb rename to docs/notebooks/qnr_vqls/vqls_solver_Net3Loops.ipynb index c0756b6..1ac36fe 100644 --- a/docs/notebooks/vqls_solver_Net3Loops.ipynb +++ b/docs/notebooks/qnr_vqls/vqls_solver_Net3Loops.ipynb @@ -330,7 +330,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "vitens_wntr_1", "language": "python", "name": "python3" }, diff --git a/docs/notebooks/qubols_solver.ipynb b/docs/notebooks/qubols_solver.ipynb deleted file mode 100644 index 00af1ec..0000000 --- a/docs/notebooks/qubols_solver.ipynb +++ /dev/null @@ -1,292 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# QUBOLS Solver Performance Analysis\n", - "\n", - "We test here the QUBOLS SOLVER in isolation to explore its performance.\n", - "\n", - "Wr first define the system we want to explore" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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UFZWJnYpRERUQxgG6IUEBgaioKCAgwiJiDQIwwC9kI4dO8LKyoqXCoiINAjDAL0QHR0dDBw4EPv37+fCRUREGoJhgF7YuHHjODUxEZEGYRigF9anTx8YGxtjx44dYpdCREQ1gDMQ0ktp1KgRHjx4gOHDhyMkJETscoiI6BWwM0AvZeLEiVAoFDh//jzWrl0LuVwudklERPSS2BmgFyaXy+Hl5YWYmBjlNk9PT0REREAqlYpYGRERvQx2BuiFbdmyRSUIAEBUVBSCgoJEqoiIiF4FwwC9sOjo6BfaTkREdRvDAL0wd3f3F9pORER1G8cM0AuTy+Xw9vZGVFSUchvHDBAR1V/sDNALk0qlMDc3h6mpKfT09CCTybBkyRIGASKieoqdASIiIi3HzgAREZGWYxggIiLScgwDREREWo5hgIiISMsxDBAREWk5hgEiIiItxzBARESk5RgGiIiItBzDABERkZZjGCAiItJyDANERERajmGAiIhIyzEMEBERaTmGASIiIi3HMEBERKTlGAaIiIi0HMMAERGRlmMYICIi0nIMA0RERFqOYYCIiEjLMQwQERFpOYYBIiIiLccwQEREpOUYBoiIiLQcwwAREZGWYxggIiLScgwDREREWo5hgIiISMsxDBAREWk5hgEiIiItxzBARESk5RgGiIiItBzDABERkZZjGCAiItJyDANERERajmGAiIhIyzEMEBERabn/B44zwXOLMIMfAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import wntr\n", - "import wntr_quantum\n", - "\n", - "# Create a water network model\n", - "inp_file = \"networks/Net2.inp\"\n", - "# inp_file = 'networks/Net2Loops.inp'\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# Graph the network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "36" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wn.num_nodes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We then solve it with the internal Cholesky solver implemented in WNTR Quantum" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.237 -0.197 0. 0. 0. -0.04 ]\n", - " [-0.197 1.072 -0.875 0. 0. 0. ]\n", - " [ 0. -0.875 2.183 -1.268 0. -0.04 ]\n", - " [ 0. 0. -1.268 2.636 -0.097 0. ]\n", - " [ 0. 0. 0. -0.097 0.137 -0.04 ]\n", - " [-0.04 0. -0.04 0. -0.04 0.119]]\n", - "b = [ -1.62 -2.846 -1.098 874.005 -0.911 -2.558]\n", - "x = [658.381 669.426 675.172 680.968 663.65 644.233]\n", - "residue = 3.2627186193895914e-13\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.074 -0.055 0. 0. 0. -0.019]\n", - " [-0.055 0.32 -0.265 0. 0. 0. ]\n", - " [ 0. -0.265 0.617 -0.344 0. -0.008]\n", - " [ 0. 0. -0.344 0.635 -0.023 0. ]\n", - " [ 0. 0. 0. -0.023 0.035 -0.011]\n", - " [-0.019 0. -0.008 0. -0.011 0.038]]\n", - "b = [ -1.059 -1.748 -0.636 183.958 -0.53 -1.43 ]\n", - "x = [613.591 641.499 653.909 666.823 626.029 588.157]\n", - "residue = 3.751962533617434e-14\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.065 -0.051 0. 0. 0. -0.014]\n", - " [-0.051 0.307 -0.256 0. 0. 0. ]\n", - " [ 0. -0.256 0.608 -0.343 0. -0.009]\n", - " [ 0. 0. -0.343 0.634 -0.024 0. ]\n", - " [ 0. 0. 0. -0.024 0.036 -0.012]\n", - " [-0.014 0. -0.009 0. -0.012 0.034]]\n", - "b = [ -1.059 -1.748 -0.636 183.957 -0.53 -1.43 ]\n", - "x = [613.706 641.56 653.941 666.823 625.543 586.652]\n", - "residue = 3.8338880181303394e-14\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.065 -0.051 0. 0. 0. -0.014]\n", - " [-0.051 0.308 -0.257 0. 0. 0. ]\n", - " [ 0. -0.257 0.609 -0.343 0. -0.009]\n", - " [ 0. 0. -0.343 0.635 -0.024 0. ]\n", - " [ 0. 0. 0. -0.024 0.035 -0.012]\n", - " [-0.014 0. -0.009 0. -0.012 0.034]]\n", - "b = [ -1.059 -1.748 -0.636 183.955 -0.53 -1.43 ]\n", - "x = [613.707 641.561 653.942 666.823 625.543 586.649]\n", - "residue = 3.784574259999647e-14\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAsNElEQVR4nO3deXxU1f3/8fedSTIJCZOQkEVKAgiyiFJKXIgoUIggRaoSN4qtIArfigtS118rKtZGXAAXUOuXBtvKgwqKFlugiki/IEEJ1aLSiBI2IYmKSQySde7vjzRTRzLDDIaTXPp6+riPmnPO3PkM0sc759xz71i2bdsCAABGuNq6AAAA/psQvAAAGETwAgBgEMELAIBBBC8AAAYRvAAAGETwAgBgEMELAIBBBC8AAAYRvMB/qTfffFOWZWn58uVtXQrwX4XgRcQWL14sy7L8R2xsrHr37q0bbrhBZWVlbV2eoy1ZskTz588Pe/zw4cMD/ls0HxdccMHxKxLAdxLV1gXAuWbPnq0ePXqopqZGGzZs0FNPPaW//vWvev/999WhQ4e2Ls+RlixZovfff18zZswI+zVdu3ZVfn5+QFuXLl1auTIArYXgxTEbM2aMzjjjDEnStddeq5SUFM2dO1evvPKKJkyY0OJrDh06pPj4eJNlfie2baumpkZxcXFtXUpQiYmJuuqqq9q6jO+soaFBPp9PMTExbV0KcFyx1IxWM2LECElSSUmJJGnSpElKSEjQJ598oh/96Efq2LGjJk6cKEny+XyaP3+++vfvr9jYWKWnp2vatGn68ssvA865ZcsWjR49Wp07d1ZcXJx69Oiha665JmDM0qVLlZ2drY4dO8rr9er000/XY4895u+/9957ZVnWEfU2L5nv2rXL39a9e3ddeOGFWrNmjc444wzFxcXpmWeekSRVVFRoxowZyszMlMfjUa9evTRnzhz5fL6j/tm88sorGjt2rLp06SKPx6OePXvq/vvvV2Njo3/M8OHD9Ze//EW7d+/2Lxl37979qOeWmkKruro6rLHf5vP59MADD6hr166KjY3VyJEj9fHHHx8xbtmyZcrOzlZcXJw6d+6sq666Sp9++mnAmOHDh2v48OFHvHbSpEkBn2XXrl2yLEuPPPKI5s+fr549e8rj8ejDDz+UJD3xxBPq37+/OnTooE6dOumMM87QkiVLjunzAe0NM160mk8++USSlJKS4m9raGjQ6NGjde655+qRRx7xL0FPmzZNixcv1uTJk3XTTTeppKRETz75pP7xj39o48aNio6OVnl5uUaNGqXU1FTdeeedSkpK0q5du/TSSy/5z//aa69pwoQJGjlypObMmSNJ2r59uzZu3Kibb775mD5HcXGxJkyYoGnTpum6665Tnz599PXXX2vYsGH69NNPNW3aNGVlZemtt97SXXfdpQMHDhz1uuzixYuVkJCgmTNnKiEhQW+88YZmzZqlqqoqPfzww5KkX/7yl6qsrNS+ffs0b948SVJCQsJR6/3oo48UHx+vuro6paen67rrrtOsWbMUHR0d1ud98MEH5XK5dOutt6qyslIPPfSQJk6cqM2bNwfUP3nyZJ155pnKz89XWVmZHnvsMW3cuFH/+Mc/lJSUFNZ7fVtBQYFqamo0depUeTweJScn69lnn9VNN92kSy+9VDfffLNqamr0z3/+U5s3b9ZPfvKTY3ofoF2xgQgVFBTYkuzXX3/d/uyzz+y9e/faS5cutVNSUuy4uDh73759tm3b9tVXX21Lsu+8886A1//f//2fLcl+/vnnA9pXr14d0L5ixQpbkv3OO+8EreXmm2+2vV6v3dDQEHTMPffcY7f0V735c5SUlPjbunXrZkuyV69eHTD2/vvvt+Pj4+2PPvoooP3OO++03W63vWfPnqDvb9u2/fXXXx/RNm3aNLtDhw52TU2Nv23s2LF2t27dQp7rm6655hr73nvvtV988UX797//vf3jH//YlmRffvnlR33tunXrbEl2v3797NraWn/7Y489Zkuyt23bZtu2bdfV1dlpaWn2aaedZh8+fNg/7tVXX7Ul2bNmzfK3DRs2zB42bNgR73X11VcHfK6SkhJbku31eu3y8vKAsRdddJHdv3//cP8IAMdhqRnHLDc3V6mpqcrMzNSVV16phIQErVixQt/73vcCxv385z8P+HnZsmVKTEzU+eefr88//9x/ZGdnKyEhQevWrZMk/yzq1VdfVX19fYs1JCUl6dChQ3rttdda7XP16NFDo0ePPqLm8847T506dQqoOTc3V42Njfr73/8e8pzfvEb81Vdf6fPPP9d5552nr7/+Wv/617+OudZFixbpnnvu0fjx4/XTn/5Ur7zyiq677jq98MILKiwsDOsckydPDriuet5550mSdu7cKalp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AGAQwQsAgEEELwAABhG8AAAYRPACAGAQwQsAgEEELwAABhG8AAAYRPACAGAQwQsAgEEELwAABhG8AAAYRPACAGAQwQsAgEEELwAABhG8AAAYRPACAGAQwQsAgEEELwAABhG8AAAYRPACAGAQwQsAgEEELwAABhG8AIATWvfu3TV//vy2LsOP4AUAtLlJkybJsiw9+OCDAe0vv/yyLMtqo6qOD4IXANAuxMbGas6cOfryyy/bupTjiuAFALQLubm5ysjIUH5+ftAxL774ovr37y+Px6Pu3bvr0UcfDegvLy/XuHHjFBcXpx49euj5558/4hwVFRW69tprlZqaKq/XqxEjRui9995r9c8TDMELAGgX3G63fvOb3+iJJ57Qvn37jugvKirS5ZdfriuvvFLbtm3Tvffeq7vvvluLFy/2j5k0aZL27t2rdevWafny5Vq4cKHKy8sDznPZZZepvLxcq1atUlFRkQYNGqSRI0fq4MGDx/sjSpKijLwLAABhuOSSSzRw4EDdc889WrRoUUDf3LlzNXLkSN19992SpN69e+vDDz/Uww8/rEmTJumjjz7SqlWr9Pbbb+vMM8+UJC1atEj9+vXzn2PDhg16++23VV5eLo/HI0l65JFH9PLLL2v58uWaOnXqcf+MzHgBAO3KnDlz9Nxzz2n79u0B7du3b9eQIUMC2oYMGaIdO3aosbFR27dvV1RUlLKzs/39ffv2VVJSkv/n9957T9XV1UpJSVFCQoL/KCkp0SeffHJcP1czZrwAgHZl6NChGj16tO666y5NmjSpVc9dXV2tk046SW+++eYRfd8M6OOJ4AUAtDsPPvigBg4cqD59+vjb+vXrp40bNwaM27hxo3r37i23262+ffuqoaFBRUVF/qXm4uJiVVRU+McPGjRIpaWlioqKUvfu3U18lCOw1AwAaHdOP/10TZw4UY8//ri/7Re/+IXWrl2r+++/Xx999JGee+45Pfnkk7r11lslSX369NEFF1ygadOmafPmzSoqKtK1116ruLg4/zlyc3OVk5Ojiy++WH/729+0a9cuvfXWW/rlL3+pLVu2GPlsBC8AoF2aPXu2fD6f/+dBgwbphRde0NKlS3Xaaadp1qxZmj17dsBydEFBgbp06aJhw4Zp/Pjxmjp1qtLS0vz9lmXpr3/9q4YOHarJkyerd+/euvLKK7V7926lp6cb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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "results = sim.run_sim()\n", - "\n", - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The last matrix of the Newton Raphson has been stored in the `tmp` directory of EPANET. We can load it to further analyze how VQLS performs on it." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "import os\n", - "\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "util_path = os.path.join(epanet_path, \"src/py/\")\n", - "sys.path.append(util_path)\n", - "\n", - "from quantum_linsolve import load_json_data\n", - "\n", - "A, b = load_json_data(os.path.join(epanet_tmp, \"smat.json\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "from quantum_newton_raphson.qubo_solver import QUBO_SOLVER\n", - "\n", - "qubols = QUBO_SOLVER(\n", - " num_qbits=11,\n", - " num_reads=500,\n", - " # iterations=5,\n", - " range=100,\n", - " offset=600,\n", - " # temperature=1e4,\n", - " use_aequbols=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can solve the system using VQLS" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "res = qubols(A.todense(), b)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And plot the vqls solution compared to the LU solution" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "ref = np.linalg.solve(A.todense(), b)\n", - "\n", - "plt.scatter(ref, res.solution)\n", - "plt.axline((500, 500), slope=1, linestyle=\"--\", color=\"gray\")\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/trash/aequbols.py b/docs/notebooks/trash/aequbols.py deleted file mode 100644 index 75ff9ac..0000000 --- a/docs/notebooks/trash/aequbols.py +++ /dev/null @@ -1,33 +0,0 @@ -import os -import sys -import matplotlib.pyplot as plt -import numpy as np -from quantum_newton_raphson.qubo_solver import QUBO_SOLVER - -epanet_path = os.environ["EPANET_QUANTUM"] -epanet_tmp = os.environ["EPANET_TMP"] -util_path = os.path.join(epanet_path, "src/py/") -# the mock-0.3.1 dir contains testcase.py, testutils.py & mock.py -sys.path.append(util_path) -from quantum_linsolve import load_json_data # noqa: E402 - -A, b = load_json_data(os.path.join(epanet_tmp, "smat.json")) - -linear_solver = QUBO_SOLVER( - num_qbits=11, - num_reads=100, - iterations=5, - range=1000, - offset=0, - temperature=1e4, - use_aequbols=True, -) - -qubo_sol = linear_solver(A.todense(), b) - -np_sol = np.linalg.solve(A.todense(), b) - - -plt.scatter(np_sol, qubo_sol.solution) -plt.axline((0, 0), slope=1, linestyle="--", color="gray") -plt.show() diff --git a/docs/notebooks/trash/epanet.ipynb b/docs/notebooks/trash/epanet.ipynb deleted file mode 100644 index 6c6c3d2..0000000 --- a/docs/notebooks/trash/epanet.ipynb +++ /dev/null @@ -1,485 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Define the system " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "metadata": {} - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlv0lEQVR4nO3dfXDU9YHH8c8mSx5IDAESECsEghhCUEMSTEKSzfMuFq1Tezr1oT7V8x6860wfZnRKb46O1dbTTp3qnC22pbbW3jjVG6diDXkiT4QkmBChQASRBwWKiQQa8pz87o/WnDEBAiT57v5+79eMf2R3s/vZrdO83f3trsuyLEsAAMCxgkwPAAAAZhEDAAA4HDEAAIDDEQMAADgcMQAAgMMRAwAAOBwxAACAwxEDAAA4HDEAAIDDEQNAALv//vsVGRlpeoZf+fWvfy2Xy6VDhw6ZngIEDGIAmKBXXnlFzz77rOkZU+7b3/62VqxYIen//7CGhYXpo48+GnPZvLw8rVy58pJu50KP5y9/+UslJiYqLCxMy5Yt03PPPXdJtwPgwogBYIKcEgObN2/WunXrRp3W19enH/3oR5N6O+d7PH/+85/roYceUlJSkp577jllZmbqG9/4hp566qkLXu/XvvY19fT0KC4ublL3AnZGDAAB6OzZs1NyvQcPHlRbW9uYGEhOTtaLL76oY8eOTcntflZPT4/Wr1+vdevW6Q9/+IP+8R//Ub/5zW9099136/HHH9epU6fO+/vBwcEKCwuTy+Wa8q2AXRADsK0NGzbI5XLpwIEDuv/++xUdHa1Zs2bpgQceUHd396jLvvzyy0pNTVV4eLjmzJmjr371qzp69OjI+Xl5edq8ebMOHz4sl8sll8ulxYsXy7IsxcTE6Fvf+tbIZYeHhxUdHa3g4GB1dnaOnP7UU0/J7Xarq6tr5LSKigrl5OQoIiJC0dHRuvXWW7V3795x78eePXt01113afbs2crOzj7n/d65c6diY2OVl5c3cls7duyQz+dTTEyMwsPDtWTJEj344INjfnfz5s2aNWvWmOv/7ne/q6GhoQk/O3Cpj6ckVVZWqqOjQ//6r/866jofeeQRnT17Vps3bz7vbY93zMDixYt18803q7a2VjfeeKPCwsIUHx+v3/zmN+P+bnV1tf7pn/5Jc+fOVVRUlO69994LRggQyNymBwBT7Y477tCSJUv0wx/+UM3NzfrFL36hefPmjTzl/MQTT+g//uM/dMcdd+ihhx7Sxx9/rOeee04ej0ctLS2Kjo7W+vXrdfr0aX344Yf6yU9+IkmKjIyUy+VSVlaWqqurR27v3Xff1enTpxUUFKS6urqR/8quqanRqlWrRg74Kysr00033aT4+Hht2LBBPT09eu6555SVlaXm5uaRP46fuv3227Vs2TI9+eSTOtc3jzc1Ncnn8yktLU1vvPGGwsPDdfLkSXm9XsXGxuqxxx5TdHS0Dh06pNdff33M77/11lsqLi6W2z36/xqWLFmie++9Vy+++KIee+wxXXXVVed8vC/n8ZSklpYWSVJaWtqo601NTVVQUJBaWlp0zz33nPP2z+XAgQP6h3/4B33961/Xfffdp1/96le6//77lZqaqqSkpFGX/bd/+zdFR0drw4YNamtr0wsvvKDDhw9r69atPOMAe7IAm/rP//xPS5L14IMPjjr9y1/+sjV37lzLsizr0KFDVnBwsPXEE0+MusyuXbsst9s96vR169ZZcXFxY27n6aeftoKDg60zZ85YlmVZP/3pT624uDjrxhtvtB599FHLsixraGjIio6Otr75zW+O/F5ycrI1b948q6OjY+S01tZWKygoyLr33nvH3I8777xzzG3fd999VkREhGVZllVbW2tFRUVZ69ats3p7e0cu87//+7+WJKupqem8j9fZs2etsLAwa9OmTSOnbdq0aeR333//fcvtdlvf+MY3Rs7Pzc21kpKSRn6ejMfzkUcesYKDg8fdGBsba331q1897/34dPMHH3wwclpcXJwlyaqurh457eTJk1ZoaKj17W9/e8zvpqamWv39/SOn/9d//ZclyXrjjTfOe9tAoOJlAtjeP//zP4/6OScnRx0dHTpz5oxef/11DQ8P64477lB7e/vIP1deeaWWLVumysrKC15/Tk6OhoaGtG3bNkl/ewYgJydHOTk5qqmpkSTt3r1bnZ2dysnJkSQdP35cO3fu1P333685c+aMXNf111+v4uJivfXWWxe8H59VWVkpn8+nwsJCvf766woNDR05Lzo6WpL05ptvamBg4JzXUVFRob6+Pt10003jnh8fH6+vfe1r2rhxo44fPz7uZSbj8ezp6VFISMi454WFhamnp+eC1zGeFStWjDz+khQbG6uEhAQdPHhwzGUffvhhzZgx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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import wntr\n", - "import wntr_quantum\n", - "\n", - "# Create a water network model\n", - "inp_file = \"networks/Net0.inp\"\n", - "# inp_file = 'networks/Net2Loops.inp'\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# Graph the network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run with the original Cholesky EPANET simulator" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1x0lEQVR4nO3deXhU9aH/8c/JZCVhEpYsIGELhB0CCdkDXEUQ0bpWRXor4MK1eKtStfW2Rav1UltrsS7V6+8WbCvXtWprK1xERAgESNgh7CCgbCIkJBCyzPn9gZlLJDMkYTLnzOT96vN9Hjlz5sxnsM/z8XvO95wxTNM0BQAA/CLE6gAAALQlFC8AAH5E8QIA4EcULwAAfkTxAgDgRxQvAAB+RPECAOBHFC8AAH5E8QIA4EcUL9BGffrppzIMQ++8847VUYA2heJFs82bN0+GYbhHZGSkUlNTdd999+nIkSNWxwto8+fP15w5c5q8/5gxYxr8u6gfV111VeuFBHBJQq0OgMD1xBNPqFevXqqqqtLy5cv1hz/8Qf/85z+1efNmtWvXzup4AWn+/PnavHmzHnjggSa/p1u3bpo9e3aDbV27dvVxMgC+QvGixSZMmKCMjAxJ0l133aVOnTrp2Wef1QcffKBJkyY1+p7KykpFR0f7M+YlMU1TVVVVioqKsjqKR7Gxsfre975ndYxLVltbK5fLpfDwcKujAK2KU83wmcsvv1yStHfvXknSlClTFBMTo927d+vqq69W+/btNXnyZEmSy+XSnDlzNGjQIEVGRioxMVHTp0/XiRMnGhyzuLhY48ePV+fOnRUVFaVevXpp2rRpDfZ54403lJ6ervbt28vpdGrIkCF67rnn3K8//vjjMgzjgrz1p8z37dvn3tazZ09dc801WrhwoTIyMhQVFaVXXnlFknTy5Ek98MADSk5OVkREhPr06aOnn35aLpfron83H3zwgSZOnKiuXbsqIiJCKSkpevLJJ1VXV+feZ8yYMfrHP/6hzz//3H3KuGfPnhc9tnSutCoqKpq077e5XC499dRT6tatmyIjI3XFFVdo165dF+z39ttvKz09XVFRUercubO+973v6Ysvvmiwz5gxYzRmzJgL3jtlypQG32Xfvn0yDEPPPPOM5syZo5SUFEVERGjr1q2SpOeff16DBg1Su3bt1KFDB2VkZGj+/Pkt+n6A3TDjhc/s3r1bktSpUyf3ttraWo0fP175+fl65pln3Kegp0+frnnz5mnq1Kn64Q9/qL179+qFF17QunXrVFhYqLCwMB09elTjxo1TfHy8fvKTnyguLk779u3TX//6V/fxFy1apEmTJumKK67Q008/LUkqLS1VYWGh7r///hZ9j+3bt2vSpEmaPn267r77bvXr10+nT5/W6NGj9cUXX2j69Onq3r27VqxYoUcffVSHDh266HXZefPmKSYmRjNnzlRMTIw++eQTzZo1S+Xl5frNb34jSfrpT3+qsrIyHTx4UL/73e8kSTExMRfNu2PHDkVHR6u6ulqJiYm6++67NWvWLIWFhTXp+/7qV79SSEiIHnroIZWVlenXv/61Jk+erFWrVjXIP3XqVI0cOVKzZ8/WkSNH9Nxzz6mwsFDr1q1TXFxckz7r2+bOnauqqirdc889ioiIUMeOHfXqq6/qhz/8oW6++Wbdf//9qqqq0saNG7Vq1SrdfvvtLfocwFZMoJnmzp1rSjI//vhj89ixY+aBAwfMN954w+zUqZMZFRVlHjx40DRN07zjjjtMSeZPfvKTBu9ftmyZKcl8/fXXG2xfsGBBg+3vvfeeKclcs2aNxyz333+/6XQ6zdraWo/7PPbYY2Zj/1ev/x579+51b+vRo4cpyVywYEGDfZ988kkzOjra3LFjR4PtP/nJT0yHw2Hu37/f4+ebpmmePn36gm3Tp08327VrZ1ZVVbm3TZw40ezRo4fXY51v2rRp5uOPP26+++675p/+9CfzO9/5jinJvOWWWy763iVLlpiSzAEDBphnz551b3/uuedMSeamTZtM0zTN6upqMyEhwRw8eLB55swZ934ffvihKcmcNWuWe9vo0aPN0aNHX/BZd9xxR4PvtXfvXlOS6XQ6zaNHjzbY97rrrjMHDRrU1L8CIOBwqhktNnbsWMXHxys5OVm33XabYmJi9N577+myyy5rsN+9997b4M9vv/22YmNjdeWVV+qrr75yj/T0dMXExGjJkiWS5J5Fffjhh6qpqWk0Q1xcnCorK7Vo0SKffa9evXpp/PjxF2QuKChQhw4dGmQeO3as6urq9Nlnn3k95vnXiE+dOqWvvvpKBQUFOn36tLZt29birP/93/+txx57TDfeeKP+9V//VR988IHuvvtuvfXWWyoqKmrSMaZOndrgumpBQYEkac+ePZLO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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sim = wntr.sim.EpanetSimulator(wn)\n", - "results = sim.run_sim()\n", - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "name\n", - "J1 2.964769e+01\n", - "D1 1.916768e+01\n", - "R1 -9.338379e-07\n", - "Name: 0, dtype: float32" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pressure_at_5hr" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run with our custom Cholesky EPANET solver \n", - "we use the default solver of the QuantumWNTRSimulator, that uses a LU solver, a s a benchmark of the calculation" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "metadata": {} - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.116 -0.116]\n", - " [-0.116 2.454]]\n", - "b = [ -1.614 230.277]\n", - "x = [83.8 97.772]\n", - "residue = 3.218344867404965e-14\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.027 -0.027]\n", - " [-0.027 0.84 ]]\n", - "b = [-0.934 79.982]\n", - "x = [62.886 97.269]\n", - "residue = 8.43769498715119e-15\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.027 -0.027]\n", - " [-0.027 0.84 ]]\n", - "b = [-0.934 79.985]\n", - "x = [62.886 97.269]\n", - "residue = 2.0317081350640365e-14\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1x0lEQVR4nO3deXhU9aH/8c/JZCVhEpYsIGELhB0CCdkDXEUQ0bpWRXor4MK1eKtStfW2Rav1UltrsS7V6+8WbCvXtWprK1xERAgESNgh7CCgbCIkJBCyzPn9gZlLJDMkYTLnzOT96vN9Hjlz5sxnsM/z8XvO95wxTNM0BQAA/CLE6gAAALQlFC8AAH5E8QIA4EcULwAAfkTxAgDgRxQvAAB+RPECAOBHFC8AAH5E8QIA4EcUL9BGffrppzIMQ++8847VUYA2heJFs82bN0+GYbhHZGSkUlNTdd999+nIkSNWxwto8+fP15w5c5q8/5gxYxr8u6gfV111VeuFBHBJQq0OgMD1xBNPqFevXqqqqtLy5cv1hz/8Qf/85z+1efNmtWvXzup4AWn+/PnavHmzHnjggSa/p1u3bpo9e3aDbV27dvVxMgC+QvGixSZMmKCMjAxJ0l133aVOnTrp2Wef1QcffKBJkyY1+p7KykpFR0f7M+YlMU1TVVVVioqKsjqKR7Gxsfre975ndYxLVltbK5fLpfDwcKujAK2KU83wmcsvv1yStHfvXknSlClTFBMTo927d+vqq69W+/btNXnyZEmSy+XSnDlzNGjQIEVGRioxMVHTp0/XiRMnGhyzuLhY48ePV+fOnRUVFaVevXpp2rRpDfZ54403lJ6ervbt28vpdGrIkCF67rnn3K8//vjjMgzjgrz1p8z37dvn3tazZ09dc801WrhwoTIyMhQVFaVXXnlFknTy5Ek98MADSk5OVkREhPr06aOnn35aLpfron83H3zwgSZOnKiuXbsqIiJCKSkpevLJJ1VXV+feZ8yYMfrHP/6hzz//3H3KuGfPnhc9tnSutCoqKpq077e5XC499dRT6tatmyIjI3XFFVdo165dF+z39ttvKz09XVFRUercubO+973v6Ysvvmiwz5gxYzRmzJgL3jtlypQG32Xfvn0yDEPPPPOM5syZo5SUFEVERGjr1q2SpOeff16DBg1Su3bt1KFDB2VkZGj+/Pkt+n6A3TDjhc/s3r1bktSpUyf3ttraWo0fP175+fl65pln3Kegp0+frnnz5mnq1Kn64Q9/qL179+qFF17QunXrVFhYqLCwMB09elTjxo1TfHy8fvKTnyguLk779u3TX//6V/fxFy1apEmTJumKK67Q008/LUkqLS1VYWGh7r///hZ9j+3bt2vSpEmaPn267r77bvXr10+nT5/W6NGj9cUXX2j69Onq3r27VqxYoUcffVSHDh266HXZefPmKSYmRjNnzlRMTIw++eQTzZo1S+Xl5frNb34jSfrpT3+qsrIyHTx4UL/73e8kSTExMRfNu2PHDkVHR6u6ulqJiYm6++67NWvWLIWFhTXp+/7qV79SSEiIHnroIZWVlenXv/61Jk+erFWrVjXIP3XqVI0cOVKzZ8/WkSNH9Nxzz6mwsFDr1q1TXFxckz7r2+bOnauqqirdc889ioiIUMeOHfXqq6/qhz/8oW6++Wbdf//9qqqq0saNG7Vq1SrdfvvtLfocwFZMoJnmzp1rSjI//vhj89ixY+aBAwfMN954w+zUqZMZFRVlHjx40DRN07zjjjtMSeZPfvKTBu9ftmyZKcl8/fXXG2xfsGBBg+3vvfeeKclcs2aNxyz333+/6XQ6zdraWo/7PPbYY2Zj/1ev/x579+51b+vRo4cpyVywYEGDfZ988kkzOjra3LFjR4PtP/nJT0yHw2Hu37/f4+ebpmmePn36gm3Tp08327VrZ1ZVVbm3TZw40ezRo4fXY51v2rRp5uOPP26+++675p/+9CfzO9/5jinJvOWWWy763iVLlpiSzAEDBphnz551b3/uuedMSeamTZtM0zTN6upqMyEhwRw8eLB55swZ934ffvihKcmcNWuWe9vo0aPN0aNHX/BZd9xxR4PvtXfvXlOS6XQ6zaNHjzbY97rrrjMHDRrU1L8CIOBwqhktNnbsWMXHxys5OVm33XabYmJi9N577+myyy5rsN+9997b4M9vv/22YmNjdeWVV+qrr75yj/T0dMXExGjJkiWS5J5Fffjhh6qpqWk0Q1xcnCorK7Vo0SKffa9evXpp/PjxF2QuKChQhw4dGmQeO3as6urq9Nlnn3k95vnXiE+dOqWvvvpKBQUFOn36tLZt29birP/93/+txx57TDfeeKP+9V//VR988IHuvvtuvfXWWyoqKmrSMaZOndrgumpBQYEkac+ePZLO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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "results = sim.run_sim()\n", - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run with the AEQUBOLS solver" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.1155474 -0.1155474]\n", - " [-0.1155474 2.454284 ]]\n", - "b = [ -1.614401 230.2773 ]\n", - "x = [77.95698925 97.50733138]\n", - "residue = 0.645100575394777\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.0203655 -0.0203655]\n", - " [-0.0203655 0.6378524]]\n", - "b = [-0.6197366 60.7565 ]\n", - "x = [62.31671554 97.2629521 ]\n", - "residue = 0.09299011493672167\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.02591948 -0.02591948]\n", - " [-0.02591948 0.8072867 ]]\n", - "b = [-0.8891007 76.89368 ]\n", - "x = [62.8054741 97.2629521]\n", - "residue = 0.004721498046104942\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.02710065 -0.02710065]\n", - " [-0.02710065 0.8371059 ]]\n", - "b = [-0.9318042 79.72048 ]\n", - "x = [62.31671554 97.2629521 ]\n", - "residue = 0.018294070336562634\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1x0lEQVR4nO3deXhU9aH/8c/JZCVhEpYsIGELhB0CCdkDXEUQ0bpWRXor4MK1eKtStfW2Rav1UltrsS7V6+8WbCvXtWprK1xERAgESNgh7CCgbCIkJBCyzPn9gZlLJDMkYTLnzOT96vN9Hjlz5sxnsM/z8XvO95wxTNM0BQAA/CLE6gAAALQlFC8AAH5E8QIA4EcULwAAfkTxAgDgRxQvAAB+RPECAOBHFC8AAH5E8QIA4EcUL9BGffrppzIMQ++8847VUYA2heJFs82bN0+GYbhHZGSkUlNTdd999+nIkSNWxwto8+fP15w5c5q8/5gxYxr8u6gfV111VeuFBHBJQq0OgMD1xBNPqFevXqqqqtLy5cv1hz/8Qf/85z+1efNmtWvXzup4AWn+/PnavHmzHnjggSa/p1u3bpo9e3aDbV27dvVxMgC+QvGixSZMmKCMjAxJ0l133aVOnTrp2Wef1QcffKBJkyY1+p7KykpFR0f7M+YlMU1TVVVVioqKsjqKR7Gxsfre975ndYxLVltbK5fLpfDwcKujAK2KU83wmcsvv1yStHfvXknSlClTFBMTo927d+vqq69W+/btNXnyZEmSy+XSnDlzNGjQIEVGRioxMVHTp0/XiRMnGhyzuLhY48ePV+fOnRUVFaVevXpp2rRpDfZ54403lJ6ervbt28vpdGrIkCF67rnn3K8//vjjMgzjgrz1p8z37dvn3tazZ09dc801WrhwoTIyMhQVFaVXXnlFknTy5Ek98MADSk5OVkREhPr06aOnn35aLpfron83H3zwgSZOnKiuXbsqIiJCKSkpevLJJ1VXV+feZ8yYMfrHP/6hzz//3H3KuGfPnhc9tnSutCoqKpq077e5XC499dRT6tatmyIjI3XFFVdo165dF+z39ttvKz09XVFRUercubO+973v6Ysvvmiwz5gxYzRmzJgL3jtlypQG32Xfvn0yDEPPPPOM5syZo5SUFEVERGjr1q2SpOeff16DBg1Su3bt1KFDB2VkZGj+/Pkt+n6A3TDjhc/s3r1bktSpUyf3ttraWo0fP175+fl65pln3Kegp0+frnnz5mnq1Kn64Q9/qL179+qFF17QunXrVFhYqLCwMB09elTjxo1TfHy8fvKTnyguLk779u3TX//6V/fxFy1apEmTJumKK67Q008/LUkqLS1VYWGh7r///hZ9j+3bt2vSpEmaPn267r77bvXr10+nT5/W6NGj9cUXX2j69Onq3r27VqxYoUcffVSHDh266HXZefPmKSYmRjNnzlRMTIw++eQTzZo1S+Xl5frNb34jSfrpT3+qsrIyHTx4UL/73e8kSTExMRfNu2PHDkVHR6u6ulqJiYm6++67NWvWLIWFhTXp+/7qV79SSEiIHnroIZWVlenXv/61Jk+erFWrVjXIP3XqVI0cOVKzZ8/WkSNH9Nxzz6mwsFDr1q1TXFxckz7r2+bOnauqqirdc889ioiIUMeOHfXqq6/qhz/8oW6++Wbdf//9qqqq0saNG7Vq1SrdfvvtLfocwFZMoJnmzp1rSjI//vhj89ixY+aBAwfMN954w+zUqZMZFRVlHjx40DRN07zjjjtMSeZPfvKTBu9ftmyZKcl8/fXXG2xfsGBBg+3vvfeeKclcs2aNxyz333+/6XQ6zdraWo/7PPbYY2Zj/1ev/x579+51b+vRo4cpyVywYEGDfZ988kkzOjra3LFjR4PtP/nJT0yHw2Hu37/f4+ebpmmePn36gm3Tp08327VrZ1ZVVbm3TZw40ezRo4fXY51v2rRp5uOPP26+++675p/+9CfzO9/5jinJvOWWWy763iVLlpiSzAEDBphnz551b3/uuedMSeamTZtM0zTN6upqMyEhwRw8eLB55swZ934ffvihKcmcNWuWe9vo0aPN0aNHX/BZd9xxR4PvtXfvXlOS6XQ6zaNHjzbY97rrrjMHDRrU1L8CIOBwqhktNnbsWMXHxys5OVm33XabYmJi9N577+myyy5rsN+9997b4M9vv/22YmNjdeWVV+qrr75yj/T0dMXExGjJkiWS5J5Fffjhh6qpqWk0Q1xcnCorK7Vo0SKffa9evXpp/PjxF2QuKChQhw4dGmQeO3as6urq9Nlnn3k95vnXiE+dOqWvvvpKBQUFOn36tLZt29birP/93/+txx57TDfeeKP+9V//VR988IHuvvtuvfXWWyoqKmrSMaZOndrgumpBQYEkac+ePZLO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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from quantum_newton_raphson.qubo_solver import QUBO_SOLVER\n", - "\n", - "linear_solver = QUBO_SOLVER(\n", - " num_qbits=11,\n", - " num_reads=250,\n", - " # iterations=5,\n", - " range=250,\n", - " offset=0,\n", - " # temperature=1e4,\n", - " use_aequbols=False,\n", - ")\n", - "\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "results = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "name\n", - "J1 2.964575e+01\n", - "D1 1.914311e+01\n", - "R1 -9.338379e-07\n", - "Name: 0, dtype: float32" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pressure_at_5hr" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "import os\n", - "\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "util_path = os.path.join(epanet_path, \"src/py/\")\n", - "sys.path.append(util_path)\n", - "from quantum_linsolve import load_json_data\n", - "\n", - "A, b = load_json_data(os.path.join(epanet_tmp, \"smat.json\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [], - "source": [ - "from quantum_newton_raphson.qubo_solver import QUBO_SOLVER\n", - "\n", - "linear_solver = QUBO_SOLVER(\n", - " num_qbits=13,\n", - " num_reads=500,\n", - " # iterations=5,\n", - " range=250,\n", - " offset=0,\n", - " # temperature=1e4,\n", - " use_aequbols=False,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [], - "source": [ - "qubo_sol = linear_solver(A, b)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAGdCAYAAADT1TPdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABAEklEQVR4nO3deXhU9aH/8fdMlsk+YUvCkkAQZJd9CSCIREAQCCS0+mhLa6vWYiuly9V7r/p4by1t73N7W++ta1uxVduahLCpQRoEhMawCbIjshsSlpCZJJBt5vv7gzq/RlFDmOTMTD6v55lH852TmY8nmPnwPed7js0YYxAREREJUHarA4iIiIh8EZUVERERCWgqKyIiIhLQVFZEREQkoKmsiIiISEBTWREREZGAprIiIiIiAU1lRURERAJauNUBWsLr9VJaWkp8fDw2m83qOCIiItIMxhiqqqro1q0bdnvz50uCsqyUlpaSmppqdQwRERFpgVOnTtGjR49mbx+UZSU+Ph648h+bkJBgcRoRERH5tJqaGtasWUNpaSn33nsvTqcTt9tNamqq73O8ua65rGzatIn/+q//YseOHZw5c4aCggKysrJ8zxtjeOKJJ3jxxReprKxkwoQJPPvss/Tt29e3TUVFBd/73vdYvXo1drud7OxsfvOb3xAXF9esDJ8c+klISFBZERERCTAnTpwgPz+fqqoqwsPDuXTpUpMjItd6Csc1n2BbU1PD0KFD+e1vf3vV53/5y1/y9NNP89xzz1FSUkJsbCzTp0+ntrbWt83dd9/Nvn37WLduHWvWrGHTpk3cf//91xpFREREAojX62XTpk28/PLLVFVV0blzZ+677z769et3Xa9ru567LttstiYzK8YYunXrxg9/+EN+9KMfAeByuUhOTmbZsmXceeedHDhwgIEDB7Jt2zZGjRoFQGFhITNnzuT06dN069btS9/X7XbjdDpxuVyaWREREQkA1dXVFBQUcPToUQCGDh3KzJkziYyM9G3T0s9vvy5dPnbsGGVlZWRmZvrGnE4nY8eOpbi4GIDi4mISExN9RQUgMzMTu91OSUmJP+OIiIhIGykuLubo0aNEREQwd+5csrKymhSV6+HXE2zLysoASE5ObjKenJzse66srIykpKSmIcLD6dixo2+bT6urq6Ours73tdvt9mdsERERuU5TpkzB7XYzadIkunTp4tfXDoqLwi1duhSn0+l7aNmyiIiItaqqqvjb3/6G1+sFrkw8ZGdn+72ogJ/LSkpKCgDl5eVNxsvLy33PpaSkcPbs2SbPNzY2UlFR4dvm0x599FFcLpfvcerUKX/GFhERkWvw0Ucf8fzzz7NlyxY2b97c6u/n17KSnp5OSkoKRUVFvjG3201JSQkZGRkAZGRkUFlZyY4dO3zbrF+/Hq/Xy9ixY6/6ug6Hw7dMWcuVRURErOH1elm/fj2vvPIKNTU1JCcnM3DgwFZ/32s+Z6W6upojR474vj527Bi7du2iY8eOpKWlsXjxYn7605/St29f0tPTeeyxx+jWrZtvxdCAAQOYMWMG9913H8899xwNDQ089NBD3Hnnnc1aCSQiIiJtz+12k5+fz8mTJwEYOXIk06dPJyIiotXf+5rLyvbt25kyZYrv6yVLlgCwcOFCli1bxk9+8hNqamq4//77qaysZOLEiRQWFhIVFeX7nldffZWHHnqIqVOn+i4K9/TTT/vhP0dERESuh8dr2HqsgrNVtSTFRzEmvSMnTxwnLy+PS5cuERkZyezZsxk8eHCbZbqu66xYRddZERER8b/CvWd4cvV+zrj+/4Vcuzqj+PGkZPa/s4IuXbqQk5NDp06dWvT6Lf38Dsp7A4mIiIh/Fe49w4Ov7OSTGYwwvHiwU+aq5YerT/CLGTOZP/EmwsPbvjoExdJlERERaT0er+HJ1ft9RaWHvZKcqD10tlX7xv6n+CI2e5gl+VRWRERE2rmtxyo446rFhpdR4ae4zXGEGFsDQyKuXIrEAGdctWw9VmFJPh0GEhERaefOVtUSa6vjlsijJNlrANjfmMS2hh6f2c4KKisiIiLtXWUpcx37cdg81JkwNtf34qS3w2c2S4qPuso3tz6VFRERkXbs+PHj7Nr4Jg4bnPPGsqG+N9XG0WQbG5DivLKM2QoqKyIiIu1Yz5496devHy5vJH/8IALvp05ntf3jn0/MHkiY3fbZF2gDKisiIiLtzOHDh+nVqxeRkZHYbDa+8pWvYLfb6XnTZ6+zkuKM4onZA5kxuKtleVVWRERE2onGxkbefvtttm3bxk033URWVhY2mw27/cpsyozBXbltYMpnrmBr1YzKJ1RWRERE2oGKigry8vI4c+YMAHFxcVfdLsxuI+OGll2htrWorIiIiIS4ffv2sWrVKurr64mOjmbevHn07dvX6ljNprIiIiISohobGyksLGTHjh0ApKWlkZ2dHXT31VNZERERCVG1tbUcPHgQgIkTJzJlyhTf+SnBRGVFREQkRMXFxZGTk0NjYyN9+vSxOk6LqayIiIiEiIaGBgoLC0lPT2fw4MEA9OrVy9pQfqCyIiIiEgLOnz9Pbm4uZ8+eZd++ffTp04eoKGsuj+9vKisiIiJBbvfu3bzxxhs0NDQQGxvL/PnzQ6aogMqKiIhI0Kqvr+ett95i165dAKSnpzN//vzPvYZKsFJZERERCUINDQ387ne/49y5c9hsNiZPnszNN98clKt9vozKioiISBCKiIjghhtu4PLly2RnZ4fEibSfR2VFREQkSNTX11NfX+87zJOZmcnEiROJjY21OFnrCr25IhERkRBUXl7OCy+8wOuvv47H4wEgLCws5IsKaGZFREQkoBlj2LlzJ4WFhTQ2NlJfX4/L5aJjx45WR2szKisiIiIBqq6ujjVr1rB3714A+vTpw7x584iJibE4WdtSWREREQlAZWVl5ObmUlFRgc1mY+rUqYwfPx6bzWZ1tDansiIiIhJgjDGsWbOGiooKEhISyMnJITU11epYllFZERERCTA2m42srCw2bNjAzJkz291hn0/TaiAREZEAUFpayvbt231fd+7cmZycnHZfVEAzKyIiIpYyxrB161bWrVuH1+ulS5cu9OzZ0+pYAUVlRURExCK1tbWsWrWKAwcOANC/f3+SkpIsThV4VFZEREQs8PHHH5OXl0dlZSV2u51p06YxZsyYdrna58uorIiIiLSxrVu3snbtWrxeL4mJieTk5NC9e3erYwUslRUREZE2Zrfb8Xq9DBgwgDlz5hAVFWV1pICmsiIiItIGGhsbCQ+/8rE7cuRInE4nffr00WGfZtDSZRERkVZkjOHvf/87zz77LLW1tcCV66j07dtXRaWZNLMiIiLSSi5dusSKFSv48MMPAdi1axfjxo2zOFXwUVkRERFpBSdPniQ/Px+3201YWBgzZsxg5MiRVscKSiorIiIifmSMYcuWLaxfvx5jDJ06dSInJ4eUlBSrowUtlRURERE/2rRpExs2bABgyJAhzJo1C4fDYW2oIKeyIiIi4kejR49mz549jB8/nuHDh+skWj9QWREREbkOXq+Xw4cP069fP2w2GzExMTz44IOEhYVZHS1kaOmyiIhI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RESkDVlWVv7617+yZMkSnnjiCXbu3MnQoUOZPn06Z8+etSrSVQ0YMIDw8HBmzZpFdnY2DofD6kgiIiLtis0YY6x447FjxzJ69Gj+7//+DwCv10tqairf+973eOSRR77we91uN06nE5fLRUJCgl9zGWOoqKigU6dOvrGqqiri4+P9+j4iIiLtTUs/vy2ZWamvr2fHjh1kZmb+/yB2O5mZmRQXF39m+7q6Otxud5NHa6ipqeG1117j97//PS6XyzeuoiIiImIdS8rK+fPn8Xg8JCcnNxlPTk6mrKzsM9svXboUp9Ppe6Smpvo904kTJ3j++ec5cuQIDQ0NV80hIiIibS8oLgr36KOP4nK5fI9Tp0757bWNMWzatImXX36ZqqoqOnfuzH333Ue/fv389h4iIiLScpYsXe7cuTNhYWGUl5c3GS8vLyclJeUz2zscjlY5sbW6upqCggKOHj0KwNChQ5k5cyaRkZF+fy8RERFpGUtmViIjIxk5ciRFRUW+Ma/XS1FRERkZGW2Wo7i4mKNHjxIeHs7cuXPJyspSUREREQkwll0UbsmSJSxcuJBRo0YxZswYfv3rX1NTU8M3v/nNNstwyy234HK5mDRpEklJSW32viIiItJ8lpWVr371q5w7d47HH3+csrIyhg0bRmFh4WdOuvWn6upqSkpKmDJlCna7nYiICHJyclrt/UREROT6WXadlevRknXaR48eZfny5dTU1HDrrbdy8803t3JKERER+Wctvc5KyN8byOv1smHDBt59910AkpKSGDBggMWpREREpLlCuqxUVVWRn5/PiRMnABgxYgQzZswgIiLC4mQiIiLSXCFbVo4fP05ubi6XLl0iMjKS2bNnM3jwYKtjiYiIyDUK2bISFRVFXV0dKSkp5OTkNLnXj4iIiASPkCorjY2NhIdf+U9KSUnha1/7Gt27d/eNiYiISPAJisvtN8eHH37Ib37zGz7++GPfWM+ePVVUREREglzQlxWPx8O6det47bXXqK6uZsuWLVZHEhERET8K6mmHyspKcnNzOX36NABjxozhtttusziViIiI+FNQl5WXXnoJuHKjw7lz5+r6KSIiIiEoKMvKJxfddblc9OrVi7lz59KhQwfcbrfFyUREROTzfPI5fa0Xzw/Ky+2fPn2a1NRUq2OIiIhIC5w6dYoePXo0e/ugLCter5fS0lLi4+Ox2Wx+fW23201qaiqnTp26pvsWSMtof7c97fO2p33etrS/215z97kxhqqqKrp164bd3vw1PkF5GMhut19TI2uJhIQE/SFvQ9rfbU/7vO1pn7ct7e+215x97nQ6r/l1g37psoiIiIQ2lRUREREJaCorn+JwOHjiiSdwOBxWR2kXtL/bnvZ529M+b1va322vtfd5UJ5gKyIiIu2HZlZEREQkoKmsiIiISEBTWREREZGAprIiIiIiAU1l5Z/89re/pVevXkRFRTF27Fi2bt1qdaSQsXTpUkaPHk18fDxJSUlkZWVx6NChJtvU1tayaNEiOnXqRFxcHNnZ2ZSXl1uUOLT8/Oc/x2azsXjxYt+Y9rf/ffzxx9xzzz106tSJ6OhohgwZwvbt233PG2N4/PHH6dq1K9HR0WRmZvLhhx9amDi4eTweHnvsMdLT04mOjuaGG27gP//zP5vcd0b7/Pps2rSJ2bNn061bN2w2GytWrGjyfHP2b0VFBXfffTcJCQkkJibyrW99i+rq6msLYsQYY8xf/vIXExkZaf7whz+Yffv2mfvuu88kJiaa8vJyq6OFhOnTp5uXXnrJ7N271+zatcvMnDnTpKWlmerqat823/nOd0xqaqopKioy27dvN+PGjTPjx4+3MHVo2Lp1q+nVq5e56aabzMMPP+wb1/72r4qKCtOzZ0/zjW98w5SUlJijR4+atWvXmiNHjvi2+fnPf26cTqdZsWKF2b17t5kzZ45JT083ly9ftjB58HrqqadMp06dzJo1a8yxY8dMbm6uiYuLM7/5zW9822ifX58333zT/Nu//ZtZvny5AUxBQUGT55uzf2fMmGGGDh1q3nvvPfPuu++aPn36mLvuuuuacqis/MOYMWPMokWLfF97PB7TrVs3s3TpUgtTha6zZ88awGzcuNEYY0xlZaWJiIgwubm5vm0OHDhgAFNcXGxVzKBXVVVl+vbta9atW2cmT57sKyva3/73L//yL2bixImf+7zX6zUpKSnmv/7rv3xjlZWVxuFwmD//+c9tETHkzJo1y9x7771NxubPn2/uvvtuY4z2ub99uqw0Z//u37/fAGbbtm2+bd566y1js9nMxx9/3Oz31mEgoL6+nh07dpCZmekbs9vtZGZmUlxcbGGy0OVyuQDo2LEjADt27KChoaHJz6B///6kpaXpZ3AdFi1axKxZs5rsV9D+bg2rVq1i1KhRLFiwgKSkJIYPH86LL77oe/7YsWOUlZU12edOp5OxY8dqn7fQ+PHjKSoq4vDhwwDs3r2bzZs3c/vttwPa562tOfu3uLiYxMRERo0a5dsmMzMTu91OSUlJs98rKG9k6G/nz5/H4/GQnJzcZDw5OZmDBw9alCp0eb1eFi9ezIQJExg8eDAAZWVlREZGkpiY2GTb5ORkysrKLEgZ/P7yl7+wc+dOtm3b9pnntL/97+jRozz77LMsWbKEf/3Xf2Xbtm18//vfJzIykoULF/r269V+z2ift8wjjzyC2+2mf//+hIWF4fF4eOqpp7j77rsBtM9bWXP2b1lZGUlJSU2eDw8Pp2PHjtf0M1BZkTa3aNEi9u7dy+bNm62OErJOnTrFww8/zLp164iKirI6Trvg9XoZNWoUP/vZzwAYPnw4e/fu5bnnnmPhwoUWpwtNr7/+Oq+++iqvvfYagwYNYteuXSxevJhu3bppn4cYHQYCOnfuTFhY2GdWQpSXl5OSkmJRqtD00EMPsWbNGt555x169OjhG09JSaG+vp7Kysom2+tn0DI7duzg7NmzjBgxgvDwcMLDw9m4cSNPP/004eHhJCcna3/7WdeuXRk4cGCTsQEDBnDy5EkA337V7xn/+fGPf8wjjzzCnXfeyZAhQ/ja177GD37wA5YuXQpon7e25uzflJQUzp492+T5xsZGKioqrulnoLICREZGMnLkSIqKinxjXq+XoqIiMjIyLEwWOowxPPTQQxQUFLB+/XrS09ObPD9y5EgiIiKa/AwOHTrEyZMn9TNogalTp7Jnzx527drle4waNYq7777b9+/a3/41YcKEzyzHP3z4MD179gQgPT2dlJSUJvvc7XZTUlKifd5Cly5dwm5v+jEWFhaG1+sFtM9bW3P2b0ZGBpWVlezYscO3zfr16/F6vYwdO7b5b3bdpweHiL/85S/G4XCYZcuWmf3795v777/fJCYmmrKyMqujhYQHH3zQOJ1Os2HDBnPmzBnf49KlS75tvvOd75i0tDSzfv16s337dpORkWEyMjIsTB1a/nk1kDHa3/62detWEx4ebp566inz4YcfmldffdXExMSYV155xbfNz3/+c5OYmGhWrlxpPvjgAzN37lwto70OCxcuNN27d/ctXV6+fLnp3Lmz+clPfuLbRvv8+lRVVZn333/fvP/++wYwv/rVr8z7779vTpw4YYxp3v6dMWOGGT58uCkpKTGbN282ffv21dLl6/G///u/Ji0tzURGRpoxY8aY9957z+pIIQO46uOll17ybXP58mXz3e9+13To0MHExMSYefPmmTNnzlgXOsR8uqxof/vf6tWrzeDBg43D4TD9+/c3L7zwQpPnvV6veeyxx0xycrJxOBxm6tSp5tChQxalDX5ut9s8/PDDJi0tzURFRZnevXubf/u3fzN1dXW+bbTPr88777xz1d/dCxcuNMY0b/9euHDB3HXXXSYuLs4kJCSYb37zm6aqquqactiM+adL/YmIiIgEGJ2zIiIiIgFNZUVEREQCmsqKiIiIBDSVFREREQloKisiIiIS0FRWREREJKCprIiIiEhAU1kRERGRgKayIiIiIgFNZUVEREQCmsqKiIiIBDSVFREREQlo/w8CzjbYMUkX1gAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "np_sol = np.linalg.solve(A.todense(), b)\n", - "plt.scatter(np_sol, qubo_sol.solution)\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 45, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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CRMINwM4l3k+duzYaSHmVKi0+DWNF8ywXQcTeguzgdatW2fZ7XZr9erV1u7du63KykrL5XJZfr/fsizLuvvuu63a2tpo/7fffttKTU21vv/971ttbW3WkiVLeEz8LMQ7z08++aSVnp5uvfTSS9YHH3wQ3Y4cOTJcp5AU4p3nv8ZTVGcn3nnet2+fNXbsWKu6utrq6OiwNm7caGVlZVnf+c53husUkkK887xkyRJr7Nix1s9//nNrz5491q9+9SvryiuvtO64447hOoWkcOTIEWvXrl3Wrl27LEnWM888Y+3atcv64x//aFmWZdXW1lp33313tP+px8S/+c1vWm1tbdaKFSt4THyk+uEPf2hNmjTJSk9Pt6ZOnWr95je/ie676aabrHvvvTem/y9+8QvrU5/6lJWenm59+tOftn75y18OccXJKZ55vvzyyy1Jp21LliwZ+sKTTLx/n/8vAs7Zi3eet23bZhUVFVl2u92aPHmy9d3vftfq6+sb4qqTTzzzHA6HrUcffdS68sorrYyMDCs3N9e6//77rQ8//HDoC08ib7zxRr//vT01t/fee6910003nTbm2muvtdLT063JkydbP/3pTxNeZ4plsQ4HAADMwj04AADAOAQcAABgHAIOAAAwDgEHAAAYh4ADAACMQ8ABAADGIeAAAADjEHAAAIBxCDgAAMA4BBwAAGAcAg4AADAOAQcAABjn/wFhkHggCXOdNwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.scatter(list(range(2)), (A @ np_sol - b))\n", - "plt.scatter(list(range(2)), (A @ qubo_sol.solution - b))" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [], - "source": [ - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "from vqls_prototype import VQLS\n", - "from qiskit.primitives import Estimator\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit_algorithms.optimizers import CG\n", - "\n", - "qc = RealAmplitudes(2, reps=3, entanglement=\"full\")\n", - "estimator = Estimator()\n", - "\n", - "vqls = VQLS(estimator, qc, CG(), options={\"matrix_decomposition\": \"pauli\"})\n", - "# res = vqls.solve(A.todense(),b)" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 4/4 [00:00<00:00, 231.54it/s]\n" - ] - } - ], - "source": [ - "from vqls_prototype.matrix_decomposition import (\n", - " PauliDecomposition,\n", - " SymmetricDecomposition,\n", - ")\n", - "\n", - "pd = PauliDecomposition(A)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/trash/epanet.py b/docs/notebooks/trash/epanet.py deleted file mode 100644 index 9614408..0000000 --- a/docs/notebooks/trash/epanet.py +++ /dev/null @@ -1,35 +0,0 @@ -import wntr -from quantum_newton_raphson.qubo_solver import QUBO_SOLVER -import wntr_quantum - -# Create a water network model -inp_file = "networks/Net0.inp" -# inp_file = "networks/Net2Loops.inp" -wn = wntr.network.WaterNetworkModel(inp_file) - -# Graph the network -wntr.graphics.plot_network(wn, title=wn.name, node_labels=True) - -# define a qubo solver -linear_solver = QUBO_SOLVER( - num_qbits=11, - num_reads=250, - # iterations=5, - range=600, - offset=250, - # temperature=1e4, - use_aequbols=False, -) - -sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver) -results = sim.run_sim(linear_solver=linear_solver) - -# Plot results on the network -pressure_at_5hr = results.node["pressure"].loc[0, :] -wntr.graphics.plot_network( - wn, - node_attribute=pressure_at_5hr, - node_size=50, - title="Pressure at 5 hours", - node_labels=False, -) diff --git a/docs/notebooks/trash/getting_stared.ipynb b/docs/notebooks/trash/getting_stared.ipynb deleted file mode 100644 index 3f4e2d4..0000000 --- a/docs/notebooks/trash/getting_stared.ipynb +++ /dev/null @@ -1,364 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Define the system " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "metadata": {} - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlv0lEQVR4nO3dfXDU9YHH8c8mSx5IDAESECsEghhCUEMSTEKSzfMuFq1Tezr1oT7V8x6860wfZnRKb46O1dbTTp3qnC22pbbW3jjVG6diDXkiT4QkmBChQASRBwWKiQQa8pz87o/WnDEBAiT57v5+79eMf2R3s/vZrdO83f3trsuyLEsAAMCxgkwPAAAAZhEDAAA4HDEAAIDDEQMAADgcMQAAgMMRAwAAOBwxAACAwxEDAAA4HDEAAIDDEQNAALv//vsVGRlpeoZf+fWvfy2Xy6VDhw6ZngIEDGIAmKBXXnlFzz77rOkZU+7b3/62VqxYIen//7CGhYXpo48+GnPZvLw8rVy58pJu50KP5y9/+UslJiYqLCxMy5Yt03PPPXdJtwPgwogBYIKcEgObN2/WunXrRp3W19enH/3oR5N6O+d7PH/+85/roYceUlJSkp577jllZmbqG9/4hp566qkLXu/XvvY19fT0KC4ublL3AnZGDAAB6OzZs1NyvQcPHlRbW9uYGEhOTtaLL76oY8eOTcntflZPT4/Wr1+vdevW6Q9/+IP+8R//Ub/5zW9099136/HHH9epU6fO+/vBwcEKCwuTy+Wa8q2AXRADsK0NGzbI5XLpwIEDuv/++xUdHa1Zs2bpgQceUHd396jLvvzyy0pNTVV4eLjmzJmjr371qzp69OjI+Xl5edq8ebMOHz4sl8sll8ulxYsXy7IsxcTE6Fvf+tbIZYeHhxUdHa3g4GB1dnaOnP7UU0/J7Xarq6tr5LSKigrl5OQoIiJC0dHRuvXWW7V3795x78eePXt01113afbs2crOzj7n/d65c6diY2OVl5c3cls7duyQz+dTTEyMwsPDtWTJEj344INjfnfz5s2aNWvWmOv/7ne/q6GhoQk/O3Cpj6ckVVZWqqOjQ//6r/866jofeeQRnT17Vps3bz7vbY93zMDixYt18803q7a2VjfeeKPCwsIUHx+v3/zmN+P+bnV1tf7pn/5Jc+fOVVRUlO69994LRggQyNymBwBT7Y477tCSJUv0wx/+UM3NzfrFL36hefPmjTzl/MQTT+g//uM/dMcdd+ihhx7Sxx9/rOeee04ej0ctLS2Kjo7W+vXrdfr0aX344Yf6yU9+IkmKjIyUy+VSVlaWqqurR27v3Xff1enTpxUUFKS6urqR/8quqanRqlWrRg74Kysr00033aT4+Hht2LBBPT09eu6555SVlaXm5uaRP46fuv3227Vs2TI9+eSTOtc3jzc1Ncnn8yktLU1vvPGGwsPDdfLkSXm9XsXGxuqxxx5TdHS0Dh06pNdff33M77/11lsqLi6W2z36/xqWLFmie++9Vy+++KIee+wxXXXVVed8vC/n8ZSklpYWSVJaWtqo601NTVVQUJBaWlp0zz33nPP2z+XAgQP6h3/4B33961/Xfffdp1/96le6//77lZqaqqSkpFGX/bd/+zdFR0drw4YNamtr0wsvvKDDhw9r69atPOMAe7IAm/rP//xPS5L14IMPjjr9y1/+sjV37lzLsizr0KFDVnBwsPXEE0+MusyuXbsst9s96vR169ZZcXFxY27n6aeftoKDg60zZ85YlmVZP/3pT624uDjrxhtvtB599FHLsixraGjIio6Otr75zW+O/F5ycrI1b948q6OjY+S01tZWKygoyLr33nvH3I8777xzzG3fd999VkREhGVZllVbW2tFRUVZ69ats3p7e0cu87//+7+WJKupqem8j9fZs2etsLAwa9OmTSOnbdq0aeR333//fcvtdlvf+MY3Rs7Pzc21kpKSRn6ejMfzkUcesYKDg8fdGBsba331q1897/34dPMHH3wwclpcXJwlyaqurh457eTJk1ZoaKj17W9/e8zvpqamWv39/SOn/9d//ZclyXrjjTfOe9tAoOJlAtjeP//zP4/6OScnRx0dHTpz5oxef/11DQ8P64477lB7e/vIP1deeaWWLVumysrKC15/Tk6OhoaGtG3bNkl/ewYgJydHOTk5qqmpkSTt3r1bnZ2dysnJkSQdP35cO3fu1P333685c+aMXNf111+v4uJivfXWWxe8H59VWVkpn8+nwsJCvf766woNDR05Lzo6WpL05ptvamBg4JzXUVFRob6+Pt10003jnh8fH6+vfe1r2rhxo44fPz7uZSbj8ezp6VFISMi454WFhamnp+eC1zGeFStWjDz+khQbG6uEhAQdPHhwzGUffvhhzZgx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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import wntr\n", - "import wntr_quantum\n", - "\n", - "# Create a water network model\n", - "inp_file = \"networks/Net0.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# Graph the network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Solve Classically\n", - "we use the default solver of the QuantumWNTRSimulator, that uses a LU solver, a s a benchmark of the calculation" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "metadata": {} - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Success [0. 0. 0. 0.]\n", - "Success [0. 0. 0. 0.]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/nico/miniconda3/envs/vitens/lib/python3.9/site-packages/scipy/sparse/linalg/_dsolve/linsolve.py:412: SparseEfficiencyWarning: splu converted its input to CSC format\n", - " warn('splu converted its input to CSC format', SparseEfficiencyWarning)\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sim = wntr_quantum.sim.QuantumWNTRSimulator(wn)\n", - "results = sim.run_sim()\n", - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Solve with the quantum reordering\n", - "The quantum reordering solver use a QUBO approach to find the optimal reordering of the matrix. For small matrices as this one it doesn't change anything compared to the classical approach" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Success [-1.421e-14 0.000e+00 0.000e+00 0.000e+00]\n", - "Success [-1.421e-14 0.000e+00 0.000e+00 0.000e+00]\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/nico/miniconda3/envs/vitens/lib/python3.9/site-packages/scipy/sparse/linalg/_dsolve/linsolve.py:412: SparseEfficiencyWarning: splu converted its input to CSC format\n", - " warn('splu converted its input to CSC format', SparseEfficiencyWarning)\n" - ] - } - ], - "source": [ - "# Simulate hydraulics\n", - "from dwave.samplers import SimulatedAnnealingSampler\n", - "from quantum_newton_raphson.splu_solver import SPLU_SOLVER\n", - "from quantum_newton_raphson.splu_solver import QUBOReorder\n", - "\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# instantiate the quantum reorder solver using a DWAVE sampler\n", - "reorder_solver = QUBOReorder(sampler=SimulatedAnnealingSampler())\n", - "\n", - "# define the linear solver with the reorder solver\n", - "linear_solver = SPLU_SOLVER(reorder_solver=reorder_solver)\n", - "sim = wntr_quantum.sim.QuantumWNTRSimulator(wn, linear_solver=linear_solver)\n", - "results = sim.run_sim(\n", - " linear_solver=linear_solver, solver_options={\"TOL\": 1e-6, \"FIXED_POINT\": False}\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Solve with the QUBO Linear Solver\n", - "We then use the QUBO linear solver within the Quantum Newton Raphson" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "metadata": {} - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/sim/core.py:197: UserWarning: Simulation did not converge at time 00:00:00. Line search failed at iteration 0\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "# Simulate hydraulics\n", - "from dwave.samplers import SimulatedAnnealingSampler\n", - "from quantum_newton_raphson.qubo_solver import QUBO_SOLVER\n", - "\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# define the linear solver with the reorder solver\n", - "linear_solver = QUBO_SOLVER(num_qbits=15, num_reads=200)\n", - "sim = wntr_quantum.sim.QuantumWNTRSimulator(wn, linear_solver=linear_solver)\n", - "results = sim.run_sim(\n", - " linear_solver=linear_solver, solver_options={\"TOL\": 1e-1, \"FIXED_POINT\": True}\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "metadata": {} - }, - "outputs": [], - "source": [ - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## VQLS Solver\n", - "We now use the VQLS solver" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Simulate hydraulics\n", - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "from qiskit.primitives import Estimator\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit_algorithms.optimizers import CG, ADAM, COBYLA\n", - "\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "estimator = Estimator()\n", - "ansatz = RealAmplitudes(num_qubits=2, reps=3, entanglement=\"full\")\n", - "opt = CG()\n", - "\n", - "# define the linear solver with the reorder solver\n", - "linear_solver = VQLS_SOLVER(\n", - " estimator=estimator,\n", - " ansatz=ansatz,\n", - " optimizer=opt,\n", - " matrix_decomposition=\"pauli\",\n", - " verbose=True,\n", - ")\n", - "sim = wntr_quantum.sim.QuantumWNTRSimulator(wn, linear_solver=linear_solver)\n", - "results = sim.run_sim(linear_solver=linear_solver, solver_options={\"TOL\": 1e-1})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "A = np.array(\n", - " [\n", - " [1.226e01, -1.000e00, 3.356e00, 0.000e00],\n", - " [-1.000e00, 2.263e04, -1.504e02, 1.504e02],\n", - " [3.356e00, -1.504e02, 2.000e00, -1.000e00],\n", - " [0.000e00, 1.504e02, -1.000e00, 1.000e00],\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "u, v = np.linalg.eigh(A)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "u" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/trash/qubo_solver.py b/docs/notebooks/trash/qubo_solver.py deleted file mode 100644 index 4d2e791..0000000 --- a/docs/notebooks/trash/qubo_solver.py +++ /dev/null @@ -1,32 +0,0 @@ -import wntr -from quantum_newton_raphson.qubo_solver import QUBO_SOLVER -import wntr_quantum - -# Create a water network model -inp_file = "networks/Net0.inp" -wn = wntr.network.WaterNetworkModel(inp_file) - -# Graph the network -# wntr.graphics.plot_network(wn, title=wn.name, node_labels=True) - -# classical solution -# sim = wntr_quantum.sim.QuantumWNTRSimulator(wn) -# results = sim.run_sim() - -# Simulate hydraulics -wn = wntr.network.WaterNetworkModel(inp_file) - -# define the linear solver with the reorder solver -linear_solver = QUBO_SOLVER( - num_qbits=11, - num_reads=100, - iterations=5, - range=150, - offset=0, - temperature=1e4, - use_aequbols=True, -) -sim = wntr_quantum.sim.QuantumWNTRSimulator(wn, linear_solver=linear_solver) -results = sim.run_sim( - linear_solver=linear_solver, solver_options={"TOL": 1e-2, "FIXED_POINT": False} -) diff --git a/docs/notebooks/trash/qubols.ipynb b/docs/notebooks/trash/qubols.ipynb deleted file mode 100644 index dcc2600..0000000 --- a/docs/notebooks/trash/qubols.ipynb +++ /dev/null @@ -1,957 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "tags": [ - "remove_cell" - ] - }, - "source": [ - "# QUBO formulation of the Redundant Calibration" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "np.random.seed(20)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "A = np.array(\n", - " [\n", - " [1.000e00, -3.779e03, 0.000e00, -1.000e00],\n", - " [-1.000e00, 0.000e00, -8.447e01, 0.000e00],\n", - " [0.000e00, -1.000e00, 0.000e00, 0.000e00],\n", - " [0.000e00, 1.000e00, -1.000e00, 0.000e00],\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "b = np.array([-1.484e01, -2.198e-01, 6.029e-03, -1.099e-04])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Classical Solution\n", - "\n", - "The solution of such a small system can be obtained by a least square as implemented in numpy" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 7.19786377e-01 -6.02900000e-03 -5.91910000e-03 3.83433774e+01]\n" - ] - } - ], - "source": [ - "npsol = np.linalg.solve(A, b)\n", - "npsol = np.asarray(npsol).flatten()\n", - "print(npsol)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_4843/3473248641.py:1: FutureWarning: `rcond` parameter will change to the default of machine precision times ``max(M, N)`` where M and N are the input matrix dimensions.\n", - "To use the future default and silence this warning we advise to pass `rcond=None`, to keep using the old, explicitly pass `rcond=-1`.\n", - " np.linalg.lstsq(A,b)\n" - ] - }, - { - "data": { - "text/plain": [ - "(array([ 7.19786377e-01, -6.02900000e-03, -5.91910000e-03, 3.83433774e+01]),\n", - " array([], dtype=float64),\n", - " 4,\n", - " array([3.77900053e+03, 8.44818368e+01, 1.21073581e-02, 2.58708269e-04]))" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.linalg.lstsq(A, b)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Solving the system\n", - "\n", - "We will use here the `SimulatedAnnealingSampler` to be able to run that code locally. Quantum solvers are available through the Leap cloud service." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "from qubols.qubols import QUBOLS\n", - "from qubols.encodings import RangedEfficientEncoding\n", - "import dimod\n", - "import neal\n", - "\n", - "exact = dimod.ExactSolver()\n", - "sim = neal.SimulatedAnnealingSampler()\n", - "\n", - "options = {\n", - " \"num_reads\": 100,\n", - " \"num_qbits\": 21,\n", - " \"sampler\": sim,\n", - " \"encoding\": RangedEfficientEncoding,\n", - " \"range\": 10.0,\n", - " \"offset\": [0, 0, 0, 0],\n", - "}\n", - "qubols = QUBOLS(options)\n", - "# sol_num = qubols.solve(At, bt)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# import matplotlib.pyplot as plt\n", - "# plt.scatter(npsol, sol_num)\n", - "# plt.axline( (0,0),slope=1,linestyle='--',color='gray')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.8.0 ('qubols')", - "language": "python", - "name": "python3" - }, - "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.9.0" - }, - "vscode": { - "interpreter": { - "hash": "390591a6667b05d6f83558ed597f55be1305d4de992db830679d199a6a0e520c" - } - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "state": { - "17046f96803d48aa8c63b99a5c89e6f3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "1a46e33438a648dd839fe5fd43b9582b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "1f812fe9a02b41b885f01e3190957acf": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": "\n \". . . . right \"\n ", - "grid_template_columns": "20% 20% 20% 20% 20%", - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "100%" - } - }, - "20439ee3a84741dc9a137f7964898fc3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_f0e6a746eff140269e915ef65de640c7", - "placeholder": "​", - "style": "IPY_MODEL_96316857896d44328b3898d849594ae7", - "value": "
Status
" - } - }, - "246d39f98fdb4892bc1d5bfb88d2f1cd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "27e0478b2a9c4533b2e67eac937cbebc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_ac5a0f78ef8140a2abdf035fd1751936", - "IPY_MODEL_5ff6f36eaa894a339210fc29fdbeedcf", - "IPY_MODEL_20439ee3a84741dc9a137f7964898fc3", - "IPY_MODEL_eef64edafd8f47c885da65fa3ca0ab8a", - "IPY_MODEL_a38db3ffdfc848c0b0150e42b3509be5" - ], - "layout": "IPY_MODEL_fc018f99fbb44aa9beb54a8e6be5209e" - } - }, - "2f981df37e914685992f4564103ef872": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "3aa67247d1a9433f87b13ce1370c8b1c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "190px" - } - }, - "40a8f99fef5b4aad89f533edcb091c3f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ButtonStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "button_color": null, - "font_weight": "" - } - }, - "46f75da5f7ab4f33b4df8618ccffde6b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "5ff6f36eaa894a339210fc29fdbeedcf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_9e036ff6f31e4efb9471d371db06f533", - "placeholder": "​", - "style": "IPY_MODEL_1a46e33438a648dd839fe5fd43b9582b", - "value": "
Backend
" - } - }, - "608e06da96f840e890006ad286afc34b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_74038cd5fbe8491ba5457f6cc81f7b5a", - "placeholder": "​", - "style": "IPY_MODEL_8569084253df4279b752a85c0b99027b", - "value": "

Circuit Properties

" - } - }, - "74038cd5fbe8491ba5457f6cc81f7b5a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": "0px 0px 10px 0px", - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "8569084253df4279b752a85c0b99027b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "917c693fd8d84f2e99f59d75cd5062c2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "GridBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "GridBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "GridBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_b7e87c3bbc404502ab1550d64f86c473" - ], - "layout": "IPY_MODEL_1f812fe9a02b41b885f01e3190957acf" - } - }, - "96316857896d44328b3898d849594ae7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "9e036ff6f31e4efb9471d371db06f533": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "145px" - } - }, - "a38db3ffdfc848c0b0150e42b3509be5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2f981df37e914685992f4564103ef872", - "placeholder": "​", - "style": "IPY_MODEL_246d39f98fdb4892bc1d5bfb88d2f1cd", - "value": "
Message
" - } - }, - "ac5a0f78ef8140a2abdf035fd1751936": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_3aa67247d1a9433f87b13ce1370c8b1c", - "placeholder": "​", - "style": "IPY_MODEL_46f75da5f7ab4f33b4df8618ccffde6b", - "value": "
Job ID
" - } - }, - "b7e87c3bbc404502ab1550d64f86c473": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ButtonView", - "button_style": "primary", - "description": "Clear", - "disabled": false, - "icon": "", - "layout": "IPY_MODEL_f6a39516121743099bece32bc0c3c696", - "style": "IPY_MODEL_40a8f99fef5b4aad89f533edcb091c3f", - "tooltip": "" - } - }, - "eef64edafd8f47c885da65fa3ca0ab8a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_ef270ca07615429ab689824b66fdb1ff", - "placeholder": "​", - "style": "IPY_MODEL_17046f96803d48aa8c63b99a5c89e6f3", - "value": "
Queue
" - } - }, - "ef270ca07615429ab689824b66fdb1ff": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "70px" - } - }, - "f0e6a746eff140269e915ef65de640c7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "95px" - } - }, - "f6a39516121743099bece32bc0c3c696": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": "right", - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": "0px 0px 0px 0px", - "right": null, - "top": null, - "visibility": null, - "width": "70px" - } - }, - "fc018f99fbb44aa9beb54a8e6be5209e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": "0px 0px 0px 37px", - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "600px" - } - } - }, - "version_major": 2, - "version_minor": 0 - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/trash/vqls.ipynb b/docs/notebooks/trash/vqls.ipynb deleted file mode 100644 index 2d818d9..0000000 --- a/docs/notebooks/trash/vqls.ipynb +++ /dev/null @@ -1,998 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "tags": [ - "remove_cell" - ] - }, - "source": [ - "# VQLS Solver" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import scipy.sparse as sp\n", - "\n", - "np.random.seed(20)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "matrix([[0. , 0.73688738, 0. , 0.98942514],\n", - " [0.73688738, 0. , 0.79096501, 0. ],\n", - " [0. , 0.79096501, 0. , 0.86638985],\n", - " [0.98942514, 0. , 0.86638985, 0. ]])" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "A = sp.random(4, 4, density=0.25)\n", - "A = A + A.T\n", - "A = A.todense()\n", - "A" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [], - "source": [ - "b = np.random.rand(4)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "ename": "ImportError", - "evalue": "cannot import name 'MatrixDecomposition' from 'vqls_prototype.matrix_decomposition' (/home/nico/QuantumApplicationLab/vqls-prototype/vqls_prototype/matrix_decomposition/__init__.py)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[35], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mvqls_prototype\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmatrix_decomposition\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m PauliDecomposition, SymmetricDecomposition, MatrixDecomposition\n\u001b[1;32m 2\u001b[0m pd \u001b[38;5;241m=\u001b[39m PauliDecomposition(A)\n", - "\u001b[0;31mImportError\u001b[0m: cannot import name 'MatrixDecomposition' from 'vqls_prototype.matrix_decomposition' (/home/nico/QuantumApplicationLab/vqls-prototype/vqls_prototype/matrix_decomposition/__init__.py)" - ] - } - ], - "source": [ - "from vqls_prototype.matrix_decomposition import (\n", - " PauliDecomposition,\n", - " SymmetricDecomposition,\n", - ")\n", - "\n", - "pd = PauliDecomposition(A)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "decomposition = {\n", - " \"pauli\": PauliDecomposition,\n", - " \"symmetric\": SymmetricDecomposition,\n", - "}\n", - "isinstance(pd, (PauliDecomposition, SymmetricDecomposition))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0. +0.j, 0.73688738+0.j, 0. +0.j, 0.98942514+0.j],\n", - " [0.73688738+0.j, 0. +0.j, 0.79096501+0.j, 0. +0.j],\n", - " [0. +0.j, 0.79096501+0.j, 0. +0.j, 0.86638985+0.j],\n", - " [0.98942514+0.j, 0. +0.j, 0.86638985+0.j, 0. +0.j]])" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.recompose()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Classical Solution\n", - "\n", - "The solution of such a small system can be obtained by a least square as implemented in numpy" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[-0.03707238 0.63032045 -0.37186951 0.09258987]\n" - ] - } - ], - "source": [ - "npsol = np.linalg.solve(A, b)\n", - "npsol = np.asarray(npsol).flatten()\n", - "print(npsol)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Solving the system\n", - "\n", - "We will use here the `VQLS` to be able to run that code locally. " - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 16/16 [00:00<00:00, 1387.55it/s]\n" - ] - } - ], - "source": [ - "from vqls_prototype import VQLS\n", - "from qiskit.primitives import Estimator\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit_algorithms.optimizers import CG\n", - "\n", - "qc = RealAmplitudes(2, reps=3, entanglement=\"full\")\n", - "estimator = Estimator()\n", - "\n", - "vqls = VQLS(estimator, qc, CG(), options={\"matrix_decomposition\": \"pauli\"})\n", - "res = vqls.solve(A, b)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3.8.0 ('qubols')", - "language": "python", - "name": "python3" - }, - "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.9.0" - }, - "vscode": { - "interpreter": { - "hash": "390591a6667b05d6f83558ed597f55be1305d4de992db830679d199a6a0e520c" - } - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "state": { - "17046f96803d48aa8c63b99a5c89e6f3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "1a46e33438a648dd839fe5fd43b9582b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "1f812fe9a02b41b885f01e3190957acf": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": "\n \". . . . right \"\n ", - "grid_template_columns": "20% 20% 20% 20% 20%", - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "100%" - } - }, - "20439ee3a84741dc9a137f7964898fc3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_f0e6a746eff140269e915ef65de640c7", - "placeholder": "​", - "style": "IPY_MODEL_96316857896d44328b3898d849594ae7", - "value": "
Status
" - } - }, - "246d39f98fdb4892bc1d5bfb88d2f1cd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "27e0478b2a9c4533b2e67eac937cbebc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_ac5a0f78ef8140a2abdf035fd1751936", - "IPY_MODEL_5ff6f36eaa894a339210fc29fdbeedcf", - "IPY_MODEL_20439ee3a84741dc9a137f7964898fc3", - "IPY_MODEL_eef64edafd8f47c885da65fa3ca0ab8a", - "IPY_MODEL_a38db3ffdfc848c0b0150e42b3509be5" - ], - "layout": "IPY_MODEL_fc018f99fbb44aa9beb54a8e6be5209e" - } - }, - "2f981df37e914685992f4564103ef872": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "3aa67247d1a9433f87b13ce1370c8b1c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "190px" - } - }, - "40a8f99fef5b4aad89f533edcb091c3f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ButtonStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "button_color": null, - "font_weight": "" - } - }, - "46f75da5f7ab4f33b4df8618ccffde6b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "5ff6f36eaa894a339210fc29fdbeedcf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_9e036ff6f31e4efb9471d371db06f533", - "placeholder": "​", - "style": "IPY_MODEL_1a46e33438a648dd839fe5fd43b9582b", - "value": "
Backend
" - } - }, - "608e06da96f840e890006ad286afc34b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_74038cd5fbe8491ba5457f6cc81f7b5a", - "placeholder": "​", - "style": "IPY_MODEL_8569084253df4279b752a85c0b99027b", - "value": "

Circuit Properties

" - } - }, - "74038cd5fbe8491ba5457f6cc81f7b5a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": "0px 0px 10px 0px", - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "8569084253df4279b752a85c0b99027b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "917c693fd8d84f2e99f59d75cd5062c2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "GridBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "GridBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "GridBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_b7e87c3bbc404502ab1550d64f86c473" - ], - "layout": "IPY_MODEL_1f812fe9a02b41b885f01e3190957acf" - } - }, - "96316857896d44328b3898d849594ae7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "9e036ff6f31e4efb9471d371db06f533": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "145px" - } - }, - "a38db3ffdfc848c0b0150e42b3509be5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2f981df37e914685992f4564103ef872", - "placeholder": "​", - "style": "IPY_MODEL_246d39f98fdb4892bc1d5bfb88d2f1cd", - "value": "
Message
" - } - }, - "ac5a0f78ef8140a2abdf035fd1751936": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_3aa67247d1a9433f87b13ce1370c8b1c", - "placeholder": "​", - "style": "IPY_MODEL_46f75da5f7ab4f33b4df8618ccffde6b", - "value": "
Job ID
" - } - }, - "b7e87c3bbc404502ab1550d64f86c473": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ButtonView", - "button_style": "primary", - "description": "Clear", - "disabled": false, - "icon": "", - "layout": "IPY_MODEL_f6a39516121743099bece32bc0c3c696", - "style": "IPY_MODEL_40a8f99fef5b4aad89f533edcb091c3f", - "tooltip": "" - } - }, - "eef64edafd8f47c885da65fa3ca0ab8a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_ef270ca07615429ab689824b66fdb1ff", - "placeholder": "​", - "style": "IPY_MODEL_17046f96803d48aa8c63b99a5c89e6f3", - "value": "
Queue
" - } - }, - "ef270ca07615429ab689824b66fdb1ff": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "70px" - } - }, - "f0e6a746eff140269e915ef65de640c7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "95px" - } - }, - "f6a39516121743099bece32bc0c3c696": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": "right", - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": "0px 0px 0px 0px", - "right": null, - "top": null, - "visibility": null, - "width": "70px" - } - }, - "fc018f99fbb44aa9beb54a8e6be5209e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": "0px 0px 0px 37px", - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "600px" - } - } - }, - "version_major": 2, - "version_minor": 0 - } - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/vqls_solver.ipynb b/docs/notebooks/vqls_solver.ipynb deleted file mode 100644 index a02b53e..0000000 --- a/docs/notebooks/vqls_solver.ipynb +++ /dev/null @@ -1,1126 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# VQLS Solver Performance Analysis\n", - "\n", - "We test here the VQLS SOLVER in isolation to explore its performance.\n", - "\n", - "Wr first define the system we want to explore" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/home/nico/QuantumApplicationLab/vitens/EPANET\"\n", - "os.environ[\"EPANET_TMP\"] = \"/home/nico/.epanet_quantum/\"" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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KBAIqLKyUpK0efNm1dTUKBAISJI+//xzbdy4URMmTNDJJ58cvq8LLrhAAwYM0LJly773eXzXW2+9pYEDB6p///5avHix2rZtG74uIyNDkvTyyy83OBv/u958803V1dVp0KBBjV7fpUsX/eY3v9HcuXP1+eefN3qbltjPev369dPrr7+uRYsW6frrr1ebNm104MCBZv+81Px9PnLkiF577TUNHz5cXbp0Cd/u1FNP1ejRo7Vy5Urt27cv4r6Li4vVpk2b8OXJkycrISEhfJ/N3ffjMXHixIjzCer/Pn300UcRt0tISNCkSZPClxMTEzVp0iR99dVXWr9+fYvMAhwPYgCeO+OMMyIut2vXTtK3h1K3bt0q55y6deumzMzMiD8ffPCBvvrqq++9/9zcXPn9/vAbf30M9OnTR+vWrdPBgwfD19V/Fr9z505J0i9+8YsG93fOOeeourq6wRtf586dG338gwcPasiQIbrwwgu1cOHCBief9e3bV1dddZWmTZum9u3b64orrtDTTz+turq6iNstXbpU3bt3V4cOHZp8rnfffbe++eabJs8daIn9rNehQwf96le/UmFhoWbNmqWhQ4dqwIAB+uKLL5p9H83d5127dikUCjV5u6NHj0ac8yBJ3bp1i7icmpqqU089VTt27JDU/H0/Hsf6u/xdp512WoMTTM866yxJCs8HtCbOGYDn4uPjG113zuno0aPy+Xx65ZVXGr1dc/5BnzZt2ujiiy/WihUr9OGHH+qLL75QIBBQhw4ddPjwYa1Zs0aVlZU6++yzlZmZ+YOfR3JycqPrbdu21eDBg7VkyRL9/e9/19ChQyOu9/l8+utf/6rVq1frpZde0quvvqprrrlGDzzwgFavXh1+jsuWLdPEiROPOUOXLl00duxYzZ07V1OmTGlwfUvsZ1MKCwtVUlKiJUuWRPzWG62au+/H41h/l4FoRgwgqnXt2lXOOXXu3Dn8m1NTfD5fk9cFAgHNmDFDb7zxhtq3b6+zzz5bPp9P5513niorK1VZWRnxJt2pUydJUlVVVYP7+ve//6327ds3+6uDPp9P8+fP1xVXXKGRI0fqlVdeafRfr+vZs6d69uyp0tJSLViwQGPGjNHzzz+v6667Tps3b9Z///vf8MmOx3L33XervLw8fALmd7XUfjamtrZWkrR3795m/0xz9zkpKUl+v7/J28XF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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 167, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import wntr\n", - "import wntr_quantum\n", - "\n", - "# Create a water network model\n", - "# inp_file = 'networks/Net0.inp'\n", - "# inp_file = 'networks/Net2Loops_modified.inp'\n", - "# inp_file = 'networks/Net1Loops.inp'\n", - "inp_file = \"networks/Net3Loops.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# Graph the network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We then solve it with the internal Cholesky solver implemented in WNTR Quantum" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.079 -0.04 0. -0.04 0. 0. 0. 0. ]\n", - " [-0.04 0.079 -0.04 0. 0. 0. 0. 0. ]\n", - " [ 0. -0.04 1.112 -0.197 0. 0. 0. -0.875]\n", - " [-0.04 0. -0.197 0.277 -0.04 0. 0. 0. ]\n", - " [ 0. 0. 0. -0.04 0.119 -0.04 0. -0.04 ]\n", - " [ 0. 0. 0. 0. -0.04 0.137 -0.097 0. ]\n", - " [ 0. 0. 0. 0. 0. -0.097 2.636 -1.268]\n", - " [ 0. 0. -0.875 0. -0.04 0. -1.268 2.183]]\n", - "b = [ -2.172 -2.354 -2.937 -1.711 -2.558 -0.911 874.005 -1.098]\n", - "x = [587.843 592.846 657.222 637.618 632.925 657.739 677.261 667.922]\n", - "residue = 1.7949679892771277e-13\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.034 -0.029 0. -0.005 0. 0. 0. 0. ]\n", - " [-0.029 0.033 -0.004 0. 0. 0. 0. 0. ]\n", - " [ 0. -0.004 0.203 -0.035 0. 0. 0. -0.163]\n", - " [-0.005 0. -0.035 0.115 -0.074 0. 0. 0. ]\n", - " [ 0. 0. 0. -0.074 0.091 -0.009 0. -0.007]\n", - " [ 0. 0. 0. 0. -0.009 0.031 -0.021 0. ]\n", - " [ 0. 0. 0. 0. 0. -0.021 0.456 -0.237]\n", - " [ 0. 0. -0.163 0. -0.007 0. -0.237 0.407]]\n", - "b = [ -1.271 -1.271 -1.748 -1.059 -1.43 -0.53 135.61 -0.636]\n", - "x = [286.348 287.208 584.663 518.139 517.613 589.736 646.091 617.636]\n", - "residue = 3.7150026643810154e-14\n", - "Solving the linear system Ax = b with:\n", - "A = [[ 0.053 -0.048 0. -0.005 0. 0. 0. 0. ]\n", - " [-0.048 0.053 -0.005 0. 0. 0. 0. 0. ]\n", - " [ 0. -0.005 0.203 -0.034 0. 0. 0. -0.164]\n", - " [-0.005 0. -0.034 0.123 -0.083 0. 0. 0. ]\n", - " [ 0. 0. 0. -0.083 0.1 -0.009 0. -0.008]\n", - " [ 0. 0. 0. 0. -0.009 0.029 -0.021 0. ]\n", - " [ 0. 0. 0. 0. 0. -0.021 0.457 -0.238]\n", - " [ 0. 0. -0.164 0. -0.008 0. -0.238 0.409]]\n", - "b = [ -1.271 -1.271 -1.748 -1.059 -1.43 -0.53 135.611 -0.636]\n", - "x = [285.178 286.915 584.641 517.963 517.401 589.726 646.091 617.627]\n", - "residue = 5.756353818672271e-14\n" - ] - }, - { - "data": { - "image/png": "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r169FBkZqQ0bNuiNN97Q1KlTdeutt2rWrFl64YUXdNNNNyk9PV1HjhzRyy+/rISEBF177bWSTjxE5cCBA7rqqqvUuHFjbdu2TdOmTVP79u3Vpk0bSVKvXr3UpEkTDR48WI8++qjcbrdeffVVJSUl6aeffqpSzY8++qjeffddXXfddcrMzFRGRoby8/O1Zs0avfnmm9q6dasSExMrfO1ll12munXrasCAAXrggQdkWZb+/ve/V7gsnJGRoblz52r48OHq1KmT4uLidP3111f4vqtWrVK/fv3Ur18/tWjRQsePH9e8efOUnZ2toUOHqkOHDlU6t8pERkZqwoQJGjhwoLp166Z+/fr5bsFq1qyZHn74Yd/YQYMGafLkyerdu7cGDx6s3NxcTZ8+XW3bttXhw4er9Hm9evVSSkqKunTpogYNGmjdunV6/vnn1bdvX8XHx9fIOQGOEcad5XCosluXgt0aZcyJ225iY2MD9v/1r381GRkZJiYmxsTHx5t27dqZxx57zPz888/GGGNWrVpl+vXrZ5o0aWKioqJMcnKyue6668zXX3/te48333zT9OrVyyQnJxuPx2OaNGlisrKyzK5du/w+a+XKlaZz586+MZMnTw54C1bfvn0rrPfIkSNm1KhRpkWLFsbj8ZjExERz2WWXmUmTJpmioqKgvxfZ2dnmkksuMTExMaZRo0bmscceM4sWLTKSzNKlS33jjh49au666y5Tp04dIyno7VibN282t912m2nWrJmJjo42tWrVMhkZGWb69OnG6/UGrceY/9yC9cYbb/i1l90eNWPGDL/2uXPnmosuushERUWZevXqmf79+/tutzvZP/7xD9O8eXPj8XhM+/btzaJFiwLegjVx4sRyr3/ppZdM165dTf369U1UVJRJT083jz76qMnLy6v0nICzjWXMKewOAQAAZxzXpAEAsClCGgAAmyKkAQCwKUIaAACbIqQBALApQhoAAJsipAEAsClCGgAAmyKkAQCwKUIaAACbIqQBALApQhoAAJsipAEAsClCGgAAmyKkAQCwKUIaAACbIqQBALApQhoAAJsipAEAsClCGgAAmyKkAQCwKUIaAACbIqQBALApQhoAAJsipAEAsClCGgAAmyKkAQCwKUIaAACbIqQBALApQhoAAJsipAEAsClCGgAAmyKkAQCwqYhwF1BdprRU3g1fyxzKlWolyN26syxPdLjLAiq157M1OvDdZrmjPWp8bWfVSqkX7pKASpmi/dLx7Sd+iGksy5MY3oLOMZYxxoS7iKoqWfOpihe8LB3Z/5/G6FhFdL1dkVfcGr7CgCD2rVqvzwY+q4NrtvjaXJERSv/11brk+QcUEe0JY3VAxUxJvpT7vnR8i39HTFMpua+siPjwFHaOcUxIl/6wXEVznpYClBvR8x5FdrsjxFUBweXlbNf8S4apKC+/wv7UGy5Tz3+OC3FVQHDGWyTt+JtUvL/iAZH1pF/cI8sdFdrCzkGOuSZdvHhmwICWpJJPXpcpOBa6goAq+PZPswMGtCRtf/dz7fn8+xBWBFTBkbWBA1qSig9IR74LXT3nMEdck/Zu/1Fm347gg4oKtPlfs5XXLCM0RQGV8BYWa/PcpZWOW/HcbKVGc7kG9tEy9gvFVpYOR9ZKdTqFpJ5zmSNC2hw9WKVxL02eoInZm85wNUDVJMijKdbllY778O35mvb2+BBUBFTNlo8fV+wv6gYfVBp4hQg1xxHXpL07N6hw+kOVjvu5w83Ka3rRmS8IqAJvUYm+v2q0vAXFQcfVv/VSNR55c4iqAip3XuyXiovICz7I00BWamZI6jmXOWIm7frFebIaNJPZszXwoKhaan7tXbKiYkJWF1CZgrt6asOrC4KOufTRu5XUoXWIKgIqZw67pL2Lgg9KaBeaYs5xjtk4Ftl7kOQKXG7kVf0JaNjOL5/or6jE2gH70+68UkmdCGjYTFxbKSolcL8nSYonpEPBEcvdZUpzvlTxgpdl9v/sayuJilNMrwGKuPjaMFYGBHZo3TZlD52s3Oy1vjZXjEdtfnODOk4YKleEO4zVARUzpQUnZtP5OZLKYsKSYs+TkvrIcjMpCgVHhbQkGWPk3fa9tqz+UsMeGanxc95Xh47sMIT9HVizWd+8+5Ee/5/f68WP56lT1y7hLgmolCk5LB3/99010Y1lRSaEt6BzjGOWu8tYliV3swt0uEl7fbBpr+RiFgJnqNeuuepe00ErtVfuOGYhcAYrIkFW/PknDgI65BwX0gAAnCsIaQAAbIqQBgDApghpAABsipAGAMCmCGkAAGyKkAYAwKYIaQAAbIqQBgDApghpAABsipAGAMCmCGkAAGyKkAYAwKYIaQAAbIqQBgDApghpAABsipAGAMCmCGkAAGyKkAYAwKYIaQAAbIqQBgDApghpAABsipAGAMCmCGkAAGyKkAYAwKYIaQAAbIqQBgDApghpAABsipAGAMCmCGkAAGyKkAYAwKYIaQAAbIqQBgDApghpAABsipAGAMCmCGkAwFmtWbNmmjJlSrjLOCWENAAg7DIzM2VZlp555hm/9n/+85+yLCtMVYUfIQ0AsIXo6GhNmDBBBw8eDHcptkFIAwBsoWfPnkpJSdH48eMDjnnrrbfUtm1bRUVFqVmzZnruuef8+nNzc3X99dcrJiZGaWlpmj17drn3OHTokO69914lJSUpISFBV111lb799tsaP5+aQEgDAGzB7XbrT3/6k6ZNm6YdO3aU61+5cqVuv/123XnnnVqzZo3Gjh2rJ598UjNnzvSNyczM1Pbt27V06VK9+eabeuGFF5Sbm+v3Prfddptyc3O1YMECrVy5Uh06dFCPHj104MCBM32K1RYR7gIAAChz0003qX379hozZoxeeeUVv77JkyerR48eevLJJyVJLVu21A8//KCJEycqMzNT69ev14IFC/Tll1+qU6dOkqRXXnlFbdq08b3HZ599pi+//FK5ubmKioqSJE2aNEn//Oc/9eabb2ro0KEhOtOqYSYNALCVCRMmaNasWVq3bp1f+7p169SlSxe/ti5dumjDhg0qLS3VunXrFBERoYyMDF9/69atVadOHd/P3377rY4ePar69esrLi7Od2zZskWbNm06o+d1KphJAwBspWvXrurdu7dGjRqlzMzMGn3vo0ePqmHDhlq2bFm5vpPD3C4IaQCA7TzzzDNq3769WrVq5Wtr06aNsrOz/cZlZ2erZcuWcrvdat26tUpKSrRy5UrfcndOTo4OHTrkG9+hQwft3r1bERERatasWShO5bSw3A0AsJ127dqpf//++t///V9f24gRI/Thhx9q3LhxWr9+vWbNmqXnn39ejzzyiCSpVatW6tOnj7KysvTFF19o5cqVuvfeexUTE+N7j549e+rSSy/VjTfeqA8++EBbt27V559/rieeeEJff/11yM+zMoQ0AMCWnnrqKXm9Xt/PHTp00Ouvv645c+boggsu0OjRo/XUU0/5LYnPmDFDjRo1Urdu3XTzzTdr6NChSk5O9vVblqV//etf6tq1qwYOHKiWLVvqzjvv1LZt29SgQYNQnl6VWMYYE+4iTsWqVauUkZHh2z4POAF/bgFUBzNp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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 168, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "results = sim.run_sim()\n", - "\n", - "# Plot results on the network\n", - "pressure_at_5hr = results.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The last matrix of the Newton Raphson has been stored in the `tmp` directory of EPANET. We can load it to further analyze how VQLS performs on it." - ] - }, - { - "cell_type": "code", - "execution_count": 169, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "import os\n", - "\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "util_path = os.path.join(epanet_path, \"src/py/\")\n", - "sys.path.append(util_path)\n", - "\n", - "from quantum_linsolve import load_json_data\n", - "\n", - "A, b = load_json_data(os.path.join(epanet_tmp, \"smat.json\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "181.65907919074067" - ] - }, - "execution_count": 170, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# import scipy.sparse as spsp\n", - "import numpy as np\n", - "\n", - "# size = 8\n", - "# A = spsp.random(size,size, density = 0.25)\n", - "# A=A+A.T\n", - "# A.todense()\n", - "\n", - "# b = np.random.rand(size)\n", - "np.linalg.cond(A.todense())" - ] - }, - { - "cell_type": "code", - "execution_count": 171, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "32.51322133881136" - ] - }, - "execution_count": 171, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P = np.diag(np.sqrt(np.diag(A.todense())))\n", - "iP = np.linalg.inv(P)\n", - "Q = iP\n", - "QAP = Q @ A @ iP\n", - "Qb = Q @ b\n", - "np.linalg.cond(Q @ A @ iP)" - ] - }, - { - "cell_type": "code", - "execution_count": 172, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1. , -0.909, 0. , -0.063, 0. , 0. , 0. , 0. ],\n", - " [-0.909, 1. , -0.044, 0. , 0. , 0. , 0. , 0. ],\n", - " [ 0. , -0.044, 1. , -0.218, 0. , 0. , 0. , -0.568],\n", - " [-0.063, 0. , -0.218, 1. , -0.754, 0. , 0. , 0. ],\n", - " [ 0. , 0. , 0. , -0.754, 1. , -0.161, 0. , -0.037],\n", - " [ 0. , 0. , 0. , 0. , -0.161, 1. , -0.178, 0. ],\n", - " [ 0. , 0. , 0. , 0. , 0. , -0.178, 1. , -0.551],\n", - " [ 0. , 0. , -0.568, 0. , -0.037, 0. , -0.551, 1. ]])" - ] - }, - "execution_count": 172, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "QAP" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "metadata": {}, - "outputs": [], - "source": [ - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "from qiskit.primitives import Estimator\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit_algorithms.optimizers import CG, COBYLA, ADAM, SPSA, AQGD\n", - "from qiskit_algorithms.gradients import LinCombEstimatorGradient\n", - "\n", - "# define the ansatz\n", - "qc = RealAmplitudes(3, reps=5, entanglement=\"full\")\n", - "\n", - "# define estimator\n", - "estimator = Estimator()\n", - "\n", - "# define the solver\n", - "vqls = VQLS_SOLVER(\n", - " estimator=estimator,\n", - " ansatz=qc,\n", - " optimizer=[COBYLA(maxiter=500), CG(disp=True, maxiter=50)],\n", - " # gradient = LinCombEstimatorGradient(estimator),\n", - " matrix_decomposition=\"symmetric\",\n", - " verbose=True,\n", - ")\n", - "# res = vqls.solve(A.todense(),b)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can solve the system using VQLS" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/QuantumNewtonRaphson/quantum_newton_raphson/utils.py:74: SparseEfficiencyWarning: spsolve requires A be CSC or CSR matrix format\n", - " warn(\"spsolve requires A be CSC or CSR matrix format\", SparseEfficiencyWarning)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Current function value: 0.000002\n", - " Iterations: 50\n", - " Function evaluations: 1824\n", - " Gradient evaluations: 96\n", - "[-0.09 -0.091 -0.374 -0.257 -0.232 -0.144 -0.622 -0.562]\n" - ] - } - ], - "source": [ - "res = vqls(QAP, Qb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can plot the evoluation of the los function" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 179, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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AwbxEhEREV0Lr8PLwoULhx1Ms2rVqoB1ExEREdHoEpK7SocqjUaDdevWcaPIIOJ7EHx8D4KP70Hw8T0ILkEcyZwkIiIiohDBlhciIiIKKwwvREREFFYYXoiIiCisMLwQERFRWGF4GSGDwYAJEyYgMjIS+fn5OHjwYLCrJBvPPfccBEHw+JoxY4Z0vqenB3q9HmPGjEFsbCwefPDBAVtQnD9/Hvfccw+io6ORnJyMZ555RtrnigYqKyvD0qVLkZaWBkEQsG3bNo/zoihi7dq1GDduHKKiolBQUIBTp055XNPa2opHHnkEWq0W8fHx+Pd//3d0dnZ6XPPpp5/i1ltvRWRkJDIzM/Hiiy/6+6WFjeHeg8cee2zAfxdLlizxuIbvwbVbv3498vLyEBcXh+TkZNx///04ceKExzW++tuzZ88e3HjjjdBoNJgyZQq2bNni75cnewwvI7B161aUlJRg3bp1OHz4MLKzs1FYWIimpqZgV002Zs2ahUuXLklf+/btk859//vfx9tvv40333wTe/fuRX19PR544AHpvN1uxz333AOLxYL9+/fjd7/7HbZs2YK1a9cG46WEBZPJhOzsbBgMhkHPv/jii/jlL3+JTZs24cCBA4iJiUFhYSF6enqkax555BEcO3YM7733Ht555x2UlZXhiSeekM4bjUYsXrwY48ePR2VlJV566SU899xz+PWvf+331xcOhnsPAGDJkiUe/138+c9/9jjP9+Da7d27F3q9Hh9//DHee+89WK1WLF68GCaTSbrGF397amtrcc8992DRokWoqqrC9773PXzjG9/Azp07A/p6ZUekYc2fP1/U6/XSsd1uF9PS0sT169cHsVbysW7dOjE7O3vQc21tbWJERIT45ptvSmWff/65CEAsLy8XRVEU//Wvf4kKhUJsaGiQrnn11VdFrVYrms1mv9ZdDgCIb731lnTscDjE1NRU8aWXXpLK2traRI1GI/75z38WRVEUq6urRQBiRUWFdM27774rCoIgXrx4URRFUXzllVfEhIQEj/fg2WefFadPn+7nVxR++r8HoiiKxcXF4n333TfkY/ge+FZTU5MIQNy7d68oir772/ODH/xAnDVrlse9li9fLhYWFvr7JckaW16GYbFYUFlZiYKCAqlMoVCgoKAA5eXlQayZvJw6dQppaWmYNGkSHnnkEZw/fx4AUFlZCavV6vH7nzFjBrKysqTff3l5OebMmeOxBUVhYSGMRiOOHTsW2BciA7W1tWhoaPD4net0OuTn53v8zuPj4zFv3jzpmoKCAigUChw4cEC65rbbboNarZauKSwsxIkTJ3DlypUAvZrwtmfPHiQnJ2P69Ol48skncfnyZekc3wPfam9vBwAkJiYC8N3fnvLyco/ncF/Dz4/rw/AyjJaWFtjt9gF7M6WkpKChoSFItZKX/Px8bNmyBTt27MCrr76K2tpa3Hrrrejo6EBDQwPUajXi4+M9HtP399/Q0DDo++M+R95x/86u9v/5hoYGJCcne5xXqVRITEzk++IjS5Ysweuvv47S0lL87Gc/w969e1FUVAS73Q6A74EvORwOfO9738PNN9+M2bNnA4DP/vYMdY3RaER3d7c/Xs6o4PXeRkS+VlRUJP08d+5c5OfnY/z48fjLX/6CqKioINaMKHi++tWvSj/PmTMHc+fOxeTJk7Fnzx7ceeedQayZ/Oj1ehw9etRjrB2FNra8DCMpKQlKpXLACPPGxkakpqYGqVbyFh8fj2nTpqGmpgapqamwWCxoa2vzuKbv7z81NXXQ98d9jrzj/p1d7f/zqampAwas22w2tLa28n3xk0mTJiEpKQk1NTUA+B74yqpVq/DOO+9g9+7dyMjIkMp99bdnqGu0Wi3/cXYdGF6GoVarkZubi9LSUqnM4XCgtLQUCxYsCGLN5KuzsxOnT5/GuHHjkJubi4iICI/f/4kTJ3D+/Hnp979gwQJ89tlnHn/I33vvPWi1WsycOTPg9Q93EydORGpqqsfv3Gg04sCBAx6/87a2NlRWVkrXfPDBB3A4HMjPz5euKSsrg9Vqla557733MH36dCQkJATo1cjHhQsXcPnyZYwbNw4A34PrJYoiVq1ahbfeegsffPABJk6c6HHeV397FixY4PEc7mv4+XGdgj1iOBy88cYbokajEbds2SJWV1eLTzzxhBgfH+8xwpyu3VNPPSXu2bNHrK2tFT/66COxoKBATEpKEpuamkRRFMVvfetbYlZWlvjBBx+Ihw4dEhcsWCAuWLBAerzNZhNnz54tLl68WKyqqhJ37Nghjh07VlyzZk2wXlLI6+joED/55BPxk08+EQGIGzZsED/55BPx3LlzoiiK4gsvvCDGx8eL//jHP8RPP/1UvO+++8SJEyeK3d3d0nMsWbJEvOGGG8QDBw6I+/btE6dOnSo+/PDD0vm2tjYxJSVFfPTRR8WjR4+Kb7zxhhgdHS3+6le/CvjrDUVXew86OjrEp59+WiwvLxdra2vF999/X7zxxhvFqVOnij09PdJz8D24dk8++aSo0+nEPXv2iJcuXZK+urq6pGt88bfnzJkzYnR0tPjMM8+In3/+uWgwGESlUinu2LEjoK9XbhheRujll18Ws7KyRLVaLc6fP1/8+OOPg10l2Vi+fLk4btw4Ua1Wi+np6eLy5cvFmpoa6Xx3d7f47W9/W0xISBCjo6PFZcuWiZcuXfJ4jrNnz4pFRUViVFSUmJSUJD711FOi1WoN9EsJG7t37xYBDPgqLi4WRdE5XfqHP/yhmJKSImo0GvHOO+8UT5w44fEcly9fFh9++GExNjZW1Gq14ooVK8SOjg6Pa44cOSLecsstokajEdPT08UXXnghUC8x5F3tPejq6hIXL14sjh07VoyIiBDHjx8vrly5csA/mPgeXLvBfvcAxN/+9rfSNb7627N7924xJydHVKvV4qRJkzzuQddGEEVRDHRrDxEREdG14pgXIiIiCisML0RERBRWGF6IiIgorDC8EBERUVhheCEiIqKwwvBCREREYYXhhYiIiMIKwwsRERGFFYYXIiIiCisML0RERBRWGF6IiIgorDC8EBERUVj5/wGOfuektVD2JwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.semilogy(res.logger.values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And plot the vqls solution compared to the LU solution" - ] - }, - { - "cell_type": "code", - "execution_count": 180, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import numpy as np\n", - "\n", - "ref = np.linalg.solve(A.todense(), b)\n", - "\n", - "plt.scatter(ref, res.solution * np.diag(iP))\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([285.178, 286.915, 584.641, 517.963, 517.401, 589.726, 646.091, 617.627])" - ] - }, - "execution_count": 181, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ref" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([274.82 , 276.581, 582.442, 514.48 , 514.106, 588.294, 645.151, 615.983])" - ] - }, - "execution_count": 183, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "res.solution * np.diag(iP)" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": {}, - "outputs": [], - "source": [ - "Ad = A.todense()" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([561.597, 628.269, 682.218, 680.56 ])" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.linalg.solve(Ad - 0 * np.eye(4), b) + 0" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from 8)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[107], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m np\u001b[38;5;241m.\u001b[39mlinalg\u001b[38;5;241m.\u001b[39msolve(\u001b[43mM\u001b[49m\u001b[38;5;129;43m@Ad\u001b[39;49m,b)\n", - "\u001b[0;31mValueError\u001b[0m: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from 8)" - ] - } - ], - "source": [ - "np.linalg.solve(M @ Ad, b)" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "metadata": {}, - "outputs": [], - "source": [ - "from vqls_prototype.matrix_decomposition import PauliDecomposition" - ] - }, - { - "cell_type": "code", - "execution_count": 185, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 64/64 [00:00<00:00, 1937.76it/s]\n" - ] - } - ], - "source": [ - "p1 = PauliDecomposition(A.todense())" - ] - }, - { - "cell_type": "code", - "execution_count": 186, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 64/64 [00:00<00:00, 1458.92it/s]\n" - ] - } - ], - "source": [ - "p2 = PauliDecomposition(QAP)" - ] - }, - { - "cell_type": "code", - "execution_count": 188, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "28" - ] - }, - "execution_count": 188, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p1.strings)" - ] - }, - { - "cell_type": "code", - "execution_count": 189, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "27" - ] - }, - "execution_count": 189, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p2.strings)" - ] - }, - { - "cell_type": "code", - "execution_count": 190, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1. , -0.909, 0. , -0.063, 0. , 0. , 0. , 0. ],\n", - " [-0.909, 1. , -0.044, 0. , 0. , 0. , 0. , 0. ],\n", - " [ 0. , -0.044, 1. , -0.218, 0. , 0. , 0. , -0.568],\n", - " [-0.063, 0. , -0.218, 1. , -0.754, 0. , 0. , 0. ],\n", - " [ 0. , 0. , 0. , -0.754, 1. , -0.161, 0. , -0.037],\n", - " [ 0. , 0. , 0. , 0. , -0.161, 1. , -0.178, 0. ],\n", - " [ 0. , 0. , 0. , 0. , 0. , -0.178, 1. , -0.551],\n", - " [ 0. , 0. , -0.568, 0. , -0.037, 0. , -0.551, 1. ]])" - ] - }, - "execution_count": 190, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "QAP" - ] - }, - { - "cell_type": "code", - "execution_count": 209, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[6, 5, 7, 4, 2, 3, 1, 0]" - ] - }, - "execution_count": 209, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from qreorder.classical import ReverseCuthillMcKee, COLAMD, LexicographicBFS\n", - "\n", - "reorder = LexicographicBFS()\n", - "idx = reorder.get_ordering(QAP)\n", - "idx" - ] - }, - { - "cell_type": "code", - "execution_count": 210, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 64/64 [00:00<00:00, 2321.18it/s]\n" - ] - } - ], - "source": [ - "pd3 = PauliDecomposition(QAP[np.ix_(idx, idx)])" - ] - }, - { - "cell_type": "code", - "execution_count": 211, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "21" - ] - }, - "execution_count": 211, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(pd3.strings)" - ] - }, - { - "cell_type": "code", - "execution_count": 212, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1. , -0.178, -0.551, 0. , 0. , 0. , 0. , 0. ],\n", - " [-0.178, 1. , 0. , -0.161, 0. , 0. , 0. , 0. ],\n", - " [-0.551, 0. , 1. , -0.037, -0.568, 0. , 0. , 0. ],\n", - " [ 0. , -0.161, -0.037, 1. , 0. , -0.754, 0. , 0. ],\n", - " [ 0. , 0. , -0.568, 0. , 1. , -0.218, -0.044, 0. ],\n", - " [ 0. , 0. , 0. , -0.754, -0.218, 1. , 0. , -0.063],\n", - " [ 0. , 0. , 0. , 0. , -0.044, 0. , 1. , -0.909],\n", - " [ 0. , 0. , 0. , 0. , 0. , -0.063, -0.909, 1. ]])" - ] - }, - "execution_count": 212, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "QAP[np.ix_(idx, idx)]" - ] - }, - { - "cell_type": "code", - "execution_count": 213, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[0, 1, 3, 2, 4, 7, 5, 6]" - ] - }, - "execution_count": 213, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reorder = COLAMD()\n", - "idx = reorder.get_ordering(QAP)\n", - "idx" - ] - }, - { - "cell_type": "code", - "execution_count": 214, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 64/64 [00:00<00:00, 1762.46it/s]\n" - ] - }, - { - "data": { - "text/plain": [ - "24" - ] - }, - "execution_count": 214, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd4 = PauliDecomposition(QAP[np.ix_(idx, idx)])\n", - "len(pd4.strings)" - ] - }, - { - "cell_type": "code", - "execution_count": 215, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1. , -0.909, -0.063, 0. , 0. , 0. , 0. , 0. ],\n", - " [-0.909, 1. , 0. , -0.044, 0. , 0. , 0. , 0. ],\n", - " [-0.063, 0. , 1. , -0.218, -0.754, 0. , 0. , 0. ],\n", - " [ 0. , -0.044, -0.218, 1. , 0. , -0.568, 0. , 0. ],\n", - " [ 0. , 0. , -0.754, 0. , 1. , -0.037, -0.161, 0. ],\n", - " [ 0. , 0. , 0. , -0.568, -0.037, 1. , 0. , -0.551],\n", - " [ 0. , 0. , 0. , 0. , -0.161, 0. , 1. , -0.178],\n", - " [ 0. , 0. , 0. , 0. , 0. , -0.551, -0.178, 1. ]])" - ] - }, - "execution_count": 215, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "QAP[np.ix_(idx, idx)]" - ] - }, - { - "cell_type": "code", - "execution_count": 221, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['III',\n", - " 'IIX',\n", - " 'IIZ',\n", - " 'IXI',\n", - " 'IXZ',\n", - " 'IYI',\n", - " 'IZX',\n", - " 'IZZ',\n", - " 'XXI',\n", - " 'XXZ',\n", - " 'YYI',\n", - " 'YYZ',\n", - " 'ZII',\n", - " 'ZIX',\n", - " 'ZIZ',\n", - " 'ZXI',\n", - " 'ZXZ',\n", - " 'ZYI',\n", - " 'ZZI',\n", - " 'ZZX',\n", - " 'ZZZ']" - ] - }, - "execution_count": 221, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd3.strings" - ] - }, - { - "cell_type": "code", - "execution_count": 222, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['III',\n", - " 'IIX',\n", - " 'IIY',\n", - " 'IIZ',\n", - " 'IXI',\n", - " 'IXZ',\n", - " 'IZI',\n", - " 'IZX',\n", - " 'IZY',\n", - " 'IZZ',\n", - " 'XXI',\n", - " 'XXZ',\n", - " 'YYI',\n", - " 'YYZ',\n", - " 'ZII',\n", - " 'ZIX',\n", - " 'ZIY',\n", - " 'ZIZ',\n", - " 'ZXI',\n", - " 'ZXZ',\n", - " 'ZZI',\n", - " 'ZZX',\n", - " 'ZZY',\n", - " 'ZZZ']" - ] - }, - "execution_count": 222, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd4.strings" - ] - }, - { - "cell_type": "code", - "execution_count": 234, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1.000e+00+0.j, 3.355e-01+0.j, 2.776e-17+0.j, 2.050e-01+0.j, 9.272e-02+0.j, 6.939e-18+0.j, 1.375e-01+0.j, 2.776e-17+0.j, 3.304e-01+0.j, 4.639e-02+0.j, 3.304e-01+0.j, 4.639e-02+0.j, 4.163e-17+0.j, 2.279e-01+0.j, 4.163e-17+0.j, 1.514e-01+0.j, 1.022e-01+0.j, 6.939e-18+0.j, 4.163e-17+0.j,\n", - " 2.079e-01+0.j, 6.939e-17+0.j])" - ] - }, - "execution_count": 234, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.sqrt(pd3.coefficients * np.conj(pd3.coefficients))" - ] - }, - { - "cell_type": "code", - "execution_count": 236, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "13" - ] - }, - "execution_count": 236, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(pd3.coefficients[np.absolute(pd3.coefficients) > 1e-8])" - ] - }, - { - "cell_type": "code", - "execution_count": 237, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "13" - ] - }, - "execution_count": 237, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(pd4.coefficients[np.absolute(pd4.coefficients) > 1e-8])" - ] - }, - { - "cell_type": "code", - "execution_count": 241, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "17" - ] - }, - "execution_count": 241, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p2.coefficients[np.absolute(p2.coefficients) > 1e-8])" - ] - }, - { - "cell_type": "code", - "execution_count": 242, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "24" - ] - }, - "execution_count": 242, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(p1.coefficients[np.absolute(p1.coefficients) > 1e-8])" - ] - }, - { - "cell_type": "code", - "execution_count": 229, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0., -1., 0., 0., 0., 0., 0., 0.],\n", - " [ 1., 0., 0., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., -1., 0., 0., 0., 0.],\n", - " [ 0., 0., 1., 0., 0., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., -1., 0., 0.],\n", - " [ 0., 0., 0., 0., 1., 0., 0., 0.],\n", - " [ 0., 0., 0., 0., 0., 0., 0., -1.],\n", - " [ 0., 0., 0., 0., 0., 0., 1., 0.]])" - ] - }, - "execution_count": 229, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from qiskit.quantum_info import SparsePauliOp, Operator\n", - "\n", - "Operator(SparsePauliOp(\"IIY\")).data.imag" - ] - }, - { - "cell_type": "code", - "execution_count": 243, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.231, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 0.229, 0. , 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 0. , 0.45 , 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 0. , 0. , 0.351, 0. , 0. , 0. , 0. ],\n", - " [0. , 0. , 0. , 0. , 0.316, 0. , 0. , 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 0.171, 0. , 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 0. , 0.676, 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.64 ]])" - ] - }, - "execution_count": 243, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "P" - ] - }, - { - "cell_type": "code", - "execution_count": 244, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_4864/3591649566.py:1: RuntimeWarning: divide by zero encountered in divide\n", - " 1/P\n" - ] - }, - { - "data": { - "text/plain": [ - "array([[4.336, inf, inf, inf, inf, inf, inf, inf],\n", - " [ inf, 4.359, inf, inf, inf, inf, inf, inf],\n", - " [ inf, inf, 2.222, inf, inf, inf, inf, inf],\n", - " [ inf, inf, inf, 2.853, inf, inf, inf, inf],\n", - " [ inf, inf, inf, inf, 3.169, inf, inf, inf],\n", - " [ inf, inf, inf, inf, inf, 5.842, inf, inf],\n", - " [ inf, inf, inf, inf, inf, inf, 1.48 , inf],\n", - " [ inf, inf, inf, inf, inf, inf, inf, 1.563]])" - ] - }, - "execution_count": 244, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "1 / P" - ] - }, - { - "cell_type": "code", - "execution_count": 247, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[4.336, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 4.359, 0. , 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 0. , 2.222, 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 0. , 0. , 2.853, 0. , 0. , 0. , 0. ],\n", - " [0. , 0. , 0. , 0. , 3.169, 0. , 0. , 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 5.842, 0. , 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 0. , 1.48 , 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 0. , 0. , 1.563]])" - ] - }, - "execution_count": 247, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.diag(1.0 / np.diag(P))" - ] - }, - { - "cell_type": "code", - "execution_count": 248, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[4.336, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 4.359, 0. , 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 0. , 2.222, 0. , 0. , 0. , 0. , 0. ],\n", - " [0. , 0. , 0. , 2.853, 0. , 0. , 0. , 0. ],\n", - " [0. , 0. , 0. , 0. , 3.169, 0. , 0. , 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 5.842, 0. , 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 0. , 1.48 , 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 0. , 0. , 1.563]])" - ] - }, - "execution_count": 248, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.linalg.inv(P)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/wntr_quantum/linear_solver/__init__.py b/wntr_quantum/linear_solver/__init__.py new file mode 100644 index 0000000..c051d40 --- /dev/null +++ b/wntr_quantum/linear_solver/__init__.py @@ -0,0 +1,6 @@ +# short cut for the quantum linear solver of QNR +from quantum_newton_raphson.hhl_solver import HHL_SOLVER +from quantum_newton_raphson.qubo_solver import QUBO_SOLVER +from quantum_newton_raphson.vqls_solver import VQLS_SOLVER + +__all__ = ["QUBO_SOLVER", "VQLS_SOLVER", "HHL_SOLVER"] From 80a4dc0eda07db5f05630941b81c5000956c1499 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Wed, 11 Dec 2024 18:16:39 +0100 Subject: [PATCH 02/14] refac qnr nbs --- docs/notebooks/newton_raphson/qnr_hhl.ipynb | 280 ++++++++++ docs/notebooks/newton_raphson/utils.py | 46 ++ .../qnr_qubols/qubo_poly_solver.ipynb | 498 ------------------ 3 files changed, 326 insertions(+), 498 deletions(-) create mode 100644 docs/notebooks/newton_raphson/qnr_hhl.ipynb create mode 100644 docs/notebooks/newton_raphson/utils.py delete mode 100644 docs/notebooks/qnr_qubols/qubo_poly_solver.ipynb diff --git a/docs/notebooks/newton_raphson/qnr_hhl.ipynb b/docs/notebooks/newton_raphson/qnr_hhl.ipynb new file mode 100644 index 0000000..8ec29ea --- /dev/null +++ b/docs/notebooks/newton_raphson/qnr_hhl.ipynb @@ -0,0 +1,280 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set up water network model\n", + "\n", + "In this example, we test our quantum solvers into a slightly larger network as contained in `Net0.inp`. Let's start by setting up the model:|" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmM0lEQVR4nO3dfXDU9YHH8c8vCXlOCJjwZHiQB0MkYAiBhLDZZJPNbjpeHate7+rcqHNX7YyttXac67TnqJ2x3KjtDDe2x529G6/tea2nHUdHqXmEPJEQICHyFEQoDwoKCAEhkJDkd39Y9ogJTyHJd3d/79eMf2Q32f3wGzVvdn+7a9m2bQsAADhWhOkBAADALGIAAACHIwYAAHA4YgAAAIcjBgAAcDhiAAAAhyMGAABwOGIAAACHIwYAAHA4YgAIY88995wsy9KJEydMTwkaGzZskGVZ2rBhg+kpQNAgBuAYL7/8siZOnKiLFy+Oye2vW7dOzz333JjcdjC5/Dhe+sVqWZa2bt065HsffvhhJSYmjuh+rnU833nnHeXk5Cg2NlazZs3Ss88+q76+vhHdF+B0xAAc47333pPP59OECRPG5PbXrVunn/70p2Ny28HkSsdxtEPoasfzT3/6k+655x6lpKTo5Zdf1j333KPnn39ejz/++DVv1+126/z583K73aO6FwhlUaYHAOOhu7tbdXV1Wrt2rekp4+LcuXNKSEgY9du90nHMzs7Wu+++q7a2NuXk5Iz6/X7VU089pSVLlqiyslJRUV/+byw5OVmrV6/WE088oYULF17xZyMiIhQbGzvmG4FQwiMDcISamhr19PToa1/7miTpv/7rv2RZlpqamvTDH/5QaWlpSkhI0De+8Q0dP358yM//6U9/UmFhoRISEpSUlKS77rpLO3fuDFz/8MMP61e/+pUkBR42tyxLkpSTk6N777130O0tXrxYlmXpgw8+CFz2+uuvy7Is7d69O3BZe3u7vva1ryk5OVmJiYkqLS1VS0vLoNu69Gepq6vTY489pilTpig9Pf2Kx+LgwYOaP3++srKy9Nlnn0mS9u7dq/vuu0/Tpk1TbGys0tPT9bd/+7c6ffr0VY/jJY8//rgmTZp03Y8O3Mzx3LVrl3bt2qVHH300EAKS9Nhjj8m2bb355ptXve/hzhkoLi5WVlaWdu3aJY/Ho/j4eN1666168cUXh/3Z119/XT/5yU80bdo0JSQk6O6779bhw4ev688OBCMeGYAjrFu3TsuWLdPUqVMHXX7pl9izzz6rAwcOaM2aNfre976n119/PfA9v/vd7/TQQw/J7/frhRdeUHd3t9auXSuXy6X29nbNmTNH3/nOd3TkyBFVVVXpd7/73aD7KCws1O9///vA1ydPntTOnTsVERGhhoYGLVmyRJLU0NCgtLQ0ZWZmSpJ27typwsJCJScn6x//8R81YcIE/fu//7uKi4tVV1envLy8Qffz2GOPKS0tTc8884zOnTs37HHYt2+fSkpKNHnyZFVVVSk1NVW9vb3y+/3q6enR448/rmnTpumTTz7Ru+++q66uLk2cOPGaxzE5OVlPPvmknnnmmWs+OnCzx7O9vV2SlJubO+jyGTNmKD09PXD9jTp16pTKy8t177336pvf/KbefPNN/ehHP9LixYuHxM/PfvYzWZalH/3oRzp27JjWrFkjr9erbdu2KS4ubkT3DxhlAw4wa9Ys+9lnnw18/eqrr9qSbK/Xaw8MDAQuf/LJJ+3IyEi7q6vLtm3b/uKLL+yUlBT7kUceGXR7n376qT1x4sRBl3/3u9+1h/tP6o033rAl2bt27bJt27bfeecdOyYmxr777rvtv/mbvwl835IlS+xvfOMbga/vueceOzo62t63b1/gsiNHjthJSUm22+0e8mdxuVx2X1/foPt+9tlnbUn28ePH7d27d9szZsywly9fbp88eTLwPe3t7bYk+4033rj6QbSHHsf169cHfrarq8ueNGmSfffddweuf+ihh+yEhITA16NxPF966SVbkn3o0KEh1y1fvtzOz8+/6p/h0ub169cHLisqKrIl2b/97W8Dl/X09NjTpk2z77vvviE/e+utt9pnzpwJXP6///u/tiT7X/7lX65630Cw4mkChL0dO3bo0KFDuuuuu4Zc9+ijjwYefpa+/Ft8f3+/Dh48KEmqqqpSV1eXvvWtb+nEiROBfyIjI5WXl6f169df8/4LCwslSfX19ZK+fARg+fLlKisrU0NDgySpq6tLO3bsCHxvf3+/Kisrdc8992ju3LmB25o+fboeeOABNTY26syZM4Pu55FHHlFkZOQVj0FRUZHmzJmj6upqTZo0KXDdpb/5V1RUqLu7+4p/jqsdx0u384Mf/EDvvPPOFf92PhrH8/z585KkmJiYIdfF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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "import wntr\n", + "import wntr_quantum\n", + "\n", + "# if not done in shell, define the environment variable\n", + "# os.environ[\"EPANET_TMP\"] = \"<>\"\n", + "# os.environ[\"EPANET_QUANTUM\"] = \"<>\"\n", + "\n", + "# set up network model\n", + "inp_file = \"../networks/Net0.inp\"\n", + "wn = wntr.network.WaterNetworkModel(inp_file)\n", + "\n", + "# plot network\n", + "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(name J1 D1 R1\n", + " 0 29.647692 19.167677 -9.338379e-07\n", + " 3600 29.647692 19.167677 -9.338379e-07,\n", + " name P1 P2\n", + " 0 0.05 0.05\n", + " 3600 0.05 0.05)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# define the classical EPANET simulator\n", + "sim = wntr.sim.EpanetSimulator(wn)\n", + "\n", + "# run the EPANET simulation\n", + "results_epanet = sim.run_sim()\n", + "\n", + "# save number of nodes and pipes\n", + "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", + "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", + "\n", + "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Solve water network with `QuantumEpanetSimulator` and VQLS \n", + "\n", + "We now solve the model using VQLS. In this example, we are **preconditioning** the initial linear system using *diagonal scaling* and also using a **mix of two classical optimizers**." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_19144/4023317418.py:7: DeprecationWarning: The class ``qiskit.primitives.estimator.Estimator`` is deprecated as of qiskit 1.2. It will be removed no earlier than 3 months after the release date. All implementations of the `BaseEstimatorV1` interface have been deprecated in favor of their V2 counterparts. The V2 alternative for the `Estimator` class is `StatevectorEstimator`.\n", + " estimator = Estimator()\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", + "Quantum result 0.05003536120057106 within 0.07072090997076289% of classical result 0.05000000074505806\n", + "Quantum result 0.05003482848405838 within 0.06965547696130027% of classical result 0.05000000074505806\n", + "Quantum result 29.64763641357422 within 0.00018656801636188008% of classical result 29.64769172668457\n", + "Quantum result 19.16619110107422 within 0.007751719682690564% of classical result 19.16767692565918\n", + "Quantum result -9.338378959000693e-07 within 0.0% of classical result -9.338378959000693e-07\n" + ] + }, + { + "data": { + "text/plain": [ + "(name J1 D1 R1\n", + " 0 29.647636 19.166191 -9.338379e-07\n", + " 3600 29.647129 19.150408 -9.338379e-07,\n", + " name P1 P2\n", + " 0 0.050035 0.050035\n", + " 3600 0.050042 0.050042)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "from qiskit.primitives import Estimator\n", + "from wntr_quantum.linear_solver import HHL_SOLVER\n", + "from utils import compare_results \n", + "\n", + "n_qubits = 1\n", + "estimator = Estimator()\n", + "\n", + "linear_solver = HHL_SOLVER(\n", + " estimator=estimator,\n", + " # preconditioner=\"diagonal_scaling\",\n", + ")\n", + "\n", + "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", + "results_hhl = sim.run_sim(linear_solver=linear_solver)\n", + "\n", + "classical_res, quantum_res = compare_results(results_epanet, results_hhl)\n", + "\n", + "results_hhl.node[\"pressure\"], results_hhl.link[\"flowrate\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plot pressures and flow rates\n", + "\n", + "Let's check graphically the equivalence of the results." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.scatter(\n", + " classical_res[:n_pipes],\n", + " quantum_res[:n_pipes],\n", + " label=\"Flow rates\",\n", + " color=\"blue\",\n", + " marker=\"o\",\n", + ")\n", + "plt.scatter(\n", + " classical_res[n_pipes:],\n", + " quantum_res[n_pipes:],\n", + " label=\"Pressures\",\n", + " color=\"red\",\n", + " marker=\"s\",\n", + " facecolors=\"none\",\n", + ")\n", + "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\", label=\"\")\n", + "plt.xlabel(\"Classical results\")\n", + "plt.ylabel(\"Quantum results\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgIAAAGbCAYAAAC2xPjaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABdL0lEQVR4nO3deVwVZfs/8M+cw76DLAcUBWVVERSVNNySR0xTKcslyyUSv5W22PJo+ah9s689aU8+lmlWmpWmWb8sl0zTXFJyXxHcdwVRBBRkPffvD2PyHM5B0AMDZz7vXvPqxcx9Zq5rVOY699z3jCSEECAiIiJV0igdABERESmHhQAREZGKsRAgIiJSMRYCREREKsZCgIiISMVYCBAREakYCwEiIiIVYyFARESkYiwEiIiIVIyFQC2YOnUqJEnC1atXlQ6l3ti0aRMkScKmTZuUDuWefPnll5AkCbt3767T4wYFBWHkyJF1ekwiUpdaLwQ++ugjuLu7o7S0tFb2v2bNGkydOrVW9l2f3HkeKy6qkiRhz549ldqOHDkSLi4u93Scu53Pn3/+Ge3atYODgwOaNm2KKVOmoKys7J6OVZ8MGjQIkiThn//8p9KhWMwnn3yCL7/80uL77d69u/z3T5IkeHl5oUOHDliwYAH0er3Fj1fXlixZglmzZlW7fVBQkMH5uHPp3bt37QVKZCE2tX2A1atXo1evXrC1ta2V/a9ZswZz5syx+mLA3HmcOnUqVq5cabHjVHU+f/nlFyQlJaF79+746KOPcOjQIUybNg1XrlzB3Llzq9xv165dcevWLdjZ2VksVkvJz8/HypUrERQUhG+//RbvvfceJElSOqz79sknn8Db27tWehSaNGmC6dOnAwCys7Px1VdfITk5GceOHcN7771n8ePVpSVLluDw4cN4+eWXq/2ZmJgYvPrqq5XWBwQEWDAyotpRq4VAYWEhNm/efNeLhLUoKCiAs7Ozxfdr7jzGxMRg1apV2Lt3L9q1a2fx4xp77bXX0KZNG6xbtw42Nrf/6ri5ueH//u//8NJLLyEiIsLsZzUaDRwcHGo9xnvxww8/oLy8HAsWLMBDDz2ELVu2oFu3bkqHVa+5u7vjqaeekn8eM2YMwsPD8fHHH+Odd965r8K/rKwMer2+XhaN5jRu3NjgfFSXud8Zer0eJSUl9/VvprZ+H5H1qdVbAxs2bEBxcTEefvhhAH/fZ922bRvGjx8PHx8fODs749FHH0V2dnalz//yyy/o0qULnJ2d4erqir59+yItLU3ePnLkSMyZMwcADLrjAKBdu3Z47LHHDPYXFRUFSZJw8OBBed2yZcsgSRLS09Pldfv27cPDDz8MNzc3uLi4oGfPnvjzzz8N9lWRy+bNm/H888/D19cXTZo0MXsuzp49i5CQELRu3RpZWVkAgOPHj2PgwIHQ6XRwcHBAkyZNMGTIEOTl5VV5HiuMGzcOnp6e1e4NuZ/zeeTIERw5cgQpKSlyEQAAzz//PIQQ+P7776s8tqkxAt27d0fr1q1x5MgR9OjRA05OTmjcuDHef/99k59dtmwZ3nzzTeh0Ojg7O6N///44f/68QdvCwkJkZGTUaHzG4sWL8Y9//AM9evRAZGQkFi9ebLZtYWEhxowZg0aNGsHNzQ3Dhw/H9evXDdrs3r0biYmJ8Pb2hqOjI4KDg/HMM88YtCkoKMCrr76KwMBA2NvbIzw8HDNnzsTdXgZaMf7EWMXfxzNnzgC43V2dlpaGzZs3y3+O3bt3l9vn5ubi5Zdflo8fEhKCf//73/fcte/k5IQHHngABQUF8r/l6hzjzJkzkCQJM2fOxKxZs9CiRQvY29vjyJEjAICMjAwMGjQIPj4+cHR0RHh4ON566y2DY1+8eBHPPPMM/Pz8YG9vj1atWmHBggUGbSr+Dn333Xd499130aRJEzg4OKBnz544ceKE3K579+5YvXo1zp49K5+3oKCgezonxipu2Z08eRJ9+vSBq6srhg0bBuD2v7exY8di8eLFaNWqFezt7bF27VoAtfP7iOhOtdojsGbNGsTGxsLPz89gfcUFbMqUKThz5gxmzZqFsWPHYtmyZXKbr7/+GiNGjEBiYiL+/e9/o7CwEHPnzkV8fDz27duHoKAgjBkzBpcuXcL69evx9ddfGxyjS5cu+Pbbb+Wfc3JykJaWBo1Gg61bt6JNmzYAgK1bt8LHxweRkZEAgLS0NHTp0gVubm544403YGtri08//RTdu3fH5s2bERcXZ3Cc559/Hj4+Ppg8eTIKCgpMnoeTJ0/ioYcegpeXF9avXw9vb2+UlJQgMTERxcXFGDduHHQ6HS5evIhVq1YhNzcX7u7udz2Pbm5ueOWVVzB58uS79grc7/nct28fAKB9+/YG6wMCAtCkSRN5e01dv34dvXv3xmOPPYZBgwbh+++/xz//+U9ERUVVKnzeffdd+T7+lStXMGvWLCQkJGD//v1wdHQEAOzcuRM9evTAlClTqlUgXbp0Cb///jsWLVoEABg6dCg+/PBDfPzxxya/kY4dOxYeHh6YOnUqjh49irlz5+Ls2bPyhebKlSvo1asXfHx8MGHCBHh4eODMmTP4f//v/8n7EEKgf//++P3335GcnIyYmBj8+uuveP3113Hx4kV8+OGH93Qu7zRr1iyMGzcOLi4u8oWz4u9PYWEhunXrhosXL2LMmDFo2rQptm/fjokTJ+Ly5cs1uj9+p1OnTkGr1cLDw6PGx1i4cCGKioqQkpICe3t7eHl54eDBg+jSpQtsbW2RkpKCoKAgnDx5EitXrsS7774LAMjKysIDDzwgX0h9fHzwyy+/IDk5Gfn5+ZW699977z1oNBq89tpryMvLw/vvv49hw4Zhx44dAIC33noLeXl5uHDhgvznUJ3xNqWlpSaLT2dnZ/nvJnC7tyMxMRHx8fGYOXMmnJyc5G0bN27Ed999h7Fjx8Lb21su5iz9+4ioElGLmjZtKqZMmSL/vHDhQgFAJCQkCL1eL69/5ZVXhFarFbm5uUIIIW7cuCE8PDzE6NGjDfaXmZkp3N3dDda/8MILwlQay5cvFwDEkSNHhBBC/Pzzz8Le3l70799fDB48WG7Xpk0b8eijj8o/JyUlCTs7O3Hy5El53aVLl4Srq6vo2rVrpVzi4+NFWVmZwbGnTJkiAIjs7GyRnp4uAgICRIcOHUROTo7cZt++fQKAWL58edUnUVQ+j7///rv82dzcXOHp6Sn69+8vbx8xYoRwdnaWf7bE+ZwxY4YAIM6dO1dpW4cOHcQDDzxQZQ4VMf/+++/yum7dugkA4quvvpLXFRcXC51OJwYOHFjps40bNxb5+fny+u+++04AEP/9738rtb3zfFVl5syZwtHRUd7vsWPHBADx448/GrSr+POOjY0VJSUl8vr3339fABA//fSTEEKIH3/8UQAQu3btMnvMFStWCABi2rRpBusff/xxIUmSOHHihLyuWbNmYsSIEfLPFX+3jFXEd/r0aXldq1atRLdu3Sq1feedd4Szs7M4duyYwfoJEyYIrVZr8s/4Tt26dRMREREiOztb/jv+4osvCgCiX79+NTrG6dOnBQDh5uYmrly5YtC2a9euwtXVVZw9e9Zg/Z2/O5KTk4W/v7+4evWqQZshQ4YId3d3UVhYKIT4++9FZGSkKC4ultv997//FQDEoUOH5HV9+/YVzZo1q/Ic3KlZs2YCgMll+vTpcrsRI0YIAGLChAmV9gFAaDQakZaWZrDeEr+PiO6m1m4NHD58GOfOnUPfvn0rbUtJSTHo3uzSpQvKy8tx9uxZAMD69euRm5uLoUOH4urVq/Ki1WoRFxeH33///a7H79KlCwBgy5YtAG5/8+/QoQP+8Y9/YOvWrQBud10ePnxYblteXo5169YhKSkJzZs3l/fl7++PJ598En/88Qfy8/MNjjN69GhotVqz56Bbt24ICgrCb7/9Bk9PT3lbxTf+X3/9FYWFhWbzqOo8Vuzn5Zdfxs8//2z2W7klzuetW7cAAPb29pW2OTg4yNtrysXFxeDeqp2dHTp27IhTp05Vajt8+HC4urrKPz/++OPw9/fHmjVr5HXdu3eHEKLat0sWL16Mvn37yvsNDQ1FbGys2dsDKSkpBve/n3vuOdjY2MgxeHh4AABWrVpldqbMmjVroNVq8eKLLxqsf/XVVyGEwC+//FKt2O/V8uXL0aVLF3h6ehr8fUhISEB5ebn8b6YqGRkZ8PHxkXvTPvroI/Tt21fukq/pMQYOHAgfHx/55+zsbGzZsgXPPPMMmjZtatC24neHEAI//PAD+vXrByGEwXESExORl5eHvXv3Gnx21KhRBj09Ff/2Tf19q4m4uDisX7++0jJ06NBKbZ977jmT++jWrRtatmwp/2zp30dE5tTarYHVq1fDz8+vUlcygEr/sCsukBX3Wo8fPw4AeOihh0zu283N7a7H9/PzQ2hoKLZu3YoxY8Zg69at6NGjB7p27Ypx48bh1KlTSE9Ph16vl38ZZGdno7CwEOHh4ZX2FxkZCb1ej/Pnz6NVq1by+uDgYLMx9OvXD35+fvj1118rdS8GBwdj/Pjx+M9//oPFixejS5cu6N+/P5566imD2wJVnccKL730Ej788ENMnToVP/30U6XtljifFd2bxcXFlbYVFRUZdH/WRJMmTSrd8/b09DQYx1EhNDTU4GdJkhASEiLfF6+p9PR07Nu3D8OHD690n3jOnDnIz8+vdG6MY3BxcYG/v78cQ7du3TBw4EC8/fbb+PDDD9G9e3ckJSXhySeflIuos2fPIiAgwKCoASDfnqooiGvL8ePHcfDgQYML752uXLly130EBQXhs88+gyRJcHBwQGhoKHx9fe/5GMb/jiouzK1btzYbQ3Z2NnJzczF//nzMnz+/Wse52++ee+Xt7Y2EhIS7trOxsTF77974HFj69xGRObVWCKxZswa9e/c2ObDJXMUq/hooVTGY6Ouvv4ZOp6vU7s7BalWJj4/Hhg0bcOvWLezZsweTJ09G69at4eHhga1btyI9PR0uLi5o27ZtddOqpKoL4MCBA7Fo0SIsXrwYY8aMqbT9gw8+wMiRI/HTTz9h3bp1ePHFFzF9+nT8+eef8i+Lqs5jhYpegalTp5rsFbDE+fT39wcAXL58GYGBgQbbLl++jI4dO951H6bc7e9Cbfrmm28AAK+88gpeeeWVStt/+OEHjBo1qkb7lCQJ33//Pf7880+sXLkSv/76K5555hl88MEH+PPPP+/5+Q537t+U8vLyau9Dr9fjH//4B9544w2T28PCwu66D2dn5yovfDU9xr0UkhV/r5966imMGDHCZJuKsUAVlPz7BtzuUdNoTHfE3msxbel9kPrUSiGQm5uL7du3Y+zYsff0+RYtWgAAfH1971plV3WB7NKlCxYuXIilS5eivLwcnTt3hkajQXx8vFwIdO7cWf7l4OPjAycnJxw9erTSvjIyMqDRaCpdBKsyY8YM2NjY4Pnnn4erqyuefPLJSm2ioqIQFRWFSZMmYfv27XjwwQcxb948TJs2rUbn8eWXX8asWbPw9ttvy93TFSxxPmNiYgDcHhF/50X/0qVLuHDhAlJSUu4a4/2q6NmoIITAiRMnKv2yrw4hBJYsWYIePXrg+eefr7T9nXfeweLFiysVAsePH0ePHj3kn2/evInLly+jT58+Bu0eeOABPPDAA3j33XexZMkSDBs2DEuXLsWzzz6LZs2a4bfffsONGzcMegUyMjIAAM2aNTMbd8U32NzcXIM/Z1O9COb+LFu0aIGbN29W6xvsvbrfY1R0hR8+fNhsGx8fH7i6uqK8vNyiudSXZ0hY+vcRkTk1GiNgbmpWRkYGzp07J/+8bt06AECvXr3uKajExER5frqp+6x3TjWsmCebm5tbqV1Fl/+///1vtGnTRu5y79KlCzZs2IDdu3fLbYDb3xZ69eqFn376yaC7OSsrC0uWLEF8fHy1utErSJKE+fPn4/HHH8eIESPw888/y9vy8/MrPZEvKioKGo1G7n6vyXms6BX46aefsH//foNtljifrVq1QkREBObPn2/w7XPu3LmQJAmPP/64vC4vLw8ZGRmVpkHer6+++go3btyQf/7+++9x+fJlg9kF1Z0+uG3bNpw5cwajRo3C448/XmkZPHgwfv/9d1y6dMngc/Pnzzc4h3PnzkVZWZkcw/Xr1yt9u6wooir+XPv06YPy8nJ8/PHHBu0+/PBDSJJUabbEnSqKujvvsRcUFMizHu7k7Oxs8t/FoEGDkJqail9//bXSttzcXIs8KfJ+j+Hj44OuXbtiwYIFBr9bgL+/vWu1WgwcOBA//PCDyYLB1JTk6nB2drb43917YenfR0Tm1KhHwNzUrMjISHTr1k2eI7569WrEx8cb3OuuCTc3N8ydOxdPP/002rVrhyFDhsDHxwfnzp3D6tWr8eCDD8q/RGNjYwEAL774IhITE6HVajFkyBAAQEhICHQ6HY4ePYpx48bJ++/atav8KNk7CwEAmDZtGtavX4/4+Hg8//zzsLGxwaeffori4uJK89urQ6PR4JtvvkFSUhIGDRqENWvW4KGHHsLGjRsxduxYPPHEEwgLC0NZWRm+/vpr+ZcbUPPzWDFW4MCBAwYPErHU+ZwxYwb69++PXr16YciQITh8+DA+/vhjPPvss/L9bQD48ccfMWrUKCxcuNCiT7Xz8vJCfHw8Ro0ahaysLMyaNQshISEYPXq03Ka60wcXL14MrVZrdhBm//798dZbb2Hp0qUYP368vL6kpAQ9e/bEoEGDcPToUXzyySeIj49H//79AQCLFi3CJ598gkcffRQtWrTAjRs38Nlnn8HNzU3uNejXrx969OiBt956C2fOnEF0dDTWrVuHn376CS+//LJ8sTelV69eaNq0KZKTk/H6669Dq9ViwYIF8p/nnWJjYzF37lxMmzYNISEh8PX1xUMPPYTXX38dP//8Mx555BGMHDkSsbGxKCgowKFDh/D999/jzJkz8Pb2vuufR1UscYzZs2cjPj4e7dq1Q0pKCoKDg3HmzBmsXr1aLnbfe+89/P7774iLi8Po0aPRsmVL5OTkYO/evfjtt9+Qk5NT49hjY2OxbNkyjB8/Hh06dICLiwv69etX5WcuXrwo32q6k4uLC5KSkmocQwVL/z4iMqkmUwzMTc0CIE9T0uv1wtfXV7z//vuVPl8xxcV4apWpqWUV6xMTE4W7u7twcHAQLVq0ECNHjhS7d++W25SVlYlx48YJHx8fIUlSpalVTzzxhAAgli1bJq8rKSkRTk5Ows7OTty6datSnHv37hWJiYnCxcVFODk5iR49eojt27dXKxchDKcPVigsLBTdunUTLi4u4s8//xSnTp0SzzzzjGjRooVwcHAQXl5eokePHuK3336763m8c/qguWPfOX3Qkufzxx9/FDExMcLe3l40adJETJo0yWA63Z3nZuHChZViNp4+2KpVq0pxjhgxwmD6VsVnv/32WzFx4kTh6+srHB0dRd++fStNLavO9MGSkhLRqFEj0aVLF7NthBAiODhYtG3b1iCnzZs3i5SUFOHp6SlcXFzEsGHDxLVr1+TP7N27VwwdOlQ0bdpU2NvbC19fX/HII48YnGMhbk/pfOWVV0RAQICwtbUVoaGhYsaMGQZT44SoPH1QCCH27Nkj4uLihJ2dnWjatKn4z3/+Y3L6YGZmpujbt69wdXU1+DdacfyJEyeKkJAQYWdnJ7y9vUXnzp3FzJkzK/15GjP352asOseomD44Y8YMk/s4fPiwePTRR4WHh4dwcHAQ4eHh4l//+pdBm6ysLPHCCy+IwMBAYWtrK3Q6nejZs6eYP3++3Mbcv5mK49/5d/XmzZviySefFB4eHgLAXacSVjV98M7PGk/rvRMA8cILL5jcdr+/j4juRhLCsqNkdu7cibi4OKSlpRlMhaGa4Xn826ZNm9CjRw8sX77c4BYEERHdv1p5jsD//d//qf7iZQk8j0REVNssPmugY8eO9zyVjP7G80hERHWhVl86RERERPWbxccIEBERUcPBHgEiIiIVYyFARESkYiwEiIiIVIyFABERkYqxECAiIlIxFgJEREQqxkKAiIhIxVgIEBERqRgLASIiIhVjIUBERKRiLASIiIhUjIUAERGRirEQICIiUjEWAkRERCrGQoCIiEjFWAgQERGpGAsBIiIiFWMhQEREpGIsBIiIiFSMhQAREZGKsRAgIiJSMRYCREREKsZCgIiISMVYCBAREakYCwEiIiIVYyFARESkYiwEiIiIVIyFABERkYqxECAiIlIxG6UDsCR9uR6H9l1G9pWbcHa2Q0zHJnB0tFU6LCIionrLagqBvTvO4+vPdiLnaqG8zsHRFg8ntcSAQVGQJEnB6IiIiOonSQghlA7ifh3adwn/eWcj9HrTqfR7vDUef6ptHUdFRERU/1nFGIHlX+8zWwQAwC8rjiA/r6gOIyIiImoYGnwhcOHsdZw9lVNlm7IyPXZsPVM3ARERETUgDb4QyMut3jf9vNxbtRwJERFRw9PgCwFPLyeLtiMiIlKTBl8IBAS6o0WYd5Vt7Oy0iOsSVDcBERERNSANvhAAgEHD28HGxnwq/Z6IgourfR1GRERE1DBYxfRBAEg7cBnffLYLly7kyetc3ezR/4ko9OoXqWBkRERE9ZfVFAIVjqVfwbGNh5E+bRFGbfhfeLdspnRIRERE9ZZV3Bq4U1ikLx56LBreWRdw8+h5pcMhIiKq16yuEAAAR50XJGd7ZO0/pnQoRERE9ZpVFgKSJMGhuR+yD5xQOhQiIqJ6zSoLAQBwj2yK/AzeGiAiIqqK1RYCfjFhKD57BUKvVzoUIiKiestqCwGfNiFAcRlunruidChERET1ltUWAp6tggAAuWlnFI2DiIioPrPaQsA50AdwsEXW/uNKh0JERFRvWW0hIGk0cGjmg+wDLASIiIjMsdpCAADcIpoiL+Oc0mEQERHVW1ZdCPhEh6DoVBas7CnKREREFmPVhYBf2zCIwhLcunxN6VCIiIjqJasuBDz+euFQ7pGzCkdCRERUP1l1IeAa7A/YajlzgIiIyAyrLgQ0NlrYNfXmzAEiIiIzrLoQAADXsCa8NUBERGSG1RcCPm1aoPBkptJhEBER1UtWXwj4tQuHyL+FouxcpUMhIiKqd6y+EPBsGQQAyE3ng4WIiIiMWX0h4BbaGNBIyD5wQulQiIiI6h2rLwS0drawbdIIWfuPKR0KERFRvWP1hQAAuIQG4PqRM0qHQUREVO+oohBoFNUChScuKx0GERFRvaOKQkDXLhz6azdRkndT6VCIiIjqFVUUAl6tgwFw5gAREZExVRQC7uGBgARcO3hS6VCIiIjqFVUUAjaO9rDReSBzH2cOEBER3UkVhQAAOIc2Rk7aaaXDICIiqldUUwh4tQpCwYlLSodBRERUr6imENC1C0d5Zh5KC24pHQoREVG9oZpCoFFUCwBA3tHzCkdCRERUf6imEHCPCAQA5BziOAEiIqIKqikE7NycofV2Rea+o0qHQkREVG+ophAAAKcQf+QcZo8AERFRBVUVAp6tgnDz2AWlwyAiIqo3VFUI6NqGo/TidZQXlygdChERUb2gqkLAu00LQAjksVeAiFSge/fuePnll5UOg+o5VRUC7pFNAQC5R84qHAkRkWWMHDkSkiRVWk6cOKF0aDVyZx52dnYICQnB//7v/6KsrEzp0KyeqgoBh0bu0Hg44fLeDKVDISKymN69e+Py5csGS3BwsNJh1VhFHsePH8err76KqVOnYsaMGZXalZTUv9u79TGm6lJVIQAAji10fAshEVkVe3t76HQ6g0Wr1VZqd/36dQwfPhyenp5wcnLCww8/jOPHjwMAhBDw8fHB999/L7ePiYmBv7+//PMff/wBe3t7FBYWQgiBqVOnomnTprC3t0dAQABefPFFi+TRrFkzPPfcc0hISMDPP/+MkSNHIikpCe+++y4CAgIQHh4OADh//jwGDRoEDw8PeHl5YcCAAThz5oy8v02bNqFjx45wdnaGh4cHHnzwQZw9e7tH+MCBA+jRowdcXV3h5uaG2NhY7N69GwAwdepUxMTEGMQ2a9YsBAUFyT/XRkxKUV0h4NEyCDeOXVQ6DCKiOjdy5Ejs3r0bP//8M1JTUyGEQJ8+fVBaWgpJktC1a1ds2rQJwO2iIT09Hbdu3UJGxu1e1M2bN6NDhw5wcnLCDz/8gA8//BCffvopjh8/jhUrViAqKsqi8To6OsrftDds2ICjR49i/fr1WLVqFUpLS5GYmAhXV1ds3boV27Ztg4uLC3r37o2SkhKUlZUhKSkJ3bp1w8GDB5GamoqUlBRIkgQAGDZsGJo0aYJdu3Zhz549mDBhAmxtbWsUn6VjUoqNokdXgF9MKC5+uwn6snJobCpXzEREDc2qVavg4uIi//zwww9j+fLlBm2OHz+On3/+Gdu2bUPnzp0BAIsXL0ZgYCBWrFiBJ554At27d8enn34KANiyZQvatm0LnU6HTZs2ISIiAps2bUK3bt0AAOfOnYNOp0NCQgJsbW3RtGlTdOzY0SL5CCGwYcMG/Prrrxg3bhyys7Ph7OyMzz//HHZ2dgCAb775Bnq9Hp9//rl8IV24cCE8PDywadMmtG/fHnl5eXjkkUfQosXtR8xHRkbKxzh37hxef/11REREAABCQ0NrHKelY1KK6noEfKJDgTI9bpzkmwiJyDr06NED+/fvl5fZs2dXapOeng4bGxvExcXJ6xo1aoTw8HCkp6cDALp164YjR44gOzsbmzdvRvfu3dG9e3ds2rQJpaWl2L59O7p37w4AeOKJJ3Dr1i00b94co0ePxo8//njfA/sqChoHBwc8/PDDGDx4MKZOnQoAiIqKki+4wO2u/RMnTsDV1RUuLi5wcXGBl5cXioqKcPLkSXh5eWHkyJFITExEv3798N///heXL1+WPz9+/Hg8++yzSEhIwHvvvYeTJ2t+y9jSMSlFdYWAR8tmAIDrnDlARFbC2dkZISEh8nLnff2aiIqKgpeXFzZv3mxQCGzevBm7du1CaWmp3JsQGBiIo0eP4pNPPoGjoyOef/55dO3aFaWlpfecR0VBc/z4cdy6dQuLFi2Cs7OznOOdbt68idjYWIMCaP/+/Th27BiefPJJALe/jaempqJz585YtmwZwsLC8OeffwK4PQ4gLS0Nffv2xcaNG9GyZUv8+OOPAACNRgMhhMHxTOVl6ZiUorpCwNHPE5KzPTI5c4CIVCQyMhJlZWXYsWOHvO7atWs4evQoWrZsCQCQJAldunTBTz/9hLS0NMTHx6NNmzYoLi7Gp59+ivbt2xtc/BwdHdGvXz/Mnj0bmzZtQmpqKg4dOnTPMVYUNE2bNoWNTdV3rtu1a4fjx4/D19fXoAgKCQmBu7u73K5t27aYOHEitm/fjtatW2PJkiXytrCwMLzyyitYt24dHnvsMSxcuBAA4OPjg8zMTINiYP/+/XeN3xIxKUF1hYAkSXBorsNVzhwgIhUJDQ3FgAEDMHr0aPzxxx84cOAAnnrqKTRu3BgDBgyQ23Xv3h3ffvstYmJi4OLiAo1Gg65du2Lx4sXy+AAA+PLLL/HFF1/g8OHDOHXqFL755hs4OjqiWbNmdZLPsGHD4O3tjQEDBmDr1q04ffo0Nm3ahBdffBEXLlzA6dOnMXHiRKSmpuLs2bNYt24djh8/jsjISNy6dQtjx47Fpk2bcPbsWWzbtg27du2S79d3794d2dnZeP/993Hy5EnMmTMHv/zyS63GpCTVFQIA4BHZFPlH+XRBIlKXhQsXIjY2Fo888gg6deoEIQTWrFljMFq+W7duKC8vl8cCALcvjMbrPDw88Nlnn+HBBx9EmzZt8Ntvv2HlypVo1KhRneTi5OSELVu2oGnTpnjssccQGRmJ5ORkFBUVwc3NDU5OTsjIyMDAgQMRFhaGlJQUvPDCCxgzZgy0Wi2uXbuG4cOHIywsDIMGDcLDDz+Mt99+G8Dt3pNPPvkEc+bMQXR0NHbu3InXXnutVmNSkiSMb4SowN73FuPA1K8wsvAXSBpV1kJEREQAVNoj4BMdApSU4ebZLKVDISIiUpQqCwHPVkEAgOtpZxSNg4iISGmqLAScA30hOdjiyoHjSodCRESkKFUWApIkwT7IF9kHGtbbuYiIiCxNlYUAALhFBCIv/ZzSYRARESlKtYWAT3QIik5nVXp6FBERkZqo7qVDFfxiwpBWWILCS1fh3NhH6XCIiOpUUVGR/GY/c+zs7ODg4FBHEdUdNeduimoLgYqZA7lHzrIQICJVKSoqgs7RHXmo+mKo0+lw+vRpq7ogqjl3c1RbCLgE6wBbLa4cOIHG/2ivdDhERHWmpKQEeSjBLNsH4WjmMnALZXg5cxtKSkqs6mKo5tzNUW0hoNFqYdfUG1f2cwohEamTk8YWTpLpy4AkpDqOpm6pOXdjqi0EAMAtPBC5fB0xEamUra0EW8n0Rc9WSEBxHQdUh9ScuzHVzhoAAO82LXDrVKbSYRARKUKjqXqxZmrO3ZjK0jXk1zYMIv8WirJzlQ6FiKjOabRSlYs1U3PuxlR9a8DrjpkDum4eisZCRFTXbGwk2GhMX/Rs9NZ9MVRz7sZU3SPgGtIY0Gr4qGEiUiWtpurFmqk5d2Oq7hHQ2tnCtokXsvYfQ5TSwRAR1TGtrflvxVor/1as5tyNqboQAACX0Ma4zpkDRKRCtwfGmb7oWfuXYjXnbkxt+VbiHdUchScuKx0GEVGdU/PIeTXnbkxl6VamaxcBfc5NFOfeVDoUIqI6ZWsj3Z5Pb2qxse7ucTXnbkz1hUDFOwfy0nl7gIjURc1T6NScuzHVFwLu4YGABFw9eErpUIiI6pSau8fVnLsxlaVbmY2jPWz8PZG1/6jSoRAR1SmtrQQbM4vW1rq/Fas5d2OqnzUAAM4hAcg5fEbpMIiI6pRGI5kfOW/lL95Rc+7GWAgA8GodjHM/bFU6DCKiOmVrY35gnLkX8lgLNeduTPW3BgBA1y4c5Vl5KC24pXQoRER1pjbuk8+ZMwdBQUFwcHBAXFwcdu7cWWX75cuXIyIiAg4ODoiKisKaNWsMtkuSZHKZMWOG3CYnJwfDhg2Dm5sbPDw8kJycjJs3DWeCCSEwc+ZMtGvXDgCQdGAjPr90jGMEwEIAANCodXMAQF7GeYUjISKqO5YeOb9s2TKMHz8eU6ZMwd69exEdHY3ExERcuXLFZPvt27dj6NChSE5Oxr59+5CUlISkpCQcPnxYbnP58mWDZcGCBZAkCQMHDpTbDBs2DGlpaVi/fj1WrVqFLVu2ICUlxeBYL730Ej7//HNMmzYNADAzoj3auHly1gAASQghlA5CaaU3CvGNez88uOB1hI3srXQ4RES1Kj8/H+7u7tjV5WG42NiabHOzrBQdtv6CvLw8uLm5VWu/cXFx6NChAz7++GMAgF6vR2BgIMaNG4cJEyZUaj948GAUFBRg1apV8roHHngAMTExmDdvnsljJCUl4caNG9iwYQMAID09HS1btsSuXbvQvn17AMDatWvRp08fXLhwAQEBAUhPT0ebNm1w+PBh+Pv710ruDRl7BADYujpB6+OGy3s5c4CI1EPSVL0At4uGO5fi4mKT+yopKcGePXuQkJAgr9NoNEhISEBqaqrJz6Smphq0B4DExESz7bOysrB69WokJycb7MPDw0MuAgAgISEBGo0GO3bsAACsXLkSzZs3x6pVqxAVdfvNMtOOH0JeeUmVuauFytI1zznUHzlpp5UOg4iozmi0osoFAAIDA+Hu7i4v06dPN7mvq1evory8HH5+fgbr/fz8kJmZafIzmZmZNWq/aNEiuLq64rHHHjPYh6+vr0E7GxsbeHl5yfs5deoUzp49i+XLl+PTTz8FAGTczMPLh3ZVmbtacNbAXzwig3Dp111Kh0FEVGckjYBGY/qiJ/21/vz58wbd4/b29nUSmykLFizAsGHD4ODgUKPP6fV6FBcX46uvvoJOpwMATGnZGk/uTMWZwhto7uJi0F4yc06sFXsE/qJrF46yi9dRVlSidChERHVCkqq4NfDXeDk3NzeDxVwh4O3tDa1Wi6ysLIP1WVlZ8sXXmE6nq3b7rVu34ujRo3j22Wcr7cN4MGJZWRlycnLk/fj7+8PGxgZhYWFym+YuzgCAy8W3zOauFiwE/uLdpgUgBPKPX1A6FCKiOqGxEVUuNWFnZ4fY2Fh5EB9w+5v4hg0b0KlTJ5Of6dSpk0F7AFi/fr3J9l988QViY2MRHR1daR+5ubnYs2ePvG7jxo3Q6/WIi4sDADz44IMoKyvDyZMn5TbniwsAAE1cHe4794aOhcBfPCKbAgCup51RNhAiojpi6ecIjB8/Hp999hkWLVqE9PR0PPfccygoKMCoUaMAAMOHD8fEiRPl9i+99BLWrl2LDz74ABkZGZg6dSp2796NsWPHGuw3Pz8fy5cvr9QbAACRkZHo3bs3Ro8ejZ07d2Lbtm0YO3YshgwZgoCAAAC3Bw+2a9cOzzzzDA4cOAAAeCftCLr4eCPEzYXPEVA6gPrC3ssNGk9nZO7JUDoUIqI6IUmiyqWmBg8ejJkzZ2Ly5MmIiYnB/v37sXbtWnlA4Llz53D58mW5fefOnbFkyRLMnz8f0dHR+P7777FixQq0bt3aYL9Lly6FEAJDhw41edzFixcjIiICPXv2RJ8+fRAfH4/58+fL2zUaDVauXAlvb2/06dMHwO1bA3M6xlgs94aMzxG4w/KOKbBr5IYBv8xUOhQiolpT8RyB9KQEuNqankt/o7QUkSt+s7q59GrO3Rz2CNzBPbIZbh7jGAEiUofqPEfAWqk5d2MqS7dqurZhKDl/DfqycqVDISKqdVobQGsjzCxKR1e71Jy7MRYCd/CJDgHK9Lhx8pLSoRAR1ToJVYwRgHXfNVZz7sZYCNzBPbIZAM4cICJ1UHP3uJpzN6aydKvm6OcJycUBmXznABGpgMZs17j1z6VXc+7GVHYnpGqSJMGxuR+yD55QOhQiolonaYTZx+la+2N21Zy7MRYCRtxbNkPOnuNKh0FEVOuqesGOtb94R825G+OtASO+bUJQfPYK9OWcOUBE1s3STxZsSNScuzGVpXt3vjGhQEk5Cs5m3b0xEVEDVtE9bm6xZmrO3RhvDRjxaBUEALh+5CxcmwcoGwwRUS2SbCRItqZftSfprfsVfGrO3Rh7BIw4N/GB5GCLrP3HlA6FiKhWSRqpysWa1Ubuc+bMQVBQEBwcHBAXF4edO3dW2X758uWIiIiAg4MDoqKisGbNGoPtQghMnjwZ/v7+cHR0REJCAo4frzyGbfXq1YiLi4OjoyM8PT2RlJRUo7hZCBiRJAn2wb7I3s+ZA0Rk5bSaqhdrZuHcly1bhvHjx2PKlCnYu3cvoqOjkZiYiCtXrphsv337dgwdOhTJycnYt28fkpKSkJSUhMOHD8tt3n//fcyePRvz5s3Djh074OzsjMTERBQVFcltfvjhBzz99NMYNWoUDhw4gG3btuHJJ5+sUex86ZAJawZOQt6xCxh66EulQyEisriKF+9kvpoAN3vTL97JLy6F7gPre/FObeUeFxeHDh064OOPPwYA6PV6BAYGYty4cZgwYUKl9oMHD0ZBQQFWrVolr3vggQcQExODefPmQQiBgIAAvPrqq3jttdcAAHl5efDz88OXX36JIUOGoKysDEFBQXj77beRnJxc01Mhs/KS7954t2mB4lNZYI1ERFZNI1W9WLNq5J6fn2+wFBcXm9xVSUkJ9uzZg4SEhL93r9EgISEBqampJj+Tmppq0B4AEhMT5fanT59GZmamQRt3d3fExcXJbfbu3YuLFy9Co9Ggbdu28Pf3x8MPP2zQq1CtU1Gj1iqhaxsOcasEhRevKh0KEVGtkWw0kGzNLDbWfXmoTu6BgYFwd3eXl+nTp5vc19WrV1FeXg4/Pz+D9X5+fsjMzDT5mczMzCrbV/y/qjanTp0CAEydOhWTJk3CqlWr4Onpie7duyMnJ6fa54KzBkyomDmQm34Wzk18lA2GiKi2VHU/XC1jBMxtA3D+/HmDWwP29vZ1EVm16fV6AMBbb72FgQMHAgAWLlyIJk2aYPny5RgzZky19mPlf9L3xiXID7DV4sp+PmGQiKwXZw1Unbubm5vBYq4Q8Pb2hlarRVaW4fNnsrKyoNPpTH5Gp9NV2b7i/1W18ff3BwC0bNlS3m5vb4/mzZvj3Llz1ToPAAsBkzRaLeyb+bAQICLrZqeperFmFszdzs4OsbGx2LBhg7xOr9djw4YN6NSpk8nPdOrUyaA9AKxfv15uHxwcDJ1OZ9AmPz8fO3bskNvExsbC3t4eR4/+/aK80tJSnDlzBs2aNat2/Lw1YIZreBPkHjmrdBhERLWmqm/+aukRMLetpsaPH48RI0agffv26NixI2bNmoWCggKMGjUKADB8+HA0btxYHmfw0ksvoVu3bvjggw/Qt29fLF26FLt378b8+fNvxyBJePnllzFt2jSEhoYiODgY//rXvxAQECA/J8DNzQ3/8z//gylTpiAwMBDNmjXDjBkzAABPPPFEtWNnIWCGT5sQZGw5DCEEJMm6/0EQkUrZaAFbreltZfq6jaWuWTj3wYMHIzs7G5MnT0ZmZiZiYmKwdu1aebDfuXPnoLnjJQadO3fGkiVLMGnSJLz55psIDQ3FihUr0Lp1a7nNG2+8gYKCAqSkpCA3Nxfx8fFYu3YtHBwc5DYzZsyAjY0Nnn76ady6dQtxcXHYuHEjPD09qx07nyNgxunvN2PToP/FkMzv4ehb/RNKRFTfVcylv/rBo3BzNDOX/lYpvF/90WqfI6DG3M2x8ptA986zYuYAbw8QkbXicwTUmbsRFgJmuIU0BrQaXD14UulQiIhqhdl59H8t1kzNuRvjGAEzNLY2sG3ihcx9RxGldDBERLWBzxEwv01F1JVtDbmGceYAEVmv26/iNfd0vfrxBj5JkkwuFaPjASAnJwfDhg2Dm5sbPDw8kJycjJs3b5o83smTt3t5g8f/aPHcGyoWAlVoFNUChScvKx0GEVHt0EpVLzVUG2/gu3z5ssGyYMECSJIkP0kPAIYNG4a0tDSsX78eq1atwpYtW5CSklLpeKWlpYYv57Fg7g0ZZw1U4cTi37D16el48toK2Hu6Kh0OEZFFVIycz/lyKNyc7Ey3KSyB18hvTT5m19wT9iz9Bj5TkpKScOPGDflBO+np6WjZsiV27dqF9u3bAwDWrl2LPn364MKFCwgICJA/+89//hNnz57FsmXL4OZoi5xFpl/XW5E7Zw0QvFoHAwBy06v/qEYiooZCstVWuQDVf/FObbyBz1hWVhZWr15t8K0+NTUVHh4echEAAAkJCdBoNNixY4e8buPGjVi+fDlmzpz5V/JV568mHCxYBbewJoAk4dqhU/Dr3ErpcIiILKuqqXJ/ra/ui3eqegNfRkaGyc/c7Q18xhYtWgRXV1c89thjBvvw9fU1aGdjYwMvLy95P9euXcPIkSPxzTffGH7Dv0vuasEegSrYONrDxt8DmfuO3r0xEVFDo9FUvaD6L96pCwsWLMCwYcMMnqxXHaNHj8aTTz6Jrl27Gm64S+5qoa5s74FLaGNcP3xa6TCIiCxPq739qF1Ti7Zm3eO18Qa+O23duhVHjx7Fs88+W2kfxoMRy8rKkJOTI+9n48aNmDlzptxTAAD5haWwG/A5Fmw4ft+5N3QsBO7CKyoYBScuKR0GEZHlVaNHoLpq4w18d/riiy8QGxuL6OjoSvvIzc3Fnj175HUbN26EXq9HXFwcgNvjCPbv34/9+/fjjz/+AAC4Otpi79xBeDS+uep7BDhG4C50bcNx6uOVKL15C7YujkqHQ0RkORXfgM1tqyFLv4GvQn5+PpYvX44PPvig0jEjIyPRu3dvjB49GvPmzUNpaSnGjh2LIUOGyDMGIiMjDfYF3H7DYOsQ30r7u9fcGzIWAndRMXMgL+McvNuHKxwNEZEFaSTz337vYcBcbbyBDwCWLl0KIQSGDh1q8riLFy/G2LFj0bNnT2g0GgwcOBCzZ8++e8AWzL0h43ME7qL0RiG+ce+Hzl+8hvBRDysdDhHRfat4jsD1Nc/Dzdn04L/8gmJ49vnE6ubSqzl3c9R1I+Qe2Lo6Qevrhsx9x5QOhYjIsswNFKzqloG1UHPuRnhroBqcQ/yRc/iU0mEQEVlWVQPjrH3AnJpzN6KubO+RZ6tg3Dx+UekwiIgsStJoIWnNLBrr/las5tyNsRCoBl3bcJRdykVZUYnSoRARWY4Fpw82OGrO3Yi6sr1HjaKaA0Ig/9h5pUMhIrKcikcMm1usmZpzN8JCoBo8IpsCAHL4hEEisiZqHjCn5tyNsBCoBnsvN2g8nZHFmQNEZE0qniNgcrHyb8Vqzt0IZw1Uk1MLHa4e4swBIrIiah45r+bcjbAQqCaPlkHI2nJQ6TCIiCzHwo8YblDUnLsRdZU998GvbRhKz1+DvrRM6VCIiCxDqmLUvGTllwc1525EXdneB5/oEKBcj/yTfBMhEVkJNQ+YU3PuRlgIVFPFzIHraZw5QERWQtJUvVgzNeduRF3Z3gcHX09Irg7I2suZA0RkJdR8MVRz7kY4WLCaJEmCY3Mdsg+dVDoUIiLL0GoBrZnLgNbKu8fVnLsRFgI14B7ZFDl72CNARFaiqm+/1v6tWM25G1FXtvfJLyYUxWezoS8vVzoUIqL7p7WperFmas7dCAuBGvCJDgVKylFwNkvpUIiI7p+a75OrOXcj6sr2Pnm0bAYAuJ52VuFIiIgsQM0XQzXnbkRd2d4n5yY+kBxskbWf4wSIyApINoDGzCJZefe4mnM3oq5s75MkSbBv7ofsAyeUDoWI6P6p+Xn7as7dCAuBGnIPD0RexjmlwyAium+SpIEkmZ4qJ1l597iaczemrmwtwCcmFMWnr0AIoXQoRET3x1zXeMVizdScuxEWAjXkFxMGcasEhRevKh0KEdH9UfOAOTXnbkRd2VqAZ6uKmQNnlA2EiOh+qXkufS3kPmfOHAQFBcHBwQFxcXHYuXNnle2XL1+OiIgIODg4ICoqCmvWrDHYLoTA5MmT4e/vD0dHRyQkJOD48eMm91VcXIyYmBhIkoT9+/fXKG4WAjXk3MwPsNMi+4DpPwwiogajFr4VW/piKEmSyWXGjBlym5ycHAwbNgxubm7w8PBAcnIybt68KW/ftGkTBgwYAH9/f/j7+wMAvvthu0VzX7ZsGcaPH48pU6Zg7969iI6ORmJiIq5cuWKy/fbt2zF06FAkJydj3759SEpKQlJSEg4fPiy3ef/99zF79mzMmzcPO3bsgLOzMxITE1FUVFRpf2+88QYCAgJqHDcAQFCNLQ57UvwydKrSYRAR3ZO8vDwBQORd+U6IolUml7wr391uk5dX7f0uXbpU2NnZiQULFoi0tDQxevRo4eHhIbKysky237Ztm9BqteL9998XR44cEZMmTRK2trbi0KFDcpvLly8bLAsWLBCSJImTJ0/KbXr37i2io6PFn3/+KbZu3SpCQkLE0KFD5e3vvvuumDRpkti2bZvYt2+fACA0Gkms/H+Tq8z9/PnzIi8vT16KiorM5t6xY0fxwgsvyD+Xl5eLgIAAMX36dJPtBw0aJPr27WuwLi4uTowZM0YIIYRerxc6nU7MmDFD3p6bmyvs7e3Ft99+a/C5NWvWiIiICJGWliYAiH379pmN0xQWAvfg537/FEtjnlE6DCKieyIXAtd+EKJ0rckl79oPil8MTRkwYIB46KGH5J+PHDkiAIhdu3bJ63755RchSZK4ePGi2dx7/aOdGDWiV5W5Gy9TpkwxGVNxcbHQarXixx9/NFg/fPhw0b9/f5OfCQwMFB9++KHBusmTJ4s2bdoIIYQ4efKkyYt6165dxYsvvij/nJmZKRo3bix27dolTp8+fU+FAG8N3AOfqBa4dTKTMweIqGGrxq2BwMBAuLu7y8v06dNN7qqkpAR79uxBQkKCvE6j0SAhIQGpqakmP5OammrQHgASExPNts/KysLq1auRnJxssA8PDw+0b99eXpeQkACNRoMdO3aYTT0/vxBeXm5V5n7+/Hnk5eXJy8SJE03u6+rVqygvL4efn5/Bej8/P2RmZpr8TGZmZpXtK/5fVRshBEaOHIn/+Z//Mci/pqx8NEjt8GsXhvSbRSi6ch2Ofl5Kh0NEdG+qmir31/rz58/Dzc1NXm1vb2+yeVUXw4yMDJOfudvF0NiiRYvg6uqKxx57zGAfvr6+Bu1sbGzg5eVldj8AsHffCXz++eum8/9rnZubm0Hu9c1HH32EGzdumC1Qqos9AvfAs1UwACA3nQ8WIqIGTLrLgr8vhhWLuUKgLixYsADDhg2Dg4PDPe9jy5YtAIDZs8ehVevgKnOvLm9vb2i1WmRlGb6QLisrCzqdzuRndDpdle0r/l9Vm40bNyI1NRX29vawsbFBSEgIAKB9+/YYMWJEteNnIXAP3FoEAFoNHzVMRA2auD1OzOxSE7VxMbzT1q1bcfToUTz77LOV9mE8Mr+srAw5OTmV9rN582YMGTIEADBkSA+L5W5nZ4fY2Fhs2LBBXqfX67FhwwZ06tTJ5Gc6depk0B4A1q9fL7cPDg6GTqczaJOfn48dO3bIbWbPno0DBw5g//792L9/vzzjYtmyZXj33XerHT8LgXugsbWBbWAjZO3jy4eIqOHSo7zKpSZq42J4py+++AKxsbGIjo6utI/c3Fzs2bNHXrdx40bo9XrExcXJ6zZt2oS+ffvi7bfftnjuADB+/Hh89tlnWLRoEdLT0/Hcc8+hoKAAo0aNAgAMHz7coAv/pZdewtq1a/HBBx8gIyMDU6dOxe7duzF27FgAt6dNvvzyy5g2bRp+/vlnHDp0CMOHD0dAQACSkpIAAE2bNkXr1q3lJSwsDADQokULNGnSpPrB12hoIclWJL4qvuuYonQYREQ1VjFy/tr1H0Rp+VqTy7XrP9zT9EF7e3vx5ZdfiiNHjoiUlBTh4eEhMjMzhRBCPP3002LChAly+23btgkbGxsxc+ZMkZ6eLqZMmVJp+mBFvE5OTmLu3Lkmj9u7d2/Rtm1bsWPHDvHHH3+I0NBQg+mDGzduFE5OTmLixIni2LFjAoA4kvG5yMpebrHchRDio48+Ek2bNhV2dnaiY8eO4s8//5S3devWTYwYMcKg/XfffSfCwsKEnZ2daNWqlVi9erXBdr1eL/71r38JPz8/YW9vL3r27CmOHj1q9vj3OmuAhcA92vrqHPGlVz+lwyAiqrGKQuDq9e9FSfkvJper17+vFxdDIYT49NNPhaOjo8jNzTV5zGvXromhQ4cKFxcX4ebmJkaNGiVu3Lghbx8xYoTJ6YBdu0VZNPeGShKCc+DuxYklv2HrU9Px5LUVsPd0VTocIqJqy8/Ph7u7O67kfAc3NyczbQrh6zUIeXl59XrkfE2pOXdzOEbgHnm15swBImrYBPRVLtZMzbkbYyFwj9zCAgFJwrWDJ5UOhYjonuhFeZWLNVNz7sZYCNwjGwc72AR4IHPfUaVDISK6J0Loq1ysmZpzN8YnC94Hl9DGuJ52WukwiIjuifjrP3PbrJmaczfGHoH74NW6OQpOXFY6DCKie6Lm7nE1526MhcB90LUNQ/mVfJTeKFQ6FCKiGlPzgDk1526MhcB9aBTVHACQm8GZA0TU8Kj5W7GaczfGQuA+uEc0BQDkHOY4ASJqeG4/Wcfcf9ZNzbkbYyFwH2xdHKH1dePMASJqmKoaNW/tI+fVnLsRzhq4T84hAcg5xB4BImp4qnrBzr28eKchUXPuxtgjcJ88Wwfj5omLSodBRFRjwoKvIW5o1Jy7MRYC90kXE4ayS7kou1WsdChERDWi5pHzas7dGAuB+9SoTQtACOQfu6B0KERENaLmkfNqzt0YC4H75BH518wBPmGQiBoYvah6sWZqzt0YC4H7ZO/pCo2XMzL3HlM6FCKiGinVS1Uu1kzNuRvjrAELcGrhj2uH+BZCImpY9EKCXpi+6Jlbby3UnLsx9ghYgEfLZrjBMQJE1MDoBVBuZrH27nE1526MhYAF6NqGo/RCDvSlZUqHQkRUbWV6qcrFmqk5d2MsBCzAu00LoFyPfD5PgIgakHIhVblYMzXnboyFgAV4tGwGALiedkbZQIiIaqAMEsqEmQXWfTFUc+7GWAhYgIOPByQ3B2Tt48wBImo41DyFTs25G+OsAQuQJAmOwTpkHzyhdChERNVWVTe4tXePqzl3YywELMSjZTNc28W3EBJRw1FexcC4cisfMKfm3I3x1oCF+MaEovhcNvTl6no0JRE1XOamz1Us92LOnDkICgqCg4MD4uLisHPnzirbL1++HBEREXBwcEBUVBTWrFljsF2SJJPLjBkz5DY5OTkYNmwY3Nzc4OHhgeTkZNy8edNgPwcPHkSXLl3g6+sLAFg6f53Fc2+oWAhYiE+bEKCkHDfPZCkdChFRtVQ8VMfcUlPLli3D+PHjMWXKFOzduxfR0dFITEzElStXTLbfvn07hg4diuTkZOzbtw9JSUlISkrC4cOH5TaXL182WBYsWABJkjBw4EC5zbBhw5CWlob169dj1apV2LJlC1JSUuTt+fn56NWrF5o1a4bNmzcDAL75aDVWfL3ZYrk3ZJJQ2/sWa0nBhWx813QIeq54B037d1Y6HCIis/Lz8+Hu7o6f0ufC2dXRZJuCG7cwIPI55OXlwc3NrVr7jYuLQ4cOHfDxxx8DAPR6PQIDAzFu3DhMmDChUvvBgwejoKAAq1atktc98MADiImJwbx580weIykpCTdu3MCGDRsAAOnp6WjZsiV27dqF9u3bAwDWrl2LPn364MKFCwgICMDcuXPx1ltvITMzE0VFRXB3d8djz/bCrt8PYuHm9yySe0PGHgELcWrsDcnRDln7OXOAiBqG6vQI5OfnGyzFxaZfuV5SUoI9e/YgISFBXqfRaJCQkIDU1FSTn0lNTTVoDwCJiYlm22dlZWH16tVITk422IeHh4dcBABAQkICNBoNduzYIbfp2rUr7Ozs5DYxD7bC+ZOZyLteqPoeARYCFiJJEuyb+yH7AGcOEFHDUFbFS3cqBtIFBgbC3d1dXqZPn25yX1evXkV5eTn8/PwM1vv5+SEzM9PkZzIzM2vUftGiRXB1dcVjjz1msI+K+/4VbGxs4OXlJe/H1HFcvG5/07+SlWc2d7XgrAELcg8PRF76WaXDICKqlqrmzFesP3/+vEH3uL29fR1EZtqCBQswbNgwODg43Pe+Km6KC1Q+B3yOAN0zn5gQXFmzC0IISJK6Kkoianiq8wY+Nze3at0n9/b2hlarRVaW4YDprKws6HQ6k5/R6XTVbr9161YcPXoUy5Ytq7QP48GIZWVlyMnJkfdj6jjXr94AALh7e1Y6B7w1QPfMLyYMoqgUBReylQ6FiOiuSvUwe2ugVF+zfdnZ2SE2NlYexAfcHiy4YcMGdOrUyeRnOnXqZNAeANavX2+y/RdffIHY2FhER0dX2kdubi727Nkjr9u4cSP0ej3i4uLkNlu2bEFpaanc5sD2dAQ094e9q8t9597QsRCwIM+/3jmQy3cOEFEDYOnH7I4fPx6fffYZFi1ahPT0dDz33HMoKCjAqFGjAADDhw/HxIkT5fYvvfQS1q5diw8++AAZGRmYOnUqdu/ejbFjxxrsNz8/H8uXL8ezzz5b6ZiRkZHo3bs3Ro8ejZ07d2Lbtm0YO3YshgwZgoCAAADAk08+CTs7OyQnJyM9PR0A8OuSDXjkmYf5iGGwELAo52Z+gJ0Nruw/rnQoRER3VSKAEr2Z5R4uhoMHD8bMmTMxefJkxMTEYP/+/Vi7dq08UO/cuXO4fPmy3L5z585YsmQJ5s+fj+joaHz//fdYsWIFWrdubbDfpUuXQgiBoUOHmjzu4sWLERERgZ49e6JPnz6Ij4/H/Pnz5e3u7u5Yt24dTp8+jW7dugEAHkl5BF0HPWSx3BsyPkfAwpaEPwWv2FD0XjJF6VCIiEyqeI7Ap3vmw9HFyWSbWzcLMSY2xerm0qs5d3M4WNDCXMObIO8IZw4QUf1X1eN0rf0xu2rO3RhvDViYT5sQ3DqVBXa0EFF9Z/a2wF+LNauN3C39ngUhBCZPngx/f384OjoiISEBx4//fev5zJkzSE5ORnBwMBwdHdGiRQtMmTIFJSUlNYqbhYCF6dqFQ9wsQtGV60qHQkRUJUsPFmxILJ17bbxn4f3338fs2bMxb9487NixA87OzkhMTERRUREAICMjA3q9Hp9++inS0tLw4YcfYt68eXjzzTdrFDvHCFhYbsY5/NhyFHpvmAn/Hm2VDoeIqJKK++Qz/qz6PvnrD1jfffLayt3S71kQQiAgIACvvvoqXnvtNQBAXl4e/Pz88OWXX2LIkCEm45gxYwbmzp2LU6dOVStugD0CFufWIgCw0fBRw0RU75XpK54lUHkps/JbA9XJXcn3LJw+fRqZmZkGbdzd3REXF2d2n8DtYsHLy6ta50COtUat6a40tjawbdIIWZxCSET1XMWAOXOLNatO7kq+Z6Hi/zXZ54kTJ/DRRx9hzJgxVSdvhLMGaoFreBPkHjmjdBhERFUq0UvQmHnBTomVv3inOrnXp/cs3M3FixfRu3dvPPHEExg9enSNPssegVrg3bo5Ck+artiIiOoLDhasOveK9yxULOYKgdp4z0LF/6uzz0uXLqFHjx7o3LmzwYOUqouFQC3QxUZAf70AxTn5SodCRGQWbw1YJvfaeM9CcHAwdDqdQZv8/Hzs2LHDYJ8XL15E9+7dERsbi4ULF0KjqfllnbcGaoFnqyAAQG76Ofg92LrqxkRECikrB0rLzW+zZpbOffz48RgxYgTat2+Pjh07YtasWZXes9C4cWN5nMFLL72Ebt264YMPPkDfvn2xdOlS7N69W/5GL0kSXn75ZUybNg2hoaEIDg7Gv/71LwQEBCApKQnA30VAs2bNMHPmTGRn//3CO3M9EaawEKgF7mFNAEnC1YMnWQgQUb2l5qfrWTr3wYMHIzs7G5MnT0ZmZiZiYmIqvWfhzm/rFe9ZmDRpEt58802EhoZWes/CG2+8gYKCAqSkpCA3Nxfx8fFYu3YtHBwcANzuQThx4gROnDiBJk2aGMRTkycD8DkCteTrpk8gILEDen72htKhEBEZqJhLP+63z2DvbHoufXFBIT5KGG21zxFQY+7msEeglriENkZu+hmlwyAiMos9Aua3qQkHC9YSr1bBKDh++e4NiYgUwsGC6szdGAuBWuLfLhzl2fkovVGodChERCbxyYLqzN0YC4Fa4hXVHMDtdw8QEdVHav5WrObcjbEQqCXuEYEAgGuHqv/iByKiuqTXS1Uu1kzNuRtjIVBLbJ0dofVzR+beo0qHQkRkUlmppsrFmqk5d2OcNVCLnEP8cT3tjNJhEBGZVNW3X2v/Vqzm3I2xEKhFXq2DcWHln0qHQURkUnmZ+W+/5WXW/a1YzbkbU1e2dcwvJhxll6+j7Jbpd1gTESlJzffJ1Zy7MRYCtci7TXNAAHlHzysdChFRJWq+GKo5d2O8NVCL3CObAQCup51Bo5gQhaMhIjJUVipBKjV90Sszs95aqDl3Y+wRqEX2Hi7QeLkgc2+G0qEQEVWi5m/Fas7dGAuBWuYU4o+rfJYAEdVDpaWaKpd7MWfOHAQFBcHBwQFxcXHYuXNnle2XL1+OiIgIODg4ICoqCmvWrKnUJj09Hf3794e7uzucnZ3RoUMHnDv398PaTp48iUcffRQ+Pj5wc3PDoEGDkJWVZbCPY8eOYcCAAQgODgYAbJv2v7h84LBFc2+o1JWtAjxbNsPN4xeVDoOIqBK9qOJbsaj5t+Jly5Zh/PjxmDJlCvbu3Yvo6GgkJibiypUrJttv374dQ4cORXJyMvbt24ekpCQkJSXh8OHDcpuTJ08iPj4eERER2LRpEw4ePIh//etf8qt4CwoK0KtXL0iShI0bN2Lbtm0oKSlBv379oNf//azgRx55BGVlZVi5ciUAwKVJM+yeOQ23cnItkntDxtcQ17JDs3/A7lfnYXjBGmjtbJUOh4hIfhVvz7nLYONo+lW8ZbcKseG5wTV6FW9cXBw6dOiAjz/+GACg1+sRGBiIcePGYcKECZXaDx48GAUFBVi1apW87oEHHkBMTAzmzZsHABgyZAhsbW3x9ddfmzzmunXr8PDDD+P69etynHl5efD09MS6deuQkJCAq1evwsfHB1u2bEF0dDTc3d3R7cMvsfmVkWj/+jto1CrmvnNvyNgjUMt8okOAcj1unGCvABHVL9V5ul5+fr7BUlxsejp0SUkJ9uzZg4SEBHmdRqNBQkICUlNTTX4mNTXVoD0AJCYmyu31ej1Wr16NsLAwJCYmwtfXF3FxcVixYoXcvri4GJIkwd7eXl7n4OAAjUaDP/74AwDQqFEjhIeH46uvvkJBQQEA4PymDbB19YBT41DVP1lQXdkqwKPlXzMHjpxVOBIiIkPVGTAXGBgId3d3eZk+fbrJfV29ehXl5eXw8/MzWO/n54fMzEyTn8nMzKyy/ZUrV3Dz5k2899576N27N9atW4dHH30Ujz32GDZv3gzgdg+Cs7Mz/vnPf6KwsBAFBQV47bXXUF5ejsuXb78KXpIk/Pbbb9i3bx8aN24MALjw+ypEv/gOtI5uHCyodADWzsHHA5KbI985QET1TlmZhLIyjZnl9sXw/PnzyMvLk5eJEyfWWXwV9/gHDBiAV155BTExMZgwYQIeeeQR+daBj48Pli9fjpUrV8LFxQXu7u7Izc1Fu3btoNHcvsQJIfDCCy/A19cXa9euBQB4te6Ig3Om4tb16yYKgTpLsV7gcwTqgGNzHa4ePKl0GEREBvTlEvTlZp63/9d6Nze3at0n9/b2hlarrTRaPysrCzqdzuRndDpdle29vb1hY2ODli1bGrSJjIyUu/0BoFevXjh58iSuXr0KGxsbeHh4QKfToXnz26+D37hxI1atWoXr16/Ln2k2YAxyjx/C5W0b0OQfgw32z1sDZHEekU1x49gFpcMgIjJgyVkDdnZ2iI2NxYYNG/7ev16PDRs2oFOnTiY/06lTJ4P2ALB+/Xq5vZ2dHTp06ICjRw17VI8dO4ZmzZpV2p+3tzc8PDywceNGXLlyBf379wcAFBYWAoDcQ1CRO6CBXi9UP2uAPQJ1wDcmFJe+/wP68nJotFqlwyEiAgCUl2oArZkX79zDt+Lx48djxIgRaN++PTp27IhZs2ahoKAAo0aNAgAMHz4cjRs3lscZvPTSS+jWrRs++OAD9O3bF0uXLsXu3bsxf/58eZ+vv/46Bg8ejK5du6JHjx5Yu3YtVq5ciU2bNsltFi5ciMjISPj4+CA1NRUvvfQSXnnlFYSHhwO4XXB4enpixIgRGD9+PADg7MpFKM7JhFvYA5V6AO4l94aMhUAd8I0JBUrLcfN0JtxCGisdDhERgNuDBSULvop38ODByM7OxuTJk5GZmYmYmBisXbtWHhB47tw5g2/lnTt3xpIlSzBp0iS8+eabCA0NxYoVK9C6dWu5zaOPPop58+Zh+vTpePHFFxEeHo4ffvgB8fHxcpujR49i4sSJyMnJQVBQEN566y288sor8nZvb2+sXbsWb731Fvr16wcAuHk2HS2G/y8cdCGVxgSobbAgnyNQBwouZuO7wCF46Mf/RbMBDyodDhGpXMVzBGKm/AStg7PJNuVFBdj/9gCrm0uv5tzNUVf/h0KcArwhOdkha/8xpUMhIpJpS/VVLtZMzbkb462BOiBJEhyC/ZB94ITSoRARySS9gEZvulNYb2a9tVBz7sZYCNQR98imyD18RukwiIhk2nI9tGWmv/2Kcuv+Vqzm3I3x1kAd8YkOQdGZK+CQDCKqLzTlgKZcmFmUjq52qTl3YywE6ohvdChQVIqC86bfwkVEVNc0f3WPm1usmZpzN8ZbA3XEs1UQAOB62hm4NPWrujERUR3Qlumh1ZrpHjfTbW4t1Jy7MfYI1BGXZn6AnQ0HDBJRvaHmb8Vqzt0YewTqiKTRwD7IB1f2H1c6FCIiAIBNmR42GjPffq38W7GaczfGQqAOuYUHIjf9nNJhEBHdpheQzH37tfZvxWrO3QhvDdQh7zYtUHQ6izMHiKheUHP3uJpzN8YegTqkaxuO9JtFuJV1HU46L6XDISKV05bqoZVMd4PrrfzpemrO3RgLgTpUMXMg98hZFgJEpDiNXg+N8Rt37thmzdScuzHeGqhDri0CABsNsg9wwCARKU/N3eNqzt0YewTqkMZGC7tAb2Rx5gAR1QPasiq6x6185LyaczfGHoE65hrWGLlHzigdBhGRqr8V10buc+bMQVBQEBwcHBAXF4edO3dW2X758uWIiIiAg4MDoqKisGbNGoPtQghMnjwZ/v7+cHR0REJCAo4fN/wimZOTg2HDhsHNzQ0eHh5ITk7GzZs3axQ3C4E61iiqBW6dzFQ6DCIi2JTqq1ysmaVzX7ZsGcaPH48pU6Zg7969iI6ORmJiIq5cMf1Y+e3bt2Po0KFITk7Gvn37kJSUhKSkJBw+fFhu8/7772P27NmYN28eduzYAWdnZyQmJqKoqEhuM2zYMKSlpWH9+vVYtWoVtmzZgpSUlBrFzkKgjvnHRkCfW4iia3lKh0JEaqe//TpeUwusuw6weO7/+c9/MHr0aIwaNQotW7bEvHnz4OTkhAULFphs/9///he9e/fG66+/jsjISLzzzjto164dPv74YwC3ewNmzZqFSZMmYcCAAWjTpg2++uorXLp0CStWrAAApKenY+3atfj8888RFxeH+Ph4fPTRR1i6dCkuXbpU7dhZCNQxj5bNAAB5fLAQESmsvKQQZcWml/KSQqXDq1XVyT0/P99gKS4uNrmvkpIS7NmzBwkJCfI6jUaDhIQEpKammvxMamqqQXsASExMlNufPn0amZmZBm3c3d0RFxcnt0lNTYWHhwfat28vt0lISIBGo8GOHTuqfS44WLCOuYc1ASQJVw+ehF98lNLhEJEK2dnZQafT4Yd1L1fZTqfTwc7Orm6CqiPVzd3FxQWBgYEG66ZMmYKpU6dWanv16lWUl5fDz8/whXJ+fn7IyMgwuf/MzEyT7TMzM+XtFeuqauPr62uw3cbGBl5eXnKb6mAhUMe09nawbeyJzH3H0ErpYIhIlRwcHHD69GmUlJRU2c7Ozg4ODg51FFXdqG7uQghIkmSwzt7evjZDUwwLAQU4hzbG9bTTSodBRCrm4OBgdRf56rJ07t7e3tBqtcjKyjJYn5WVBZ1OZ/IzOp2uyvYV/8/KyoK/v79Bm5iYGLmN8WDEsrIy5OTkmD2uKRwjoIBGUc1ReOKy0mEQEZEF2NnZITY2Fhs2bJDX6fV6bNiwAZ06dTL5mU6dOhm0B4D169fL7YODg6HT6Qza5OfnY8eOHXKbTp06ITc3F3v27JHbbNy4EXq9HnFxcdVPQFCdO/rlWrFAekgU591UOhQiIrKApUuXCnt7e/Hll1+KI0eOiJSUFOHh4SEyMzOFEEI8/fTTYsKECXL7bdu2CRsbGzFz5kyRnp4upkyZImxtbcWhQ4fkNu+9957w8PAQP/30kzh48KAYMGCACA4OFrdu3ZLb9O7dW7Rt21bs2LFD/PHHHyI0NFQMHTq0RrHz1oACvFoHAwDyMs7Dp2OEwtEQEdH9Gjx4MLKzszF58mRkZmYiJiYGa9eulQf7nTt3DhrN353wnTt3xpIlSzBp0iS8+eabCA0NxYoVK9C6dWu5zRtvvIGCggKkpKQgNzcX8fHxWLt2rcFtjcWLF2Ps2LHo2bMnNBoNBg4ciNmzZ9codkkIvhO3rpUW3MI3ro+g02fjEZHcV+lwiIhIxThGQAG2zo7Q6tyRue+Y0qEQEZHKsRBQiHNIAHIOc+YAEREpi4WAQrxaBaPg+EWlwyAiIpVjIaAQXdswlGXmouyW6UdWEhER1QUWAgpp1KYFIIC8o+eVDoWIiFSMhYBCPCKbAgDHCRARkaJYCCjEzt0FmkYuyNx7VOlQiIhIxVgIKMgpxB/XDp9SOgwiIlIxFgIK8owMws1jnDlARETKYSGgIL+2YSi9cA3lJaVKh0JERCrFQkBBPtEhgF7gxgn2ChARkTJYCChInjmQdkbZQIiISLVYCCjIwccDkpsjsjhzgIiIFMJCQGFOLXS4eogzB4iISBksBBTm0bIZ8vl0QSIiUggLAYX5Roei5NxV6MvKlQ6FiIhUiIWAwnxjQoHSctw4fVnpUIiISIVYCCjMo2UzAEDukbMKR0JERGrEQkBhjv6NIDnZIWvfMaVDISIiFWIhoDBJkuDQ3A/ZB04oHQoREakQC4F6wD2iKWcOEBGRIlgI1AM+0aEoOnMFQq9XOhQiIlIZFgL1gF9MKFBUioLz2UqHQkREKsNCoB7waBUEALh+5IyicRARkfqwEKgHXJr6AvY2HDBIRER1joVAPSBpNLBv5ous/ZxCSEREdYuFQD3hFhGIvHTOHCAiorrFQqCe8IkOQdGpTAghlA6FiIhUhIVAPeEXEwZRUIxbmTlKh0JERCrCQqCe8GzFdw4QEVHdYyFQT7g2DwBsNJw5QEREdYqFQD2hsdHCLtCbMweIiKhOsRCoR1zDm/DWABER1SkWAvWId5sWuHUqU+kwiIhIRVgI1CO6tuHQ5xai6Gqe0qEQEZFKsBCoRzz/eudAbjpvDxARUd1gIVCPuIU2BjQSrh06pXQoRESkEiwE6hGtvR1sAzyRue+o0qEQEZFKsBCoZ1zCmuB62hmlwyAiIpVgIVDPeEU1R+GJy0qHQUREKsFCoJ7RtQ1H+dUbKMkvUDoUIiJSARYC9YxX6yAAQF76OWUDISIiVWAhUM94RDQFJHDmABER1QkWAvWMjZMDtH4enDlARER1goVAPeQc4o+cw6eVDoOIiFSAhUA95NU6GAXHLykdBhERqQALgXrIv10EyrJyUVZYpHQoRERk5VgI1ENerYMBAeQdPa90KEREZOUkIYRQOgj629VrhVj582FsWHUY5S7O0Pm7oWe35vjHQy1gb2+jdHhEqnPz/BUc+e//w+mlG1GccwOuzf0RltwH4WMegY2Tg9LhEd03FgL1yOkz1/HOvzfhxs2SStuaB3ti8oTucHayUyAyInW6tu84fu31Boqv5Vfa1ig2DL1/mwE7dxcFIiOyHN4aqCeEEPjPx9tNFgEAcOr0dXz97YE6jopIvYQQ+H3wOyaLAAC4tucYdr32aR1HRWR5LATqif2HMpGZdbPKNlu3n8XNAtOFAhFZ1sVfd+HGiYtVtjm5ZAOKr9+oo4iIagdvOtcTR49fvWubkpJy7Eg9ixbBXnUQEZG6nVq9+65tym8VI+fASfh3j6n9gIhqCQuBekIrSdVqt3DuDmjLOayDqLY1O3oSwdVoJ2nZsUoNGwuBeqJNax2++zGtyjZOjraY9FYP2Npq6ygqIvXK29sCewfvr7KNvZcrvNuH101ARLWEhUA9ER7mjZDmXjhxKsdsm8SEEIRG+NZhVEQq1qIzzn0Qgas7M8w2CU95BDaO9nUYFJHlsU+rHnn1xQfhr3M1ua1DbGMMeqx1HUdEpG49lk+BW1gTk9uaJj2Itm+PrNuAiGoBnyNQzxQVlWHr9rP4I/UsCgpK4Ovrgp7dm6NtG39oNNUbR0BEllNacAunFm/AqW83ovj63w8UavJwR0gafpeiho+FABERkYqxnCUiIlIxFgJEREQqxkKAiIhIxVgIEBERqRgLASIiIhVjIUBERKRiLASIiIhUjIUAERGRirEQICIiUjEWAkRERCrGQoCIiEjFWAgQERGpGAsBIiIiFWMhQEREpGIsBIiIiFSMhQAREZGKsRAgIiJSMRYCREREKsZCgIiISMVYCBAREakYCwEiIiIVYyFARESkYiwEiIiIVIyFABERkYqxECAiIlIxFgJEREQqxkKAiIhIxVgIEBERqRgLASIiIhVjIUBERKRiLASIiIhUjIUAERGRirEQICIiUjEWAkRERCrGQoCIiEjFWAgQERGp2P8HfUTGRGi4jhwAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from utils import get_ape_from_pd_series\n", + "\n", + "wntr.graphics.plot_network(\n", + " wn,\n", + " node_attribute=get_ape_from_pd_series(\n", + " results_hhl.node[\"pressure\"].iloc[0], results_epanet.node[\"pressure\"].iloc[0]\n", + " ),\n", + " link_attribute=get_ape_from_pd_series(\n", + " results_hhl.link[\"flowrate\"].iloc[0],\n", + " results_epanet.link[\"flowrate\"].iloc[0],\n", + " ),\n", + " node_colorbar_label=\"Pressures\",\n", + " link_colorbar_label=\"Flows\",\n", + " node_size=50,\n", + " title=f\"{inp_file}: Absolute Percent Error\",\n", + " node_labels=False,\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "vitens_wntr_1", + "language": "python", + "name": "python3" + }, + "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.9.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/newton_raphson/utils.py b/docs/notebooks/newton_raphson/utils.py new file mode 100644 index 0000000..86da3cc --- /dev/null +++ b/docs/notebooks/newton_raphson/utils.py @@ -0,0 +1,46 @@ +TOL = 50 # => per cent +DELTA = 1.0e-12 + + +def get_ape_from_pd_series(quantum_pd_series, classical_pd_series): + """Helper function to evaluate absolute percentage error between classical and quantum results.""" + ape = ( + abs(quantum_pd_series - classical_pd_series) + * 100.0 + / abs(classical_pd_series + DELTA) + ) + return ape + + +def compare_results(classical_result, quantum_result): + """Helper function that compares the classical and quantum simulation results.""" + classical_data = [] + quantum_data = [] + + def check_ape(classical_value, quantum_value): + """Helper function to check if the absolute percentage error between classical and quantum results is within TOL.""" # noqa: E501 + ape = ( + abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA) + ) + is_close_to_classical = ape <= TOL + if is_close_to_classical: + print( + f"Quantum result {quantum_value} within {ape}% of classical result {classical_value}" + ) + quantum_data.append(quantum_value) + classical_data.append(classical_value) + return is_close_to_classical + + for link in classical_result.link["flowrate"].columns: + classical_value = classical_result.link["flowrate"][link].iloc[0] + quantum_value = quantum_result.link["flowrate"][link].iloc[0] + message = f"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}" + assert check_ape(classical_value, quantum_value), message + + for node in classical_result.node["pressure"].columns: + classical_value = classical_result.node["pressure"][node].iloc[0] + quantum_value = quantum_result.node["pressure"][node].iloc[0] + message = f"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}" + assert check_ape(classical_value, quantum_value), message + + return classical_data, quantum_data # noqa: W292 diff --git a/docs/notebooks/qnr_qubols/qubo_poly_solver.ipynb b/docs/notebooks/qnr_qubols/qubo_poly_solver.ipynb deleted file mode 100644 index 0b06af0..0000000 --- a/docs/notebooks/qnr_qubols/qubo_poly_solver.ipynb +++ /dev/null @@ -1,498 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# QUBO Solution of the hydraulics equations\n", - "In this notebook we illustrate how to solve the hydraulics equations using a pure QUBO approach. \n", - "\n", - "## Hydraulics equations\n", - "In their most basic form the hydraulics equations read:\n", - "\n", - "$$\n", - " \\sum_j q_{ij} - D_i = 0 \\newline\n", - " h_{L_{ij}} \\equiv h_i - h_j = A |q_{ij}| q_{ij}^{B-1}\n", - "$$\n", - "\n", - "where $h_i$ is the head pressure at node $i$, $A$ the resistance coefficient and $B$ the flow exponent. \n", - "Several approximations have been developed for define $A$ and $B$. The popular Hazen-Williams (HW) approximation uses $B=1.852$. The HW is therefore not suited for a QUBO formulation that requires integer exponents in the formulation of the objective function. In contrast, the Chezy-Manning (CM) and Darcy-Weisbach (DW) approximation use $B=2$. We have implemented DW and CM hydraulics models that can found under `wntr_quantum/sim/models/`.\n", - "\n", - "\n", - "The presence of absolute values in the hydraulics equation makes it difficult to use the approach we just described. We therefore express the flow values as:\n", - "\n", - "$$\n", - " q_{ij} = s_{ij} |q_{ij}| \\equiv s_{ij} y_{ij}\n", - "$$\n", - "\n", - "This leads to the equations:\n", - "\n", - "$$\n", - " \\sum_j s_{ij} y_{ij} - D_i = 0 \\newline\n", - " h_{L_{ij}} \\equiv h_i - h_j = A s_{ij} y_{ij}^{B}\n", - "$$\n", - "\n", - "In these forms the hydraulics equation can be seen as a system of non-linear equations with integeer power of the unknown: \n", - "\n", - "$$\n", - "F(s_{ij}, y_{ij}, h_i)=0\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " ## Solving non linear systems with a QUBO approach\n", - " \n", - " We closely following an approach developed in this [http://dx.doi.org/10.1038/s41598-019-46729-0](paper) to solve the non linear system. \n", - " \n", - " \n", - "The method proposes to solve a non-linear system, given by $F(X) = 0$ by first decomposing the system of equations as a sum of tensor products:\n", - "\n", - "$$\n", - " F_i = P_i^{(0)} + \\sum_j P_{ij}^{(1)}x_j + \\sum_{jk} P_{ijk}^{(2)}x_j x_k + \\sum_{jkl} P_{ijkl}^{(3)}x_j x_k x_l = 0 \n", - "$$\n", - "\n", - "To find the solution of the system one can then minimise the residual sum of squares\n", - "\n", - "$$\n", - "\\chi^2 = \\left[ P^{(0)} + P^{(1)} X + P^{(2)} X^2 + P^{(3)} X^3 + ... \\right]^2\n", - "$$\n", - "\n", - "By encoding all the variables as binary expansions we obtain a high order boolean polynomial. To solve this problem with a QUBO formalism, the high order terms have to be quadratized by introducing additional binary variables and appropriate terms in the loss function. The resulting QUBO problem can then be solved using either classical simulated annealing or quantum annealers alike." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example\n", - "\n", - "We demonstrate in the following how to us our software to solve the hydraulics equations with a QUBO approach.\n", - "\n", - "### Reference Solution\n", - "\n", - "We first define the problem and solve it classically to obtain a benchmark solution" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "metadata": {} - }, - "outputs": [], - "source": [ - "import wntr\n", - "\n", - "inp_file = \"./networks/Net0.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We solve the problem using the default `EPANET` simulator " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Drf9G5FfUsShZiLyDqKos5k8mU4nQOdjJekcC7wrVqzAzTffjKCgIISHhyMrKwsnTpwwKzNx4kQIgmCWFixY4FA9bht4k+K4pIiIqG2oWT55Mq1GPjli7969WLhwIfbv34/du3ejpaUFU6dORVNTk1m5+fPn4/z586b0pz/9yaF63Par0NCYftBoNGaHJLcrr6rGtevNCPD364aWEREpxyhqYRStLycyip49q1nrI0CnsfzlQis69qUjLy/P7PebNm1CeHg4ioqKMGHCBNP1wMBAREZGOt7YH7htj9fPzwdxgyw/uCRJOHHqrMItIiJSngS5iVUaSO77z7xd2iZRCVZSW5mGhgaz1NzcbNe96+vrAQB9+vQxu75lyxaEhYVhxIgRWLJkCa5evepYmx0qrTJJsZxgRUTezduHmu2Z1TxgwACEhISY0ooVK2zeVxRFPP744xg/fjxGjBhhun7ffffhnXfeweeff44lS5bg7bffxq9//WuH2uy2Q81A25Kif3x2wGIelxQRkTcQRS1EmaFm0cOHmn10Any0lr9c+BjbrldVVSE4ONh03c/P9mvIhQsX4tixY/jqq6/Mrj/44IOmX48cORJRUVGYMmUKysrKEBsba1eb3TvwcmYzEXk5SYJsr9bDN65qW05kJfBq0HY9ODjYLPDakpOTg48++ghffPEF+ve3PpEXAFJTUwEApaWl3hF4eVgCEXk7W8PJ3jLUbDHPwS8dkiThkUcewYcffoiCggIMHjzY5meKi4sBAFFRUXbX49bveBNlAu/JinMwGGyf2kFE5M5EUQOjTOrMlpHr1q1DTEwM/P39kZqaioMHD8qW37FjBxITE+Hv74+RI0di165dZvlz587tsPY1MzPT4r2am5sxevRoCIJgCmpytNbW8PoI0Dq4ZeTChQvxzjvvYOvWrQgKCoJer4der8e1a9cAAGVlZVi+fDmKiopQUVGBf/7zn5g9ezYmTJiAUaNG2V2PWwfeHoH+iOkfbjHPaBRRevq8wi0iIlKWBI3N5Ijt27cjNzcXy5Ytw+HDh5GcnIyMjAzU1NRYLL9v3z7MmjUL8+bNw5EjR5CVlYWsrCwcO3bMrFxmZqbZ2td3333X4v2efPJJREdb34v/RtZnNLclR7z22muor6/HxIkTERUVZUrbt28H0Ha272effYapU6ciMTERTzzxBO699178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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "# solve the problem\n", - "sim = wntr.sim.EpanetSimulator(wn)\n", - "reference_results = sim.run_sim()\n", - "\n", - "# Plot results on the network\n", - "pressure_at_5hr = reference_results.node[\"pressure\"].loc[0, :]\n", - "flow_at_5hr = reference_results.link[\"flowrate\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " link_attribute=flow_at_5hr,\n", - " node_attribute=pressure_at_5hr,\n", - " node_size=500,\n", - " link_width=5,\n", - " node_labels=True,\n", - " link_cmap=plt.cm.cividis,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We extract the values of the pressure and flows for future use" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0.05 , 0.05 , 26.477, 22.954], dtype=float32)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "\n", - "ref_pressure = reference_results.node[\"pressure\"].values[0][:2]\n", - "ref_rate = reference_results.link[\"flowrate\"].values[0]\n", - "ref_values = np.append(ref_rate, ref_pressure)\n", - "ref_values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### QUBO Polynomial Solver\n", - "\n", - "We now show how to solve the problem using the QUBO polynomial solver included in `wntr_quantum`. We start with redefining the water network." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "wn = wntr.network.WaterNetworkModel(inp_file)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The unknown of the problem can take continuous values and therefore must be encoded using several qubits before being used in a QUBO formulation. We use here the encoding implemented in our library `qubops`. We use these encoding schemes to instantiate the polynomial solver. " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Head Encoding : 0.000000 => 200.000000 (res: 1.574803)\n", - "Flow Encoding : -4.000000 => -0.000000 | 0.000000 => 4.000000 (res: 0.031496)\n" - ] - } - ], - "source": [ - "from wntr_quantum.sim.solvers.qubo_polynomial_solver import QuboPolynomialSolver\n", - "from qubops.encodings import PositiveQbitEncoding\n", - "\n", - "nqbit = 7\n", - "step = 4.0 / (2**nqbit - 1)\n", - "flow_encoding = PositiveQbitEncoding(\n", - " nqbit=nqbit, step=step, offset=+0, var_base_name=\"x\"\n", - ")\n", - "\n", - "nqbit = 7\n", - "step = 200 / (2**nqbit - 1)\n", - "head_encoding = PositiveQbitEncoding(\n", - " nqbit=nqbit, step=step, offset=+0.0, var_base_name=\"x\"\n", - ")\n", - "\n", - "net = QuboPolynomialSolver(wn, flow_encoding=flow_encoding, head_encoding=head_encoding)\n", - "net.verify_encoding()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We then solve the QUBO equations classically. This gives us: a reference solution, the best possible encoded solution, the total encoded solution including all slack variables and the QUBO energy of the solution." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/QuantumNewtonRaphson/quantum_newton_raphson/utils.py:74: SparseEfficiencyWarning: spsolve requires A be CSC or CSR matrix format\n", - " warn(\"spsolve requires A be CSC or CSR matrix format\", SparseEfficiencyWarning)\n" - ] - } - ], - "source": [ - "ref_sol, encoded_ref_sol, bin_rep_sol, eref, cvgd = net.classical_solution()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initial sample for the QUBO optimization \n", - "\n", - "Before minimizing the energy of the QUBO problem we need to define the initial configuration of the binary variables in the QUBO problem. We have implemented two different ways to obtain an initial sample that respects all the conditions imposed by the quadratization constraings of the polynomial qubo solver. \n", - "\n", - "We can for example create a completely random sample that simply ensure that quadratization constraints are respected" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "from wntr_quantum.sampler.simulated_annealing import generate_random_valid_sample\n", - "\n", - "x = generate_random_valid_sample(net)\n", - "x0 = list(x.values())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively we can modify the solution calculated in `.classical_solution()`. This can be useful when one wants to reuse exact values of the flows or pressure" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "from wntr_quantum.sampler.simulated_annealing import modify_solution_sample\n", - "\n", - "x = modify_solution_sample(net, bin_rep_sol, modify=[\"flows\", \"heads\"])\n", - "x0 = list(x.values())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Temperature scheduling for the Simulated Annealing optimization\n", - "\n", - "One important parameters of the simulated Annealing process is the the so-called temperature schedule. This schdule defines the acceptance probability of the new samples that increase the QUBO energy. While high temperature that leads to accepting samples that increase energy is usefull to escape local minima the temperature must be decreased in order to converge towards a minima. \n", - "\n", - "The temperature schedule usually starts with high temperature values that allows to explore the energy landscape but progressively decrease the tempearture in order for the optimization to converge. " - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "num_temp = 2000\n", - "Tinit = 1e1\n", - "Tfinal = 1e-1\n", - "Tschedule = np.linspace(Tinit, Tfinal, num_temp)\n", - "Tschedule = np.append(Tschedule, Tfinal * np.ones(1000))\n", - "Tschedule = np.append(Tschedule, np.zeros(1000))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can then use the `solve()` method of the qubo polynomial solver to obtain a solution of the problem" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 4000/4000 [00:05<00:00, 708.12it/s]\n" - ] - } - ], - "source": [ - "net.step_func.optimize_values = np.arange(2, 6)\n", - "_, _, sol, res = net.solve(\n", - " init_sample=x0, Tschedule=Tschedule, save_traj=True, verbose=False\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can plot the evoluion of the QUBO energy along the optimization path" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 0, 'Iterations')" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.plot(res.energies[:], lw=4, label=\"QUBO Energy\")\n", - "plt.axline((0, eref[0]), slope=0, color=\"black\", lw=4, linestyle=(4, (1, 2)))\n", - "plt.grid(which=\"both\")\n", - "plt.ylabel(\"Energy\", fontsize=14)\n", - "plt.xlabel(\"Iterations\", fontsize=14)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also plot the reference solution and the QUBO solution for visual inspection" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Pressure')" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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3jy4u7vD2toay5Ytq3WR753quoAUuH0+9525qFQq7Nmzp87H5o+P3/vvv4+YmBjs2LED+/btw4svvohly5bhxx9/tNjbwRJR47Gu1I91hXXF3LHhIbNX82I4bNgwfPzxx3j11VfRpUsXALc/qQkLC2vyOtu3bw8nJydUV1c3a3kA8Pf3B3D7k6/mrqOudWo0Gpw+fbreYlezXXd393va7sSJE7F3717s2bMH8fHxcHZ2xujRo7Xzv/76a3Tp0gVbt27VKTRxcXENrtvNzQ0FBQW1pl+4cEHnd39/f4gI/Pz80K1btwbXGxQUhKCgICxYsAA//PADHn74YaxYsQJvvvlmg8sSEdVgXal7u6wrrCvmitfwkCKEhoaif//++PDDD1FWVgZ3d3eEhobiP//5D65du1ZrfM13JNTH2toa48aNw5YtW5Cent7k5QEgODgY/v7++Pvf/47ff/+9Weu4U2RkJKysrLB06dJa52nXfFoXHh4OZ2dnvP322zqnAzR1u5GRkXBwcMC///1v7NmzB2PHjoW9vb12fs0nY3/8lDAlJQXJyckNrtvf3x+FhYU636p97do1bNu2TWfc2LFjYW1tjSVLltT6NFJEkJ+fDwAoKipCVVWVzvygoCBYWVmhvLy8UfkSEf0R6wrrCuuKcvAIDynGvHnzMH78eKxZswazZs3C8uXLMWjQIAQFBWHGjBno0qULcnJykJycjMuXL+PEiRN3Xd8777yDxMREhISEYMaMGejRowdu3LiB48ePY//+/bhx48Zdl7eyssJnn32GiIgI9OzZE1OnToWPjw+uXLmCxMREODs747///W+TcuzatStef/11vPHGGxg8eDDGjh0LtVqNn376Cd7e3li2bBmcnZ3xySefYPLkyejXrx+io6PRvn17XLx4Ebt27cLDDz+Mjz/+uMFttW7dGpGRkdpvx77zS+FGjRqFrVu3YsyYMXjssceQlZWFFStWoEePHnUW4j+Kjo7GK6+8gjFjxuDFF1/U3t60W7duOhem+vv7480338T8+fNx/vx5REZGwsnJCVlZWdi2bRtmzpyJuXPn4uDBg4iNjcX48ePRrVs3VFVVYe3atdo3GEREzcG6wrrCuqIQLXtTOKJ7U3P70J9++qnWvOrqavH39xd/f3+pqqoSEZHMzEx55plnxNPTU2xtbcXHx0dGjRolX3/9tXa5+m4fKiKSk5Mjs2fPlo4dO4qtra14enrK8OHDZeXKldoxNbcPre/WlampqTJ27Fhp27atqNVq8fX1laioKDlw4IB2TM1tM3Nzc+vMNysrS2f6qlWr5P777xe1Wi1ubm4ydOhQSUhI0BmTmJgo4eHh4uLiIvb29uLv7y8xMTFy9OjReh7d2nbt2iUAxMvLq87blb799tvi6+srarVa7r//ftm5c2edtwbFHbcPFRHZt2+f9OrVS+zs7KR79+6ybt26WrcPrbFlyxYZNGiQODo6iqOjowQGBsrs2bPl7NmzIiLy22+/ybRp08Tf31/s7e2lTZs2MmzYMNm/f3+jcyUiy8S6chvrCuuKkqlEmnDVGhERERERkRnhNTxERERERKRYbHiIiIiIiEix2PAQEREREZFiseEhIiIiIiLFYsNDRERERESKxYaHiIiIiIgUiw0PEREREREpFhseIiIiIiJSLDY8RERERESkWGx4iIiIiIhIsdjwEBERERGRYrHhISIiIiIixWLDQ0REREREivX/AIodcP4oiHpCAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "fig = plt.figure(figsize=plt.figaspect(0.5))\n", - "ax1 = fig.add_subplot(121)\n", - "\n", - "ax1.axline((0, 0.0), slope=1.10, color=\"grey\", linestyle=(0, (2, 5)))\n", - "ax1.axline((0, 0.0), slope=1, color=\"black\", linestyle=(0, (2, 5)))\n", - "ax1.axline((0, 0.0), slope=0.90, color=\"grey\", linestyle=(0, (2, 5)))\n", - "ax1.grid()\n", - "\n", - "ax1.scatter(\n", - " ref_values[:2], encoded_ref_sol[:2], c=\"black\", s=200, label=\"Best solution\"\n", - ")\n", - "ax1.scatter(\n", - " ref_values[:2], sol[:2], s=150, lw=1, edgecolors=\"w\", label=\"Sampled solution\"\n", - ")\n", - "\n", - "\n", - "ax1.set_xlabel(\"Reference Values\", fontsize=12)\n", - "ax1.set_ylabel(\"QUBO Values\", fontsize=12)\n", - "ax1.set_title(\"Flow Rate\", fontsize=14)\n", - "\n", - "ax2 = fig.add_subplot(122)\n", - "\n", - "ax2.axline((0, 0.0), slope=1.10, color=\"grey\", linestyle=(0, (2, 5)))\n", - "ax2.axline((0, 0.0), slope=1, color=\"black\", linestyle=(0, (2, 5)))\n", - "ax2.axline((0, 0.0), slope=0.90, color=\"grey\", linestyle=(0, (2, 5)))\n", - "\n", - "\n", - "ax2.scatter(\n", - " ref_values[2:], encoded_ref_sol[2:], c=\"black\", s=200, label=\"Best solution\"\n", - ")\n", - "ax2.scatter(\n", - " ref_values[2:], sol[2:], s=150, lw=1, edgecolors=\"w\", label=\"Sampled solution\"\n", - ")\n", - "ax2.grid()\n", - "\n", - "\n", - "ax2.set_xlabel(\"Reference Values\", fontsize=12)\n", - "ax2.set_title(\"Pressure\", fontsize=14)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens_wntr_1", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From 27083b88e106277c0ec45b2932dcca9cdb099abb Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 09:16:58 +0100 Subject: [PATCH 03/14] added qnr notebooks --- .../linear_solver/qubols_solver.ipynb | 78 +++-- docs/notebooks/newton_raphson/qnr_hhl.ipynb | 12 +- .../notebooks/newton_raphson/qnr_qubols.ipynb | 292 +++++++++++++++++ docs/notebooks/newton_raphson/qnr_vqls.ipynb | 305 ++++++++++++++++++ .../qnr_vqls_noise.ipynb} | 101 +----- 5 files changed, 664 insertions(+), 124 deletions(-) create mode 100644 docs/notebooks/newton_raphson/qnr_qubols.ipynb create mode 100644 docs/notebooks/newton_raphson/qnr_vqls.ipynb rename docs/notebooks/{qnr_vqls/noisy_vqls.ipynb => newton_raphson/qnr_vqls_noise.ipynb} (95%) diff --git a/docs/notebooks/linear_solver/qubols_solver.ipynb b/docs/notebooks/linear_solver/qubols_solver.ipynb index 9a8a154..ed81f46 100644 --- a/docs/notebooks/linear_solver/qubols_solver.ipynb +++ b/docs/notebooks/linear_solver/qubols_solver.ipynb @@ -6,30 +6,38 @@ "source": [ "# QUBO Linear Solver \n", "\n", - "This notebook illustrates how to use the QUBO linear solver to solve individual linear systems. We will use sparse random matrices that mimc the matrices obtained by EPANET for small water networks.\n", + "This notebook illustrates how to use the QUBO linear solver to solve individual linear systems. We will use sparse random matrices that mimic the matrices obtained by EPANET for small water networks.\n", "\n", "Let's define the system:" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "matrix([[0. , 0.131, 0. , 0. , 0.84 , 0.3 , 0.215, 0.382],\n", - " [0.131, 0. , 0. , 0. , 0.199, 0. , 0. , 0. ],\n", - " [0. , 0. , 0.068, 0. , 0.04 , 0.082, 0.475, 0. ],\n", - " [0. , 0. , 0. , 0. , 0. , 0.237, 0. , 0. ],\n", - " [0.84 , 0.199, 0.04 , 0. , 0. , 0. , 0. , 0. ],\n", - " [0.3 , 0. , 0.082, 0.237, 0. , 0.383, 0. , 0. ],\n", - " [0.215, 0. , 0.475, 0. , 0. , 0. , 0.328, 0.059],\n", - " [0.382, 0. , 0. , 0. , 0. , 0. , 0.059, 0. ]])" + "matrix([[0. , 0.13131305, 0. , 0. , 0.8399231 ,\n", + " 0.29986541, 0.21507568, 0.38226539],\n", + " [0.13131305, 0. , 0. , 0. , 0.19850098,\n", + " 0. , 0. , 0. ],\n", + " [0. , 0. , 0.06808472, 0. , 0.04047348,\n", + " 0.08200666, 0.47523295, 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0.23693 , 0. , 0. ],\n", + " [0.8399231 , 0.19850098, 0.04047348, 0. , 0. ,\n", + " 0. , 0. , 0. ],\n", + " [0.29986541, 0. , 0.08200666, 0.23693 , 0. ,\n", + " 0.3827107 , 0. , 0. ],\n", + " [0.21507568, 0. , 0.47523295, 0. , 0. ,\n", + " 0. , 0.32815036, 0.05927707],\n", + " [0.38226539, 0. , 0. , 0. , 0. ,\n", + " 0. , 0.05927707, 0. ]])" ] }, - "execution_count": 44, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -53,16 +61,17 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([0.896, 0.764, 0.375, 0.026, 0.907, 0.786, 0.619, 0.212])" + "array([0.89632852, 0.76430853, 0.37540494, 0.02581418, 0.90653093,\n", + " 0.78641778, 0.61931523, 0.21158894])" ] }, - "execution_count": 45, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -83,16 +92,17 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([ 0.518, 2.03 , 1.693, 1.902, 3.508, 0.109, 0.23 , -6.275])" + "array([ 0.51786703, 2.03046774, 1.692778 , 1.90187358, 3.50782058,\n", + " 0.10895279, 0.22987475, -6.27498497])" ] }, - "execution_count": 46, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -112,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -126,42 +136,56 @@ ] }, { - "cell_type": "code", - "execution_count": 51, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "res = qubols(A, b)" + "We can now use the solver to obtain the solution of the linear system " ] }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 5, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/nico/miniconda3/envs/vitens_wntr_1/lib/python3.9/site-packages/quantum_newton_raphson/utils.py:74: SparseEfficiencyWarning: spsolve requires A be CSC or CSR matrix format\n", + " warn(\"spsolve requires A be CSC or CSR matrix format\", SparseEfficiencyWarning)\n" + ] + }, { "data": { "text/plain": [ - "QUBOResult(solution=array([ 0.45 , 2.297, 1.877, 2.111, 3.754, -0.01 , 0.176, -6.794]), residue=0.06341486167248815, ref=array([0., 0., 0., 0., 0., 0., 0., 0.]))" + "QUBOResult(solution=array([ 0.567, 1.877, 1.564, 1.857, 3.118, 0.127, 0.254, -5.396]), residue=0.07552041138416518, ref=array([0., 0., 0., 0., 0., 0., 0., 0.]))" ] }, - "execution_count": 52, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "res = qubols(A, b)\n", "res" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then plot the reference solution against the qubo solution" + ] + }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { - "image/png": "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w4YN04kTJ7wZMah09/1ev369tm3bdtUZEePHj9ejjz6qN954w4spg0d33+/LamtrNW3aNN1///367W9/6+V0oSExMVFhYWFqaGi44npDQ4NSUlIsShUann32Wa1cuVKbNm1Senq61XHwJRSRL0lKSlJSUtJNH5eTk6OoqCgdPHhQkydPliR1dHTo2LFjGjJkiLdjBo3uvt//+Z//qX/5l3/p+r62tlazZs3S22+/rby8PG9GDCrdfb+lSyMh06ZN6xrts9kYPO0NkZGRysnJ0bp167qW+3s8Hq1bt07PPvusteGClGma+t73vqfS0lJt2LBBmZmZVkfC36GI3IL4+Hg9/fTTWrRokTIyMjRkyBAtXbpUkvS1r33N4nTBZ/DgwVd837dvX0nS8OHD+ZuNF9TU1Cg/P19DhgzRL3/5SzU2Nnb9Gn9rv33PPfecHn/8cY0fP165ubl68cUXdfHiRT355JNWRwtKzzzzjP70pz+pvLxccXFxXXNx7Ha7YmJiLE4HiSJyy5YuXarw8HA99thjam1tVV5entavX6+EhASrowG3Ze3atTp06JAOHTp0VdFjtf/t+8Y3vqHGxkb97Gc/U319vcaOHavKysqrJrCidyxbtkySlJ+ff8X111577aa3KuEb7CMCAAAsw41fAABgGYoIAACwDEUEAABYhiICAAAsQxEBAACWoYgAAADLUEQAAIBlKCIAAMAyFBEAAGAZiggAALAMRQQAAFiGIgIAACzz/wPc5RaQUHhqwQAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "
" ] diff --git a/docs/notebooks/newton_raphson/qnr_hhl.ipynb b/docs/notebooks/newton_raphson/qnr_hhl.ipynb index 8ec29ea..c7ac537 100644 --- a/docs/notebooks/newton_raphson/qnr_hhl.ipynb +++ b/docs/notebooks/newton_raphson/qnr_hhl.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Set up water network model\n", + "# Quantum Newton Raphson on Net0 with HHL linear solver\n", "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net0.inp`. Let's start by setting up the model:|" + "In this example, we use the HHL solver to drive the Newton-Raphson algorithm to obtain the pressure and flow rate of a small network, Net0:" ] }, { @@ -40,9 +40,9 @@ "import wntr\n", "import wntr_quantum\n", "\n", - "# if not done in shell, define the environment variable\n", - "# os.environ[\"EPANET_TMP\"] = \"<>\"\n", - "# os.environ[\"EPANET_QUANTUM\"] = \"<>\"\n", + "# if not done in shell, define the environment variable here\n", + "# os.environ[\"EPANET_TMP\"] = a directory where you have write access\n", + "# os.environ[\"EPANET_QUANTUM\"] = the location of the EPANET source code\n", "\n", "# set up network model\n", "inp_file = \"../networks/Net0.inp\"\n", @@ -91,7 +91,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Solve water network with `QuantumEpanetSimulator` and VQLS \n", + "### Solve water network with `QuantumEpanetSimulator` and HHL\n", "\n", "We now solve the model using VQLS. In this example, we are **preconditioning** the initial linear system using *diagonal scaling* and also using a **mix of two classical optimizers**." ] diff --git a/docs/notebooks/newton_raphson/qnr_qubols.ipynb b/docs/notebooks/newton_raphson/qnr_qubols.ipynb new file mode 100644 index 0000000..500cec4 --- /dev/null +++ b/docs/notebooks/newton_raphson/qnr_qubols.ipynb @@ -0,0 +1,292 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quantum Newton Raphson on Net0 with QUBO linear solver\n", + "\n", + "In this example, we use the QUBO solver to drive the Newton-Raphson algorithm to obtain the pressure and flow rate of a small network, Net0:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmM0lEQVR4nO3dfXDU9YHH8c8vCXlOCJjwZHiQB0MkYAiBhLDZZJPNbjpeHate7+rcqHNX7YyttXac67TnqJ2x3KjtDDe2x529G6/tea2nHUdHqXmEPJEQICHyFEQoDwoKCAEhkJDkd39Y9ogJTyHJd3d/79eMf2Q32f3wGzVvdn+7a9m2bQsAADhWhOkBAADALGIAAACHIwYAAHA4YgAAAIcjBgAAcDhiAAAAhyMGAABwOGIAAACHIwYAAHA4YgAIY88995wsy9KJEydMTwkaGzZskGVZ2rBhg+kpQNAgBuAYL7/8siZOnKiLFy+Oye2vW7dOzz333JjcdjC5/Dhe+sVqWZa2bt065HsffvhhJSYmjuh+rnU833nnHeXk5Cg2NlazZs3Ss88+q76+vhHdF+B0xAAc47333pPP59OECRPG5PbXrVunn/70p2Ny28HkSsdxtEPoasfzT3/6k+655x6lpKTo5Zdf1j333KPnn39ejz/++DVv1+126/z583K73aO6FwhlUaYHAOOhu7tbdXV1Wrt2rekp4+LcuXNKSEgY9du90nHMzs7Wu+++q7a2NuXk5Iz6/X7VU089pSVLlqiyslJRUV/+byw5OVmrV6/WE088oYULF17xZyMiIhQbGzvmG4FQwiMDcISamhr19PToa1/7miTpv/7rv2RZlpqamvTDH/5QaWlpSkhI0De+8Q0dP358yM//6U9/UmFhoRISEpSUlKS77rpLO3fuDFz/8MMP61e/+pUkBR42tyxLkpSTk6N777130O0tXrxYlmXpgw8+CFz2+uuvy7Is7d69O3BZe3u7vva1ryk5OVmJiYkqLS1VS0vLoNu69Gepq6vTY489pilTpig9Pf2Kx+LgwYOaP3++srKy9Nlnn0mS9u7dq/vuu0/Tpk1TbGys0tPT9bd/+7c6ffr0VY/jJY8//rgmTZp03Y8O3Mzx3LVrl3bt2qVHH300EAKS9Nhjj8m2bb355ptXve/hzhkoLi5WVlaWdu3aJY/Ho/j4eN1666168cUXh/3Z119/XT/5yU80bdo0JSQk6O6779bhw4ev688OBCMeGYAjrFu3TsuWLdPUqVMHXX7pl9izzz6rAwcOaM2aNfre976n119/PfA9v/vd7/TQQw/J7/frhRdeUHd3t9auXSuXy6X29nbNmTNH3/nOd3TkyBFVVVXpd7/73aD7KCws1O9///vA1ydPntTOnTsVERGhhoYGLVmyRJLU0NCgtLQ0ZWZmSpJ27typwsJCJScn6x//8R81YcIE/fu//7uKi4tVV1envLy8Qffz2GOPKS0tTc8884zOnTs37HHYt2+fSkpKNHnyZFVVVSk1NVW9vb3y+/3q6enR448/rmnTpumTTz7Ru+++q66uLk2cOPGaxzE5OVlPPvmknnnmmWs+OnCzx7O9vV2SlJubO+jyGTNmKD09PXD9jTp16pTKy8t177336pvf/KbefPNN/ehHP9LixYuHxM/PfvYzWZalH/3oRzp27JjWrFkjr9erbdu2KS4ubkT3DxhlAw4wa9Ys+9lnnw18/eqrr9qSbK/Xaw8MDAQuf/LJJ+3IyEi7q6vLtm3b/uKLL+yUlBT7kUceGXR7n376qT1x4sRBl3/3u9+1h/tP6o033rAl2bt27bJt27bfeecdOyYmxr777rvtv/mbvwl835IlS+xvfOMbga/vueceOzo62t63b1/gsiNHjthJSUm22+0e8mdxuVx2X1/foPt+9tlnbUn28ePH7d27d9szZsywly9fbp88eTLwPe3t7bYk+4033rj6QbSHHsf169cHfrarq8ueNGmSfffddweuf+ihh+yEhITA16NxPF966SVbkn3o0KEh1y1fvtzOz8+/6p/h0ub169cHLisqKrIl2b/97W8Dl/X09NjTpk2z77vvviE/e+utt9pnzpwJXP6///u/tiT7X/7lX65630Cw4mkChL0dO3bo0KFDuuuuu4Zc9+ijjwYefpa+/Ft8f3+/Dh48KEmqqqpSV1eXvvWtb+nEiROBfyIjI5WXl6f169df8/4LCwslSfX19ZK+fARg+fLlKisrU0NDgySpq6tLO3bsCHxvf3+/Kisrdc8992ju3LmB25o+fboeeOABNTY26syZM4Pu55FHHlFkZOQVj0FRUZHmzJmj6upqTZo0KXDdpb/5V1RUqLu7+4p/jqsdx0u384Mf/EDvvPPOFf92PhrH8/z585KkmJiYIdfF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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "import wntr\n", + "import wntr_quantum\n", + "\n", + "# if not done in shell, define the environment variable here\n", + "os.environ[\"EPANET_TMP\"] = \"/home/nico/.epanet_quantum\"\n", + "os.environ[\"EPANET_QUANTUM\"] = \"/home/nico/QuantumApplicationLab/vitens/EPANET\"\n", + "\n", + "# set up network model\n", + "inp_file = \"../networks/Net0.inp\"\n", + "wn = wntr.network.WaterNetworkModel(inp_file)\n", + "\n", + "# plot network\n", + "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(name J1 D1 R1\n", + " 0 29.647692 19.167677 -9.338379e-07\n", + " 3600 29.647692 19.167677 -9.338379e-07,\n", + " name P1 P2\n", + " 0 0.05 0.05\n", + " 3600 0.05 0.05)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# define the classical EPANET simulator\n", + "sim = wntr.sim.EpanetSimulator(wn)\n", + "\n", + "# run the EPANET simulation\n", + "results_epanet = sim.run_sim()\n", + "\n", + "# save number of nodes and pipes\n", + "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", + "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", + "\n", + "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Solve water network with `QuantumEpanetSimulator` and QUBOLS \n", + "\n", + "We now solve the model using QUBO as linear solver." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'encoding': , 'num_qbits': 15, 'num_reads': 500, 'range': 600, 'offset': 0, 'iterations': 5, 'temperature': 10000.0}\n", + "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", + "0 [0, 0] 600\n", + "1 [83.93068750566246, 97.78428845681842] [291.7123485154465, 40.779379100099874]\n", + "2 [83.80933312276109, 97.77243716742858] [0.06971145194787838, 0.006262073439076494]\n", + "3 [83.80381155273764, 97.77218423667651] [0.0048006335566103935, 1.0]\n", + "4 [83.80128395213971, 97.7720668587892] [0.0013452135025622187, 1.0]\n", + "0 [0, 0] 600\n", + "1 [62.97510401606745, 97.2707667769409] [297.3172104056457, 40.84185941269238]\n", + "2 [62.92402430373457, 97.27036453641941] [0.05073755809990319, 0.002307871410698736]\n", + "3 [62.8868121231212, 97.26936272413894] [0.004333835883112672, 1.0]\n", + "4 [62.88625449128368, 97.26933171635251] [1.0, 1.0]\n", + "0 [0, 0] 600\n", + "1 [62.96311586689058, 97.26995491881586] [282.0665571804665, 38.5454027925069]\n", + "2 [62.911433818959374, 97.26965645910165] [0.050759335348879615, 0.0021965533404471383]\n", + "3 [62.8877876638802, 97.26942609220168] [0.004258877541033555, 1.0]\n", + "4 [62.88692361639446, 97.2693811669697] [1.0, 1.0]\n", + "Quantum result 0.049999915063381195 within 0.00017136335117230787% of classical result 0.05000000074505806\n", + "Quantum result 0.049999915063381195 within 0.00017136335117230787% of classical result 0.05000000074505806\n", + "Quantum result 29.64769172668457 within 0.0% of classical result 29.64769172668457\n", + "Quantum result 19.16771125793457 within 0.00017911547405446746% of classical result 19.16767692565918\n", + "Quantum result -9.338378959000693e-07 within 0.0% of classical result -9.338378959000693e-07\n" + ] + }, + { + "data": { + "text/plain": [ + "(name J1 D1 R1\n", + " 0 29.647692 19.167711 -9.338379e-07\n", + " 3600 29.647707 19.167915 -9.338379e-07,\n", + " name P1 P2\n", + " 0 0.050000 0.050000\n", + " 3600 0.049999 0.049999)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "from quantum_newton_raphson.qubo_solver import QUBO_SOLVER\n", + "from qubols.encodings import RangedEfficientEncoding\n", + "from utils import compare_results \n", + "\n", + "linear_solver = QUBO_SOLVER(\n", + " encoding=RangedEfficientEncoding,\n", + " num_qbits=15,\n", + " num_reads=500,\n", + " range=600,\n", + " offset=0,\n", + " iterations=5,\n", + " temperature=1e4,\n", + " use_aequbols=True,\n", + ")\n", + "\n", + "\n", + "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", + "results_hhl = sim.run_sim(linear_solver=linear_solver)\n", + "\n", + "classical_res, quantum_res = compare_results(results_epanet, results_hhl)\n", + "\n", + "results_hhl.node[\"pressure\"], results_hhl.link[\"flowrate\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plot pressures and flow rates\n", + "\n", + "Let's check graphically the equivalence of the results." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.scatter(\n", + " classical_res[:n_pipes],\n", + " quantum_res[:n_pipes],\n", + " label=\"Flow rates\",\n", + " color=\"blue\",\n", + " marker=\"o\",\n", + ")\n", + "plt.scatter(\n", + " classical_res[n_pipes:],\n", + " quantum_res[n_pipes:],\n", + " label=\"Pressures\",\n", + " color=\"red\",\n", + " marker=\"s\",\n", + " facecolors=\"none\",\n", + ")\n", + "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\", label=\"\")\n", + "plt.xlabel(\"Classical results\")\n", + "plt.ylabel(\"Quantum results\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhMAAAGbCAYAAAB+qBIMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABeZklEQVR4nO3deVxU9foH8M/MsAzbsMgyrIJKioqRG2EomBSmLdxrpUbXJYJuhWa23BZT781uXcsy0yTrmi2aZv1SUyMNcykJFfWWioaKIOIgioCibDPn9wdxcmRmAJlhYM7n3eu8fHHOMzPPcyTnOd9zvufIBEEQQERERHSD5NZOgIiIiLo2NhNERETULmwmiIiIqF3YTBAREVG7sJkgIiKidmEzQURERO3CZoKIiIjahc0EERERtQubCSIiImoXNhMWMHfuXMhkMpw/f97aqXQa27dvh0wmw/bt262dyg1ZsWIFZDIZ9u3b16GfGxoaiilTpnToZxIRtZXFm4n33nsP7u7uqK+vt8j7b968GXPnzrXIe3cm1+7Hpi9mmUyG3NzcZrFTpkyBq6vrDX1OS/tzw4YNGDhwIJRKJUJCQjBnzhw0NDTc0Gd1Jg8++CBkMhn+8Y9/WDsVs3n//fexYsUKs79vfHy8+Psnk8ng5eWFIUOGYPny5dDpdGb/vI62atUqLFy4sNXxoaGhevvj2mX06NGWS5SoE7Gz9Ads2rQJd955J+zt7S3y/ps3b8aSJUtsvqEwth/nzp2Lb7/91myfY2p/fvfdd0hKSkJ8fDzee+89/Pbbb5g3bx7OnTuHpUuXmnzfESNG4OrVq3BwcDBbruZSVVWFb7/9FqGhofjiiy/wxhtvQCaTWTutdnv//ffh7e1tkZGNoKAgvP766wCAsrIyfPrpp0hJScHvv/+ON954w+yf15FWrVqFQ4cOYcaMGa1+TVRUFJ555plm6wMCAsyYGVHnZdFm4sqVK9ixY0eLXzS2orq6Gi4uLmZ/X2P7MSoqChs3bsT+/fsxcOBAs3/u9Z599lkMGDAAW7ZsgZ1d46+OSqXCv//9bzz11FPo06eP0dfK5XIolUqL53gjvv76a2i1Wixfvhy33347du7cibi4OGun1am5u7vj4YcfFn9+7LHH0Lt3byxevBivvvpquw4eGhoaoNPpOmXjaUxgYKDe/mgtY/9m6HQ61NXVtev/GUv9e0RkiEVPc2RlZaG2thZ33XUXgD/PO//888+YOXMmfHx84OLigr/85S8oKytr9vrvvvsOw4cPh4uLC9zc3DB27FgcPnxY3D5lyhQsWbIEAPSGFgFg4MCB+Otf/6r3fpGRkZDJZPj111/FdWvWrIFMJkNeXp647sCBA7jrrrugUqng6uqKUaNG4ZdfftF7r6ZaduzYgSeeeAK+vr4ICgoyui8KCwvRq1cv9O/fH6WlpQCA/Px8jBs3Dmq1GkqlEkFBQZgwYQIqKytN7scm06ZNg6enZ6tHZdqzP48cOYIjR44gLS1NbCQA4IknnoAgCPjqq69Mfrahaybi4+PRv39/HDlyBCNHjoSzszMCAwMxf/58g69ds2YNXnrpJajVari4uODee+/F6dOn9WKvXLmCo0ePtul6lZUrV+KOO+7AyJEjERERgZUrVxqNvXLlCh577DF069YNKpUKkyZNwsWLF/Vi9u3bh8TERHh7e8PJyQlhYWF45JFH9GKqq6vxzDPPIDg4GI6OjujduzfeeusttPQQ36brca7X9Pt46tQpAI1D74cPH8aOHTvEv8f4+HgxvqKiAjNmzBA/v1evXvjPf/5zw6cpnJ2dceutt6K6ulr8f7k1n3Hq1CnIZDK89dZbWLhwIXr27AlHR0ccOXIEAHD06FE8+OCD8PHxgZOTE3r37o2XX35Z77PPnDmDRx55BH5+fnB0dES/fv2wfPlyvZim36Evv/wSr732GoKCgqBUKjFq1CgcP35cjIuPj8emTZtQWFgo7rfQ0NAb2ifXazr9eOLECYwZMwZubm5ITk4G0Pj/W3p6OlauXIl+/frB0dERmZmZACzz7xGRuVl0ZGLz5s0YNGgQ/Pz89NY3fQnOmTMHp06dwsKFC5Geno41a9aIMZ999hkmT56MxMRE/Oc//8GVK1ewdOlSxMbG4sCBAwgNDcVjjz2GkpISbN26FZ999pneZwwfPhxffPGF+HN5eTkOHz4MuVyOXbt2YcCAAQCAXbt2wcfHBxEREQCAw4cPY/jw4VCpVHj++edhb2+PDz74APHx8dixYweio6P1PueJJ56Aj48PZs+ejerqaoP74cSJE7j99tvh5eWFrVu3wtvbG3V1dUhMTERtbS2mTZsGtVqNM2fOYOPGjaioqIC7u3uL+1GlUuHpp5/G7NmzWxydaO/+PHDgAABg8ODBeusDAgIQFBQkbm+rixcvYvTo0fjrX/+KBx98EF999RX+8Y9/IDIyslnz9Nprr4nXNZw7dw4LFy5EQkICDh48CCcnJwDAnj17MHLkSMyZM6dVTVZJSQl+/PFHfPLJJwCAiRMn4p133sHixYsNHhmnp6fDw8MDc+fOxbFjx7B06VIUFhaKX1bnzp3DnXfeCR8fH7zwwgvw8PDAqVOn8H//93/iewiCgHvvvRc//vgjUlJSEBUVhe+//x7PPfcczpw5g3feeeeG9uW1Fi5ciGnTpsHV1VX88m36/bly5Qri4uJw5swZPPbYYwgJCcHu3bvx4osv4uzZs226XuBaJ0+ehEKhgIeHR5s/4+OPP0ZNTQ3S0tLg6OgILy8v/Prrrxg+fDjs7e2RlpaG0NBQnDhxAt9++y1ee+01AEBpaSluvfVW8cvYx8cH3333HVJSUlBVVdXsVMUbb7wBuVyOZ599FpWVlZg/fz6Sk5ORk5MDAHj55ZdRWVmJ4uJi8e+hNdcf1dfXG2xgXVxcxN9NoHHUJTExEbGxsXjrrbfg7Owsbtu2bRu+/PJLpKenw9vbW2wIzf3vEZFFCBYUEhIizJkzR/z5448/FgAICQkJgk6nE9c//fTTgkKhECoqKgRBEIRLly4JHh4eQmpqqt77aTQawd3dXW/9k08+KRgqY+3atQIA4ciRI4IgCMKGDRsER0dH4d577xXGjx8vxg0YMED4y1/+Iv6clJQkODg4CCdOnBDXlZSUCG5ubsKIESOa1RIbGys0NDToffacOXMEAEJZWZmQl5cnBAQECEOGDBHKy8vFmAMHDggAhLVr15reiULz/fjjjz+Kr62oqBA8PT2Fe++9V9w+efJkwcXFRfzZHPvzzTffFAAIRUVFzbYNGTJEuPXWW03W0JTzjz/+KK6Li4sTAAiffvqpuK62tlZQq9XCuHHjmr02MDBQqKqqEtd/+eWXAgDh3XffbRZ77f4y5a233hKcnJzE9/39998FAMI333yjF9f09z1o0CChrq5OXD9//nwBgLB+/XpBEAThm2++EQAIe/fuNfqZ69atEwAI8+bN01t///33CzKZTDh+/Li4rnv37sLkyZPFn5t+t67XlF9BQYG4rl+/fkJcXFyz2FdffVVwcXERfv/9d731L7zwgqBQKAz+HV8rLi5O6NOnj1BWVib+jk+fPl0AINxzzz1t+oyCggIBgKBSqYRz587pxY4YMUJwc3MTCgsL9dZf+29HSkqK4O/vL5w/f14vZsKECYK7u7tw5coVQRD+/L2IiIgQamtrxbh3331XACD89ttv4rqxY8cK3bt3N7kPrtW9e3cBgMHl9ddfF+MmT54sABBeeOGFZu8BQJDL5cLhw4f11pvj3yOijmCx0xyHDh1CUVERxo4d22xbWlqa3lDt8OHDodVqUVhYCADYunUrKioqMHHiRJw/f15cFAoFoqOj8eOPP7b4+cOHDwcA7Ny5E0DjCMSQIUNwxx13YNeuXQAah2EPHTokxmq1WmzZsgVJSUno0aOH+F7+/v546KGH8NNPP6Gqqkrvc1JTU6FQKIzug7i4OISGhuKHH36Ap6enuK1p5OH777/HlStXjNZhaj82vc+MGTOwYcMGo6MD5tifV69eBQA4Ojo226ZUKsXtbeXq6qp3rtnBwQFDhw7FyZMnm8VOmjQJbm5u4s/3338//P39sXnzZnFdfHw8BEFo9amflStXYuzYseL7hoeHY9CgQUZPdaSlpeldD/D444/Dzs5OzMHDwwMAsHHjRqMzmDZv3gyFQoHp06frrX/mmWcgCAK+++67VuV+o9auXYvhw4fD09NT7/chISEBWq1W/H/GlKNHj8LHx0cc1XvvvfcwduxY8fRCWz9j3Lhx8PHxEX8uKyvDzp078cgjjyAkJEQvtunfDkEQ8PXXX+Oee+6BIAh6n5OYmIjKykrs379f77VTp07VG3Fq+n/f0O9bW0RHR2Pr1q3NlokTJzaLffzxxw2+R1xcHPr27Sv+bO5/j4gsyWKnOTZt2gQ/P79mw+IAmv3j0PQl23TuOT8/HwBw++23G3xvlUrV4uf7+fkhPDwcu3btwmOPPYZdu3Zh5MiRGDFiBKZNm4aTJ08iLy8POp1O/AelrKwMV65cQe/evZu9X0REBHQ6HU6fPo1+/fqJ68PCwozmcM8998DPzw/ff/99s6HSsLAwzJw5E2+//TZWrlyJ4cOH495778XDDz+sd4rD1H5s8tRTT+Gdd97B3LlzsX79+mbbzbE/m4Zqa2trm22rqanRG8pti6CgoGbXAHh6eupd19IkPDxc72eZTIZevXqJ1wm0VV5eHg4cOIBJkyY1O2++ZMkSVFVVNds31+fg6uoKf39/MYe4uDiMGzcO//znP/HOO+8gPj4eSUlJeOihh8RGrLCwEAEBAXqNEQDxVFtTU20p+fn5+PXXX/W+vK917ty5Ft8jNDQUH374IWQyGZRKJcLDw+Hr63vDn3H9/0dNX+79+/c3mkNZWRkqKiqwbNkyLFu2rFWf09K/PTfK29sbCQkJLcbZ2dkZvZbh+n1g7n+PiCzJYs3E5s2bMXr0aIMXixnrnIU/Lj5rukDrs88+g1qtbhZ37QWApsTGxiIrKwtXr15Fbm4uZs+ejf79+8PDwwO7du1CXl4eXF1dccstt7S2rGZMfYmOGzcOn3zyCVauXInHHnus2fYFCxZgypQpWL9+PbZs2YLp06fj9ddfxy+//CL+g2NqPzZpGp2YO3euwdEJc+xPf39/AMDZs2cRHByst+3s2bMYOnRoi+9hSEu/C5b0+eefAwCefvppPP300822f/3115g6dWqb3lMmk+Grr77CL7/8gm+//Rbff/89HnnkESxYsAC//PLLDd//49r3N0Sr1bb6PXQ6He644w48//zzBrffdNNNLb6Hi4uLyS/Ptn7GjTSjTb/XDz/8MCZPnmwwpunaqCbW/H0DGkf25HLDA8I32pCb+z2IboRFmomKigrs3r0b6enpN/T6nj17AgB8fX1b7PZNfckOHz4cH3/8MVavXg2tVothw4ZBLpcjNjZWbCaGDRsm/gPj4+MDZ2dnHDt2rNl7HT16FHK5vNkXqSlvvvkm7Ozs8MQTT8DNzQ0PPfRQs5jIyEhERkZi1qxZ2L17N2677TZkZGRg3rx5bdqPM2bMwMKFC/HPf/5THGpvYo79GRUVBaBxpsK1jUNJSQmKi4uRlpbWYo7t1TTC0kQQBBw/frzZF0ZrCIKAVatWYeTIkXjiiSeabX/11VexcuXKZs1Efn4+Ro4cKf58+fJlnD17FmPGjNGLu/XWW3Hrrbfitddew6pVq5CcnIzVq1fj0UcfRffu3fHDDz/g0qVLeqMTR48eBQB0797daN5NR9IVFRV6f8+GRjOM/V327NkTly9fbtWR9I1q72c0DesfOnTIaIyPjw/c3Nyg1WrNWktnuceIuf89IrKkNl0zYWza3dGjR1FUVCT+vGXLFgDAnXfeeUNJJSYmivcvMHTe+dpppE3zqCsqKprFNZ2++M9//oMBAwaIpw+GDx+OrKws7Nu3T4wBGo9a7rzzTqxfv15v6Ly0tBSrVq1CbGxsq04JNJHJZFi2bBnuv/9+TJ48GRs2bBC3VVVVNbtzZGRkJORyuXgqoS37sWl0Yv369Th48KDeNnPsz379+qFPnz5YtmyZ3lHw0qVLIZPJcP/994vrKisrcfTo0WZTXNvr008/xaVLl8Sfv/rqK5w9e1Zv1kdrp4b+/PPPOHXqFKZOnYr777+/2TJ+/Hj8+OOPKCkp0XvdsmXL9Pbh0qVL0dDQIOZw8eLFZke5TY1Y09/rmDFjoNVqsXjxYr24d955BzKZrNkslms1NYbXXnNQXV0tzka5louLi8H/Lx588EFkZ2fj+++/b7atoqLCLHc0be9n+Pj4YMSIEVi+fLnevy3An6MICoUC48aNw9dff22w6TA03bw1XFxczP67eyPM/e8RkSW1aWTC2LS7iIgIxMXFifcQ2LRpE2JjY/XO/beFSqXC0qVL8be//Q0DBw7EhAkT4OPjg6KiImzatAm33Xab+A/xoEGDAADTp09HYmIiFAoFJkyYAADo1asX1Go1jh07hmnTponvP2LECPG2ydc2EwAwb948bN26FbGxsXjiiSdgZ2eHDz74ALW1tc3uf9Aacrkcn3/+OZKSkvDggw9i8+bNuP3227Ft2zakp6fjgQcewE033YSGhgZ89tln4j+QQNv3Y9O1E//73//0blZjrv355ptv4t5778Wdd96JCRMm4NChQ1i8eDEeffRR8Xw/AHzzzTeYOnUqPv74Y7PefdHLywuxsbGYOnUqSktLsXDhQvTq1QupqaliTGunhq5cuRIKhcLoha333nsvXn75ZaxevRozZ84U19fV1WHUqFF48MEHcezYMbz//vuIjY3FvffeCwD45JNP8P777+Mvf/kLevbsiUuXLuHDDz+ESqUSRy/uuecejBw5Ei+//DJOnTqFm2++GVu2bMH69esxY8YMsWEw5M4770RISAhSUlLw3HPPQaFQYPny5eLf57UGDRqEpUuXYt68eejVqxd8fX1x++2347nnnsOGDRtw9913Y8qUKRg0aBCqq6vx22+/4auvvsKpU6fg7e3d4t+HKeb4jEWLFiE2NhYDBw5EWloawsLCcOrUKWzatElsmN944w38+OOPiI6ORmpqKvr27Yvy8nLs378fP/zwA8rLy9uc+6BBg7BmzRrMnDkTQ4YMgaurK+655x6Trzlz5ox42uxarq6uSEpKanMOTcz97xGRxbRl6oexaXcAxCloOp1O8PX1FebPn9/s9U3Tl66fNmdo2mDT+sTERMHd3V1QKpVCz549hSlTpgj79u0TYxoaGoRp06YJPj4+gkwmazZt7oEHHhAACGvWrBHX1dXVCc7OzoKDg4Nw9erVZnnu379fSExMFFxdXQVnZ2dh5MiRwu7du1tViyDoTw1tcuXKFSEuLk5wdXUVfvnlF+HkyZPCI488IvTs2VNQKpWCl5eXMHLkSOGHH35ocT9eOzXU2GdfOzXUnPvzm2++EaKiogRHR0chKChImDVrlt5UyWv3zccff9ws5+unhvbr169ZnpMnT9abmtf02i+++EJ48cUXBV9fX8HJyUkYO3Zss2mDrZkaWldXJ3Tr1k0YPny40RhBEISwsDDhlltu0atpx44dQlpamuDp6Sm4uroKycnJwoULF8TX7N+/X5g4caIQEhIiODo6Cr6+vsLdd9+tt48FoXG67tNPPy0EBAQI9vb2Qnh4uPDmm2/qTXsUhOZTQwVBEHJzc4Xo6GjBwcFBCAkJEd5++22DU0M1Go0wduxYwc3NTe//0abPf/HFF4VevXoJDg4Ogre3tzBs2DDhrbfeavb3eT1jf2/Xa81nNE0NffPNNw2+x6FDh4S//OUvgoeHh6BUKoXevXsLr7zyil5MaWmp8OSTTwrBwcGCvb29oFarhVGjRgnLli0TY4z9P9P0+df+rl6+fFl46KGHBA8PDwFAi9NETU0Nvfa110/ZvhYA4cknnzS4rb3/HhF1BJkgmPfKoz179iA6OhqHDx/Wm+ZEbcP9+Kft27dj5MiRWLt2rd7pFCIi6hwscp+Jf//735L/AjQH7kciIuoKzD6bY+jQoTc8TZD+xP1IRERdhUUf9EVERES2z+zXTBAREZG0cGSCiIiI2oXNBBEREbULmwkiIiJqFzYTRERE1C5sJoiIiKhd2EwQERFRu7CZICIionZhM0FERETtwmaCiIiI2oXNBBEREbULmwkiIiJqFzYTRERE1C5sJoiIiKhd2EwQERFRu7CZICIionZhM0FERETtwmaCiIiI2oXNBBEREbULmwkiIiJqFzYTRERE1C5sJoiIiKhd2EwQERFRu7CZICIionZhM0FERETtwmaCiIiI2oXNBBEREbULmwkiIiJqFzYTRERE1C5sJoiIiKhd7KydgDnptDr8duAsys5dhouLA6KGBsHJyd7aaREREdk0m2km9uecxmcf7kH5+SviOqWTPe5K6ov7HoyETCazYnZERES2SyYIgmDtJNrrtwMlePvVbdDpDJdyz/39cf/Dt3RwVkRERNJgE9dMrP3sgNFGAgC+W3cEVZU1HZgRERGRdHT5ZqK48CIKT5abjGlo0CFn16mOSYiIiEhiunwzUVnRuhGHyoqrFs6EiIhImrp8M+Hp5WzWOCIiImqbLt9MBAS7o+dN3iZjHBwUiB4e2jEJERERSUyXbyYA4MFJA2FnZ7yUex6IhKubYwdmREREJB02MTUUAA7/7yw+/3AvSoorxXVuKkfc+0Ak7rwnwoqZERER2TabaSaa/J53Dgf3FmPT/x3GawvvRlCop7VTIiIismk2cZrjWjdF+OLOu/sAADSaS1bOhoiIyPbZXDMBAO6eTrB3kKHgeKm1UyEiIrJ5NtlMyGQydPNxxKmT562dChERkc2zyWYCAPyD3KE5U2XtNIiIiGyezTYTYT19cPFCnclndhAREVH72WwzEdrDB9oG4EJZtbVTISIismk220wEhngAAM6crrBqHkRERLbOZpsJL28XKOyAguPnrJ0KERGRTbPZZkIul8HL2xGnTpZZOxUiIiKbZrPNBACoA91wtpgzOoiIiCzJppuJ0B4+uFBWAxu7YzgREVGnYtPNRI9evmioByouXrV2KkRERDbLppuJgGAPAEDJ6UrTgURERHTDbLqZ8PFzhVzOGR1ERESWZNPNhEIhh0c3B87oICIisiCbbiYAwM/fFWd4moOIiMhibL6Z6N7DGxfO8QJMIiIiS7H5ZqJHLz/U1gioqqyxdipEREQ2yeabiaZndJQU81QHERGRJdh8M6H2d4NMBhSePG/tVIiIiGySzTcTdvYKqDztUHCC00OJiIgsweabCQDwU7viTNFFa6dBRERkkyTRTASHeqGslDM6iIiILEESzUTPm9S4Wq3Dleo6a6dCRERkcyTRTASFeALgjA4iIiJLkEQz4R+oAgAUFVywciZERES2RxLNhIOjHVxVCpw8XmrtVIiIiGyOJJoJAPD1d0FxIWd0EBERmZtkmongEE+UlV6xdhpEREQ2RzLNRI9wP1yu0qK2pt7aqRAREdkUyTQTwaHdAABnz1RZORMiIiLbIplmIiCocUbH6cJyK2dCRERkWyTTTDg5O8DZVY6T+ZzRQUREZE6SaSYAwMfPGadPcWSCiIjInCTVTASGeKBUU23tNIiIiGyKpJqJHr38UFXRgPp6rbVTISIishmSaia6h3kDAqDhjA4ikoD4+HjMmDHD2mmQBEiqmQgIcgcAnDldYd1EiIjMZMqUKZDJZM2W48ePWzu1Nrm2DgcHB/Tq1Qv/+te/0NDQYO3UqBUk1Uy4qhzh6CTDiXyNtVMhIjKb0aNH4+zZs3pLWFiYtdNqs6Y68vPz8cwzz2Du3Ll48803m8XV1dVZITvTOmNOHUlSzQQAePs68emhRGRTHB0doVar9RaFQtEs7uLFi5g0aRI8PT3h7OyMu+66C/n5+QAAQRDg4+ODr776SoyPioqCv7+/+PNPP/0ER0dHXLlyBYIgYO7cuQgJCYGjoyMCAgIwffp0s9TRvXt3PP7440hISMCGDRswZcoUJCUl4bXXXkNAQAB69+4NADh9+jQefPBBeHh4wMvLC/fddx9OnTolvt/27dsxdOhQuLi4wMPDA7fddhsKCwsBAP/73/8wcuRIuLm5QaVSYdCgQdi3bx8AYO7cuYiKitLLbeHChQgNDRV/tkROXZnkmonAYA+Unr1s7TSIiDrclClTsG/fPmzYsAHZ2dkQBAFjxoxBfX09ZDIZRowYge3btwNobDzy8vJw9epVHD16FACwY8cODBkyBM7Ozvj666/xzjvv4IMPPkB+fj7WrVuHyMhIs+br5OQkHvFnZWXh2LFj2Lp1KzZu3Ij6+nokJibCzc0Nu3btws8//wxXV1eMHj0adXV1aGhoQFJSEuLi4vDrr78iOzsbaWlpkMlkAIDk5GQEBQVh7969yM3NxQsvvAB7e/s25WfunLoyO2sn0NHCevli7+4SaLU6KBSS66WIyAZt3LgRrq6u4s933XUX1q5dqxeTn5+PDRs24Oeff8awYcMAACtXrkRwcDDWrVuHBx54APHx8fjggw8AADt37sQtt9wCtVqN7du3o0+fPti+fTvi4uIAAEVFRVCr1UhISIC9vT1CQkIwdOhQs9QjCAKysrLw/fffY9q0aSgrK4OLiws++ugjODg4AAA+//xz6HQ6fPTRR+KX8ccffwwPDw9s374dgwcPRmVlJe6++2707NkTABARESF+RlFREZ577jn06dMHABAeHt7mPM2dU1cmuW/T0B7eEHTAOc0la6dCRGQWI0eOxMGDB8Vl0aJFzWLy8vJgZ2eH6OhocV23bt3Qu3dv5OXlAQDi4uJw5MgRlJWVYceOHYiPj0d8fDy2b9+O+vp67N69G/Hx8QCABx54AFevXkWPHj2QmpqKb775pt0XSzY1RUqlEnfddRfGjx+PuXPnAgAiIyPFL22g8TTF8ePH4ebmBldXV7i6usLLyws1NTU4ceIEvLy8MGXKFCQmJuKee+7Bu+++i7Nnz4qvnzlzJh599FEkJCTgjTfewIkTJ9qcr7lz6sok10wEBHsAAM6crrRuIkREZuLi4oJevXqJy7XXObRFZGQkvLy8sGPHDr1mYseOHdi7dy/q6+vFUY3g4GAcO3YM77//PpycnPDEE09gxIgRqK+/8SczNzVF+fn5uHr1Kj755BO4uLiINV7r8uXLGDRokF4TdfDgQfz+++946KGHADSOCmRnZ2PYsGFYs2YNbrrpJvzyyy8AGq+LOHz4MMaOHYtt27ahb9+++OabbwAAcrkcgiDofZ6husydU1cmuWbC3UMJewcZTnJGBxFJSEREBBoaGpCTkyOuu3DhAo4dO4a+ffsCAGQyGYYPH47169fj8OHDiI2NxYABA1BbW4sPPvgAgwcP1vsCdXJywj333INFixZh+/btyM7Oxm+//XbDOTY1RSEhIbCzM30WfuDAgcjPz4evr69eI9WrVy+4u7uLcbfccgtefPFF7N69G/3798eqVavEbTfddBOefvppbNmyBX/961/x8ccfAwB8fHyg0Wj0GoqDBw+2mL85cuqqJNdMyGQydPN1ROFJzuggIukIDw/Hfffdh9TUVPz000/43//+h4cffhiBgYG47777xLj4+Hh88cUXiIqKgqurK+RyOUaMGIGVK1eK10sAwIoVK/Df//4Xhw4dwsmTJ/H555/DyckJ3bt375B6kpOT4e3tjfvuuw+7du1CQUEBtm/fjunTp6O4uBgFBQV48cUXkZ2djcLCQmzZsgX5+fmIiIjA1atXkZ6eju3bt6OwsBA///wz9u7dK16/EB8fj7KyMsyfPx8nTpzAkiVL8N1331k0p65Ocs0E0HjzKk0J74JJRNLy8ccfY9CgQbj77rsRExMDQRCwefNmvVkMcXFx0Gq14rURQOOX6/XrPDw88OGHH+K2227DgAED8MMPP+Dbb79Ft27dOqQWZ2dn7Ny5EyEhIfjrX/+KiIgIpKSkoKamBiqVCs7Ozjh69CjGjRuHm266CWlpaXjyySfx2GOPQaFQ4MKFC5g0aRJuuukmPPjgg7jrrrvwz3/+E0DjKM7777+PJUuW4Oabb8aePXvw7LPPWjSnrk4mXH9iSALWf3kA69ccwkdrH4Zc3vWn5BAREVmTJEcmQnv6QqsFLpTxfhNERETtJclmIijEAwBQXFRh1TyIiIhsgSSbCS9vZ9jZA6dOlFk7FSIioi5Pks2ETCaDZzdHnDrJZoKIiKi9JNlMAIB/oApnizmjg4iIqL0k20x07+mNC2U1ze5yRkRERG0juQd9NenR0xcN9Xm4WH4VXt2crZ0OEVGHqqmpEZ/IaYyDgwOUSmUHZdRxpFy7pUi2mQj8Y0ZHyekKNhNEJCk1NTVQO7mjEqa/UNVqNQoKCmzqS1XKtVuSZJsJH19XyOWNMzr6RwVYOx0iog5TV1eHStRhof1tcDLyNXAVDZih+Rl1dXU29YUq5dotSbLNhFwhh0c3BxRweigRSZSz3B7OMsNfAzLBtu8OLOXaLUGyzQQAqANcUXK6wtppEBFZhb29DPYyw1+c9oIMqO3ghDqQlGu3BMnO5gCA7mGNMzqIiKRILje92DIp124Jkt5lYb38UFsjoKqSDQURSY9cITO52DIp124Jkj7NEdTdAwBQcroSKndeZENE0mJnJ4OdkScn2+ls+wtVyrVbgqRHJvzUbpDJgMKT562dChFRh1PITS+2TMq1W4KkRybs7BVw97THyROlAPpZOx0iog6lsDd+dK6w8aNzKdduCZJuJgDA198FZ/gociKSoMaLDQ1/cdr6wbmUa7cEye+zkNBuOF961dppEBF1OCnPaJBy7ZYg+V3WI9wPV6/oUH3Z9K1ViYhsjb2drPF+C4YWO9se6pdy7ZYg+WYiKMQTAHC2uNLKmRARdSwpT4+Ucu2WIPlmwj9QBQAoPHXBypkQEXUsKQ/1S7l2S5D8LnNwtIObuwIF+aXWToWIqEMp7GWwM7Io7G376FzKtVuC5GdzAICv2gXFRRetnQYRUYeSy2XGZzTY+MOupFy7JbCZABDU3Qv7sk9bOw0iog5lb2f8YkNjD8GyFVKu3RIkf5oDaJzRUX1Ji9qaemunQkTUYaR83YCUa7cE7jIAwd29AAAlxVVWzoSIqONIeUaDlGu3BDYTAAKC3QEApwvLrZwJEVHHUdgJJhdbJuXaLYHNBAAnJ3s4u8pxkjM6iEhCZHLTiy2Tcu2WwAsw/+CjdubIBBFJilwhQK4wfBQuF2z76FzKtVsC+68/BAV74tzZamunQUTUYWRyAXIji0xu21+oUq7dEthM/KFHuC+qKhtQV6e1dipERB1CJjMx1G/j1yBKuXZLYDPxh5Awb0AASks4o4OIpEFuJ5hcbJmUa7cENhN/CAhqnNHBO2ESkVRI+V4LUq7dErjL/uDq5gilkxwnOKODiCRCJhNMLrbMErUvWbIEoaGhUCqViI6Oxp49e0zGr127Fn369IFSqURkZCQ2b96st10QBMyePRv+/v5wcnJCQkIC8vPz9WLKy8uRnJwMlUoFDw8PpKSk4PLly+L2mpoaTJkyBZGRkbCzs0NSUlKzPLZv3w6ZTNZs0Wg0ra6dzcQ1vP2ccJpPDyUiiZDyUL+5a1+zZg1mzpyJOXPmYP/+/bj55puRmJiIc+fOGYzfvXs3Jk6ciJSUFBw4cABJSUlISkrCoUOHxJj58+dj0aJFyMjIQE5ODlxcXJCYmIiamhoxJjk5GYcPH8bWrVuxceNG7Ny5E2lpaeJ2rVYLJycnTJ8+HQkJCSZrOHbsGM6ePSsuvr6+ra6fzcQ1AoLcUVpyueVAIiIbIOV7LZi79rfffhupqamYOnUq+vbti4yMDDg7O2P58uUG4999912MHj0azz33HCIiIvDqq69i4MCBWLx4MYDGUYmFCxdi1qxZuO+++zBgwAB8+umnKCkpwbp16wAAeXl5yMzMxEcffYTo6GjExsbivffew+rVq1FSUgIAcHFxwdKlS5Gamgq1Wm2yBl9fX6jVanGRt+F8j43/urRNj3BfVFysh1ars3YqREQWp7AzdSdIa2dnWa2pvaqqSm+pra01+F51dXXIzc3VO/KXy+VISEhAdna2wddkZ2c3GylITEwU4wsKCqDRaPRi3N3dER0dLcZkZ2fDw8MDgwcPFmMSEhIgl8uRk5PT5n0SFRUFf39/3HHHHfj555/b9Fo2E9cI7eEDQQec01yydipERBYng4nrBmDbpzlaU3twcDDc3d3F5fXXXzf4XufPn4dWq4Wfn5/eej8/P6PXHWg0GpPxTX+2FHP9qQg7Ozt4eXm16XoHf39/ZGRk4Ouvv8bXX3+N4OBgxMfHY//+/a1+DxvvPdvG/48ZHWeKKuAf6G7lbIiILMvUkL5UTnMY2wYAp0+fhkqlEtc7Ojp2QGYdr3fv3ujdu7f487Bhw3DixAm88847+Oyzz1r1Hjb+69I27h5KODjKOKODiCRBbuJBV1K4ALOl2lUqld5irJnw9vaGQqFAaan+d0dpaanR6xTUarXJ+KY/W4q5/gLPhoYGlJeXt3h9REuGDh2K48ePtzqezcQ1ZDIZuvkoUXjyvLVTISKyONkft442ttgyc9bu4OCAQYMGISsrS1yn0+mQlZWFmJgYg6+JiYnRiweArVu3ivFhYWFQq9V6MVVVVcjJyRFjYmJiUFFRgdzcXDFm27Zt0Ol0iI6OblMN1zt48CD8/f1bHc/THNcJCHbHqRN84BcR2T6TD7syst5WmLv2mTNnYvLkyRg8eDCGDh2KhQsXorq6GlOnTgUATJo0CYGBgeJ1F0899RTi4uKwYMECjB07FqtXr8a+ffuwbNkyAI0HtzNmzMC8efMQHh6OsLAwvPLKKwgICBDvFREREYHRo0cjNTUVGRkZqK+vR3p6OiZMmICAgAAxtyNHjqCurg7l5eW4dOkSDh48CKDxgksAWLhwIcLCwtCvXz/U1NTgo48+wrZt27Bly5ZW189m4jqhPXxwYI8GOq0OcgUHbojIdpm626Ot3wXS3LWPHz8eZWVlmD17NjQaDaKiopCZmSleQFlUVKQ31XLYsGFYtWoVZs2ahZdeegnh4eFYt24d+vfvL8Y8//zzqK6uRlpaGioqKhAbG4vMzEwolUoxZuXKlUhPT8eoUaMgl8sxbtw4LFq0SC+3MWPGoLCwUPz5lltuAdA4/RRonI3yzDPP4MyZM3B2dsaAAQPwww8/YOTIka2uXyYIfNbqtX7dfwYL/rUNb2YkwVftZu10iIjMrqqqCu7u7jiTGgeVg+Fjyqq6BgR+uAOVlZV6FyF2dVKu3ZI4MnGdwGAPAMCZ0xVsJojIpsnsZJDZG35Epkxn24/OlHLtlmDjA1lt5+XtDDt7oOC44VugEhHZCplcZnKxZVKu3RI4MnEdmUwGL29HnDpZZu1UiIgsSyFvXIxts2VSrt0C2EwY4B+owtkzvAsmEdk2mb0MMnvDX5y2PtQv5dotge2XASE9vFFeVgNem0pENk0uM73YMinXbgFsJgzo0csPDfXAxQtXrJ0KEZHFyOzkkNkbWexu7OthyZIlCA0NhVKpRHR0NPbs2WMyfu3atejTpw+USiUiIyOxefNmve2CIGD27Nnw9/eHk5MTEhISkJ+frxdTXl6O5ORkqFQqeHh4ICUlBZcv//kE6JqaGkyZMgWRkZHw8vIyWvvqvBJEf7gLYe803ijqySefxIULF25oP0gNmwkDmmZ0lBRXWjcRIiJLarpuwNjSRmvWrMHMmTMxZ84c7N+/HzfffDMSExOb3fK5ye7duzFx4kSkpKTgwIEDSEpKQlJSEg4dOiTGzJ8/H4sWLUJGRgZycnLg4uKCxMRE1NTUiDHJyck4fPgwtm7dio0bN2Lnzp1IS0sTt2u1Wjg5OWH69OmIj483WPvu4ot49P8OYvLg7tjx2HAAQG5uLlJTU9u8H6SIzYQBPr4ukMuBghO8CJOIbJe5ZzS8/fbbSE1NxdSpU9G3b19kZGTA2dkZy5cvNxj/7rvvYvTo0XjuuecQERGBV199FQMHDsTixYsBNI5KLFy4ELNmzcJ9992HAQMG4NNPP0VJSQnWrVsHAMjLy0NmZiY++ugjREdHIzY2Fu+99x5Wr16NkpISAICLiwuWLl2K1NRU8SZS19e6p7gC3T2dkX5bT4R2cwEATJ06tcWRFWrEZsIAuUIOz24OnB5KRLbNQW56QeNNnq5damtrDb5VXV0dcnNzkZCQIK6Ty+VISEhAdna2wddkZ2frxQNAYmKiGF9QUACNRqMX4+7ujujoaDEmOzsbHh4eGDx4sBiTkJAAuVyOnJycVtce3aMbiiuvIvPEOQh/3H9i/fr1GDNmjPH3IBGbCSPUgW48zUFENq01IxPBwcFwd3cXl6ZnS1zv/Pnz0Gq14pF/Ez8/P2g0GoOv0Wg0JuOb/mwpxtfXV2+7nZ0dvLy8jH6uodpv6+mNT5KH4OHP9yJwTuN1GyqVCkuWLDH6HvQnTg01onuYN/LzfocgCJDJeGUvEdkgOwVgrzC8rUEHADh9+rTeLaWNPYa7y7mu9ryzVXhm3a94aXRfDOvRDfHv/IiioiL8/e9/x3//+18rJto1cGTCiLBevqirFXCpsqblYCKiLkimkJlcgMaj82sXY82Et7c3FAoFSktL9daXlpZCrVYbfI1arTYZ3/RnSzHXX+DZ0NCA8vJyo59rqPb5PxxFTE9vPJvYB/2DPAAACxYswPLly3H27Fmj70ON2EwYERTiCQA4c5qnOojIRpnxXgsODg4YNGgQsrKyxHU6nQ5ZWVmIiYkx+JqYmBi9eADYunWrGB8WFga1Wq0XU1VVhZycHDEmJiYGFRUVyM3NFWO2bdsGnU6H6OjoVtd+pV4L+XW1KxSNIxe851DLeJrDCF9/N8hkQFHBBUREGu9uiYi6qqb7Kxjc1tD2Y82ZM2di8uTJGDx4MIYOHYqFCxeiuroaU6dOBQBMmjQJgYGB4nUXTz31FOLi4rBgwQKMHTsWq1evxr59+7Bs2bLGHGQyzJgxA/PmzUN4eDjCwsLwyiuvICAgAElJSQCAiIgIjB49GqmpqcjIyEB9fT3S09MxYcIEBAQEiLkdOXIEdXV1uHjxIgDgUGkVXBztEPXHgePdUYH4+6d78MFPJzCslzeAxkeADx06VO99yDA2E0bY2cnh7mmPk8dLAfSzdjpEROZn5udTjB8/HmVlZZg9ezY0Gg2ioqKQmZkpXkBZVFQEufzP9x02bBhWrVqFWbNm4aWXXkJ4eDjWrVuH/v37izHPP/88qqurkZaWhoqKCsTGxiIzMxNKpVKMWblyJdLT0zFq1CjI5XKMGzcOixYt0sttzJgxKCwsFH+Of+MHAED9imQAwOS4XrhUp8XSbfl4fs0BAEB4eDjefvvtNu8HKZIJHL8x6t+zNqL6ch1eW/hXa6dCRGQ2VVVVcHd3R/mH46FydjAcc6UOXqlrUFlZqXcBZlcn5dotiddMmBAS6oUL565aOw0iIstQyEwvtkzKtVsAmwkTwnr54eoVHaovG75JCxFRlyblh11JuXYLYDNhQnD3xgtzePMqIrJFMnuFycWWSbl2S2AzYYI6QAXIgKJT5dZOhYjI/KR8dC7l2i2AzYQJDo52cFMpcDK/tOVgIqKuRi43vdgyKdduAZwa2gJffxcUF160dhpEROanUDTeVtrYNlsm5dotgO1XC4K7e6Gs9Iq10yAiMj8pH51LuXYL4B5rQc9wNaovaVFztd7aqRARmZedwvRiy6RcuwWwmWhB0B8zOs6eqbJyJkREZiaXmTg6t/GLEKVcuwWwmWiBf5A7AOA0Z3QQka2R8lC/lGu3AO6xFjg52cPFTfHHMzqIiGyIlIf6pVy7BXA2Ryt4+zlxZIKIbI+po3BbPzqXcu0WwGaiFYJCPPFr7llrp0FEZFYyuQIyI9MgZXLbPjqXcu2WwParFXqG++FSVQPq6rTWToWIyHykfN2AlGu3AO6xVggO7QYIgKaEMzqIyIZI+ZbSUq7dAthMtELAHzM6igt53QQR2RApX4Qo5dotgM1EK7i6OULpLMfJ4+esnQoRkflI+V4LUq7dAngBZit5+zqhqOCCtdMgIjIfKc9okHLtFsBmopUCg91x7EiZtdMgIjIfU0P6tj7UL+XaLYDtVyuF9fJDZXk9Ghp01k6FiMg8ZCZmM8hs/OtByrVbAEcmWim0hzcEATinuSRekElE1KVJ+ehcyrVbANuvVgoI/mNGR9FFK2dCRGQmMrnpxZZJuXYL4B5rJZW7Eg6OMhTkc0YHEdkIKX+hSrl2C+BpjlaSyWTo5qtEYcF5a6dCRGQeCgWgMPI1YORW0zZDyrVbAJuJNggIcsepE7xxFRHZCFNH4bZ+dC7l2i2Ae6wNwnr64uKFOui0nNFBRDZAYWd6sWUWqH3JkiUIDQ2FUqlEdHQ09uzZYzJ+7dq16NOnD5RKJSIjI7F582a97YIgYPbs2fD394eTkxMSEhKQn5+vF1NeXo7k5GSoVCp4eHggJSUFly9fFrfX1NRgypQpiIyMhJ2dHZKSkgzmsn37dgwcOBCOjo7o1asXVqxY0aba2Uy0QWhPb+i0wPmyamunQkTUflK+bsDMta9ZswYzZ87EnDlzsH//ftx8881ITEzEuXOGr7PbvXs3Jk6ciJSUFBw4cABJSUlISkrCoUOHxJj58+dj0aJFyMjIQE5ODlxcXJCYmIiamhoxJjk5GYcPH8bWrVuxceNG7Ny5E2lpaeJ2rVYLJycnTJ8+HQkJCQZzKSgowNixYzFy5EgcPHgQM2bMwKOPPorvv/++1fXLBEEQWh0tcRfKqjEz9f8w46V43DI02NrpEBHdkKqqKri7u6Pi5GKo3JwMx1y6Co8e6aisrIRKpergDC2nLbWfPn1ar3ZHR0c4OjoafE10dDSGDBmCxYsXAwB0Oh2Cg4Mxbdo0vPDCC83ix48fj+rqamzcuFFcd+uttyIqKgoZGRkQBAEBAQF45pln8OyzzwIAKisr4efnhxUrVmDChAnIy8tD3759sXfvXgwePBgAkJmZiTFjxqC4uBgBAQF6nzllyhRUVFRg3bp1euv/8Y9/YNOmTXqNzIQJE1BRUYHMzExju1KPjbee5uXl7Qw7e6DgBGd0EJENkNkBciOLzMZPc7Si9uDgYLi7u4vL66+/bvCt6urqkJubq3fkL5fLkZCQgOzsbIOvyc7ObjZSkJiYKMYXFBRAo9Hoxbi7uyM6OlqMyc7OhoeHh9hIAEBCQgLkcjlycnJavStayqU1bPy3xbxkMhm8vB1x6iRvq01ENkDKz6doRe2GRiYMOX/+PLRaLfz8/PTW+/n54ejRowZfo9FoDMZrNBpxe9M6UzG+vr562+3s7ODl5SXGtIaxXKqqqnD16lU4ORkewdH73FZ/GgEA/ANVOFtcZe00iIjaTSaTQyYzPA1SZuPXTLSmdpVKZVOneCzJtn9bLCC0pw/Kz9eCl5oQUZdnbJi/abFlZqzd29sbCoUCpaWleutLS0uhVqsNvkatVpuMb/qzpZjrL/BsaGhAeXm50c9tSy4qlapVoxIAm4k2C+vpi4Z64OKFK9ZOhYiofTibwyy1Ozg4YNCgQcjKyhLX6XQ6ZGVlISYmxuBrYmJi9OIBYOvWrWJ8WFgY1Gq1XkxVVRVycnLEmJiYGFRUVCA3N1eM2bZtG3Q6HaKjo1udf0u5tIaNt57mFxjiAQA4c7oCXt4u1k2GiKg9TN1TQSr3mTC2rY1mzpyJyZMnY/DgwRg6dCgWLlyI6upqTJ06FQAwadIkBAYGihdxPvXUU4iLi8OCBQswduxYrF69Gvv27cOyZcsANF6jN2PGDMybNw/h4eEICwvDK6+8goCAAPFeERERERg9ejRSU1ORkZGB+vp6pKenY8KECXozOY4cOYK6ujqUl5fj0qVLOHjwIAAgKioKAPD3v/8dixcvxvPPP49HHnkE27Ztw5dffolNmza1un4b/20xP28fF8gVwKkT5xF5S6C10yEiunFSvgukmWsfP348ysrKMHv2bGg0GkRFRSEzM1O8sLGoqAjyay74HDZsGFatWoVZs2bhpZdeQnh4ONatW4f+/fuLMc8//zyqq6uRlpaGiooKxMbGIjMzE0qlUoxZuXIl0tPTMWrUKMjlcowbNw6LFi3Sy23MmDEoLCwUf77lllsAQDxdHxYWhk2bNuHpp5/Gu+++i6CgIHz00UdITExsdf28z8QNmJm2BqE9vTD9H3dYOxUiojZrutdC5bkvoVI5G4m5AnffB232PhNSrN2SODJxA9QBbigprrR2GkRE7SPlh11JuXYLsPFxLMvoHuaNC+dqOKODiLo2XoApzdotgHvsBoSF+6KuVkBVZU3LwUREnRWnhkqzdgtgM3EDgkI8AQAlp3mqg4i6MFkLiy2Tcu0WwGbiBviq3SCTAadOnrd2KkREN0wQBJOLLZNy7ZbAsZwbYGcnh7uXPQqOlwLo32I8EVFnpIMWOmiNbrNlUq7dEthM3CA/f1ec4WkOIurCBEEHQdAZ3WbLpFy7JfA0xw0KCfXC+XNXrZ0GEdENE1r470YsWbIEoaGhUCqViI6Oxp49e0zGr127Fn369IFSqURkZCQ2b96sn6MgYPbs2fD394eTkxMSEhKQn5+vF1NeXo7k5GSoVCp4eHggJSUFly9fFrfX1NRgypQpiIyMhJeXl8HaH5n6FuwVo2GvGI1unuMAND7yu1+/fje0H6SGzcQN6hHuh5orOlRfrrV2KkREN0Qn6KATtEaWth+dr1mzBjNnzsScOXOwf/9+3HzzzUhMTGz2MKomu3fvxsSJE5GSkoIDBw4gKSkJSUlJOHTokBgzf/58LFq0CBkZGcjJyYGLiwsSExNRU/PnbLrk5GQcPnwYW7duxcaNG7Fz506kpaWJ27VaLZycnDB9+nTEx8cbrP2td1JxqvgznCr+DL/lNd7S2tPTEw888ECb94MU8Q6YN6jo1EW8MmMjZr2RiPA+vi2/gIiok2i6C2Rp+WqTd4H085rQprtARkdHY8iQIVi8eDGAxoddBQcHY9q0aXjhhReaxY8fPx7V1dXYuHGjuO7WW29FVFQUMjIyIAgCAgIC8Mwzz+DZZ58FAFRWVsLPzw8rVqzAhAkTkJeXh759+2Lv3r0YPHgwACAzMxNjxoxBcXGx3jMqgMbGY9WqVa2qXSaToaCgAN27d29V/VLGkYkbpA5QATKgqOCCtVMhIrohxkclGhegsfG4dqmtNTwaW1dXh9zcXCQkJIjr5HI5EhISkJ2dbfA12dnZevEAkJiYKMYXFBRAo9Hoxbi7uyM6OlqMyc7OhoeHh9hIAEBCQgLkcjlycnLaVXt8fDwbiVZiM3GDHBwUcFPZ4UR+acvBRESdUNNFiMYWAAgODoa7u7u4ND318nrnz5+HVqsVH2zVxM/PDxqNxuBrNBqNyfimP1uK8fXVHx22s7ODl5eX0c9tqfazJY0HiZMmTTL6etLH2Rzt4OfvguKii9ZOg4johpi60LJp/enTp/VOczg6OnZIbpZmqvYv1+wCANx9990dmVKXxpGJdggO9cL5Us7oIKKuqTVD/SqVSm8x1kx4e3tDoVCgtFR/tLa0tBRqtdrga9Rqtcn4pj9birn+As+GhgaUl5cb/VxTtWt1DVi9cgcAwMHBwejrSR+biXbo0csP1Ze0uHq13tqpEBG1mQCdyaUtHBwcMGjQIGRlZYnrdDodsrKyEBMTY/A1MTExevEAsHXrVjE+LCwMarVaL6aqqgo5OTliTExMDCoqKpCbmyvGbNu2DTqdDtHR0W2ufdfOwzhVYHj2CRnH0xztEBzaOF/5bHEleoR7WzkbIqK2uXYEwtC2tpo5cyYmT56MwYMHY+jQoVi4cCGqq6sxdepUAI3XIAQGBorXXTz11FOIi4vDggULMHbsWKxevRr79u3DsmWNUzNlMhlmzJiBefPmITw8HGFhYXjllVcQEBCApKQkAEBERARGjx6N1NRUZGRkoL6+Hunp6ZgwYYLeTI4jR46grq4OFy82npr+7ddTcHVVIvJm/QssP/t4G6IGheFgbkGb65cyNhPt4B/YeB6xuPAimwki6nIEwMQ1E203fvx4lJWVYfbs2dBoNIiKikJmZqZ4AWVRURHk8j8HxIcNG4ZVq1Zh1qxZeOmllxAeHo5169ahf/8/H1Pw/PPPo7q6GmlpaaioqEBsbCwyMzOhVCrFmJUrVyI9PR2jRo2CXC7HuHHjsGjRIr3cxowZg8LCQvHnsaNeBQBcqPlMXFdVeQXfrtuLV+aNZzPRRrzPRDs98bdVGDIsGFMfH27tVIiIWqXpPhMFpRlwUzkZjLlUdRVhfn9v030mugIp125JHJloJx8/Z5wuLLd2GkREbSblh11JuXZL4AWY7RTU3RPnzl6xdhpERG0m5cdwS7l2S2Az0U49evniUlUD6mobrJ0KEVGbmHM2R1cj5dotgc1EO4WEdQMEQFNSZe1UiIjapDX3mbBVUq7dEthMtFNAkDsA8E6YRNTl6ATTiy2Tcu2WwGainVxcHeHkLMdJPqODiLqYep3M5GLLpFy7JXA2hxl083VC0SnO6CCirkUnyKATDH9xGltvK6RcuyVwZMIMgkI8UFpy2dppEBG1iU4AtEYWWx/ql3LtlsBmwgx69PJD5cV6NDTwCmAi6joadDKTiy2Tcu2WwGbCDELCukEQgHNnL1k7FSKiVtMKMpOLLZNy7ZbAZsIMAoM5o4OIup4GyNAgGFlg21+oUq7dEthMmIGbuxIOjjIUHOdja4mo65Dy9Egp124JnM1hBjKZDN18lSgsOG/tVIiIWs3UkL6tD/VLuXZLYDNhJgFB7jh1nNNDiajr0Jq42FBr4xchSrl2S+BpDjMJ6+WLi+V10Gk5o4OIugZjUyObFlsm5dotgc2EmYT28IZOC5Sdq7Z2KkRErdJ04yZjiy2Tcu2WwNMcZhIY7AEAOHO6An7+btZNhoioFep1jYuxbbZMyrVbAkcmzMSzmzPs7IGC43xGBxF1DVI+Opdy7ZbAkQkzkclk8PJRovAkZ3QQUdfQYOKhVrZ+F0gp124JbCbMyD/QDWeLq6ydBhFRq5i6p4Kt32tByrVbAk9zmFFoDx+Un6+FIPA3kYg6PykP9Uu5dktgM2FGYb180VAPlJ+/Yu1UiIha1HgRoszIYu3sLEvKtVsCmwkzunZGBxFRZyflW0pbovYlS5YgNDQUSqUS0dHR2LNnj8n4tWvXok+fPlAqlYiMjMTmzZv1tguCgNmzZ8Pf3x9OTk5ISEhAfn6+Xkx5eTmSk5OhUqng4eGBlJQUXL58WS/m119/xfDhw6FUKhEcHIz58+frbV+xYgVkMpneolQq21Q7mwkz8vZxgUIBnDpRZu1UiIhaVCcAdToji403E+aufc2aNZg5cybmzJmD/fv34+abb0ZiYiLOnTP8zKbdu3dj4sSJSElJwYEDB5CUlISkpCQcOnRIjJk/fz4WLVqEjIwM5OTkwMXFBYmJiaipqRFjkpOTcfjwYWzduhUbN27Ezp07kZaWJm6vqqrCnXfeie7duyM3Nxdvvvkm5s6di2XLlunlo1KpcPbsWXEpLCxsU/1sJsxIrpDDo5sDTp1kM0FEnZ9g4sjc1i/9Mnftb7/9NlJTUzF16lT07dsXGRkZcHZ2xvLlyw3Gv/vuuxg9ejSee+45RERE4NVXX8XAgQOxePHiP/ITsHDhQsyaNQv33XcfBgwYgE8//RQlJSVYt24dACAvLw+ZmZn46KOPEB0djdjYWLz33ntYvXo1SkpKAAArV65EXV0dli9fjn79+mHChAmYPn063n77bb18ZDIZ1Gq1uPj5+bWpfjYTZqYOcEPJ6Uprp0FE1CIp31K6NbVXVVXpLbW1tQbfq66uDrm5uUhISBDXyeVyJCQkIDs72+BrsrOz9eIBIDExUYwvKCiARqPRi3F3d0d0dLQYk52dDQ8PDwwePFiMSUhIgFwuR05OjhgzYsQIODg46H3OsWPHcPHiRXHd5cuX0b17dwQHB+O+++7D4cOHW9yH12IzYWbde3jjQlkNZ3QQUadndJj/j8WWtab24OBguLu7i8vrr79u8L3Onz8PrVbb7Gjez88PGo3G4Gs0Go3J+KY/W4rx9fXV225nZwcvLy+9GEPvce1n9O7dG8uXL8f69evx+eefQ6fTYdiwYSguLjaYuyG8z4SZ9Qz3w+baY6iqrIG7h5O10yEiMkrK91poTe2nT5+GSqUS1zs6OnZAZh0vJiYGMTEx4s/Dhg1DREQEPvjgA7z66quteg+OTJhZwB8zOniqg4g6O57mMF27SqXSW4w1E97e3lAoFCgt1X+cQmlpKdRqtcHXqNVqk/FNf7YUc/0Fng0NDSgvL9eLMfQe137G9ezt7XHLLbfg+PHjBrcbwmbCzHzVbpDJwYswiajTa9D9+cCr65cGGz/NYc7aHRwcMGjQIGRlZYnrdDodsrKy9I74rxUTE6MXDwBbt24V48PCwqBWq/ViqqqqkJOTI8bExMSgoqICubm5Ysy2bdug0+kQHR0txuzcuRP19fV6n9O7d294enoazE2r1eK3336Dv79/q/cBmwkzs7OTw93THgXHDU8HIiLqLDgyYb7aZ86ciQ8//BCffPIJ8vLy8Pjjj6O6uhpTp04FAEyaNAkvvviiGP/UU08hMzMTCxYswNGjRzF37lzs27cP6enpABpnV8yYMQPz5s3Dhg0b8Ntvv2HSpEkICAhAUlISACAiIgKjR49Gamoq9uzZg59//hnp6emYMGECAgICAAAPPfQQHBwckJKSgsOHD2PNmjV49913MXPmTDGXf/3rX9iyZQtOnjyJ/fv34+GHH0ZhYSEeffTRVtfPayYsQB3gijM8zUFEnVydTga5kYda1dn4w67MXfv48eNRVlaG2bNnQ6PRICoqCpmZmeLFjkVFRZDL/zx+HzZsGFatWoVZs2bhpZdeQnh4ONatW4f+/fuLMc8//zyqq6uRlpaGiooKxMbGIjMzU++GUitXrkR6ejpGjRoFuVyOcePGYdGiReJ2d3d3bNmyBU8++SQGDRoEb29vzJ49W+9eFBcvXkRqaio0Gg08PT0xaNAg7N69G3379m11/TKB0w7M7vP/ZmPXDyfxwRfJ1k6FiKiZqqoquLu7Y9bOD6F0dTYYU3P5CuaNSEVlZaXeRYhdnZRrtySe5rCAnuF+qLmqw+VLhuckExF1BjzNIc3aLYHNhAUEhTRe1FJSzFMdRNR5NWiBeiNLg9ba2VmWlGu3BDYTFqAOVAEyoKjgvLVTISIySspH51Ku3RJ4AaYF2NsroHK3w8n8cwBafwELEVFHqhcAuZFpkPU2/oUq5dotgc2Ehfj6u6D49MWWA4mIrMTUUbitH51LuXZL4GkOCwnu7oUyzRVrp0FEZJSUh/qlXLslsJmwkB7hfrhyWYerV+tbDiYisgLeAVOatVsCmwkLCe7uBQA4yxkdRNRJSfnoXMq1WwKbCQsJCGq80UnRqXIrZ0JEZJhOJzO52DIp124JbCYsxFFpDxc3BU7ml7YcTERkBQ31cpOLLZNy7ZbAPWZBPmpnFBdxZIKIOidLHJ0vWbIEoaGhUCqViI6Oxp49e0zGr127Fn369IFSqURkZCQ2b96st10QBMyePRv+/v5wcnJCQkIC8vPz9WLKy8uRnJwMlUoFDw8PpKSk4PLly+L2mpoaTJkyBZGRkfDy8jJae31NA3L/uwbrHn0OABAZGYnly5ff0H6QGjYTFhQc4olzZ6utnQYRkUHaBuNH5tqGtn89rFmzBjNnzsScOXOwf/9+3HzzzUhMTMS5c4aforx7925MnDgRKSkpOHDgAJKSkpCUlIRDhw6JMfPnz8eiRYuQkZGBnJwcuLi4IDExETU1NWJMcnIyDh8+jK1bt2Ljxo3YuXOn3oOstFotnJycMH36dMTHxxutffu8hSg5cAiD/54CAPjvf/+L3r17t3k/SBEf9GVBWZlH8WnGXny4ZiIcHHlLDyLqHJoedjVu9aewdzb8sKv6K1fw9YRJOH36tN7DrhwdHeHo6GjwNdHR0RgyZAgWL14MANDpdAgODsa0adPwwgsvNIsfP348qqursXHjRnHdrbfeiqioKGRkZEAQBAQEBOCZZ57Bs88+CwCorKyEn58fVqxYgQkTJiAvLw99+/bF3r17MXjwYABAZmYmxowZg+LiYvFR3E2Sk5OxatWqZrWfzT2A3W+9g7uXLYFcocDXEybxQV9twJEJC+oe2g0AcPZMlZUzISJqrjWnOYKDg+Hu7i4ur7/+usH3qqurQ25uLhISEsR1crkcCQkJyM7ONvia7OxsvXgASExMFOMLCgqg0Wj0Ytzd3REdHS3GZGdnw8PDQ2wkACAhIQFyuRw5OTmtrr04Zx88e/ZE3tfrsenxpwAAL7/8Mq5evWr0PehPPFy2IP8gdwBAcdFFdO/hZeVsiIj0NdTLIKs3fG1Ewx/rDY1MGHL+/HlotVr4+fnprffz88PRo0cNvkaj0RiM12g04vamdaZifH199bbb2dnBy8tLjDFW37W1XzpbivN5RyG3c8DgaTPw07/mYMOGDbh8+TI+/vhjo+9DjTgyYUEurg5wcpZzRgcRdUqtGZlQqVR6i7Fmoqu5vtbGM/4yDJr2NNzDegEAXnvtNXzyySccnWgFNhMW5u3nhKJTF6ydBhFRM/X1cpNLW3h7e0OhUKC0VP/gqbS0FGq12uBr1Gq1yfimP1uKuf4Cz4aGBpSXlxv9XKB57Q4qLyg9vQB7N7H23r17QxAEFBcXt1S+5LGZsLDAEA/O6CCiTkknmBiZENo2NdTBwQGDBg1CVlbWn++v0yErKwsxMTEGXxMTE6MXDwBbt24V48PCwqBWq/ViqqqqkJOTI8bExMSgoqICubm5Ysy2bdug0+kQHR3d6to9wiNQU1GOuis1Yu3Hjx+HXC5HUFBQm/aFFLGZsLAePf1QebEeDfVaa6dCRKRHMHGKQ7iB+0zMnDkTH374IT755BPk5eXh8ccfR3V1NaZOnQoAmDRpEl588UUx/qmnnkJmZiYWLFiAo0ePYu7cudi3bx/S09MBADKZDDNmzMC8efOwYcMG/Pbbb5g0aRICAgKQlJQEAIiIiMDo0aORmpqKPXv24Oeff0Z6ejomTJigN5PjyJEjOHjwIC5ebHyac1VhISoKCsR61dHxcHBV4ddli3DpzBkAwCuvvIJHHnkETk5ON7R/pYQXYFpY9x7eEASgVHMJgcEe1k6HiEjUUC8H7AwfU97IXSDHjx+PsrIyzJ49GxqNBlFRUcjMzBQvoCwqKoJc/uf7Dhs2DKtWrcKsWbPw0ksvITw8HOvWrUP//v3FmOeffx7V1dVIS0tDRUUFYmNjkZmZCaVSKcasXLkS6enpGDVqFORyOcaNG4dFixbp5TZmzBgUFhaKP+/59z8AAKM+3NS4QuGCqBnz8PsXGdj7emPDc9ddd2H+/Plt3g9SxPtMWFhVZQ2mTV6LJ58bjqG3hVo7HSIi8T4Twxd+BTsnw/eZaLh6Bbtm3G9z91qQcu2WxNMcFqZyV8JBKeOMDiLqdBoaZGhokBtZbPthVzqdqdks1s6u6+Fpjg7g7aNEYcF5a6dBRKRHp5VBpzXcNBhbbyvMfYpH6thMdICAYHcU5POBX0TUuTTNaDC2zZZJuXZLYDPRAUJ7+mL/LxrotDrIFex4iahz0NbLASP/Jmlt/OhcyrVbAvdYBwjr6QOdDig7d7nlYCKiDmKJR5B3FVKu3RLYTHSAgD+mhJ4pqrBqHkREenSC6cWWSbl2C2Az0QE8vZxgZw+cPHGu5WAiog6iqNeZXGyZlGu3BF4z0QFkMhm6+ShReIIzOoio85DpBMiNHIXrbPzoXMq1WwKbiQ7iH6TCmaJKa6dBRCRSaHVQNBg+Che0tn10LuXaLYGnOTpIaA8flJ+vBW84SkSdhVwLyLWCkcXa2VmWlGu3BDYTHSS0pw+0DUD5+SvWToWICAAg/2Oo39hiy6RcuyXwNEcHCQrxAAAUF1Wgm4+LdZMhIgKgaNBBoTAy1G/kFICtkHLtlsCRiQ7SzccVCgVQeLLM2qkQEQGQ9tG5lGu3BI5MdBC5XAbPbg4o4PRQIuok7Bp0sJMbOQq38aNzKdduCWwmOpA6UIWSYs7oIKJOQidAZuwo3NaPzqVcuwXwNEcH6t6jG8rLOKODiDoHKQ/1S7l2S+DIRAfq0csPdbXHUFlRAw9PJ2unQ0QSp6jXQSEzPKSvs/G7QEq5dktgM9GBAv+Y0VFyuoLNBBFZnVyng1xn+IvT2HpbIeXaLYGnOTqQr9oNMjlw6iRvq01E1ifloX4p124JHJnoQAqFHB5e9ig4zhkdRGR9igYTQ/02PqNByrVbAkcmOpifvyvOnK6wdhpERJI+OrdE7UuWLEFoaCiUSiWio6OxZ88ek/Fr165Fnz59oFQqERkZic2bN+ttFwQBs2fPhr+/P5ycnJCQkID8/Hy9mPLyciQnJ0OlUsHDwwMpKSm4fPmyXsyvv/6K4cOHQ6lUIjg4GPPnz29zLi1hM9HBQkK74cK5q9ZOg4gIdvU6k4stM3fta9aswcyZMzFnzhzs378fN998MxITE3HunOGR6N27d2PixIlISUnBgQMHkJSUhKSkJBw6dEiMmT9/PhYtWoSMjAzk5OTAxcUFiYmJqKmpEWOSk5Nx+PBhbN26FRs3bsTOnTuRlpYmbq+qqsKdd96J7t27Izc3F2+++Sbmzp2LZcuWtSmXlsgEzlPsUL/sKsDSBT9hyacPwlXlaO10iEiCqqqq4O7ujgfvXgYHe8MXg9fVX8WXG9NQWVkJlUrVwRlajqVqj46OxpAhQ7B48WIAgE6nQ3BwMKZNm4YXXnihWfz48eNRXV2NjRs3iutuvfVWREVFISMjA4IgICAgAM888wyeffZZAEBlZSX8/PywYsUKTJgwAXl5eejbty/27t2LwYMHAwAyMzMxZswYFBcXIyAgAEuXLsXLL78MjUYDBwcHAMALL7yAdevW4ejRo63KpTU4MtHBAoM9AIA3ryIiq9PWXUFDreFFW2fbDyVsTe1VVVV6S21trcH3qqurQ25uLhISEsR1crkcCQkJyM7ONvia7OxsvXgASExMFOMLCgqg0Wj0Ytzd3REdHS3GZGdnw8PDQ2wkACAhIQFyuRw5OTlizIgRI8RGoulzjh07hosXL7Yql9bgBZgdTB2oAmRAYcF53NTX19rpEJEEOTg4QK1W4+stM0zGqdVqvS8hW9Da2l1dXREcHKy3bs6cOZg7d26z2PPnz0Or1cLPz09vvZ+fn3j0fz2NRmMwXqPRiNub1pmK8fXV/x6xs7ODl5eXXkxYWFiz92ja5unp2WIurcFmooPZ2yug8rD7Y0ZHX2unQ0QSpFQqUVBQgLq6OpNxDg4OUCqVHZRVx2ht7YIgQCaT6a1zdOSpaWPYTFiBr9oFxUUXrZ0GEUmYUqm0uUahtcxdu7e3NxQKBUpLS/XWl5aWQq1WG3yNWq02Gd/0Z2lpKfz9/fVioqKixJjrL/BsaGhAeXm53vsY+pxrP6OlXFqD10xYQUioF8pKbft8JBGRVDg4OGDQoEHIysoS1+l0OmRlZSEmJsbga2JiYvTiAWDr1q1ifFhYGNRqtV5MVVUVcnJyxJiYmBhUVFQgNzdXjNm2bRt0Oh2io6PFmJ07d6K+vl7vc3r37g1PT89W5dIqAnW4nVm/C5Pu+1S4Ul1r7VSIiMgMVq9eLTg6OgorVqwQjhw5IqSlpQkeHh6CRqMRBEEQ/va3vwkvvPCCGP/zzz8LdnZ2wltvvSXk5eUJc+bMEezt7YXffvtNjHnjjTcEDw8PYf369cKvv/4q3HfffUJYWJhw9epVMWb06NHCLbfcIuTk5Ag//fSTEB4eLkycOFHcXlFRIfj5+Ql/+9vfhEOHDgmrV68WnJ2dhQ8++KBNubSEzYQVnMw/L0y671Ph+LEya6dCRERm8t577wkhISGCg4ODMHToUOGXX34Rt8XFxQmTJ0/Wi//yyy+Fm266SXBwcBD69esnbNq0SW+7TqcTXnnlFcHPz09wdHQURo0aJRw7dkwv5sKFC8LEiRMFV1dXQaVSCVOnThUuXbqkF/O///1PiI2NFRwdHYXAwEDhjTfeaJZ7S7m0hPeZsILamnqkTViNqU8MRfydva2dDhERUbvwmgkrcFTaw1WlwEk+o4OIiGwAmwkr8fFzxunCcmunQURE1G5sJqwkqLsnzp2ttnYaRERE7cZmwkp69PLD5Sot6mobrJ0KERFRu7CZsJKQsG4AgLNnqqycCRERUfuwmbCSgCB3AOCdMImIqMtjM2Elzi4OcHKR48TvrX+QChERUWfEZsKKfPycOKODiIi6PDYTVhQY7IHSs5etnQYREVG7sJmworBefqi62ICGeq21UyEiIrphbCasqHsPbwgCUKq5ZO1UiIiIbhibCSsSZ3QUVlg3ESIionZgM2FFKnclHJUynDxeau1UiIiIbhibCSvr5uuEooLz1k6DiIjohrGZsLLAYHdoSjijg4iIui42E1YW2tMXFRfqoNXqrJ0KERHRDWEzYWVhPX2g0wFlpRydICKironNhJUFBDfO6Cg5XWHdRIiIiG4Qmwkr8/B0gp09cPL4OWunQkREdEPYTFiZTCZDNx8lTp0ss3YqREREN4TNRCfgH6SC5gzvgklERF0Tm4lOILSHD8rP10KnE6ydChERUZuxmegEwnr5QtsAlJ+vtnYqREREbcZmohMIDPYAAJw5XWndRIiIiG4Am4lOoJuPCxR2wKkTnNFBRERdD5uJTkAul8GzmwMKTnBGBxERdT1sJjoJdaAKZ8/wNAcREXU9bCY6idAe3rhwrhaCwBkdRETUtbCZ6CTCevmhvk5A5cWr1k6FiIioTdhMdBJBnNFBRERdFJuJTsJH7Qq5HCjkbbWJiKiLYTPRSSgUcrh72XNGBxERdTlsJjoRdYArzvBR5ERE1MWwmehEQkK9cf4cL8AkIqKuhc1EJ9Ij3A+1VwVcqqqxdipEREStxmaiEwkK8QAAlHBGBxERdSFsJjoRvwAVZDKg6NQFa6dCRETUamwmOhF7ewXcPOxw8niptVMhIiJqNTYTnYyf2gXFhRXWToOIiKjV2Ex0MsGh3XD+3BVrp0FERNRqbCY6mZ7hfrhyWYerV+qsnQoREVGrsJnoZIK6ewIASoo5o4OIiLoGNhOdjH+QOwCg6FS5lTMhIiJqHTYTnYyjox1cVQoU5HNGBxERdQ1sJjohHz9nnC68aO00iIiIWoXNRCcU3N0L5zTV1k6DiIioVdhMdEI9bvLD5SotamsbrJ0KERFRi9hMdELB3b0AAJozVVbOhIiIqGUyQRAEaydBf7pQVo3N3xzGD5uPQaGQwS9Ahbg7emFk4k1wdLSzdnpEknP59Dkceff/ULB6G2rLL8Gthz9uShmD3o/dDTtnpbXTI+oU2Ex0IoUnyzF/zg+4fKm22bbQnl74x7/ugLOLgxUyI5KmCwfy8f2dz6P2QvNRwm6DbsLoH96Eg7urFTIj6lx4mqOTEAQBS97cabCRAIBTJ8qxekVuB2dFJF2CIODH8a8abCQA4ELu79j77AcdnBVR58RmopP47UAJSs9eMhmTvaMA1ZcNNxtEZF5nvt+LS8fPmIw5sSoLtRdN/39LJAU8Cd9JHD9a1mJMXZ0We34uRFivbh2QEZG0ndy0r8UY7dValP/vBPzjoyyfEFEnxmaik5DJZa2KW7E0x8KZEBEAdD92AmGtiJMpOMBLxGaik+gf5Y91q381GePkbI9nZt8Oe3tFB2VFJF2V+3ti//iDJmMcvdzgPbh3xyRE1Imxmegkwvv4okd4N5zMv2A0ZtRdvRHex7cDsyKSsJ7DULSgD87vOWo0pHfa3bBzcuzApIg6J47PdSLpz8dBHaAyuG1gdDD+MvHmDs6ISNpGrp0D1U1BBreFJN2GW/45pWMTIuqkeJ+JTqa2ph67dxTgl52nUF1dBx8/V8Td0QsDBgZC3srrKojIfOqrr+Lkyiyc/GIbai/+edOqoLuGQibn8RgRwGaCiIiI2oltNREREbULmwkiIiJqFzYTRERE1C5sJoiIiKhd2EwQERFRu7CZICIionZhM0FERETtwmaCiIiI2oXNBBEREbULmwkiIiJqFzYTRERE1C5sJoiIiKhd2EwQERFRu7CZICIionZhM0FERETtwmaCiIiI2oXNBBEREbULmwkiIiJqFzYTRERE1C5sJoiIiKhd2EwQERFRu7CZICIionZhM0FERETtwmaCiIiI2oXNBBEREbULmwkiIiJqFzYTRERE1C5sJoiIiKhd2EwQERFRu7CZICIionZhM0FERETtwmaCiIiI2oXNBBEREbULmwkiIiJqFzYTRERE1C5sJoiIiKhd/h/bIDy0tyO6wwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from utils import get_ape_from_pd_series\n", + "\n", + "wntr.graphics.plot_network(\n", + " wn,\n", + " node_attribute=get_ape_from_pd_series(\n", + " results_hhl.node[\"pressure\"].iloc[0], results_epanet.node[\"pressure\"].iloc[0]\n", + " ),\n", + " link_attribute=get_ape_from_pd_series(\n", + " results_hhl.link[\"flowrate\"].iloc[0],\n", + " results_epanet.link[\"flowrate\"].iloc[0],\n", + " ),\n", + " node_colorbar_label=\"Pressures\",\n", + " link_colorbar_label=\"Flows\",\n", + " node_size=50,\n", + " title=f\"{inp_file}: Absolute Percent Error\",\n", + " node_labels=False,\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "vitens_wntr_1", + "language": "python", + "name": "python3" + }, + "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.9.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/newton_raphson/qnr_vqls.ipynb b/docs/notebooks/newton_raphson/qnr_vqls.ipynb new file mode 100644 index 0000000..4b370a2 --- /dev/null +++ b/docs/notebooks/newton_raphson/qnr_vqls.ipynb @@ -0,0 +1,305 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quantum Newton Raphson on Net0 with VQLS linear solver\n", + "\n", + "In this example, we use the VQLS solver to drive the Newton-Raphson algorithm to obtain the pressure and flow rate of a small network, Net0:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmM0lEQVR4nO3dfXDU9YHH8c8vCXlOCJjwZHiQB0MkYAiBhLDZZJPNbjpeHate7+rcqHNX7YyttXac67TnqJ2x3KjtDDe2x529G6/tea2nHUdHqXmEPJEQICHyFEQoDwoKCAEhkJDkd39Y9ogJTyHJd3d/79eMf2Q32f3wGzVvdn+7a9m2bQsAADhWhOkBAADALGIAAACHIwYAAHA4YgAAAIcjBgAAcDhiAAAAhyMGAABwOGIAAACHIwYAAHA4YgAIY88995wsy9KJEydMTwkaGzZskGVZ2rBhg+kpQNAgBuAYL7/8siZOnKiLFy+Oye2vW7dOzz333JjcdjC5/Dhe+sVqWZa2bt065HsffvhhJSYmjuh+rnU833nnHeXk5Cg2NlazZs3Ss88+q76+vhHdF+B0xAAc47333pPP59OECRPG5PbXrVunn/70p2Ny28HkSsdxtEPoasfzT3/6k+655x6lpKTo5Zdf1j333KPnn39ejz/++DVv1+126/z583K73aO6FwhlUaYHAOOhu7tbdXV1Wrt2rekp4+LcuXNKSEgY9du90nHMzs7Wu+++q7a2NuXk5Iz6/X7VU089pSVLlqiyslJRUV/+byw5OVmrV6/WE088oYULF17xZyMiIhQbGzvmG4FQwiMDcISamhr19PToa1/7miTpv/7rv2RZlpqamvTDH/5QaWlpSkhI0De+8Q0dP358yM//6U9/UmFhoRISEpSUlKS77rpLO3fuDFz/8MMP61e/+pUkBR42tyxLkpSTk6N777130O0tXrxYlmXpgw8+CFz2+uuvy7Is7d69O3BZe3u7vva1ryk5OVmJiYkqLS1VS0vLoNu69Gepq6vTY489pilTpig9Pf2Kx+LgwYOaP3++srKy9Nlnn0mS9u7dq/vuu0/Tpk1TbGys0tPT9bd/+7c6ffr0VY/jJY8//rgmTZp03Y8O3Mzx3LVrl3bt2qVHH300EAKS9Nhjj8m2bb355ptXve/hzhkoLi5WVlaWdu3aJY/Ho/j4eN1666168cUXh/3Z119/XT/5yU80bdo0JSQk6O6779bhw4ev688OBCMeGYAjrFu3TsuWLdPUqVMHXX7pl9izzz6rAwcOaM2aNfre976n119/PfA9v/vd7/TQQw/J7/frhRdeUHd3t9auXSuXy6X29nbNmTNH3/nOd3TkyBFVVVXpd7/73aD7KCws1O9///vA1ydPntTOnTsVERGhhoYGLVmyRJLU0NCgtLQ0ZWZmSpJ27typwsJCJScn6x//8R81YcIE/fu//7uKi4tVV1envLy8Qffz2GOPKS0tTc8884zOnTs37HHYt2+fSkpKNHnyZFVVVSk1NVW9vb3y+/3q6enR448/rmnTpumTTz7Ru+++q66uLk2cOPGaxzE5OVlPPvmknnnmmWs+OnCzx7O9vV2SlJubO+jyGTNmKD09PXD9jTp16pTKy8t177336pvf/KbefPNN/ehHP9LixYuHxM/PfvYzWZalH/3oRzp27JjWrFkjr9erbdu2KS4ubkT3DxhlAw4wa9Ys+9lnnw18/eqrr9qSbK/Xaw8MDAQuf/LJJ+3IyEi7q6vLtm3b/uKLL+yUlBT7kUceGXR7n376qT1x4sRBl3/3u9+1h/tP6o033rAl2bt27bJt27bfeecdOyYmxr777rvtv/mbvwl835IlS+xvfOMbga/vueceOzo62t63b1/gsiNHjthJSUm22+0e8mdxuVx2X1/foPt+9tlnbUn28ePH7d27d9szZsywly9fbp88eTLwPe3t7bYk+4033rj6QbSHHsf169cHfrarq8ueNGmSfffddweuf+ihh+yEhITA16NxPF966SVbkn3o0KEh1y1fvtzOz8+/6p/h0ub169cHLisqKrIl2b/97W8Dl/X09NjTpk2z77vvviE/e+utt9pnzpwJXP6///u/tiT7X/7lX65630Cw4mkChL0dO3bo0KFDuuuuu4Zc9+ijjwYefpa+/Ft8f3+/Dh48KEmqqqpSV1eXvvWtb+nEiROBfyIjI5WXl6f169df8/4LCwslSfX19ZK+fARg+fLlKisrU0NDgySpq6tLO3bsCHxvf3+/Kisrdc8992ju3LmB25o+fboeeOABNTY26syZM4Pu55FHHlFkZOQVj0FRUZHmzJmj6upqTZo0KXDdpb/5V1RUqLu7+4p/jqsdx0u384Mf/EDvvPPOFf92PhrH8/z585KkmJiYIdfF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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "import wntr\n", + "import wntr_quantum\n", + "\n", + "# if not done in shell, define the environment variable here\n", + "os.environ[\"EPANET_TMP\"] = \"/home/nico/.epanet_quantum\"\n", + "os.environ[\"EPANET_QUANTUM\"] = \"/home/nico/QuantumApplicationLab/vitens/EPANET\"\n", + "\n", + "# set up network model\n", + "inp_file = \"../networks/Net0.inp\"\n", + "wn = wntr.network.WaterNetworkModel(inp_file)\n", + "\n", + "# plot network\n", + "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(name J1 D1 R1\n", + " 0 29.647692 19.167677 -9.338379e-07\n", + " 3600 29.647692 19.167677 -9.338379e-07,\n", + " name P1 P2\n", + " 0 0.05 0.05\n", + " 3600 0.05 0.05)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# define the classical EPANET simulator\n", + "sim = wntr.sim.EpanetSimulator(wn)\n", + "\n", + "# run the EPANET simulation\n", + "results_epanet = sim.run_sim()\n", + "\n", + "# save number of nodes and pipes\n", + "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", + "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", + "\n", + "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Solve water network with `QuantumEpanetSimulator` and VQLS \n", + "\n", + "We now solve the model using VQLS. In this example, we are **preconditioning** the initial linear system using *diagonal scaling* and also using a **mix of two classical optimizers**." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_5058/2415584772.py:13: DeprecationWarning: The class ``qiskit.primitives.estimator.Estimator`` is deprecated as of qiskit 1.2. It will be removed no earlier than 3 months after the release date. All implementations of the `BaseEstimatorV1` interface have been deprecated in favor of their V2 counterparts. The V2 alternative for the `Estimator` class is `StatevectorEstimator`.\n", + " estimator = Estimator()\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", + "Optimization terminated successfully.\n", + " Current function value: 0.000000\n", + " Iterations: 0\n", + " Function evaluations: 7\n", + " Gradient evaluations: 1\n", + "Optimization terminated successfully.\n", + " Current function value: 0.000000\n", + " Iterations: 0\n", + " Function evaluations: 7\n", + " Gradient evaluations: 1\n", + "Optimization terminated successfully.\n", + " Current function value: 0.000000\n", + " Iterations: 0\n", + " Function evaluations: 7\n", + " Gradient evaluations: 1\n", + "Quantum result 0.04998798668384552 within 0.024028122066551864% of classical result 0.05000000074505806\n", + "Quantum result 0.0499880313873291 within 0.023938715100722832% of classical result 0.05000000074505806\n", + "Quantum result 29.647850036621094 within 0.0005339705295874499% of classical result 29.64769172668457\n", + "Quantum result 19.17258644104004 within 0.025613512789788843% of classical result 19.16767692565918\n", + "Quantum result -9.338378959000693e-07 within 0.0% of classical result -9.338378959000693e-07\n" + ] + }, + { + "data": { + "text/plain": [ + "(name J1 D1 R1\n", + " 0 29.647850 19.172586 -9.338379e-07\n", + " 3600 29.647568 19.163879 -9.338379e-07,\n", + " name P1 P2\n", + " 0 0.049988 0.049988\n", + " 3600 0.050009 0.050009)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "from wntr_quantum.linear_solver import VQLS_SOLVER\n", + "from qiskit.primitives import Estimator\n", + "from qiskit.circuit.library import RealAmplitudes\n", + "from qiskit_algorithms.optimizers import CG, COBYLA, ADAM, SPSA, AQGD\n", + "from utils import compare_results \n", + "\n", + "n_qubits = 1\n", + "# define the ansatz\n", + "qc = RealAmplitudes(n_qubits, reps=5, entanglement=\"full\")\n", + "\n", + "# define estimator\n", + "estimator = Estimator()\n", + "\n", + "# define the solver\n", + "linear_solver = VQLS_SOLVER(\n", + " estimator=estimator,\n", + " ansatz=qc,\n", + " optimizer=[COBYLA(maxiter=500), CG(disp=True, maxiter=50)],\n", + " matrix_decomposition=\"symmetric\",\n", + " verbose=True,\n", + ")\n", + "\n", + "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", + "results_hhl = sim.run_sim(linear_solver=linear_solver)\n", + "\n", + "classical_res, quantum_res = compare_results(results_epanet, results_hhl)\n", + "\n", + "results_hhl.node[\"pressure\"], results_hhl.link[\"flowrate\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plot pressures and flow rates\n", + "\n", + "Let's check graphically the equivalence of the results." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.scatter(\n", + " classical_res[:n_pipes],\n", + " quantum_res[:n_pipes],\n", + " label=\"Flow rates\",\n", + " color=\"blue\",\n", + " marker=\"o\",\n", + ")\n", + "plt.scatter(\n", + " classical_res[n_pipes:],\n", + " quantum_res[n_pipes:],\n", + " label=\"Pressures\",\n", + " color=\"red\",\n", + " marker=\"s\",\n", + " facecolors=\"none\",\n", + ")\n", + "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\", label=\"\")\n", + "plt.xlabel(\"Classical results\")\n", + "plt.ylabel(\"Quantum results\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from utils import get_ape_from_pd_series\n", + "\n", + "wntr.graphics.plot_network(\n", + " wn,\n", + " node_attribute=get_ape_from_pd_series(\n", + " results_hhl.node[\"pressure\"].iloc[0], results_epanet.node[\"pressure\"].iloc[0]\n", + " ),\n", + " link_attribute=get_ape_from_pd_series(\n", + " results_hhl.link[\"flowrate\"].iloc[0],\n", + " results_epanet.link[\"flowrate\"].iloc[0],\n", + " ),\n", + " node_colorbar_label=\"Pressures\",\n", + " link_colorbar_label=\"Flows\",\n", + " node_size=50,\n", + " title=f\"{inp_file}: Absolute Percent Error\",\n", + " node_labels=False,\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "vitens_wntr_1", + "language": "python", + "name": "python3" + }, + "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.9.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/notebooks/qnr_vqls/noisy_vqls.ipynb b/docs/notebooks/newton_raphson/qnr_vqls_noise.ipynb similarity index 95% rename from docs/notebooks/qnr_vqls/noisy_vqls.ipynb rename to docs/notebooks/newton_raphson/qnr_vqls_noise.ipynb index a6fe20b..7e8159c 100644 --- a/docs/notebooks/qnr_vqls/noisy_vqls.ipynb +++ b/docs/notebooks/newton_raphson/qnr_vqls_noise.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Set up water network model\n", + "# Quantum Newton Raphson on Net0 with VQLS linear solver and noise model\n", "\n", - "In this example, we test the VQLS quantum solver with a noisy simulator. Let's start by setting up the model:" + "In this example, we use the VQLS solver to drive the Newton-Raphson algorithm to obtain the pressure and flow rate of a small network, Net0:" ] }, { @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -93,31 +93,12 @@ } ], "source": [ - "import sys\n", - "\n", "# define the classical EPANET simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", + "sim = wntr.sim.EpanetSimulator(wn)\n", "\n", "# run the EPANET simulation\n", "results_epanet = sim.run_sim()\n", "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "# load EPANET A and b matrices from temp\n", - "epanet_A, epanet_b = wntr_quantum.sim.epanet.load_epanet_matrix()\n", - "\n", - "# check the size of the A and b matrices\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "epanet_b_dim = epanet_b.shape[0]\n", - "print(f\"* Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"* Size of the b vector in EPANET simulator: {epanet_b_dim}\")\n", - "\n", "# save number of nodes and pipes\n", "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", @@ -125,71 +106,6 @@ "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define helper functions\n", - "\n", - "Before proceeding to the proper quantum solution of the water network model, let's define some helper functions. These will calculate the absolute percentage error (APE) between classical and quantum results, checking also that they are within a certain tolerance `TOL`%." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "TOL = 50 # => per cent\n", - "DELTA = 1.0e-12\n", - "\n", - "\n", - "def get_ape_from_pd_series(quantum_pd_series, classical_pd_series):\n", - " \"\"\"Helper function to evaluate absolute percentage error between classical and quantum results.\"\"\"\n", - " ape = (\n", - " abs(quantum_pd_series - classical_pd_series)\n", - " * 100.0\n", - " / abs(classical_pd_series + DELTA)\n", - " )\n", - " return ape\n", - "\n", - "\n", - "def compare_results(classical_result, quantum_result):\n", - " \"\"\"\n", - " Helper function that compares the classical and quantum simulation results.\n", - " \"\"\"\n", - " classical_data = []\n", - " quantum_data = []\n", - "\n", - " def check_ape(classical_value, quantum_value):\n", - " \"\"\"Helper function to check if the absolute percentage error between classical and quantum results is within TOL.\"\"\"\n", - " ape = (\n", - " abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA)\n", - " )\n", - " is_close_to_classical = ape <= TOL\n", - " if is_close_to_classical:\n", - " print(\n", - " f\"Quantum result {quantum_value} within {ape}% of classical result {classical_value}\"\n", - " )\n", - " quantum_data.append(quantum_value)\n", - " classical_data.append(classical_value)\n", - " return is_close_to_classical\n", - "\n", - " for link in classical_result.link[\"flowrate\"].columns:\n", - " classical_value = classical_result.link[\"flowrate\"][link].iloc[0]\n", - " quantum_value = quantum_result.link[\"flowrate\"][link].iloc[0]\n", - " message = f\"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " for node in classical_result.node[\"pressure\"].columns:\n", - " classical_value = classical_result.node[\"pressure\"][node].iloc[0]\n", - " quantum_value = quantum_result.node[\"pressure\"][node].iloc[0]\n", - " message = f\"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " return classical_data, quantum_data" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -201,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -354,8 +270,9 @@ "from qiskit_ibm_runtime import QiskitRuntimeService\n", "\n", "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", + "from utils import compare_results \n", "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", + "n_qubits = 1\n", "\n", "# create a noise model from a backend\n", "# the model is created from a real hardware\n", @@ -411,7 +328,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -436,6 +353,8 @@ } ], "source": [ + "from utils import get_ape_from_pd_series\n", + "\n", "wntr.graphics.plot_network(\n", " wn,\n", " node_attribute=get_ape_from_pd_series(\n", From bd0380c3a2164fd35be44efcadb31d56842658ce Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 09:29:46 +0100 Subject: [PATCH 04/14] added nb for 2loops --- docs/notebooks/networks/Net1Loops.inp | 139 ---- .../notebooks/networks/Net2Loops_modified.inp | 145 ---- docs/notebooks/networks/Net3Loops.inp | 152 ---- .../qnr_hhl.ipynb | 0 .../qnr_qubols.ipynb | 0 .../qnr_vqls.ipynb | 0 .../qnr_vqls_noise.ipynb | 0 .../utils.py | 0 .../qnr_qubols.ipynb} | 71 +- .../qnr_vqls.ipynb} | 73 +- .../newton_raphson_Net2Loops/utils.py | 46 ++ docs/notebooks/qnr_hhl/hhl_Net0.ipynb | 385 ---------- docs/notebooks/qnr_hhl/hhl_Net1Loop.ipynb | 379 ---------- .../notebooks/qnr_qubols/qubo_Net1Loops.ipynb | 384 ---------- docs/notebooks/qnr_vqls/vqls_Net1.ipynb | 681 ----------------- docs/notebooks/qnr_vqls/vqls_Net1Loops.ipynb | 374 ---------- .../qnr_vqls/vqls_Net2Loops_D-W.ipynb | 683 ------------------ .../notebooks/qnr_vqls/vqls_solver_Net1.ipynb | 379 ---------- .../qnr_vqls/vqls_solver_Net1Loops.ipynb | 307 -------- .../qnr_vqls/vqls_solver_Net2Loops.ipynb | 358 --------- .../qnr_vqls/vqls_solver_Net3Loops.ipynb | 352 --------- 21 files changed, 60 insertions(+), 4848 deletions(-) delete mode 100644 docs/notebooks/networks/Net1Loops.inp delete mode 100644 docs/notebooks/networks/Net2Loops_modified.inp delete mode 100644 docs/notebooks/networks/Net3Loops.inp rename docs/notebooks/{newton_raphson => newton_raphson_Net0}/qnr_hhl.ipynb (100%) rename docs/notebooks/{newton_raphson => newton_raphson_Net0}/qnr_qubols.ipynb (100%) rename docs/notebooks/{newton_raphson => newton_raphson_Net0}/qnr_vqls.ipynb (100%) rename docs/notebooks/{newton_raphson => newton_raphson_Net0}/qnr_vqls_noise.ipynb (100%) rename docs/notebooks/{newton_raphson => newton_raphson_Net0}/utils.py (100%) rename docs/notebooks/{qnr_qubols/qubo_Net2Loops.ipynb => newton_raphson_Net2Loops/qnr_qubols.ipynb} (95%) rename docs/notebooks/{qnr_vqls/vqls_Net2Loops.ipynb => newton_raphson_Net2Loops/qnr_vqls.ipynb} (98%) create mode 100644 docs/notebooks/newton_raphson_Net2Loops/utils.py delete mode 100644 docs/notebooks/qnr_hhl/hhl_Net0.ipynb delete mode 100644 docs/notebooks/qnr_hhl/hhl_Net1Loop.ipynb delete mode 100644 docs/notebooks/qnr_qubols/qubo_Net1Loops.ipynb delete mode 100644 docs/notebooks/qnr_vqls/vqls_Net1.ipynb delete mode 100644 docs/notebooks/qnr_vqls/vqls_Net1Loops.ipynb delete mode 100644 docs/notebooks/qnr_vqls/vqls_Net2Loops_D-W.ipynb delete mode 100644 docs/notebooks/qnr_vqls/vqls_solver_Net1.ipynb delete mode 100644 docs/notebooks/qnr_vqls/vqls_solver_Net1Loops.ipynb delete mode 100644 docs/notebooks/qnr_vqls/vqls_solver_Net2Loops.ipynb delete mode 100644 docs/notebooks/qnr_vqls/vqls_solver_Net3Loops.ipynb diff --git a/docs/notebooks/networks/Net1Loops.inp b/docs/notebooks/networks/Net1Loops.inp deleted file mode 100644 index f353a8a..0000000 --- a/docs/notebooks/networks/Net1Loops.inp +++ /dev/null @@ -1,139 +0,0 @@ -[TITLE] -shamir -- Bragalli, D'Ambrosio, Lee, Lodi, Toth (2008) - -[JUNCTIONS] -;ID Elev Demand Pattern - 2 150.00 27.77 ; - 3 160.00 27.77 ; - 4 155.00 33.33 ; - 5 150.00 75.00 ; - -[RESERVOIRS] -;ID Head Pattern - 1 210.00 ; - -[TANKS] -;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve Overflow - -[PIPES] -;ID Node1 Node2 Length Diameter Roughness MinorLoss Status - 1 1 2 1000.00 457.20 130.00 0.00 Open ; - 2 2 3 1000.00 203 130.00 0.00 Open ; - 3 2 4 1000.00 457 130.00 0.00 Open ; - 4 4 5 1000.00 153 130.00 0.00 Open ; - 5 3 5 1000.00 153 130.00 0.00 Open ; - - -[PUMPS] -;ID Node1 Node2 Parameters - -[VALVES] -;ID Node1 Node2 Diameter Type Setting MinorLoss - -[TAGS] - -[DEMANDS] -;Junction Demand Pattern Category - -[STATUS] -;ID Status/Setting - -[PATTERNS] -;ID Multipliers - -[CURVES] -;ID X-Value Y-Value - -[CONTROLS] - - - -[RULES] - - - -[ENERGY] - Global Efficiency 75 - Global Price 0 - Demand Charge 0 - -[EMITTERS] -;Junction Coefficient - -[QUALITY] -;Node InitQual - -[SOURCES] -;Node Type Quality Pattern - -[REACTIONS] -;Type Pipe/Tank Coefficient - - -[REACTIONS] - Order Bulk 1 - Order Tank 1 - Order Wall 1 - Global Bulk 0 - Global Wall 0 - Limiting Potential 0 - Roughness Correlation 0 - -[MIXING] -;Tank Model - -[TIMES] - Duration 0:00 - Hydraulic Timestep 1:00 - Quality Timestep 0:05 - Pattern Timestep 2:00 - Pattern Start 0:00 - Report Timestep 1:00 - Report Start 0:00 - Start ClockTime 12 am - Statistic NONE - -[REPORT] - Status Yes - Summary No - Page 0 - -[OPTIONS] - Units LPS - Headloss H-W - Specific Gravity 1.0 - Viscosity 1.0 - Trials 40 - Accuracy 0.001 - CHECKFREQ 2 - MAXCHECK 10 - DAMPLIMIT 0 - Unbalanced Continue 10 - Pattern 1 - Demand Multiplier 1.0 - Emitter Exponent 0.5 - Quality Chlorine mg/L - Diffusivity 1.0 - Tolerance 0.01 - -[COORDINATES] -;Node X-Coord Y-Coord -2 2000.000 3000.000 -3 1000.000 3000.000 -4 2000.000 2000.000 -5 1000.000 2000.000 -1 3000.000 3000.000 - -[VERTICES] -;Link X-Coord Y-Coord - -[LABELS] -;X-Coord Y-Coord Label & Anchor Node - -[BACKDROP] - DIMENSIONS 900.000 900.000 3100.000 3100.000 - UNITS None - FILE - OFFSET 0.00 0.00 - -[END] diff --git a/docs/notebooks/networks/Net2Loops_modified.inp b/docs/notebooks/networks/Net2Loops_modified.inp deleted file mode 100644 index feb0627..0000000 --- a/docs/notebooks/networks/Net2Loops_modified.inp +++ /dev/null @@ -1,145 +0,0 @@ -[TITLE] -modified network to reproduce https://doi.org/10.3390/w14060851 - -[JUNCTIONS] -;ID Elev Demand Pattern - 2 150.00 27.77 ; - 3 160.00 27.77 ; - 4 155.00 33.33 ; - 5 150.00 75.00 ; - 6 165.00 91.67 ; - 7 160.00 55.55 ; - -[RESERVOIRS] -;ID Head Pattern - 1 210.00 ; - -[TANKS] -;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve Overflow - -[PIPES] -;ID Node1 Node2 Length Diameter Roughness MinorLoss Status - 1 1 2 1000.00 457.20 130.00 0.00 Open ; - 2 2 3 1000.00 254.0 130.00 0.00 Open ; - 3 2 4 1000.00 406.4 130.00 0.00 Open ; - 4 4 5 1000.00 101.6 130.00 0.00 Open ; - 5 4 6 1000.00 406.40 130.00 0.00 Open ; - 6 6 7 1000.00 254.00 130.00 0.00 Open ; - 7 3 5 1000.00 254.0 130.00 0.00 Open ; - 8 5 7 1000.00 25.4 130.00 0.00 Open ; - -[PUMPS] -;ID Node1 Node2 Parameters - -[VALVES] -;ID Node1 Node2 Diameter Type Setting MinorLoss - -[TAGS] - -[DEMANDS] -;Junction Demand Pattern Category - -[STATUS] -;ID Status/Setting - -[PATTERNS] -;ID Multipliers - -[CURVES] -;ID X-Value Y-Value - -[CONTROLS] - - - -[RULES] - - - -[ENERGY] - Global Efficiency 75 - Global Price 0 - Demand Charge 0 - -[EMITTERS] -;Junction Coefficient - -[QUALITY] -;Node InitQual - -[SOURCES] -;Node Type Quality Pattern - -[REACTIONS] -;Type Pipe/Tank Coefficient - - -[REACTIONS] - Order Bulk 1 - Order Tank 1 - Order Wall 1 - Global Bulk 0 - Global Wall 0 - Limiting Potential 0 - Roughness Correlation 0 - -[MIXING] -;Tank Model - -[TIMES] - Duration 0:00 - Hydraulic Timestep 1:00 - Quality Timestep 0:05 - Pattern Timestep 2:00 - Pattern Start 0:00 - Report Timestep 1:00 - Report Start 0:00 - Start ClockTime 12 am - Statistic NONE - -[REPORT] - Status Yes - Summary No - Page 0 - -[OPTIONS] - Units LPS - Headloss H-W - Specific Gravity 1.0 - Viscosity 1.0 - Trials 40 - Accuracy 0.001 - CHECKFREQ 2 - MAXCHECK 10 - DAMPLIMIT 0 - Unbalanced Continue 10 - Pattern 1 - Demand Multiplier 1.0 - Emitter Exponent 0.5 - Quality Chlorine mg/L - Diffusivity 1.0 - Tolerance 0.01 - -[COORDINATES] -;Node X-Coord Y-Coord -2 2000.000 3000.000 -3 1000.000 3000.000 -4 2000.000 2000.000 -5 1000.000 2000.000 -6 2000.000 1000.000 -7 1000.000 1000.000 -1 3000.000 3000.000 - -[VERTICES] -;Link X-Coord Y-Coord - -[LABELS] -;X-Coord Y-Coord Label & Anchor Node - -[BACKDROP] - DIMENSIONS 900.000 900.000 3100.000 3100.000 - UNITS None - FILE - OFFSET 0.00 0.00 - -[END] diff --git a/docs/notebooks/networks/Net3Loops.inp b/docs/notebooks/networks/Net3Loops.inp deleted file mode 100644 index e02928d..0000000 --- a/docs/notebooks/networks/Net3Loops.inp +++ /dev/null @@ -1,152 +0,0 @@ -[TITLE] -shamir -- Bragalli, D'Ambrosio, Lee, Lodi, Toth (2008) - -[JUNCTIONS] -;ID Elev Demand Pattern - 2 150.00 27.77 ; - 3 160.00 27.77 ; - 4 155.00 33.33 ; - 5 150.00 75.00 ; - 6 165.00 91.67 ; - 7 160.00 55.55 ; - 8 170.00 12.66 ; - 9 175.00 12.66 ; - -[RESERVOIRS] -;ID Head Pattern - 1 210.00 ; - -[TANKS] -;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve Overflow - -[PIPES] -;ID Node1 Node2 Length Diameter Roughness MinorLoss Status - 1 1 2 1000.00 457.20 130.00 0.00 Open ; - 2 2 3 1000.00 203 130.00 0.00 Open ; - 3 2 4 1000.00 457 130.00 0.00 Open ; - 4 4 5 1000.00 153 130.00 0.00 Open ; - 5 4 6 1000.00 406.40 130.00 0.00 Open ; - 6 6 7 1000.00 254.00 130.00 0.00 Open ; - 7 3 5 1000.00 153 130.00 0.00 Open ; - 8 5 7 1000.00 153 130.00 0.00 Open ; - 9 6 8 1000.00 153 130.00 0.00 Open ; - 10 7 9 1000.00 153 130.00 0.00 Open ; - 11 8 9 1000.00 153 130.00 0.00 Open ; - -[PUMPS] -;ID Node1 Node2 Parameters - -[VALVES] -;ID Node1 Node2 Diameter Type Setting MinorLoss - -[TAGS] - -[DEMANDS] -;Junction Demand Pattern Category - -[STATUS] -;ID Status/Setting - -[PATTERNS] -;ID Multipliers - -[CURVES] -;ID X-Value Y-Value - -[CONTROLS] - - - -[RULES] - - - -[ENERGY] - Global Efficiency 75 - Global Price 0 - Demand Charge 0 - -[EMITTERS] -;Junction Coefficient - -[QUALITY] -;Node InitQual - -[SOURCES] -;Node Type Quality Pattern - -[REACTIONS] -;Type Pipe/Tank Coefficient - - -[REACTIONS] - Order Bulk 1 - Order Tank 1 - Order Wall 1 - Global Bulk 0 - Global Wall 0 - Limiting Potential 0 - Roughness Correlation 0 - -[MIXING] -;Tank Model - -[TIMES] - Duration 0:00 - Hydraulic Timestep 1:00 - Quality Timestep 0:05 - Pattern Timestep 2:00 - Pattern Start 0:00 - Report Timestep 1:00 - Report Start 0:00 - Start ClockTime 12 am - Statistic NONE - -[REPORT] - Status Yes - Summary No - Page 0 - -[OPTIONS] - Units LPS - Headloss H-W - Specific Gravity 1.0 - Viscosity 1.0 - Trials 40 - Accuracy 0.001 - CHECKFREQ 2 - MAXCHECK 10 - DAMPLIMIT 0 - Unbalanced Continue 10 - Pattern 1 - Demand Multiplier 1.0 - Emitter Exponent 0.5 - Quality Chlorine mg/L - Diffusivity 1.0 - Tolerance 0.01 - -[COORDINATES] -;Node X-Coord Y-Coord -2 2000.000 4000.000 -3 1000.000 4000.000 -4 2000.000 3000.000 -5 1000.000 3000.000 -6 2000.000 2000.000 -7 1000.000 2000.000 -8 2000.000 1000.000 -9 1000.000 1000.000 -1 3000.000 4000.000 - -[VERTICES] -;Link X-Coord Y-Coord - -[LABELS] -;X-Coord Y-Coord Label & Anchor Node - -[BACKDROP] - DIMENSIONS 900.000 900.000 3100.000 3100.000 - UNITS None - FILE - OFFSET 0.00 0.00 - -[END] diff --git a/docs/notebooks/newton_raphson/qnr_hhl.ipynb b/docs/notebooks/newton_raphson_Net0/qnr_hhl.ipynb similarity index 100% rename from docs/notebooks/newton_raphson/qnr_hhl.ipynb rename to docs/notebooks/newton_raphson_Net0/qnr_hhl.ipynb diff --git a/docs/notebooks/newton_raphson/qnr_qubols.ipynb b/docs/notebooks/newton_raphson_Net0/qnr_qubols.ipynb similarity index 100% rename from docs/notebooks/newton_raphson/qnr_qubols.ipynb rename to docs/notebooks/newton_raphson_Net0/qnr_qubols.ipynb diff --git a/docs/notebooks/newton_raphson/qnr_vqls.ipynb b/docs/notebooks/newton_raphson_Net0/qnr_vqls.ipynb similarity index 100% rename from docs/notebooks/newton_raphson/qnr_vqls.ipynb rename to docs/notebooks/newton_raphson_Net0/qnr_vqls.ipynb diff --git a/docs/notebooks/newton_raphson/qnr_vqls_noise.ipynb b/docs/notebooks/newton_raphson_Net0/qnr_vqls_noise.ipynb similarity index 100% rename from docs/notebooks/newton_raphson/qnr_vqls_noise.ipynb rename to docs/notebooks/newton_raphson_Net0/qnr_vqls_noise.ipynb diff --git a/docs/notebooks/newton_raphson/utils.py b/docs/notebooks/newton_raphson_Net0/utils.py similarity index 100% rename from docs/notebooks/newton_raphson/utils.py rename to docs/notebooks/newton_raphson_Net0/utils.py diff --git a/docs/notebooks/qnr_qubols/qubo_Net2Loops.ipynb b/docs/notebooks/newton_raphson_Net2Loops/qnr_qubols.ipynb similarity index 95% rename from docs/notebooks/qnr_qubols/qubo_Net2Loops.ipynb rename to docs/notebooks/newton_raphson_Net2Loops/qnr_qubols.ipynb index 9edc1ec..a0bcceb 100644 --- a/docs/notebooks/qnr_qubols/qubo_Net2Loops.ipynb +++ b/docs/notebooks/newton_raphson_Net2Loops/qnr_qubols.ipynb @@ -194,68 +194,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Define a helper function\n", - "\n", - "This function checks that the quantum results are within `TOL`% of those obtained classically. It also fills in lists containing the final values of pressures and flow rates obtained." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "TOL = 5 # => per cent\n", - "DELTA = 1.0e-12\n", - "\n", - "classical_res = []\n", - "quantum_res = []\n", - "\n", - "\n", - "def compare_results(classical_result, quantum_result):\n", - " \"\"\"\n", - " Helper function that compares the classical and quantum simulation results.\n", - " \"\"\"\n", - "\n", - " def calculate_differences(classical_value, quantum_value):\n", - " \"\"\"Helper function to evaluate percentage difference between classical and quantum results.\"\"\"\n", - " is_close_to_classical = (\n", - " abs(classical_value - quantum_value) / abs(classical_value + DELTA)\n", - " <= TOL / 100.0\n", - " )\n", - " if is_close_to_classical:\n", - " print(\n", - " f\"Quantum result {quantum_value} within {TOL}% of classical result {classical_value}\"\n", - " )\n", - " quantum_res.append(quantum_value)\n", - " classical_res.append(classical_value)\n", - " return is_close_to_classical\n", - "\n", - " for link in classical_result.link[\"flowrate\"].columns:\n", - " classical_value = classical_result.link[\"flowrate\"][link].iloc[0]\n", - " quantum_value = quantum_result.link[\"flowrate\"][link].iloc[0]\n", - " message = f\"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert calculate_differences(classical_value, quantum_value), message\n", - "\n", - " for node in classical_result.node[\"pressure\"].columns:\n", - " classical_value = classical_result.node[\"pressure\"][node].iloc[0]\n", - " quantum_value = quantum_result.node[\"pressure\"][node].iloc[0]\n", - " message = f\"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert calculate_differences(classical_value, quantum_value), message" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using QUBO solver (with daptative encoding)\n", + "### Solve model using QUBO solver (with adaptative encoding)\n", "\n", "Finally, we solve the problem once again but now using the QUBO quantum linear solver. The results are validated using the `compare_results` helper function defined above." ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -309,6 +255,7 @@ "source": [ "from quantum_newton_raphson.qubo_solver import QUBO_SOLVER\n", "from qubols.encodings import RangedEfficientEncoding\n", + "from utils import compare_results\n", "\n", "linear_solver = QUBO_SOLVER(\n", " encoding=RangedEfficientEncoding,\n", @@ -325,7 +272,7 @@ "results_qubos = sim.run_sim(linear_solver=linear_solver)\n", "\n", "# check that the results are within a certain tolerance from the classical epanet\n", - "compare_results(results_epanet, results_qubos)" + "results_classical, results_quantum = compare_results(results_epanet, results_qubos)" ] }, { @@ -339,7 +286,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -357,15 +304,15 @@ "import matplotlib.pyplot as plt\n", "\n", "plt.scatter(\n", - " classical_res[:n_pipes],\n", - " quantum_res[:n_pipes],\n", + " results_classical[:n_pipes],\n", + " results_quantum[:n_pipes],\n", " label=\"Flow rates\",\n", " color=\"blue\",\n", " marker=\"o\",\n", ")\n", "plt.scatter(\n", - " classical_res[n_pipes:],\n", - " quantum_res[n_pipes:],\n", + " results_classical[n_pipes:],\n", + " results_quantum[n_pipes:],\n", " label=\"Pressures\",\n", " color=\"red\",\n", " marker=\"s\",\n", diff --git a/docs/notebooks/qnr_vqls/vqls_Net2Loops.ipynb b/docs/notebooks/newton_raphson_Net2Loops/qnr_vqls.ipynb similarity index 98% rename from docs/notebooks/qnr_vqls/vqls_Net2Loops.ipynb rename to docs/notebooks/newton_raphson_Net2Loops/qnr_vqls.ipynb index 5438bbe..e68ea71 100644 --- a/docs/notebooks/qnr_vqls/vqls_Net2Loops.ipynb +++ b/docs/notebooks/newton_raphson_Net2Loops/qnr_vqls.ipynb @@ -250,71 +250,6 @@ "# pdt.assert_frame_equal(results_original_epanet.link[\"velocity\"], results_epanet.link[\"velocity\"])" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define a helper function\n", - "\n", - "Before proceeding to the proper quantum solution of the water network model, let's define a helper function. This function checks that the quantum results are within `TOL`% of those obtained classically. It also fills in lists containing the final values of pressures and flow rates obtained." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "TOL = 5 # => per cent\n", - "DELTA = 1.0e-12\n", - "\n", - "\n", - "def get_ape_from_pd_series(quantum_pd_series, classical_pd_series):\n", - " \"\"\"Helper function to evaluate absolute percentage error between classical and quantum results.\"\"\"\n", - " ape = (\n", - " abs(quantum_pd_series - classical_pd_series)\n", - " * 100.0\n", - " / abs(classical_pd_series + DELTA)\n", - " )\n", - " return ape\n", - "\n", - "\n", - "def compare_results(classical_result, quantum_result):\n", - " \"\"\"\n", - " Helper function that compares the classical and quantum simulation results.\n", - " \"\"\"\n", - " classical_data = []\n", - " quantum_data = []\n", - "\n", - " def check_ape(classical_value, quantum_value):\n", - " \"\"\"Helper function to check if the absolute percentage error between classical and quantum results is within TOL.\"\"\"\n", - " ape = (\n", - " abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA)\n", - " )\n", - " is_close_to_classical = ape <= TOL\n", - " if is_close_to_classical:\n", - " print(\n", - " f\"Quantum result {quantum_value} within {ape}% of classical result {classical_value}\"\n", - " )\n", - " quantum_data.append(quantum_value)\n", - " classical_data.append(classical_value)\n", - " return is_close_to_classical\n", - "\n", - " for link in classical_result.link[\"flowrate\"].columns:\n", - " classical_value = classical_result.link[\"flowrate\"][link].iloc[0]\n", - " quantum_value = quantum_result.link[\"flowrate\"][link].iloc[0]\n", - " message = f\"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " for node in classical_result.node[\"pressure\"].columns:\n", - " classical_value = classical_result.node[\"pressure\"][node].iloc[0]\n", - " quantum_value = quantum_result.node[\"pressure\"][node].iloc[0]\n", - " message = f\"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " return classical_data, quantum_data" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -326,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -412,8 +347,8 @@ "from qiskit.circuit.library import RealAmplitudes\n", "from qiskit.primitives import Estimator\n", "from qiskit_algorithms import optimizers as opt\n", - "\n", "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", + "from utils import compare_results\n", "\n", "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", "\n", @@ -473,7 +408,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -498,6 +433,8 @@ } ], "source": [ + "from utils import get_ape_from_pd_series\n", + "\n", "wntr.graphics.plot_network(\n", " wn,\n", " node_attribute=get_ape_from_pd_series(\n", diff --git a/docs/notebooks/newton_raphson_Net2Loops/utils.py b/docs/notebooks/newton_raphson_Net2Loops/utils.py new file mode 100644 index 0000000..86da3cc --- /dev/null +++ b/docs/notebooks/newton_raphson_Net2Loops/utils.py @@ -0,0 +1,46 @@ +TOL = 50 # => per cent +DELTA = 1.0e-12 + + +def get_ape_from_pd_series(quantum_pd_series, classical_pd_series): + """Helper function to evaluate absolute percentage error between classical and quantum results.""" + ape = ( + abs(quantum_pd_series - classical_pd_series) + * 100.0 + / abs(classical_pd_series + DELTA) + ) + return ape + + +def compare_results(classical_result, quantum_result): + """Helper function that compares the classical and quantum simulation results.""" + classical_data = [] + quantum_data = [] + + def check_ape(classical_value, quantum_value): + """Helper function to check if the absolute percentage error between classical and quantum results is within TOL.""" # noqa: E501 + ape = ( + abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA) + ) + is_close_to_classical = ape <= TOL + if is_close_to_classical: + print( + f"Quantum result {quantum_value} within {ape}% of classical result {classical_value}" + ) + quantum_data.append(quantum_value) + classical_data.append(classical_value) + return is_close_to_classical + + for link in classical_result.link["flowrate"].columns: + classical_value = classical_result.link["flowrate"][link].iloc[0] + quantum_value = quantum_result.link["flowrate"][link].iloc[0] + message = f"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}" + assert check_ape(classical_value, quantum_value), message + + for node in classical_result.node["pressure"].columns: + classical_value = classical_result.node["pressure"][node].iloc[0] + quantum_value = quantum_result.node["pressure"][node].iloc[0] + message = f"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}" + assert check_ape(classical_value, quantum_value), message + + return classical_data, quantum_data # noqa: W292 diff --git a/docs/notebooks/qnr_hhl/hhl_Net0.ipynb b/docs/notebooks/qnr_hhl/hhl_Net0.ipynb deleted file mode 100644 index 9bbbf85..0000000 --- a/docs/notebooks/qnr_hhl/hhl_Net0.ipynb +++ /dev/null @@ -1,385 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net0.inp`. Let's start by setting up the model:|" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlv0lEQVR4nO3dfXDU9YHH8c8mSx5IDAESECsEghhCUEMSTEKSzfMuFq1Tezr1oT7V8x6860wfZnRKb46O1dbTTp3qnC22pbbW3jjVG6diDXkiT4QkmBChQASRBwWKiQQa8pz87o/WnDEBAiT57v5+79eMf2R3s/vZrdO83f3trsuyLEsAAMCxgkwPAAAAZhEDAAA4HDEAAIDDEQMAADgcMQAAgMMRAwAAOBwxAACAwxEDAAA4HDEAAIDDEQNAALv//vsVGRlpeoZf+fWvfy2Xy6VDhw6ZngIEDGIAmKBXXnlFzz77rOkZU+7b3/62VqxYIen//7CGhYXpo48+GnPZvLw8rVy58pJu50KP5y9/+UslJiYqLCxMy5Yt03PPPXdJtwPgwogBYIKcEgObN2/WunXrRp3W19enH/3oR5N6O+d7PH/+85/roYceUlJSkp577jllZmbqG9/4hp566qkLXu/XvvY19fT0KC4ublL3AnZGDAAB6OzZs1NyvQcPHlRbW9uYGEhOTtaLL76oY8eOTcntflZPT4/Wr1+vdevW6Q9/+IP+8R//Ub/5zW9099136/HHH9epU6fO+/vBwcEKCwuTy+Wa8q2AXRADsK0NGzbI5XLpwIEDuv/++xUdHa1Zs2bpgQceUHd396jLvvzyy0pNTVV4eLjmzJmjr371qzp69OjI+Xl5edq8ebMOHz4sl8sll8ulxYsXy7IsxcTE6Fvf+tbIZYeHhxUdHa3g4GB1dnaOnP7UU0/J7Xarq6tr5LSKigrl5OQoIiJC0dHRuvXWW7V3795x78eePXt01113afbs2crOzj7n/d65c6diY2OVl5c3cls7duyQz+dTTEyMwsPDtWTJEj344INjfnfz5s2aNWvWmOv/7ne/q6GhoQk/O3Cpj6ckVVZWqqOjQ//6r/866jofeeQRnT17Vps3bz7vbY93zMDixYt18803q7a2VjfeeKPCwsIUHx+v3/zmN+P+bnV1tf7pn/5Jc+fOVVRUlO69994LRggQyNymBwBT7Y477tCSJUv0wx/+UM3NzfrFL36hefPmjTzl/MQTT+g//uM/dMcdd+ihhx7Sxx9/rOeee04ej0ctLS2Kjo7W+vXrdfr0aX344Yf6yU9+IkmKjIyUy+VSVlaWqqurR27v3Xff1enTpxUUFKS6urqR/8quqanRqlWrRg74Kysr00033aT4+Hht2LBBPT09eu6555SVlaXm5uaRP46fuv3227Vs2TI9+eSTOtc3jzc1Ncnn8yktLU1vvPGGwsPDdfLkSXm9XsXGxuqxxx5TdHS0Dh06pNdff33M77/11lsqLi6W2z36/xqWLFmie++9Vy+++KIee+wxXXXVVed8vC/n8ZSklpYWSVJaWtqo601NTVVQUJBaWlp0zz33nPP2z+XAgQP6h3/4B33961/Xfffdp1/96le6//77lZqaqqSkpFGX/bd/+zdFR0drw4YNamtr0wsvvKDDhw9r69atPOMAe7IAm/rP//xPS5L14IMPjjr9y1/+sjV37lzLsizr0KFDVnBwsPXEE0+MusyuXbsst9s96vR169ZZcXFxY27n6aeftoKDg60zZ85YlmVZP/3pT624uDjrxhtvtB599FHLsixraGjIio6Otr75zW+O/F5ycrI1b948q6OjY+S01tZWKygoyLr33nvH3I8777xzzG3fd999VkREhGVZllVbW2tFRUVZ69ats3p7e0cu87//+7+WJKupqem8j9fZs2etsLAwa9OmTSOnbdq0aeR333//fcvtdlvf+MY3Rs7Pzc21kpKSRn6ejMfzkUcesYKDg8fdGBsba331q1897/34dPMHH3wwclpcXJwlyaqurh457eTJk1ZoaKj17W9/e8zvpqamWv39/SOn/9d//ZclyXrjjTfOe9tAoOJlAtjeP//zP4/6OScnRx0dHTpz5oxef/11DQ8P64477lB7e/vIP1deeaWWLVumysrKC15/Tk6OhoaGtG3bNkl/ewYgJydHOTk5qqmpkSTt3r1bnZ2dysnJkSQdP35cO3fu1P333685c+aMXNf111+v4uJivfXWWxe8H59VWVkpn8+nwsJCvf766woNDR05Lzo6WpL05ptvamBg4JzXUVFRob6+Pt10003jnh8fH6+vfe1r2rhxo44fPz7uZSbj8ezp6VFISMi454WFhamnp+eC1zGeFStWjDz+khQbG6uEhAQdPHhwzGUffvhhzZgx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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "os.environ[\"EPANET_TMP\"] = \"/home/nico/.epanet_quantum\"\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/home/nico/QuantumApplicationLab/vitens/EPANET\"\n", - "# set up network model\n", - "inp_file = \"networks/Net0.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "\n", - "# print options\n", - "# dict(wn.options.hydraulic)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Epanet simulator\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. Note that, by default, `QuantumEpanetSimulator` uses a classical `CholeskySolver` to iteratively solve the linear problem." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Your EPANET quantum path: /home/nico/QuantumApplicationLab/vitens/EPANET\n", - "Your EPANET temp dir: /home/nico/.epanet_quantum\n", - "\n", - "Size of the Jacobian in EPANET simulator: 2\n", - "Size of the b vector in EPANET simulator: 2\n" - ] - }, - { - "data": { - "text/plain": [ - "(name J1 D1 R1\n", - " 0 29.647690 19.167675 -9.338379e-07\n", - " 3600 29.647692 19.167675 -9.338379e-07,\n", - " name P1 P2\n", - " 0 0.05 0.05\n", - " 3600 0.05 0.05)" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import sys\n", - "\n", - "# define the classical EPANET simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "\n", - "# run the EPANET simulation\n", - "results_epanet = sim.run_sim()\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "util_path = os.path.join(epanet_path, \"src/py/\")\n", - "sys.path.append(util_path)\n", - "\n", - "from quantum_linsolve import load_json_data\n", - "\n", - "epanet_A, epanet_b = load_json_data(os.path.join(epanet_tmp, \"smat.json\"))\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define a helper function\n", - "\n", - "Before proceeding to the proper quantum solution of the water network model, let's define a helper function. This function checks that the quantum results are within `TOL`% of those obtained classically. It also fills in lists containing the final values of pressures and flow rates obtained." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "TOL = 50 # => per cent\n", - "DELTA = 1.0e-12\n", - "\n", - "\n", - "def get_ape_from_pd_series(quantum_pd_series, classical_pd_series):\n", - " \"\"\"Helper function to evaluate absolute percentage error between classical and quantum results.\"\"\"\n", - " ape = (\n", - " abs(quantum_pd_series - classical_pd_series)\n", - " * 100.0\n", - " / abs(classical_pd_series + DELTA)\n", - " )\n", - " return ape\n", - "\n", - "\n", - "def compare_results(classical_result, quantum_result):\n", - " \"\"\"\n", - " Helper function that compares the classical and quantum simulation results.\n", - " \"\"\"\n", - " classical_data = []\n", - " quantum_data = []\n", - "\n", - " def check_ape(classical_value, quantum_value):\n", - " \"\"\"Helper function to check if the absolute percentage error between classical and quantum results is within TOL.\"\"\"\n", - " ape = (\n", - " abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA)\n", - " )\n", - " is_close_to_classical = ape <= TOL\n", - " if is_close_to_classical:\n", - " print(\n", - " f\"Quantum result {quantum_value} within {ape}% of classical result {classical_value}\"\n", - " )\n", - " quantum_data.append(quantum_value)\n", - " classical_data.append(classical_value)\n", - " return is_close_to_classical\n", - "\n", - " for link in classical_result.link[\"flowrate\"].columns:\n", - " classical_value = classical_result.link[\"flowrate\"][link].iloc[0]\n", - " quantum_value = quantum_result.link[\"flowrate\"][link].iloc[0]\n", - " message = f\"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " for node in classical_result.node[\"pressure\"].columns:\n", - " classical_value = classical_result.node[\"pressure\"][node].iloc[0]\n", - " quantum_value = quantum_result.node[\"pressure\"][node].iloc[0]\n", - " message = f\"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " return classical_data, quantum_data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve water network with `QuantumEpanetSimulator` and VQLS \n", - "\n", - "We now solve the model using VQLS. In this example, we are **preconditioning** the initial linear system using *diagonal scaling* and also using a **mix of two classical optimizers**." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Quantum result 0.05003536120057106 within 0.07054196990023498% of classical result 0.05000009015202522\n", - "Quantum result 0.05003482848405838 within 0.06965547696130027% of classical result 0.05000000074505806\n", - "Quantum result 29.64763641357422 within 0.0001801346480760787% of classical result 29.647689819335938\n", - "Quantum result 19.16619110107422 within 0.007741769593393499% of classical result 19.167675018310547\n", - "Quantum result -9.338378959000693e-07 within 0.0% of classical result -9.338378959000693e-07\n" - ] - }, - { - "data": { - "text/plain": [ - "(name J1 D1 R1\n", - " 0 29.647636 19.166191 -9.338379e-07\n", - " 3600 29.647129 19.150408 -9.338379e-07,\n", - " name P1 P2\n", - " 0 0.050035 0.050035\n", - " 3600 0.050042 0.050042)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "from qiskit.primitives import Estimator\n", - "from quantum_newton_raphson.hhl_solver import HHL_SOLVER\n", - "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = HHL_SOLVER(\n", - " estimator=estimator,\n", - " # preconditioner=\"diagonal_scaling\",\n", - ")\n", - "\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "results_hhl = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "classical_res, quantum_res = compare_results(results_epanet, results_hhl)\n", - "\n", - "results_hhl.node[\"pressure\"], results_hhl.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot pressures and flow rates\n", - "\n", - "Let's check graphically the equivalence of the results." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.scatter(\n", - " classical_res[:n_pipes],\n", - " quantum_res[:n_pipes],\n", - " label=\"Flow rates\",\n", - " color=\"blue\",\n", - " marker=\"o\",\n", - ")\n", - "plt.scatter(\n", - " classical_res[n_pipes:],\n", - " quantum_res[n_pipes:],\n", - " label=\"Pressures\",\n", - " color=\"red\",\n", - " marker=\"s\",\n", - " facecolors=\"none\",\n", - ")\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\", label=\"\")\n", - "plt.xlabel(\"Classical results\")\n", - "plt.ylabel(\"Quantum results\")\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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2zIYDELnzp2FiIgIcV3V30VSUpLR61944QXBzs5OKCgoENe1atVK6N69u9X34E4ALC7/+c9/xHbdu3cXAAjz5883ev3p06cFAIKHh4eQm5trtM0Wn0dE9+uebqKZ3sPr2rUrrly5Il6u+/7772EwGDB48GDk5+eLi06nQ0REBDZv3nzXY3Tt2hWVlZXYuXMngNtn7l27dkXXrl2xfft2AMCRI0dQUFCArl27AgAuX76MgwcPYtSoUfD29hb31bZtWzzyyCNYt27dXXO50+bNm5GcnIyePXvi+++/h5OTk7hNq9UCANasWYPy8nKL+9i0aRNu3bqF3r17m93evHlzPPPMM1iwYAEuX75sto0t3s+SkhKL9ws1Gg1KSkruug9zYmJixPcfAHx9fREZGYlTp05Vazt27Fg4ODiIP//f//0f7O3tjX4vo0aNgiAINTqbr6iowIoVKzBkyBDxisDDDz8MPz8/i53yxo0bZ/TzhAkTAECMoer3+uOPP8JgMJjdx7p166DT6TBs2DBxnYODA5577jncuHEDW7duvWvs90oQBKxatQr9+vWDIAhGfw/JyckoLCzE/v3777qf9evXw9fXF76+voiNjcXKlSvxzDPP4L333runY4wcORLOzs7izwcOHMDp06fx/PPPi+9plarf1dWrV7Fp0yYMHjwY169fF49x5coVJCcnIysrq9qolLFjxxrd4qj6nDh79mxt30oj/fv3x4YNG6otDz30kFE7JycnjB492uw+Bg0aBF9fX/FnW38eEd2re7p036xZM6OfqzpxXbt2DR4eHsjKyoIgCIiIiDD7+js/7C1p3749XFxcsH37diQnJ2P79u144403oNPpMHfuXJSWlooFv+peVtU/9sjIyGr7i46Oxn//+99qHVzCwsLMHr+0tBR9+vRBfHw8vv3222qX3bt3745BgwbhjTfewEcffYQePXogJSUFTz31lNEXgrVr16JDhw5WLx9OnToV33zzDd59991q9y8B2OT9dHZ2RllZmcVc7/yQrg3TvwXg9t+D6b13ANXid3NzQ0BAwD2PzV+/fj3y8vLQqVMnZGdni+sfeugh/Oc//8F7771XrUOYaQzh4eFQq9ViDEOGDMEXX3yBZ599FpMnT0bPnj0xcOBAPPHEE+K+zp49i4iIiGr7jo6OFrfXlby8PBQUFGDBggVYsGCB2Ta5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fPBBwdnZWfDw8BD69esnHDt2rEa5CILx8Loq+fn5QkxMjKDT6YSsrCxh//79wrBhw4RmzZoJTk5Ogp+fn9C3b19h7969giAIQkFBgWBvby98++231fZ/5/A6c8cGYDS8root3s8FCxYIkZGRgqOjoxAeHi589NFHRsOV7nxvNm/eXC1m0+F1ffr0qRZn9+7djYY3Vb1269atwtixYwUvLy/Bzc1NGD58uNGwozvbWhtel5OTI9jb2wvPPPOMxTY3b94UXFxchAEDBhjldOzYMeGJJ54Q3N3dBS8vL2H8+PFCSUmJ+LqNGzcK/fv3FwIDAwVHR0chMDBQGDZsmHDixIlqMYwePVrw8fERHB0dhTZt2piNGSbD6wTh9hDA1q1bC46OjkJkZKSwZMkSs8PrMjIyhG7dugnOzs4CAKOhdjk5OcK4ceOE4OBgwcHBQdDpdELPnj2FBQsWWHxPqlj6vZmqyTGqhtetXLnS7D5+++034ZFHHhHc3d0FV1dXoW3btsLcuXON2pw8eVIYMWKEoNPpBAcHByEoKEjo27ev8N1334ltLP2bqTr+nX+rer1e6NOnj+Du7i4AuOtQO1gZXnfna02HvVapGl43c+ZMs/u/388jovulEgTOylAXvv32WwwfPhz5+fnw9PSUOhxJffXVVxg9ejT27NlTo9sYRERkO41nMupGRqvVYs6cOYov8kREJC0+1KaOPProo1KHQERExDN6IiIiOeM9eiIiIhnjGT0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYzZSx1AbVRUGHB430VcvXIT7h5OiOvYFE5OjSoFIiKietVoqmT61tNY/tU+FFwrEde5uDri8SfboHdKjISRERERNVwqQRAEqYO4m907zuKTD7bBUqRDRrbHYwNa1W9QREREjUCDv0cvCAJWfnPAYpEHgB+//QOlJeX1FxQREVEj0eALfdbxPOTqr1ttU1pSjn2/n6+niIiI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FJ28hGP//h5nVm5BWWExPCOD0XJMH7RM7Q07J0epwyO6byz09SgjMw/vzNyGkpLyatuio3zx2ivd4ehoL0FkRMqUs+MINvSZgvKi4mrb/Lu1xaO/vAt7ZycJIiOyHV66rycVFZX4cM4Os0UeAI5n5GHFd0fqOSoi5aosK8fmJ98wW+QBIGfbYRyY9lX9BkVUB1jo68muPRdQUFBqtc2mLadQVlZRTxERKdvZ77ejRH/VapsTC39BRcmteoqIqG7wOnE9yTyRf9c2xcVl2Lv7AgID3OshIiJly/5l313blF27jsLM82gS16IeIiKqGyz09UStVtWo3aeztkPNXhNEdS78yDkE16Cdyo4XPqlxY6GvJ23b6LAuzfq0t54eTnh1RlKNvxQQ0b27skWHw2OOWW3j0tRXfD4FUWPFQl9P4toGICjQAxcvFVls0/exKDSP8KnHqIiUKySsJ87OWobCjHMW28SMT4HajsNeqXHjNal6olar8PKLXeHTxMXs9m5dQtGvT1Q9R0WkXCq1Gj1/fBOuzfzMbg9/5hG0fmlwPUdFZHscR1/Pbt4sx7bfTmPn7+dQUlKBgAB3JD0cjratdVKHRqRIZUXFyP56A858uxnl10vg0bIpIsf0QWBSvNShEdkECz0REZGM8dI9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJ2P8DWqY9l3i6VNUAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=get_ape_from_pd_series(\n", - " results_hhl.node[\"pressure\"].iloc[0], results_epanet.node[\"pressure\"].iloc[0]\n", - " ),\n", - " link_attribute=get_ape_from_pd_series(\n", - " results_hhl.link[\"flowrate\"].iloc[0],\n", - " results_epanet.link[\"flowrate\"].iloc[0],\n", - " ),\n", - " node_colorbar_label=\"Pressures\",\n", - " link_colorbar_label=\"Flows\",\n", - " node_size=50,\n", - " title=f\"{inp_file}: Absolute Percent Error\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens_wntr_1", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/qnr_hhl/hhl_Net1Loop.ipynb b/docs/notebooks/qnr_hhl/hhl_Net1Loop.ipynb deleted file mode 100644 index c0ea5f5..0000000 --- a/docs/notebooks/qnr_hhl/hhl_Net1Loop.ipynb +++ /dev/null @@ -1,379 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net0.inp`. Let's start by setting up the model:|" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlv0lEQVR4nO3dfXDU9YHH8c8mSx5IDAESECsEghhCUEMSTEKSzfMuFq1Tezr1oT7V8x6860wfZnRKb46O1dbTTp3qnC22pbbW3jjVG6diDXkiT4QkmBChQASRBwWKiQQa8pz87o/WnDEBAiT57v5+79eMf2R3s/vZrdO83f3trsuyLEsAAMCxgkwPAAAAZhEDAAA4HDEAAIDDEQMAADgcMQAAgMMRAwAAOBwxAACAwxEDAAA4HDEAAIDDEQNAALv//vsVGRlpeoZf+fWvfy2Xy6VDhw6ZngIEDGIAmKBXXnlFzz77rOkZU+7b3/62VqxYIen//7CGhYXpo48+GnPZvLw8rVy58pJu50KP5y9/+UslJiYqLCxMy5Yt03PPPXdJtwPgwogBYIKcEgObN2/WunXrRp3W19enH/3oR5N6O+d7PH/+85/roYceUlJSkp577jllZmbqG9/4hp566qkLXu/XvvY19fT0KC4ublL3AnZGDAAB6OzZs1NyvQcPHlRbW9uYGEhOTtaLL76oY8eOTcntflZPT4/Wr1+vdevW6Q9/+IP+8R//Ub/5zW9099136/HHH9epU6fO+/vBwcEKCwuTy+Wa8q2AXRADsK0NGzbI5XLpwIEDuv/++xUdHa1Zs2bpgQceUHd396jLvvzyy0pNTVV4eLjmzJmjr371qzp69OjI+Xl5edq8ebMOHz4sl8sll8ulxYsXy7IsxcTE6Fvf+tbIZYeHhxUdHa3g4GB1dnaOnP7UU0/J7Xarq6tr5LSKigrl5OQoIiJC0dHRuvXWW7V3795x78eePXt01113afbs2crOzj7n/d65c6diY2OVl5c3cls7duyQz+dTTEyMwsPDtWTJEj344INjfnfz5s2aNWvWmOv/7ne/q6GhoQk/O3Cpj6ckVVZWqqOjQ//6r/866jofeeQRnT17Vps3bz7vbY93zMDixYt18803q7a2VjfeeKPCwsIUHx+v3/zmN+P+bnV1tf7pn/5Jc+fOVVRUlO69994LRggQyNymBwBT7Y477tCSJUv0wx/+UM3NzfrFL36hefPmjTzl/MQTT+g//uM/dMcdd+ihhx7Sxx9/rOeee04ej0ctLS2Kjo7W+vXrdfr0aX344Yf6yU9+IkmKjIyUy+VSVlaWqqurR27v3Xff1enTpxUUFKS6urqR/8quqanRqlWrRg74Kysr00033aT4+Hht2LBBPT09eu6555SVlaXm5uaRP46fuv3227Vs2TI9+eSTOtc3jzc1Ncnn8yktLU1vvPGGwsPDdfLkSXm9XsXGxuqxxx5TdHS0Dh06pNdff33M77/11lsqLi6W2z36/xqWLFmie++9Vy+++KIee+wxXXXVVed8vC/n8ZSklpYWSVJaWtqo601NTVVQUJBaWlp0zz33nPP2z+XAgQP6h3/4B33961/Xfffdp1/96le6//77lZqaqqSkpFGX/bd/+zdFR0drw4YNamtr0wsvvKDDhw9r69atPOMAe7IAm/rP//xPS5L14IMPjjr9y1/+sjV37lzLsizr0KFDVnBwsPXEE0+MusyuXbsst9s96vR169ZZcXFxY27n6aeftoKDg60zZ85YlmVZP/3pT624uDjrxhtvtB599FHLsixraGjIio6Otr75zW+O/F5ycrI1b948q6OjY+S01tZWKygoyLr33nvH3I8777xzzG3fd999VkREhGVZllVbW2tFRUVZ69ats3p7e0cu87//+7+WJKupqem8j9fZs2etsLAwa9OmTSOnbdq0aeR333//fcvtdlvf+MY3Rs7Pzc21kpKSRn6ejMfzkUcesYKDg8fdGBsba331q1897/34dPMHH3wwclpcXJwlyaqurh457eTJk1ZoaKj17W9/e8zvpqamWv39/SOn/9d//ZclyXrjjTfOe9tAoOJlAtjeP//zP4/6OScnRx0dHTpz5oxef/11DQ8P64477lB7e/vIP1deeaWWLVumysrKC15/Tk6OhoaGtG3bNkl/ewYgJydHOTk5qqmpkSTt3r1bnZ2dysnJkSQdP35cO3fu1P333685c+aMXNf111+v4uJivfXWWxe8H59VWVkpn8+nwsJCvf766woNDR05Lzo6WpL05ptvamBg4JzXUVFRob6+Pt10003jnh8fH6+vfe1r2rhxo44fPz7uZSbj8ezp6VFISMi454WFhamnp+eC1zGeFStWjDz+khQbG6uEhAQdPHhwzGUffvhhzZgx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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "os.environ[\"EPANET_TMP\"] = \"/home/nico/.epanet_quantum\"\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/home/nico/QuantumApplicationLab/vitens/EPANET\"\n", - "\n", - "# set up network model\n", - "inp_file = \"networks/Net1Loop.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "\n", - "# print options\n", - "# dict(wn.options.hydraulic)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Epanet simulator\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. Note that, by default, `QuantumEpanetSimulator` uses a classical `CholeskySolver` to iteratively solve the linear problem." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Your EPANET quantum path: /home/nico/QuantumApplicationLab/vitens/EPANET\n", - "Your EPANET temp dir: /home/nico/.epanet_quantum\n", - "\n", - "Size of the Jacobian in EPANET simulator: 2\n", - "Size of the b vector in EPANET simulator: 2\n" - ] - }, - { - "data": { - "text/plain": [ - "(name J1 D1 R1\n", - " 0 29.647690 19.167675 -9.338379e-07\n", - " 3600 29.647692 19.167675 -9.338379e-07,\n", - " name P1 P2\n", - " 0 0.05 0.05\n", - " 3600 0.05 0.05)" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import sys\n", - "\n", - "# define the classical EPANET simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "\n", - "# run the EPANET simulation\n", - "results_epanet = sim.run_sim()\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "util_path = os.path.join(epanet_path, \"src/py/\")\n", - "sys.path.append(util_path)\n", - "\n", - "from quantum_linsolve import load_json_data\n", - "\n", - "epanet_A, epanet_b = load_json_data(os.path.join(epanet_tmp, \"smat.json\"))\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define a helper function\n", - "\n", - "Before proceeding to the proper quantum solution of the water network model, let's define a helper function. This function checks that the quantum results are within `TOL`% of those obtained classically. It also fills in lists containing the final values of pressures and flow rates obtained." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "TOL = 50 # => per cent\n", - "DELTA = 1.0e-12\n", - "\n", - "\n", - "def get_ape_from_pd_series(quantum_pd_series, classical_pd_series):\n", - " \"\"\"Helper function to evaluate absolute percentage error between classical and quantum results.\"\"\"\n", - " ape = (\n", - " abs(quantum_pd_series - classical_pd_series)\n", - " * 100.0\n", - " / abs(classical_pd_series + DELTA)\n", - " )\n", - " return ape\n", - "\n", - "\n", - "def compare_results(classical_result, quantum_result):\n", - " \"\"\"\n", - " Helper function that compares the classical and quantum simulation results.\n", - " \"\"\"\n", - " classical_data = []\n", - " quantum_data = []\n", - "\n", - " def check_ape(classical_value, quantum_value):\n", - " \"\"\"Helper function to check if the absolute percentage error between classical and quantum results is within TOL.\"\"\"\n", - " ape = (\n", - " abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA)\n", - " )\n", - " is_close_to_classical = ape <= TOL\n", - " if is_close_to_classical:\n", - " print(\n", - " f\"Quantum result {quantum_value} within {ape}% of classical result {classical_value}\"\n", - " )\n", - " quantum_data.append(quantum_value)\n", - " classical_data.append(classical_value)\n", - " return is_close_to_classical\n", - "\n", - " for link in classical_result.link[\"flowrate\"].columns:\n", - " classical_value = classical_result.link[\"flowrate\"][link].iloc[0]\n", - " quantum_value = quantum_result.link[\"flowrate\"][link].iloc[0]\n", - " message = f\"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " for node in classical_result.node[\"pressure\"].columns:\n", - " classical_value = classical_result.node[\"pressure\"][node].iloc[0]\n", - " quantum_value = quantum_result.node[\"pressure\"][node].iloc[0]\n", - " message = f\"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " return classical_data, quantum_data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve water network with `QuantumEpanetSimulator` and VQLS \n", - "\n", - "We now solve the model using VQLS. In this example, we are **preconditioning** the initial linear system using *diagonal scaling* and also using a **mix of two classical optimizers**." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Quantum result 0.05003536120057106 within 0.07054196990023498% of classical result 0.05000009015202522\n", - "Quantum result 0.05003482848405838 within 0.06965547696130027% of classical result 0.05000000074505806\n", - "Quantum result 29.64763641357422 within 0.0001801346480760787% of classical result 29.647689819335938\n", - "Quantum result 19.16619110107422 within 0.007741769593393499% of classical result 19.167675018310547\n", - "Quantum result -9.338378959000693e-07 within 0.0% of classical result -9.338378959000693e-07\n" - ] - }, - { - "data": { - "text/plain": [ - "(name J1 D1 R1\n", - " 0 29.647636 19.166191 -9.338379e-07\n", - " 3600 29.647129 19.150408 -9.338379e-07,\n", - " name P1 P2\n", - " 0 0.050035 0.050035\n", - " 3600 0.050042 0.050042)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "from qiskit.primitives import Estimator\n", - "from quantum_newton_raphson.hhl_solver import HHL_SOLVER\n", - "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = HHL_SOLVER(\n", - " estimator=estimator,\n", - " # preconditioner=\"diagonal_scaling\",\n", - ")\n", - "\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "results_hhl = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "classical_res, quantum_res = compare_results(results_epanet, results_hhl)\n", - "\n", - "results_hhl.node[\"pressure\"], results_hhl.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot pressures and flow rates\n", - "\n", - "Let's check graphically the equivalence of the results." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.scatter(\n", - " classical_res[:n_pipes],\n", - " quantum_res[:n_pipes],\n", - " label=\"Flow rates\",\n", - " color=\"blue\",\n", - " marker=\"o\",\n", - ")\n", - "plt.scatter(\n", - " classical_res[n_pipes:],\n", - " quantum_res[n_pipes:],\n", - " label=\"Pressures\",\n", - " color=\"red\",\n", - " marker=\"s\",\n", - " facecolors=\"none\",\n", - ")\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\", label=\"\")\n", - "plt.xlabel(\"Classical results\")\n", - "plt.ylabel(\"Quantum results\")\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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2zIYDELnzp2FiIgIcV3V30VSUpLR61944QXBzs5OKCgoENe1atVK6N69u9X34E4ALC7/+c9/xHbdu3cXAAjz5883ev3p06cFAIKHh4eQm5trtM0Wn0dE9+uebqKZ3sPr2rUrrly5Il6u+/7772EwGDB48GDk5+eLi06nQ0REBDZv3nzXY3Tt2hWVlZXYuXMngNtn7l27dkXXrl2xfft2AMCRI0dQUFCArl27AgAuX76MgwcPYtSoUfD29hb31bZtWzzyyCNYt27dXXO50+bNm5GcnIyePXvi+++/h5OTk7hNq9UCANasWYPy8nKL+9i0aRNu3bqF3r17m93evHlzPPPMM1iwYAEuX75sto0t3s+SkhKL9ws1Gg1KSkruug9zYmJixPcfAHx9fREZGYlTp05Vazt27Fg4ODiIP//f//0f7O3tjX4vo0aNgiAINTqbr6iowIoVKzBkyBDxisDDDz8MPz8/i53yxo0bZ/TzhAkTAECMoer3+uOPP8JgMJjdx7p166DT6TBs2DBxnYODA5577jncuHEDW7duvWvs90oQBKxatQr9+vWDIAhGfw/JyckoLCzE/v3777qf9evXw9fXF76+voiNjcXKlSvxzDPP4L333runY4wcORLOzs7izwcOHMDp06fx/PPPi+9plarf1dWrV7Fp0yYMHjwY169fF49x5coVJCcnIysrq9qolLFjxxrd4qj6nDh79mxt30oj/fv3x4YNG6otDz30kFE7JycnjB492uw+Bg0aBF9fX/FnW38eEd2re7p036xZM6OfqzpxXbt2DR4eHsjKyoIgCIiIiDD7+js/7C1p3749XFxcsH37diQnJ2P79u144403oNPpMHfuXJSWlooFv+peVtU/9sjIyGr7i46Oxn//+99qHVzCwsLMHr+0tBR9+vRBfHw8vv3222qX3bt3745BgwbhjTfewEcffYQePXogJSUFTz31lNEXgrVr16JDhw5WLx9OnToV33zzDd59991q9y8B2OT9dHZ2RllZmcVc7/yQrg3TvwXg9t+D6b13ANXid3NzQ0BAwD2PzV+/fj3y8vLQqVMnZGdni+sfeugh/Oc//8F7771XrUOYaQzh4eFQq9ViDEOGDMEXX3yBZ599FpMnT0bPnj0xcOBAPPHEE+K+zp49i4iIiGr7jo6OFrfXlby8PBQUFGDBggVYsGCB2Ta5ubl33U9CQgLeeustqFQquLi4IDo6WizIubm5tT6G6b+jkydPAoDVYaLZ2dkQBAGvv/46Xn/9dYvHCQoKEn+29tlzP5o2bYqkpKS7tgsKCrL4hdn0PbDl5xHR/binQm+p97Xw5z0lg8EAlUqFX375xWzbmkxG4+DggISEBGzbtg3Z2dnQ6/Xo2rUr/P39UV5ejl27dmH79u2Iiooy+hZdW5YKnJOTEx577DH8+OOPSEtLQ9++fY22q1QqfPfdd/j999/x888/47///S/+8pe/YNasWfj999/FHNetW2fxDKBK8+bN8fTTT2PBggWYPHlyte22eD8DAgJQWVmJ3Nxc+Pn5ievLyspw5cqVe+71f7e/hbpUddY+ePBgs9u3bt1a7YzM1J1nh8Dtv4dt27Zh8+bNWLt2LdLS0rBixQo8/PDDWL9+/X2PPDA9XpXKysoavb7qKsPTTz+NkSNHmm3Ttm3bu+7Hx8fHYmG7l2PcyxfFquO89NJLSE5ONtumRYsWRj9L+fcGWM/zXr8s23ofRKbqZHhdeHg4BEFAWFgYWrZsabWtpQ8+4PZluffeew+//vorfHx8EBUVBZVKhVatWmH79u3Yvn27UQGuGuOdmZlZbV8ZGRnw8fGp8XAVlUqFpUuXon///njyySfxyy+/mO29+8ADD+CBBx7A22+/jWXLlmH48OFYvnw5nn32WRw5cgTnzp2rNn7enKlTp2LJkiVmx7Tb4v2Mi4sDcHukwGOPPSau37t3LwwGg7i9LmVlZRkV3hs3buDy5ctG8dRUcXExfvzxRwwZMgRPPPFEte3PPfccli5dWq3QZ2VlGZ01ZWdnw2AwGHWKUqvV6NmzJ3r27IkPP/wQ//rXv/Daa69h8+bNSEpKQkhICA4fPgyDwWB0Vp+RkQEAVuca8PLyMho1UsXcVQBzv0tfX1+4u7ujsrKyRmeg98IWx6jqOHjkyBGL+2jevDmA21/qbZmLtc+U+mTLzyOi+1EnA10HDhwIOzs7vPHGG9W+aQuCgCtXrog/u7q6WhxK1bVrV9y6dQuzZ89Gly5dxH/AXbt2xTfffINLly4Z3R8OCAhAXFwcFi9ebPRheuTIEaxfv77WBcXR0RHff/89OnbsiH79+mH37t3itmvXrlXLrapY3rp1C8Dts3l/f/9qPd3NCQ8Px9NPP43PPvsMer3eaJst3s+HH34Y3t7e1WaO+/TTT+Hi4mL0ZSQ/Px8ZGRlmh0zejwULFhj1Z/j0009RUVFh1H+hpsPrfvjhBxQXF2PcuHF44oknqi19+/bFqlWrxN9FlXnz5hn9XDUzYFUMV69erXYs09/rY489Br1eL/b0Bm73F5g7dy7c3NzQvXt3i3GHh4ejsLAQhw8fFtddvnzZ7Kx0rq6u1b4U2NnZYdCgQVi1ahWOHDlS7TV3DjW7V7Y4Rvv27REWFobZs2dXy6Hqb9jPzw89evTAZ599ZrZ/yr3mYu59k4KtP4+I7lWdndG/9dZbePXVV3HmzBmkpKTA3d0dp0+fxg8//ICxY8fipZdeAnB7eNeKFSswadIkdOzYEW5ubujXrx8AIDExEfb29sjMzBSHGAFAt27dxIJ1Z6EHgJkzZ6J3795ITExEamqqOJzF09PznuYcd3Z2xpo1a/Dwww+jd+/e2Lp1K1q3bo3Fixfjk08+wYABAxAeHo7r16/j888/h4eHh/gPeO3atejdu3eNzzBee+01fPPNN8jMzDQammaL99PZ2Rlvvvkmxo0bhyeffFLs97BkyRK8/fbbRp2FPv74Y7zxxhvYvHmzzcYgA7dvE/Ts2RODBw9GZmYmPvnkE3Tp0gWPP/642Kamw+uWLl2KJk2aoHPnzma3P/744/j888+xdu1aDBw4UFx/+vRpPP744+jVqxfS09OxZMkSPPXUU4iNjQUA/POf/8S2bdvQp08fhISEIDc3F5988gmaNm0q9gUZO3YsPvvsM4waNQr79u1DaGgovvvuO+zYsQOzZ8+Gu7u7xbiHDh2KV155BQMGDMBzzz2Hmzdv4tNPP0XLli2rdXCLj4/Hr7/+ig8//BCBgYEICwtDQkIC3n33XWzevBkJCQkYM2YMYmJicPXqVezfvx+//vqr2S8rtXW/x1Cr1fj000/Rr18/xMXFYfTo0QgICEBGRgaOHj2K//73vwBuf/Hq0qUL2rRpgzFjxqB58+bIyclBeno6Lly4gEOHDtU69vj4eHz66ad466230KJFC/j5+eHhhx+2+poTJ05gyZIl1db7+/vjkUceqXUMVWz9eUR0T2rTRb9qCIjp0CNzQ68EQRBWrVoldOnSRXB1dRVcXV2FqKgoYdy4cUJmZqbY5saNG8JTTz0laLVaAUC1oUcdO3YUAAi7du0S1124cEEAIAQHB5uN89dffxUefPBBwdnZWfDw8BD69esnHDt2rEa5CILx8Loq+fn5QkxMjKDT6YSsrCxh//79wrBhw4RmzZoJTk5Ogp+fn9C3b19h7969giAIQkFBgWBvby98++231fZ/5/A6c8cGYDS8root3s8FCxYIkZGRgqOjoxAeHi589NFHRsOV7nxvNm/eXC1m0+F1ffr0qRZn9+7djYY3Vb1269atwtixYwUvLy/Bzc1NGD58uNGwozvbWhtel5OTI9jb2wvPPPOMxTY3b94UXFxchAEDBhjldOzYMeGJJ54Q3N3dBS8vL2H8+PFCSUmJ+LqNGzcK/fv3FwIDAwVHR0chMDBQGDZsmHDixIlqMYwePVrw8fERHB0dhTZt2piNGSbD6wTh9hDA1q1bC46OjkJkZKSwZMkSs8PrMjIyhG7dugnOzs4CAKOhdjk5OcK4ceOE4OBgwcHBQdDpdELPnj2FBQsWWHxPqlj6vZmqyTGqhtetXLnS7D5+++034ZFHHhHc3d0FV1dXoW3btsLcuXON2pw8eVIYMWKEoNPpBAcHByEoKEjo27ev8N1334ltLP2bqTr+nX+rer1e6NOnj+Du7i4AuOtQO1gZXnfna02HvVapGl43c+ZMs/u/388jovulEgTOylAXvv32WwwfPhz5+fnw9PSUOhxJffXVVxg9ejT27NlTo9sYRERkO41nMupGRqvVYs6cOYov8kREJC0+1KaOPProo1KHQERExDN6IiIiOeM9eiIiIhnjGT0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYzZSx1AbVRUGHB430VcvXIT7h5OiOvYFE5OjSoFIiKietVoqmT61tNY/tU+FFwrEde5uDri8SfboHdKjISRERERNVwqQRAEqYO4m907zuKTD7bBUqRDRrbHYwNa1W9QREREjUCDv0cvCAJWfnPAYpEHgB+//QOlJeX1FxQREVEj0eALfdbxPOTqr1ttU1pSjn2/n6+niIiI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FJ28hGP//h5nVm5BWWExPCOD0XJMH7RM7Q07J0epwyO6byz09SgjMw/vzNyGkpLyatuio3zx2ivd4ehoL0FkRMqUs+MINvSZgvKi4mrb/Lu1xaO/vAt7ZycJIiOyHV66rycVFZX4cM4Os0UeAI5n5GHFd0fqOSoi5aosK8fmJ98wW+QBIGfbYRyY9lX9BkVUB1jo68muPRdQUFBqtc2mLadQVlZRTxERKdvZ77ejRH/VapsTC39BRcmteoqIqG7wOnE9yTyRf9c2xcVl2Lv7AgID3OshIiJly/5l313blF27jsLM82gS16IeIiKqGyz09UStVtWo3aeztkPNXhNEdS78yDkE16Cdyo4XPqlxY6GvJ23b6LAuzfq0t54eTnh1RlKNvxQQ0b27skWHw2OOWW3j0tRXfD4FUWPFQl9P4toGICjQAxcvFVls0/exKDSP8KnHqIiUKySsJ87OWobCjHMW28SMT4HajsNeqXHjNal6olar8PKLXeHTxMXs9m5dQtGvT1Q9R0WkXCq1Gj1/fBOuzfzMbg9/5hG0fmlwPUdFZHscR1/Pbt4sx7bfTmPn7+dQUlKBgAB3JD0cjratdVKHRqRIZUXFyP56A858uxnl10vg0bIpIsf0QWBSvNShEdkECz0REZGM8dI9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJGAs9ERGRjLHQExERyRgLPRERkYyx0BMREckYCz0REZGMsdATERHJ2P8DWqY9l3i6VNUAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=get_ape_from_pd_series(\n", - " results_hhl.node[\"pressure\"].iloc[0], results_epanet.node[\"pressure\"].iloc[0]\n", - " ),\n", - " link_attribute=get_ape_from_pd_series(\n", - " results_hhl.link[\"flowrate\"].iloc[0],\n", - " results_epanet.link[\"flowrate\"].iloc[0],\n", - " ),\n", - " node_colorbar_label=\"Pressures\",\n", - " link_colorbar_label=\"Flows\",\n", - " node_size=50,\n", - " title=f\"{inp_file}: Absolute Percent Error\",\n", - " node_labels=False,\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens_wntr_1", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/qnr_qubols/qubo_Net1Loops.ipynb b/docs/notebooks/qnr_qubols/qubo_Net1Loops.ipynb deleted file mode 100644 index 888ee00..0000000 --- a/docs/notebooks/qnr_qubols/qubo_Net1Loops.ipynb +++ /dev/null @@ -1,384 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net1Loops.inp`. Let's start by setting up the model:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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TZuiqqoqIiJef/31WLVqVYwfPz722Wef0r6OOOKIOOmkk2LJkiUf+zo+7KGHHophw4bF0KFDY+HChbW+Z6+srIyIiHvvvTd27Nix2308+OCDsW3bthg+fHi99/fs2TO+9rWvxezZs+P111+vd5vGWM/G1NB1/uCDD2Lp0qVxxhlnRM+ePUvbHXDAATF27Nh45JFH4p133qm174kTJ8Zee+1Vuj158uQoLy8v7bOh6/5JTJgwoda5BLt+n1566aVa25WXl8ekSZNKt1u1ahWTJk2KN998M5588slGmQt8EmKAJtetW7datzt16hQR/z6UumbNmiiKInr37h1dunSp9fPCCy/Em2+++bH779evX1RUVJQ++HfFwKBBg2LFihXx3nvvle7b9V38K6+8EhERX/rSl+rs79BDD40NGzbUOUmwR48e9T7/e++9FyNGjIgjjzwy5s+fX+fEs8GDB8dXvvKVuOKKK6Jz585x+umnxy233BLbtm2rtd3ixYtjwIABsd9+++32tV5++eXx/vvv7/bcgcZYz8bU0HV+6623oqamZrfb7dy5s9Y5DxERvXv3rnW7ffv2ccABB8S6desiouHr/kl81O/yhx144IHRrl27WmMHH3xwRERpfvBZcs4ATa5ly5b1jhdFETt37oyysrK477776t2uId9j77XXXnHMMcfEww8/HC+++GK88cYbUVVVFfvtt1/s2LEjHn/88Vi+fHkccsgh0aVLl//6dbRt27be8datW8cpp5wSixYtit///vcxcuTIWveXlZXFb3/723jsscfinnvuifvvvz/OP//8uOaaa+Kxxx4rvcYlS5bEhAkTPnIOPXv2jHPOOSdmz54dl156aZ37G2M99xQNXfdP4qN+l6E5EwM0a7169YqiKKJHjx6lv5x256PObq+qqorp06fHAw88EJ07d45DDjkkysrK4vDDD4/ly5fH8uXLa31Id+/ePSIiVq9eXWdff/3rX6Nz5851/rL7qHn95je/idNPPz3OPvvsuO++++r91+uOPfbYOPbYY2PatGlx++23x7hx4+KOO+6ICy64IJ599tn4+9//XueSwvpcfvnlMW/evNIJmB/WWOvZWBq6zm3atImKiordbteiRYs46KCDao2vWbMmTjzxxNLtd999N15//fU45ZRTam33Uev+aVm/fn1s2bKl1u/Q3/72t4iIOiemwmfB1wQ0a6NGjYqWLVvGFVdcUeevq6IoYuPGjaXb7dq1i82bN9e7n6qqqti2bVtcd911MXDgwNIHXVVVVcydOzfWr19f+n434t/fRfft2zduu+22WpcfPvvss7F06dI6Hygfp1WrVrFw4cI46qij4tRTT42//OUvpfvefvvtOq+tb9++ERGlQ9ZLliyJ/fbbLwYMGPCxz9WrV68455xzYtasWfHGG2/Uuq+x1rOxNHSdW7ZsGSeffHIsWrSo1mH0f/7zn3H77bfHwIEDo0OHDrX2PXv27FrnAsycOTPef//90jkXDVn3iIi1a9fG2rVrG+Pllrz//vsxa9as0u3t27fHrFmzokuXLtG/f/9GfS5oCEcGaNZ69eoVV155ZfzoRz+KdevWxRlnnBF77713vPzyy3H33XfHxIkT4+KLL46IiP79+8edd94ZF110URx11FHRvn37OPXUUyMi4rjjjovy8vJYvXp1TJw4sbT/QYMGxcyZMyMiasVARMTVV18dw4cPj+OOOy6+/vWvly5569ixY0ydOvUTv5a2bdvGvffeG//3f/8Xw4cPj2XLlkWfPn3itttui5tuuinOPPPM6NWrV/zrX/+KOXPmRIcOHUofhosXL47hw4c3+K/1KVOmxNy5c2P16tVx+OGHN/p63nPPPfHUU09FRMSOHTvi6aefjiuvvDIiIk477bQ44ogjas3nF7/4RVRUVNQaa9GiRVx22WUNXucrr7wy/vCHP8TAgQPjm9/8ZpSXl8esWbNi27ZtMWPGjDprsH379hg6dGiMHj06Vq9eHTfddFMMHDgwTjvttIiIBq17RMTQoUMjonG/yz/wwANj+vTpsW7dujj44IPjzjvvjFWrVsXs2bNrnfQIn5mmuYgBdn/Z2a5Lw15++eXS2IIFC4qBAwcW7dq1K9q1a1cccsghxbe+9a1i9erVpW3efffdYuzYsUVlZWUREXUuizvqqKOKiCgef/zx0thrr71WRERx0EEH1TvHBx54oDjhhBOKtm3bFh06dChOPfXU4vnnn2/Q6yiK2pcW7rJhw4bisMMOK/bff/9izZo1RXV1dTFmzJiiW7duRevWrYuuXbsWI0eOLFasWFEURVFs2rSpKC8vL+bPn19n/x++tLC+546IWpcW7vK/rueufdf38+FLH3etTX0/LVu2/ETrXBRFUV1dXQwbNqxo3759UVFRUZx44onFo48+Wu+aLFu2rJg4cWLRqVOnon379sW4ceNqXb74ceu+S/fu3ev8Lu3u0sK77rqr1nYvv/xynTXZdbnnihUriuOOO65o06ZN0b179+LGG2+s83rhs1JWFM5sgeZs/vz5MW7cuNiwYUN07NixqafT7N16660xYcKEeOKJJxr0tcpnbciQIbFhw4Z49tlnm3oqUOKcAWjmKisr4/rrrxcCwKfGOQPQzJ188slNPQVgD+fIAAAk55wBAEjOkQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACS3R8XApk2bYsCAAdG3b9/o06dPzJkzp6mnBM3aq6++GkOGDInDDjssjjjiiLjrrruaekrQrJ155pnRqVOnOOuss5p6Ko1qj4qBli1bxnnnnRfHHXdcTJw4MaZNmxYbN25s6mlBs7V9+/YYOHBgDB48OM4555z4zne+E1u2bGnqaUGzNWnSpBg7dmysXLkyZs2aFTU1NU09pUZRVhRF0dSTaAw1NTVRVVUV1dXVpbFWrVrFmjVrolu3bk04M2ie6nvPtG3bNlatWhUHH3xwE84Mmqf63jP9+vWL5cuXR0VFRRPO7H9X3tQTaCxz586t9R8o4t9/9cyePTtGjRrVRLOC5mvBggV13jNbt26NX//6194zUI/63jPV1dUxb968mDhxYhPNqnHsMUcGJk+eHDfffHNTTwOAZCZPnhw33XRTU0/jf7LHHBno27dvveOjRo2KKVOmfLaTgc+BBQsWxFVXXVVnfMqUKY4MQD12957Z3efP58kec2SgpqYmjj322HjmmWdKY23atIlly5bF0Ucf3YQzg+appqYmBg4cGCtXriyN7Snff8KnYU8+Z2CPuZqgoqIibrzxxujatWtERHTt2jVmzJghBGA3KioqYsaMGaXbXbt2jR07dsTatWubcFbQfFVUVESHDh2iffv2UV5eHpWVlfHzn//8cx8CEXvQkYFdqquro3///vHkk09Gv379mno60Ox5zwB7zJEBAOC/IwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACS3x8XAyJEjIyJizJgxceKJJzbxbKD527p1a0REXHvttU08E6Cp7FExUFNTEzU1NRERcdZZZ8XixYubeEbQvNXU1MQll1wSERFr1qwpvX+AXMqKoiiaehKNoaamJqqqqqK6uro01q9fv1i+fHlUVFQ04cygeaqpqYmjjjoqnn/++dKY9wzkVN7UE2gsc+fOrRUCERHV1dVx1VVXxahRo5poVtB8LViwoFYIRPz7PTNv3ryYOHFiE80KaAp7TAysWrWq3vFp06bFtGnTPtvJwOfY7t5LwJ5rj4mBvn371js+cuTIuOKKKz7bycDnwIUXXhh//vOf64zv7r0E7Ln2qHMGjj/++HjqqadKY23bto37778/qqqqmnBm0Dw5zwbYZY+JgYiI5557Lr785S/H1q1bo3Xr1vHd7343fvCDHzT1tKDZqqmpiXnz5sUdd9wR5eXl8bvf/U4IQEJ7VAwAAJ/cHvXvDAAAn5wYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJ/T8qcf1qNCsKYAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "os.environ[\"EPANET_TMP\"] = \"/home/nico/.epanet_quantum\"\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/home/nico/QuantumApplicationLab/vitens/EPANET\"\n", - "\n", - "# set up network model\n", - "inp_file = \"networks/Net1Loops.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "\n", - "# print options\n", - "# dict(wn.options.hydraulic)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical WNTR simulator\n", - "\n", - "For comparison, we will start with by solving the network model with the classical WNTR simulator." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Size of the Jacobian in WNTR simulator: 9\n", - "Size of the b vector in WNTR simulator: 9\n" - ] - }, - { - "data": { - "text/plain": [ - "( 2 3 4 5 1\n", - " 0 57.93989 31.496198 52.434498 21.174181 0.0,\n", - " 1 2 3 4 5\n", - " 0 0.16387 0.059455 0.076645 0.043315 0.031685)" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# define the classical WNTR simulator\n", - "sim = wntr.sim.WNTRSimulator(wn)\n", - "\n", - "# run WNTR simulator\n", - "results_wntr = sim.run_sim()\n", - "\n", - "# set A and b matrices\n", - "wntr_A = sim._model.evaluate_jacobian()\n", - "wntr_b = sim._model.evaluate_residuals()\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "wntr_A_dim = wntr_A.shape[0]\n", - "print(f\"Size of the Jacobian in WNTR simulator: {wntr_A_dim}\")\n", - "print(f\"Size of the b vector in WNTR simulator: {wntr_b.shape[0]}\")\n", - "\n", - "results_wntr.node[\"pressure\"], results_wntr.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Epanet simulator\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. Note that, by default, `QuantumEpanetSimulator` uses a classical `CholeskySolver` to iteratively solve the linear problem." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Your EPANET quantum path: /home/nico/QuantumApplicationLab/vitens/EPANET\n", - "Your EPANET temp dir: /home/nico/.epanet_quantum\n", - "\n", - "Size of the Jacobian in EPANET simulator: 4\n", - "Size of the b vector in EPANET simulator: 4\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 2 3 4 5 1\n", - " 0 57.939995 31.496479 52.434612 21.174667 4.394531e-07,\n", - " name 1 2 3 4 5\n", - " 0 0.163867 0.059455 0.076645 0.043315 0.031685)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import sys\n", - "\n", - "# define the classical EPANET simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "\n", - "# run the EPANET simulation\n", - "results_epanet = sim.run_sim()\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "util_path = os.path.join(epanet_path, \"src/py/\")\n", - "sys.path.append(util_path)\n", - "\n", - "from quantum_linsolve import load_json_data\n", - "\n", - "epanet_A, epanet_b = load_json_data(os.path.join(epanet_tmp, \"smat.json\"))\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define a helper function\n", - "\n", - "This function checks that the quantum results are within `TOL`% of those obtained classically. It also fills in lists containing the final values of pressures and flow rates obtained." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "TOL = 5 # => per cent\n", - "DELTA = 1.0e-12\n", - "\n", - "classical_res = []\n", - "quantum_res = []\n", - "\n", - "\n", - "def compare_results(classical_result, quantum_result):\n", - " \"\"\"\n", - " Helper function that compares the classical and quantum simulation results.\n", - " \"\"\"\n", - "\n", - " def calculate_differences(classical_value, quantum_value):\n", - " \"\"\"Helper function to evaluate percentage difference between classical and quantum results.\"\"\"\n", - " is_close_to_classical = (\n", - " abs(classical_value - quantum_value) / abs(classical_value + DELTA)\n", - " <= TOL / 100.0\n", - " )\n", - " if is_close_to_classical:\n", - " print(\n", - " f\"Quantum result {quantum_value} within {TOL}% of classical result {classical_value}\"\n", - " )\n", - " quantum_res.append(quantum_value)\n", - " classical_res.append(classical_value)\n", - " return is_close_to_classical\n", - "\n", - " for link in classical_result.link[\"flowrate\"].columns:\n", - " classical_value = classical_result.link[\"flowrate\"][link].iloc[0]\n", - " quantum_value = quantum_result.link[\"flowrate\"][link].iloc[0]\n", - " message = f\"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert calculate_differences(classical_value, quantum_value), message\n", - "\n", - " for node in classical_result.node[\"pressure\"].columns:\n", - " classical_value = classical_result.node[\"pressure\"][node].iloc[0]\n", - " quantum_value = quantum_result.node[\"pressure\"][node].iloc[0]\n", - " message = f\"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert calculate_differences(classical_value, quantum_value), message" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using QUBO solver (with daptative encoding)\n", - "\n", - "Finally, we solve the problem once again but now using the QUBO quantum linear solver. The results are validated using the `compare_results` helper function defined above." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'encoding': , 'num_qbits': 15, 'num_reads': 100, 'range': 200, 'offset': 600, 'iterations': 5, 'temperature': 10000.0}\n", - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "0 [600, 600, 600, 600] 200\n", - "1 [653.1282426905939, 675.0045779161326, 685.7962522126595, 684.3679423792956] [162.19783659021755, 147.89105361858333, 42.720160646958185, 63.89584840114656]\n", - "2 [644.009997711067, 666.5642351746703, 685.0869875055868, 683.5021132671028] [75.45597702856479, 50.57205374895429, 10.046036109323007, 15.040310664376154]\n", - "3 [644.0140024853814, 666.5516469026392, 685.076977352827, 683.4870178369654] [19.896996994125942, 13.32363024990175, 2.6333150952487467, 3.931600327637771]\n", - "4 [643.992959499734, 666.5427107763383, 685.0757495165467, 683.4848733908677] [5.223353430776938, 3.5236692804443814, 0.7094092503981015, 1.0570316100466943]\n", - "0 [600, 600, 600, 600] 200\n", - "1 [529.6832082036257, 599.9877922236465, 681.3037905145578, 679.6923640358908] [187.54031694899425, 184.01251352913064, 65.40813181134943, 82.9597572578687]\n", - "2 [553.6967849160075, 622.9756136853267, 681.5193822326687, 679.687300265076] [141.86200934793072, 119.2793266759492, 21.205113278968682, 26.81021946736571]\n", - "3 [562.5637016930114, 628.3269110726221, 682.1859654797871, 680.5235342970886] [86.45389220085569, 55.73149486850337, 7.356822855631101, 9.241251388366091]\n", - "4 [562.2824209600006, 628.292107253294, 682.1951163769494, 680.5351439694014] [31.029823241857912, 19.81284495667869, 2.552368135283411, 3.191619202770022]\n", - "0 [600, 600, 600, 600] 200\n", - "1 [587.4870292376244, 645.7547457730575, 684.3801501556492, 683.2082036257095] [177.77841909256463, 173.4733615301793, 64.0277190784752, 81.64108121625112]\n", - "2 [582.1155882652249, 645.7547457730575, 683.1217160750004, 681.5687044057775] [138.88375755481923, 117.57533384594275, 20.95137784333773, 26.428166308749084]\n", - "3 [564.7406843999353, 631.056931958952, 682.4639443033918, 680.8501785757319] [85.44204634141676, 55.44852844133298, 7.290151970627268, 9.11709602214348]\n", - "4 [564.6847830660753, 630.1832891650187, 682.4501577380078, 680.8500849843596] [35.115707539297674, 22.39280842457061, 2.8746442515343262, 3.5854321211566336]\n", - "Quantum result 0.1638716608285904 within 5% of classical result 0.16386687755584717\n", - "Quantum result 0.0594572015106678 within 5% of classical result 0.05945523828268051\n", - "Quantum result 0.07664962112903595 within 5% of classical result 0.07664506137371063\n", - "Quantum result 0.04331611469388008 within 5% of classical result 0.043314848095178604\n", - "Quantum result 0.03168607875704765 within 5% of classical result 0.03168521821498871\n", - "Quantum result 57.939884185791016 within 5% of classical result 57.93999481201172\n", - "Quantum result 31.495363235473633 within 5% of classical result 31.496479034423828\n", - "Quantum result 52.434444427490234 within 5% of classical result 52.43461227416992\n", - "Quantum result 21.172529220581055 within 5% of classical result 21.174667358398438\n", - "Quantum result 4.39453117451194e-07 within 5% of classical result 4.39453117451194e-07\n" - ] - } - ], - "source": [ - "from quantum_newton_raphson.qubo_solver import QUBO_SOLVER\n", - "from qubols.encodings import RangedEfficientEncoding\n", - "\n", - "linear_solver = QUBO_SOLVER(\n", - " encoding=RangedEfficientEncoding,\n", - " num_qbits=15,\n", - " num_reads=100,\n", - " range=200,\n", - " offset=600,\n", - " iterations=5,\n", - " temperature=1e4,\n", - " use_aequbols=True,\n", - ")\n", - "\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "results_qubos = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "# check that the results are within a certain tolerance from the classical epanet\n", - "compare_results(results_epanet, results_qubos)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot pressures and flow rates\n", - "\n", - "Let's check graphically the equivalence of the results." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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JwHo3LkzQ4YMcVx9K66lUiMiIlIOUlNTmTt3Lnl5eVitVoYPH0779u3NjlWlmTqD8tVXX8VisZR6tG7d2rG/oKCAiRMnEhoaSkBAAHFxcWRkZJiYWERE5PYEBgZis9kICwvjqaeeUqGpAKaP1LRt25bvvvvO8fyHs8FffPFFvvnmG+bNm0dwcDCTJk1izJgxbNiwwYyoIiIit1RUVITVagWgZs2aPProo9StW1drZVUQ04+yl5fXDZeCzszM5OOPP+aLL77gnnvuAWDWrFlERkayadMmevbsWdFRRUREburw4cMsXryYMWPG0KxZMwDq169vcqrqxfQFPFJSUqhfvz533XUX48aNIzU1FYDt27dTXFxMTEyM47WtW7emUaNGJCcn3/T9CgsLycrKKvUQEREpLzabjW+//Zb//Oc/5OXlsWnTJrMjVVumlpoePXowe/Zsli9fzvvvv8/x48fp27cv2dnZpKenY7VaCQkJKfUzYWFhpKen3/Q9p02bRnBwsOMRERFRzr8KERGprq5cucKsWbMc/9ju3r07999/v8mpqi9TTz8NGTLE8d8dOnSgR48eNG7cmP/+979O32ByypQpTJ482fE8KytLxUZERFzu4MGDLF68mIKCAnx9fbnvvvuIjIw0O1a1Zvqcmh8KCQmhZcuWHDlyhIEDB1JUVMSVK1dKjdZkZGTc8nbsPj4+urupiIiUqzNnzjB37lwAGjRoQHx8/HVnFqTimT6n5odycnI4evQo9erVIyoqCm9vbxITEx37Dx06RGpqKtHR0SamFBGR6q5BgwZ06tSJ6OhoHnvsMRUaN2HqSM2vfvUrRowYQePGjTl79ixTp07F09OTBx98kODgYB5//HEmT55MrVq1CAoK4rnnniM6OlpXPomISIU7ePAgjRo1wt/fH4D77rsPi8Vicir5IVNLzenTp3nwwQe5ePEiderUoU+fPmzatIk6deoA8NZbb+Hh4UFcXByFhYXExsby3nvvmRlZRESqmZKSElasWMG2bdto0aIFDz74oGPBWHEvFsMwDLNDlCdnbl0uIiICcPHiRebPn++46rZ3797cc889eHi41eyNKsmZ72+3migsIiLiLvbu3cuSJUsoKirC39+f0aNH07x5c7NjyS2o1IiIiPxAcXExy5cvZ8eOHQA0btyYMWPGaLS/ElCpERER+QGbzcaxY8cA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Z3h4eBj5+flGQkKCERQUZGRlZd30Pd96661S2zp27GhMnTrV8fyHx/RGOS9evGgAxpo1a279ixaRn6SRGpEqzjAMp3927ty59O7dm/DwcAICAvj9739PamqqY//kyZN54okniImJ4c033yx1Suj555/nj3/8I71792bq1Kns2bPnpp9zbaTmZlJSUnjwwQe56667CAoKokmTJgClstyOrl27lnq+e/duZs+eTUBAgOMRGxuL3W7n+PHjDBw4kMaNG3PXXXfxyCOP8Pnnn5OXl1emz/wptWrVYsKECcTGxjJixAjeeecd0tLSXPoZItWFSo1IFdeiRQssFkuZJwMnJyczbtw4hg4dypIlS9i5cye/+93vKCoqcrzm1Vdf5fvvv2fYsGGsWrWKNm3asHDhQgCeeOIJjh07xiOPPMLevXvp2rUr//znP2/4WX5+frfMMmLECC5dusTMmTPZvHkzmzdvBiiV5Xb8+PRbTk4OTz/9NLt27XI8du/eTUpKCs2aNSMwMJAdO3bwn//8h3r16vHKK6/QsWNHx1wgDw+P60rjD+cc3a5Zs2aRnJxMr169mDt3Li1btrzlXCcRuTGVGpEqrlatWsTGxvLuu++WmgB7zc3Witm4cSONGzfmd7/7HV27dqVFixY3nLzasmVLXnzxRb799lvGjBnDrFmzHPsiIiJ45plnWLBgAb/85S+ZOXPmDT+rQ4cON720/OLFixw6dIjf//733HvvvURGRjomEN+pLl26sH//fpo3b37d49qVUV5eXsTExPCXv/yFPXv2cOLECVatWgVAnTp1So2qZGVlcfz48Zt+3rX3vDZX6Ic6d+7MlClT2LhxI+3ateOLL75wya9RpDpRqRGpBt59911sNhvdu3cnISGBlJQUDhw4wPTp04mOjr7hz7Ro0YLU1FS+/PJLjh49yvTp0x2jMAD5+flMmjSJNWvWcPLkSTZs2MDWrVuJjIwE4IUXXmDFihUcP36cHTt2sHr1ase+H5syZQpbt27l5z//OXv27OHgwYO8//77XLhwgZo1axIaGsqHH37IkSNHWLVqFZMnT3bJcXnppZfYuHEjkyZNYteuXaSkpLB48WLHROElS5Ywffp0du3axcmTJ/nss8+w2+20atUKgHvuuYd///vfrFu3jr179zJ+/Hg8PT1v+nl169bFz8+P5cuXk5GRQWZmJsePH2fKlCkkJydz8uRJvv32W1JSUm56rETkFsye1CMiFePs2bPGxIkTjcaNGxtWq9Vo0KCBcd999xmrV692vIYfTRT+9a9/bYSGhhoBAQHG/fffb7z11ltGcHCwYRiGUVhYaDzwwANGRESEYbVajfr16xuTJk0y8vPzDcMwjEmTJhnNmjUzfHx8jDp16hiPPPKIceHCBcMwrp8obBiGsWbNGqNXr16Gj4+PERISYsTGxjr2r1y50oiMjDR8fHyMDh06GGvWrPnJCbg/dqNJvYZhGFu2bDEGDhxoBAQEGDVq1DA6dOhg/OlPfzIM4+qk4X79+hk1a9Y0/Pz8jA4dOhhz5851/GxmZqZx//33G0FBQUZERIQxe/bsW04UNgzDmDlzphEREWF4eHgY/fr1M9LT041Ro0YZ9erVM6xWq9G4cWPjlVdeMWw2201/LSJyYxbDuINZhCIiIiJuQqefREREpEpQqREREZEqQaVGREREqgSVGhEREakSVGpERESkSlCpERERkSpBpUZERESqBJUaERERqRJUakRERKRKUKkRERGRKkGlRkRERKqE/wfUu7RO96JCzQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.scatter(\n", - " classical_res[:n_pipes],\n", - " quantum_res[:n_pipes],\n", - " label=\"Flow rates\",\n", - " color=\"blue\",\n", - " marker=\"o\",\n", - ")\n", - "plt.scatter(\n", - " classical_res[n_pipes:],\n", - " quantum_res[n_pipes:],\n", - " label=\"Pressures\",\n", - " color=\"red\",\n", - " marker=\"s\",\n", - " facecolors=\"none\",\n", - ")\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\", label=\"\")\n", - "plt.xlabel(\"Classical results\")\n", - "plt.ylabel(\"Quantum results\")\n", - "plt.legend()\n", - "plt.show()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens_wntr_1", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/qnr_vqls/vqls_Net1.ipynb b/docs/notebooks/qnr_vqls/vqls_Net1.ipynb deleted file mode 100644 index 6a89453..0000000 --- a/docs/notebooks/qnr_vqls/vqls_Net1.ipynb +++ /dev/null @@ -1,681 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net1.inp`. Let's start by setting up the model:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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oiKH8mrVqqXFixerbt26Hk5W+c6cOaMOHTooIiKiyP7o0qWLcnJy9NBDD5X51kl1VNo+CQ8P1+zZszlnwLjS1kd8fDzrA5JKXyNxcXE6efKk2rdv7+F0P1y1+TRBeHi4MjIyFB0drfr166tFixbasGGDuRDo27evRo0apfXr1+vYsWN6/PHHlZycrKZNmyonJ0eDBg0yFwJX75PLJ5RGREQoPz9fbdu21YoVKzyeEl65en2MHz9e0rcnIOfn56tnz55av369x1PCS1evkXHjxkn69vytvLw83XPPPRoyZIjHU/4w1eacAeBaBQIBJSQkaPv27YqPj/d6HFQxrA98l+q4RqrNkQEAAHB9iAEAAIwjBgAAMI4YAADAOGIAAADjiAEAAIwjBmDOkSNHvB4BVRiftsZ3qY7/Gi4xAHP+85//eD0CqrCCggKvR0AVVx3/4TJiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBmHPbbbd5PQKqsBo1+LKIstWvX9/rEcodqx7mdOjQwesRUIURA/guTZo08XqEcseqBwDAOGIAAADjiAEAAIwjBgAAMI4YAADAOGIAAADjiAFUa1lZWUpKSlLHjh3V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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "{'duration': 0.0,\n", - " 'hydraulic_timestep': 3600,\n", - " 'quality_timestep': 300,\n", - " 'rule_timestep': 360,\n", - " 'pattern_timestep': 7200,\n", - " 'pattern_start': 0.0,\n", - " 'report_timestep': 3600,\n", - " 'report_start': 0.0,\n", - " 'start_clocktime': 0.0,\n", - " 'statistic': 'NONE',\n", - " 'pattern_interpolation': False}" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "from pathlib import Path\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "# Define the directory path\n", - "epanet_tmp_dir = Path(\"/Users/murilo/scratch_dir/vqls_net1\")\n", - "\n", - "# check if the directory exists\n", - "if not epanet_tmp_dir.exists():\n", - " epanet_tmp_dir.mkdir(parents=True, exist_ok=True)\n", - "\n", - "# set the environment variables\n", - "os.environ[\"EPANET_TMP\"] = str(epanet_tmp_dir)\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET\"\n", - "\n", - "# set up network model\n", - "inp_file = \"networks/Net1.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "\n", - "# explicitly set Hazen-Williams head loss formulas and pressure dependent demand mode\n", - "wn.options.hydraulic.headloss = \"H-W\" # 'D-W'\n", - "wn.options.hydraulic.demand_model = \"PDD\" # 'PDD'\n", - "\n", - "# required pressure: the pressure above which the consumer should receive the desired demand\n", - "wn.options.hydraulic.required_pressure = 30.0 # m\n", - "# minimum pressure: this is the pressure below which the consumer cannot receive any water\n", - "wn.options.hydraulic.minimum_pressure = 0.0 # m\n", - "\n", - "# set time duration of the simulation (in seconds)\n", - "wn.options.time.duration = 0\n", - "\n", - "# reduce accuracy\n", - "wn.options.hydraulic.accuracy = 0.1\n", - "\n", - "# print options\n", - "dict(wn.options.hydraulic)\n", - "dict(wn.options.time)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using `EpanetSimulator`" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(name 10 11 12 13 21 22 \\\n", - " 0 89.707954 83.876938 82.317116 83.473862 82.763023 83.541946 \n", - " \n", - " name 23 31 32 9 2 \n", - " 0 84.93837 81.498276 77.934067 0.0 36.575996 ,\n", - " name 10 11 12 21 22 31 110 \\\n", - " 0 0.117957 0.078103 0.00824 0.01205 0.007532 0.002569 -0.048558 \n", - " \n", - " name 111 112 113 121 122 9 \n", - " 0 0.030391 0.011841 0.001931 0.008878 0.003741 0.117957 )" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# define classical solver using EpanetSimulator\n", - "sim = wntr.sim.EpanetSimulator(wn)\n", - "\n", - "# run the classical EPANET simulation\n", - "results_original_epanet = sim.run_sim()\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=results_original_epanet.node[\"pressure\"].iloc[0],\n", - " link_attribute=results_original_epanet.link[\"flowrate\"].iloc[0],\n", - " node_colorbar_label=\"Pressure (m)\",\n", - " link_colorbar_label=\"Flow (liters/sec)\",\n", - " node_size=100,\n", - " node_labels=True,\n", - " link_labels=True,\n", - " node_alpha=0.5,\n", - ")\n", - "\n", - "results_original_epanet.node[\"pressure\"], results_original_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Cholesky solver from `QuantumEpanetSimulator`\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. Note that, by default, `QuantumEpanetSimulator` uses a classical `CholeskySolver` by default to iteratively solve the linear problem." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Your EPANET quantum path: /Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET\n", - "Your EPANET temp dir: /Users/murilo/scratch_dir/vqls_net1\n", - "\n", - "Size of the Jacobian in EPANET simulator: 9\n", - "Size of the b vector in EPANET simulator: 9\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 10 11 12 13 21 22 \\\n", - " 0 89.708252 83.877052 82.317093 83.473785 82.762794 83.541779 \n", - " \n", - " name 23 31 32 9 2 \n", - " 0 84.938217 81.498039 77.933807 0.0 36.575996 ,\n", - " name 10 11 12 21 22 31 110 \\\n", - " 0 0.117959 0.078104 0.008241 0.012049 0.007531 0.002569 -0.048524 \n", - " \n", - " name 111 112 113 121 122 9 \n", - " 0 0.030392 0.011844 0.001932 0.008878 0.003741 0.117957 )" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# define the classical EPANET simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "\n", - "# run the EPANET quantum simulation using classical Cholesky\n", - "results_epanet = sim.run_sim()\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "# load EPANET A and b matrices from temp\n", - "epanet_A, epanet_b = wntr_quantum.sim.epanet.load_epanet_matrix()\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Check that the classical results are equivalent" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas.testing as pdt\n", - "\n", - "pdt.assert_frame_equal(\n", - " results_original_epanet.node[\"pressure\"], results_epanet.node[\"pressure\"]\n", - ")\n", - "pdt.assert_frame_equal(\n", - " results_original_epanet.link[\"flowrate\"], results_epanet.link[\"flowrate\"], rtol=1e-3\n", - ")\n", - "# pdt.assert_frame_equal(results_original_epanet.link[\"velocity\"], results_epanet.link[\"velocity\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define a helper function\n", - "\n", - "Before proceeding to the proper quantum solution of the water network model, let's define a helper function. This function checks that the quantum results are within `TOL`% of those obtained classically. It also fills in lists containing the final values of pressures and flow rates obtained." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "TOL = 50 # => per cent\n", - "DELTA = 1.0e-12\n", - "\n", - "\n", - "def get_ape_from_pd_series(quantum_pd_series, classical_pd_series):\n", - " \"\"\"Helper function to evaluate absolute percentage error between classical and quantum results.\"\"\"\n", - " ape = (\n", - " abs(quantum_pd_series - classical_pd_series)\n", - " * 100.0\n", - " / abs(classical_pd_series + DELTA)\n", - " )\n", - " return ape\n", - "\n", - "\n", - "def compare_results(classical_result, quantum_result):\n", - " \"\"\"\n", - " Helper function that compares the classical and quantum simulation results.\n", - " \"\"\"\n", - " classical_data = []\n", - " quantum_data = []\n", - "\n", - " def check_ape(classical_value, quantum_value):\n", - " \"\"\"Helper function to check if the absolute percentage error between classical and quantum results is within TOL.\"\"\"\n", - " ape = (\n", - " abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA)\n", - " )\n", - " is_close_to_classical = ape <= TOL\n", - " if is_close_to_classical:\n", - " print(\n", - " f\"Quantum result {quantum_value} within {ape}% of classical result {classical_value}\"\n", - " )\n", - " quantum_data.append(quantum_value)\n", - " classical_data.append(classical_value)\n", - " return is_close_to_classical\n", - "\n", - " for link in classical_result.link[\"flowrate\"].columns:\n", - " classical_value = classical_result.link[\"flowrate\"][link].iloc[0]\n", - " quantum_value = quantum_result.link[\"flowrate\"][link].iloc[0]\n", - " message = f\"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " for node in classical_result.node[\"pressure\"].columns:\n", - " classical_value = classical_result.node[\"pressure\"][node].iloc[0]\n", - " quantum_value = quantum_result.node[\"pressure\"][node].iloc[0]\n", - " message = f\"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " return classical_data, quantum_data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve water network with `QuantumEpanetSimulator` and VQLS \n", - "\n", - "We now solve the model using VQLS. In this example, we are **preconditioning** the initial linear system using *diagonal scaling* and also using a **mix of two classical optimizers**." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "VQLS Iteration 1000 Cost 4.508e-03\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 1000 F = 4.507750E-03 MAXCV = 0.000000E+00\n", - " X = 1.620744E-01 -1.826426E+00 -3.081104E+00 -1.125874E+00 3.918102E-01\n", - " -1.793503E+00 -6.211784E-01 -9.682204E-01 2.859137E-01 4.398558E+00\n", - " 5.148026E-01 -2.326859E+00 -1.319283E-01 7.220956E-01 -8.531502E-01\n", - " 8.995309E-01 -4.889093E-01 8.369566E-01 -1.878064E+00 -2.404896E-01\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 292\n", - " Function evaluations: 9303\n", - " Gradient evaluations: 443\n", - "VQLS Iteration 1000 Cost 4.924e-03\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 1000 F = 4.900178E-03 MAXCV = 0.000000E+00\n", - " X = 3.135485E+00 2.518159E+00 4.277321E+00 -1.417130E-01 1.553132E+00\n", - " 3.709312E+00 1.978307E+00 3.787064E-01 -1.961337E+00 -1.536687E+00\n", - " -1.348505E+00 -2.226245E-01 2.837629E+00 -1.710600E+00 2.452428E+00\n", - " 2.037861E+00 1.454749E+00 1.146264E+00 1.570253E+00 -1.017595E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 114\n", - " Function evaluations: 3654\n", - " Gradient evaluations: 174\n", - "Quantum result 0.11806882172822952 within 0.0930382444022787% of classical result 0.11795907467603683\n", - "Quantum result 0.07850361615419388 within 0.5116023682590117% of classical result 0.07810403406620026\n", - "Quantum result 0.008158388547599316 within 1.0034360609464417% of classical result 0.008241082541644573\n", - "Quantum result 0.013429636135697365 within 11.456567262221325% of classical result 0.012049210257828236\n", - "Quantum result 0.008524676784873009 within 13.18722444736678% of classical result 0.007531483191996813\n", - "Quantum result 0.0026579888071864843 within 3.4821605723805393% of classical result 0.002568547846749425\n", - "Quantum result -0.05025358870625496 within 3.5640968554966164% of classical result -0.04852414131164551\n", - "Quantum result 0.029808100312948227 within 1.9218548374849556% of classical result 0.030392194166779518\n", - "Quantum result 0.010638649575412273 within 10.176263690125767% of classical result 0.011843917891383171\n", - "Quantum result 0.001736876554787159 within 10.099402099832746% of classical result 0.0019319966668263078\n", - "Quantum result 0.007597901858389378 within 14.414763630909842% of classical result 0.008877584710717201\n", - "Quantum result 0.0028983347583562136 within 22.518962638086183% of classical result 0.0037407020572572947\n", - "Quantum result 0.1178654283285141 within 0.0773818347920638% of classical result 0.11795670539140701\n", - "Quantum result 89.77676391601562 within 0.07637197403692984% of classical result 89.708251953125\n", - "Quantum result 83.93463134765625 within 0.06864695282388851% of classical result 83.8770523071289\n", - "Quantum result 82.31880187988281 within 0.0020760990395631935% of classical result 82.31709289550781\n", - "Quantum result 83.48485565185547 within 0.01326194973876411% of classical result 83.47378540039062\n", - "Quantum result 82.96297454833984 within 0.24187203311981723% of classical result 82.7627944946289\n", - "Quantum result 83.60733795166016 within 0.07847497184471706% of classical result 83.54177856445312\n", - "Quantum result 84.97666931152344 within 0.04527072703170748% of classical result 84.93821716308594\n", - "Quantum result 82.05519104003906 within 0.6836382808603946% of classical result 81.49803924560547\n", - "Quantum result 78.45686340332031 within 0.6711542113805771% of classical result 77.93380737304688\n", - "Quantum result 0.0 within 0.0% of classical result 0.0\n", - "Quantum result 36.57599639892578 within 0.0% of classical result 36.57599639892578\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 10 11 12 13 21 22 \\\n", - " 0 89.776764 83.934631 82.318802 83.484856 82.962975 83.607338 \n", - " \n", - " name 23 31 32 9 2 \n", - " 0 84.976669 82.055191 78.456863 0.0 36.575996 ,\n", - " name 10 11 12 21 22 31 110 \\\n", - " 0 0.118069 0.078504 0.008158 0.01343 0.008525 0.002658 -0.050254 \n", - " \n", - " name 111 112 113 121 122 9 \n", - " 0 0.029808 0.010639 0.001737 0.007598 0.002898 0.117865 )" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit.primitives import Estimator\n", - "from qiskit_algorithms import optimizers as opt\n", - "\n", - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", - "\n", - "qc = RealAmplitudes(n_qubits, reps=4, entanglement=\"full\")\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = VQLS_SOLVER(\n", - " estimator=estimator,\n", - " ansatz=qc,\n", - " optimizer=[opt.COBYLA(maxiter=1000, disp=True), opt.CG(maxiter=500, disp=True)],\n", - " matrix_decomposition=\"symmetric\",\n", - " verbose=True,\n", - " preconditioner=\"diagonal_scaling\",\n", - " reorder=True,\n", - ")\n", - "\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "results_vqls = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "results_classical, results_quantum = compare_results(results_epanet, results_vqls)\n", - "\n", - "results_vqls.node[\"pressure\"], results_vqls.link[\"flowrate\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "for i, result in enumerate(results_vqls.linear_solver_results):\n", - " plt.semilogy(result.logger.values, label=f\"iter # {i}\")\n", - " plt.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot Network model with absolute percent errors\n", - "\n", - "To compare the results, we plot the network together with the absolute percent errors (with respect to the classical results) for the predicted pressures and flow rates." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAGbCAYAAAALE9NeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABocElEQVR4nO3dd3gUVdsG8Ht2N72HNNIg9A5KL4EAgRAQQaUIKEUEFFAR9RVsoIIooKCIIHyCFSkWLCigaCiC9CokJEASCCSkkN62nO+PmJUlu2EXkuxmcv+85pI9c2b2mdnNPnPOnJmRhBACREREZJMU1g6AiIiITGOiJiIismFM1ERERDaMiZqIiMiGMVETERHZMCZqIiIiG8ZETUREZMOYqImIiGwYEzUREZENY6I2YuLEiXB1dbV2GDYlJiYGkiQhJibG2qHckU8//RSSJOHIkSM1+r4NGzbExIkTa/Q9iUherJ6oN2zYgOXLl1s7jGr33HPPoVWrVgD+SxqOjo5ISUmpUDciIgJt2rS5o/epbH+uWrUKI0eORGhoKCRJklUCGTVqFCRJwosvvmjtUKrMRx99hE8//bTK1xsREQFJkvSTt7c3OnfujHXr1kGn01X5+9U0S39TGjZsaLA/bp4GDRpUfYESmUll7QA2bNiAM2fOYNasWdYOpVpt27YNQ4cONSgrKSnB22+/jRUrVlTZ+1S2P9955x3k5eWhS5cuuHbtmkXr7d27N4qKimBvb19FkVad3Nxc/PTTT2jYsCG+/vprvP3225Akydph3bWPPvoIPj4+1XJAFRwcjEWLFgEA0tPT8fnnn2Py5Mk4f/483n777Sp/v5p0J78pHTp0wHPPPVehPDAwsAojI7ozVk/UtqSgoAAuLi5Vvt6LFy8iLi4Oq1evNijv0KED1q5di7lz59bID8Lu3bv1rWlLu/YVCgUcHR2rKbK78+2330Kr1WLdunXo168f9uzZgz59+lg7LJvm4eGBRx55RP962rRpaN68OT788EO8+eabsLOzu+N1azQa6HQ6mzyoMyUoKMhgf5jL1G+GTqdDaWnpXf3NVNfvEdU+FnV9z58/H5IkISEhARMnToSnpyc8PDwwadIkFBYWVqj/5ZdfomPHjnBycoK3tzcefvhhXL58WT8/IiIC27ZtQ1JSkr6rqWHDhhBCwMfHB7Nnz9bX1el08PT0hFKpRHZ2tr78nXfegUqlQn5+vr7sjz/+QHh4OFxcXODp6Ylhw4bh3LlzRrfl7NmzGDt2LLy8vNCrVy+T237ixAn4+voiIiJC/15HjhxBVFQUfHx84OTkhLCwMDz22GMVlt22bRs8PDwqrP+ll16CVqs1uwVzp/uzXIMGDe64pWnsHHV5F/3Zs2fRt29fODs7IygoCIsXLza67KZNm/DSSy8hICAALi4uuP/++w3iB4DCwkLExsYiIyPD7Ni++uorDBgwAH379kXLli3x1VdfmaxbWFiIadOmoV69enB3d8f48eNx48YNgzrmfK4FBQV47rnnEBISAgcHBzRv3hxLly7F7R5GV/69u1X56ZDExEQAZd2x//zzD3bv3q3/LCMiIvT1s7OzMWvWLP37N2nSBO+8884dd107OzujW7duKCgoQHp6utnvkZiYCEmSsHTpUixfvhyNGzeGg4MDzp49CwCIjY3FqFGj4OvrCycnJzRv3hwvv/yywXunpKTgscceg7+/PxwcHNC6dWusW7fOoE75d2jz5s1YuHAhgoOD4ejoiP79+yMhIUFf73Z/A3ejfOzKhQsXMHjwYLi5uWHcuHEAAEmSMHPmTHz11Vdo3bo1HBwcsH37dgDA8ePHER0dDXd3d7i6uqJ///74+++/DdZd/vnv3r0b06dPh5+fH4KDg6skbqr97qhFPWrUKISFhWHRokU4duwY/u///g9+fn5455139HUWLlyIV199FaNGjcLjjz+O9PR0rFixAr1798bx48fh6emJl19+GTk5Obhy5QqWLVsGAHB1dYUkSejZsyf27NmjX9+pU6eQk5MDhUKBv/76C0OGDAEA7N27F/fcc4++hfj7778jOjoajRo1wvz581FUVIQVK1agZ8+eOHbsWIU/2pEjR6Jp06Z46623TP7IHj58GFFRUejUqRN++OEHODk54fr16xg4cCB8fX0xZ84ceHp6IjExEd99912F5X/55RcMGDAAKpXh7g4LC8P48eOxdu1azJkzp9JW9d3sz+p048YNDBo0CA8++CBGjRqFb775Bi+++CLatm2L6OjoCttQfh75+vXrWL58OSIjI3HixAk4OTkBAA4dOoS+ffti3rx5mD9//m3f/+rVq/jzzz/x2WefAQDGjBmDZcuW4cMPPzTaops5cyY8PT0xf/58xMXFYdWqVUhKStInAnM+VyEE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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=get_ape_from_pd_series(\n", - " results_vqls.node[\"pressure\"].iloc[0], results_epanet.node[\"pressure\"].iloc[0]\n", - " ),\n", - " link_attribute=get_ape_from_pd_series(\n", - " results_vqls.link[\"flowrate\"].iloc[0],\n", - " results_epanet.link[\"flowrate\"].iloc[0],\n", - " ),\n", - " node_colorbar_label=\"Pressure %\",\n", - " link_colorbar_label=\"Flows %\",\n", - " node_size=150,\n", - " title=f\"{inp_file}: Absolute Percent Error\",\n", - " node_labels=True,\n", - " link_labels=True,\n", - " node_alpha=0.5,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot pressures and flow rates\n", - "\n", - "Let's check graphically the equivalence of the results." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "([0.117959075,\n", - " 0.078104034,\n", - " 0.008241083,\n", - " 0.01204921,\n", - " 0.007531483,\n", - " 0.0025685478,\n", - " -0.04852414,\n", - " 0.030392194,\n", - " 0.011843918,\n", - " 0.0019319967,\n", - " 0.008877585,\n", - " 0.003740702,\n", - " 0.117956705,\n", - " 89.70825,\n", - " 83.87705,\n", - " 82.31709,\n", - " 83.473785,\n", - " 82.762794,\n", - " 83.54178,\n", - " 84.93822,\n", - " 81.49804,\n", - " 77.93381,\n", - " 0.0,\n", - " 36.575996],\n", - " [0.11806882,\n", - " 0.078503616,\n", - " 0.008158389,\n", - " 0.013429636,\n", - " 0.008524677,\n", - " 0.0026579888,\n", - " -0.05025359,\n", - " 0.0298081,\n", - " 0.01063865,\n", - " 0.0017368766,\n", - " 0.007597902,\n", - " 0.0028983348,\n", - " 0.11786543,\n", - " 89.776764,\n", - " 83.93463,\n", - " 82.3188,\n", - " 83.484856,\n", - " 82.962975,\n", - " 83.60734,\n", - " 84.97667,\n", - " 82.05519,\n", - " 78.45686,\n", - " 0.0,\n", - " 36.575996])" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "from mpl_toolkits.axes_grid1.inset_locator import inset_axes\n", - "\n", - "fig, ax = plt.subplots()\n", - "ax.scatter(\n", - " results_classical[:n_pipes],\n", - " results_quantum[:n_pipes],\n", - " label=\"Flow rates\",\n", - " color=\"blue\",\n", - " marker=\"o\",\n", - ")\n", - "ax.scatter(\n", - " results_classical[n_pipes:],\n", - " results_quantum[n_pipes:],\n", - " label=\"Pressures\",\n", - " color=\"red\",\n", - " marker=\"s\",\n", - " facecolors=\"none\",\n", - ")\n", - "ax.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\", label=\"\")\n", - "ax.set_xlabel(\"Classical results\")\n", - "ax.set_ylabel(\"Quantum results\")\n", - "ax.legend()\n", - "\n", - "# inset plot\n", - "ax_inset = inset_axes(ax, width=\"35%\", height=\"35%\", loc=\"lower right\")\n", - "ax_inset.scatter(\n", - " results_classical[:n_pipes], results_quantum[:n_pipes], color=\"blue\", marker=\"o\"\n", - ")\n", - "ax_inset.scatter(\n", - " results_classical[n_pipes:],\n", - " results_quantum[n_pipes:],\n", - " color=\"red\",\n", - " marker=\"s\",\n", - " facecolors=\"none\",\n", - ")\n", - "ax_inset.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "ax_inset.set_xlim(-0.25, 0.5)\n", - "ax_inset.set_ylim(-0.25, 0.5)\n", - "ax_inset.set_xticks([-0.25, 0, 0.5])\n", - "ax_inset.set_yticks([-0.25, 0, 0.5])\n", - "# plt.legend()\n", - "plt.show()\n", - "\n", - "results_classical, results_quantum" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "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.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/qnr_vqls/vqls_Net1Loops.ipynb b/docs/notebooks/qnr_vqls/vqls_Net1Loops.ipynb deleted file mode 100644 index 6bc123f..0000000 --- a/docs/notebooks/qnr_vqls/vqls_Net1Loops.ipynb +++ /dev/null @@ -1,374 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net1Loops.inp`. Let's start by setting up the model:|" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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TZuiqqoqIiJef/31WLVqVYwfPz722Wef0r6OOOKIOOmkk2LJkiUf+zo+7KGHHophw4bF0KFDY+HChbW+Z6+srIyIiHvvvTd27Nix2308+OCDsW3bthg+fHi99/fs2TO+9rWvxezZs+P111+vd5vGWM/G1NB1/uCDD2Lp0qVxxhlnRM+ePUvbHXDAATF27Nh45JFH4p133qm174kTJ8Zee+1Vuj158uQoLy8v7bOh6/5JTJgwoda5BLt+n1566aVa25WXl8ekSZNKt1u1ahWTJk2KN998M5588slGmQt8EmKAJtetW7datzt16hQR/z6UumbNmiiKInr37h1dunSp9fPCCy/Em2+++bH779evX1RUVJQ++HfFwKBBg2LFihXx3nvvle7b9V38K6+8EhERX/rSl+rs79BDD40NGzbUOUmwR48e9T7/e++9FyNGjIgjjzwy5s+fX+fEs8GDB8dXvvKVuOKKK6Jz585x+umnxy233BLbtm2rtd3ixYtjwIABsd9+++32tV5++eXx/vvv7/bcgcZYz8bU0HV+6623oqamZrfb7dy5s9Y5DxERvXv3rnW7ffv2ccABB8S6desiouHr/kl81O/yhx144IHRrl27WmMHH3xwRERpfvBZcs4ATa5ly5b1jhdFETt37oyysrK477776t2uId9j77XXXnHMMcfEww8/HC+++GK88cYbUVVVFfvtt1/s2LEjHn/88Vi+fHkccsgh0aVLl//6dbRt27be8datW8cpp5wSixYtit///vcxcuTIWveXlZXFb3/723jsscfinnvuifvvvz/OP//8uOaaa+Kxxx4rvcYlS5bEhAkTPnIOPXv2jHPOOSdmz54dl156aZ37G2M99xQNXfdP4qN+l6E5EwM0a7169YqiKKJHjx6lv5x256PObq+qqorp06fHAw88EJ07d45DDjkkysrK4vDDD4/ly5fH8uXLa31Id+/ePSIiVq9eXWdff/3rX6Nz5851/rL7qHn95je/idNPPz3OPvvsuO++++r91+uOPfbYOPbYY2PatGlx++23x7hx4+KOO+6ICy64IJ599tn4+9//XueSwvpcfvnlMW/evNIJmB/WWOvZWBq6zm3atImKiordbteiRYs46KCDao2vWbMmTjzxxNLtd999N15//fU45ZRTam33Uev+aVm/fn1s2bKl1u/Q3/72t4iIOiemwmfB1wQ0a6NGjYqWLVvGFVdcUeevq6IoYuPGjaXb7dq1i82bN9e7n6qqqti2bVtcd911MXDgwNIHXVVVVcydOzfWr19f+n434t/fRfft2zduu+22WpcfPvvss7F06dI6Hygfp1WrVrFw4cI46qij4tRTT42//OUvpfvefvvtOq+tb9++ERGlQ9ZLliyJ/fbbLwYMGPCxz9WrV68455xzYtasWfHGG2/Uuq+x1rOxNHSdW7ZsGSeffHIsWrSo1mH0f/7zn3H77bfHwIEDo0OHDrX2PXv27FrnAsycOTPef//90jkXDVn3iIi1a9fG2rVrG+Pllrz//vsxa9as0u3t27fHrFmzokuXLtG/f/9GfS5oCEcGaNZ69eoVV155ZfzoRz+KdevWxRlnnBF77713vPzyy3H33XfHxIkT4+KLL46IiP79+8edd94ZF110URx11FHRvn37OPXUUyMi4rjjjovy8vJYvXp1TJw4sbT/QYMGxcyZMyMiasVARMTVV18dw4cPj+OOOy6+/vWvly5569ixY0ydOvUTv5a2bdvGvffeG//3f/8Xw4cPj2XLlkWfPn3itttui5tuuinOPPPM6NWrV/zrX/+KOXPmRIcOHUofhosXL47hw4c3+K/1KVOmxNy5c2P16tVx+OGHN/p63nPPPfHUU09FRMSOHTvi6aefjiuvvDIiIk477bQ44ogjas3nF7/4RVRUVNQaa9GiRVx22WUNXucrr7wy/vCHP8TAgQPjm9/8ZpSXl8esWbNi27ZtMWPGjDprsH379hg6dGiMHj06Vq9eHTfddFMMHDgwTjvttIiIBq17RMTQoUMjonG/yz/wwANj+vTpsW7dujj44IPjzjvvjFWrVsXs2bNrnfQIn5mmuYgBdn/Z2a5Lw15++eXS2IIFC4qBAwcW7dq1K9q1a1cccsghxbe+9a1i9erVpW3efffdYuzYsUVlZWUREXUuizvqqKOKiCgef/zx0thrr71WRERx0EEH1TvHBx54oDjhhBOKtm3bFh06dChOPfXU4vnnn2/Q6yiK2pcW7rJhw4bisMMOK/bff/9izZo1RXV1dTFmzJiiW7duRevWrYuuXbsWI0eOLFasWFEURVFs2rSpKC8vL+bPn19n/x++tLC+546IWpcW7vK/rueufdf38+FLH3etTX0/LVu2/ETrXBRFUV1dXQwbNqxo3759UVFRUZx44onFo48+Wu+aLFu2rJg4cWLRqVOnon379sW4ceNqXb74ceu+S/fu3ev8Lu3u0sK77rqr1nYvv/xynTXZdbnnihUriuOOO65o06ZN0b179+LGG2+s83rhs1JWFM5sgeZs/vz5MW7cuNiwYUN07NixqafT7N16660xYcKEeOKJJxr0tcpnbciQIbFhw4Z49tlnm3oqUOKcAWjmKisr4/rrrxcCwKfGOQPQzJ188slNPQVgD+fIAAAk55wBAEjOkQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACS3R8XApk2bYsCAAdG3b9/o06dPzJkzp6mnBM3aq6++GkOGDInDDjssjjjiiLjrrruaekrQrJ155pnRqVOnOOuss5p6Ko1qj4qBli1bxnnnnRfHHXdcTJw4MaZNmxYbN25s6mlBs7V9+/YYOHBgDB48OM4555z4zne+E1u2bGnqaUGzNWnSpBg7dmysXLkyZs2aFTU1NU09pUZRVhRF0dSTaAw1NTVRVVUV1dXVpbFWrVrFmjVrolu3bk04M2ie6nvPtG3bNlatWhUHH3xwE84Mmqf63jP9+vWL5cuXR0VFRRPO7H9X3tQTaCxz586t9R8o4t9/9cyePTtGjRrVRLOC5mvBggV13jNbt26NX//6194zUI/63jPV1dUxb968mDhxYhPNqnHsMUcGJk+eHDfffHNTTwOAZCZPnhw33XRTU0/jf7LHHBno27dvveOjRo2KKVOmfLaTgc+BBQsWxFVXXVVnfMqUKY4MQD12957Z3efP58kec2SgpqYmjj322HjmmWdKY23atIlly5bF0Ucf3YQzg+appqYmBg4cGCtXriyN7Snff8KnYU8+Z2CPuZqgoqIibrzxxujatWtERHTt2jVmzJghBGA3KioqYsaMGaXbXbt2jR07dsTatWubcFbQfFVUVESHDh2iffv2UV5eHpWVlfHzn//8cx8CEXvQkYFdqquro3///vHkk09Gv379mno60Ox5zwB7zJEBAOC/IwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACS3x8XAyJEjIyJizJgxceKJJzbxbKD527p1a0REXHvttU08E6Cp7FExUFNTEzU1NRERcdZZZ8XixYubeEbQvNXU1MQll1wSERFr1qwpvX+AXMqKoiiaehKNoaamJqqqqqK6uro01q9fv1i+fHlUVFQ04cygeaqpqYmjjjoqnn/++dKY9wzkVN7UE2gsc+fOrRUCERHV1dVx1VVXxahRo5poVtB8LViwoFYIRPz7PTNv3ryYOHFiE80KaAp7TAysWrWq3vFp06bFtGnTPtvJwOfY7t5LwJ5rj4mBvn371js+cuTIuOKKKz7bycDnwIUXXhh//vOf64zv7r0E7Ln2qHMGjj/++HjqqadKY23bto37778/qqqqmnBm0Dw5zwbYZY+JgYiI5557Lr785S/H1q1bo3Xr1vHd7343fvCDHzT1tKDZqqmpiXnz5sUdd9wR5eXl8bvf/U4IQEJ7VAwAAJ/cHvXvDAAAn5wYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJ/T8qcf1qNCsKYAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "os.environ[\"EPANET_TMP\"] = \"/home/nico/.epanet_quantum\"\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/home/nico/QuantumApplicationLab/vitens/EPANET\"\n", - "# set up network model\n", - "inp_file = \"networks/Net1Loops.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "\n", - "# print options\n", - "# dict(wn.options.hydraulic)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Epanet simulator\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. Note that, by default, `QuantumEpanetSimulator` uses a classical `CholeskySolver` to iteratively solve the linear problem." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Your EPANET quantum path: /home/nico/QuantumApplicationLab/vitens/EPANET\n", - "Your EPANET temp dir: /home/nico/.epanet_quantum\n", - "\n", - "Size of the Jacobian in EPANET simulator: 4\n", - "Size of the b vector in EPANET simulator: 4\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 2 3 4 5 1\n", - " 0 57.939995 31.496479 52.434612 21.174667 4.394531e-07,\n", - " name 1 2 3 4 5\n", - " 0 0.163867 0.059455 0.076645 0.043315 0.031685)" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import sys\n", - "\n", - "# define the classical EPANET simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "\n", - "# run the EPANET simulation\n", - "results_epanet = sim.run_sim()\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "util_path = os.path.join(epanet_path, \"src/py/\")\n", - "sys.path.append(util_path)\n", - "\n", - "from quantum_linsolve import load_json_data\n", - "\n", - "epanet_A, epanet_b = load_json_data(os.path.join(epanet_tmp, \"smat.json\"))\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define a helper function\n", - "\n", - "Before proceeding to the proper quantum solution of the water network model, let's define a helper function. This function checks that the quantum results are within `TOL`% of those obtained classically. It also fills in lists containing the final values of pressures and flow rates obtained." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "TOL = 5 # => per cent\n", - "DELTA = 1.0e-12\n", - "\n", - "classical_res = []\n", - "quantum_res = []\n", - "\n", - "\n", - "def compare_results(classical_result, quantum_result):\n", - " \"\"\"\n", - " Helper function that compares the classical and quantum simulation results.\n", - " \"\"\"\n", - "\n", - " def calculate_differences(classical_value, quantum_value):\n", - " \"\"\"Helper function to evaluate percentage difference between classical and quantum results.\"\"\"\n", - " is_close_to_classical = (\n", - " abs(classical_value - quantum_value) / abs(classical_value + DELTA)\n", - " <= TOL / 100.0\n", - " )\n", - " if is_close_to_classical:\n", - " print(\n", - " f\"Quantum result {quantum_value} within {TOL}% of classical result {classical_value}\"\n", - " )\n", - " quantum_res.append(quantum_value)\n", - " classical_res.append(classical_value)\n", - " return is_close_to_classical\n", - "\n", - " for link in classical_result.link[\"flowrate\"].columns:\n", - " classical_value = classical_result.link[\"flowrate\"][link].iloc[0]\n", - " quantum_value = quantum_result.link[\"flowrate\"][link].iloc[0]\n", - " message = f\"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert calculate_differences(classical_value, quantum_value), message\n", - "\n", - " for node in classical_result.node[\"pressure\"].columns:\n", - " classical_value = classical_result.node[\"pressure\"][node].iloc[0]\n", - " quantum_value = quantum_result.node[\"pressure\"][node].iloc[0]\n", - " message = f\"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert calculate_differences(classical_value, quantum_value), message" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve water network with `QuantumEpanetSimulator` and VQLS \n", - "\n", - "We now solve the model using VQLS. In this example, we are **preconditioning** the initial linear system using *diagonal scaling* and also using a **mix of two classical optimizers**." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "VQLS Iteration 126 Cost 3.675e-08\n", - " Normal return from subroutine COBYLA\n", - "\n", - " NFVALS = 126 F = 3.674985E-08 MAXCV = 0.000000E+00\n", - " X = 1.191354E-01 -1.466038E+00 7.740023E-01 -3.243196E-01 7.724003E-01\n", - " 6.778685E-02 1.367636E+00 -1.893541E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 3\n", - " Function evaluations: 63\n", - " Gradient evaluations: 7\n", - "VQLS Iteration 133 Cost 1.504e-07\n", - " Normal return from subroutine COBYLA\n", - "\n", - " NFVALS = 133 F = 1.503901E-07 MAXCV = 0.000000E+00\n", - " X = 4.679995E+00 2.867229E+00 9.799046E-01 -2.856677E+00 1.070778E+00\n", - " -7.620220E-01 -2.741235E+00 -1.044200E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 3\n", - " Function evaluations: 54\n", - " Gradient evaluations: 6\n", - "VQLS Iteration 149 Cost 1.424e-07\n", - " Normal return from subroutine COBYLA\n", - "\n", - " NFVALS = 149 F = 1.423865E-07 MAXCV = 0.000000E+00\n", - " X =-4.624011E-01 -1.708293E+00 8.099204E-01 -3.450876E+00 1.509861E+00\n", - " -2.344735E+00 3.965682E+00 -1.108613E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 4\n", - " Function evaluations: 72\n", - " Gradient evaluations: 8\n", - "Quantum result 0.1638660728931427 within 5% of classical result 0.16386687755584717\n", - "Quantum result 0.059451714158058167 within 5% of classical result 0.05945523828268051\n", - "Quantum result 0.07663743942975998 within 5% of classical result 0.07664506137371063\n", - "Quantum result 0.043313007801771164 within 5% of classical result 0.043314848095178604\n", - "Quantum result 0.0316842645406723 within 5% of classical result 0.03168521821498871\n", - "Quantum result 57.94001388549805 within 5% of classical result 57.93999481201172\n", - "Quantum result 31.498302459716797 within 5% of classical result 31.496479034423828\n", - "Quantum result 52.434722900390625 within 5% of classical result 52.43461227416992\n", - "Quantum result 21.17762565612793 within 5% of classical result 21.174667358398438\n", - "Quantum result 4.39453117451194e-07 within 5% of classical result 4.39453117451194e-07\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 2 3 4 5 1\n", - " 0 57.940014 31.498302 52.434723 21.177626 4.394531e-07,\n", - " name 1 2 3 4 5\n", - " 0 0.163866 0.059452 0.076637 0.043313 0.031684)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit.primitives import Estimator\n", - "from qiskit_algorithms import optimizers as opt\n", - "\n", - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", - "\n", - "qc = RealAmplitudes(n_qubits, reps=3, entanglement=\"full\")\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = VQLS_SOLVER(\n", - " estimator=estimator,\n", - " ansatz=qc,\n", - " optimizer=[opt.COBYLA(maxiter=1000, disp=True), opt.CG(maxiter=500, disp=True)],\n", - " matrix_decomposition=\"symmetric\",\n", - " verbose=True,\n", - " preconditioner=\"diagonal_scaling\",\n", - ")\n", - "\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "results_vqls = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "compare_results(results_epanet, results_vqls)\n", - "\n", - "results_vqls.node[\"pressure\"], results_vqls.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot pressures and flow rates\n", - "\n", - "Let's check graphically the equivalence of the results." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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OOrVq4e3tzctW7a8puCJiEjlysvLY/bs2axatQrDMDhz5ozZkTRSczvmzYOEBPjp9WOnT1/ZnpgIcXHmZPuxCRMmkJaWxtdff42/vz8vvvgiw4YNY9++fbi7u3PnnXeyatUqEhISuHjxIvv378fb25sDBw7Qpk0bUlJS6N69+00vfU9OTsbf35/ly5fbtpWUlPCnP/2J1q1bc/bsWSZPnsyECRNYvHgx4eHhJCUlER8fz8GDB/H397etKjl16lRmz57NBx98QMuWLVm9ejUPPvgg9erVo3///rz00kvs27ePJUuWULduXQ4fPszly5cr/TiKiMgVR8+dY96KFeTn5+Pu7s6wYcNuuNJ/VVKpsZPVCs89d22hgSvbLBZ4/nkYNapyTkUtWrQIX19f2/OhQ4cyd+7ca153tcysW7eO3r17A/D5558THh7OggULGDt2LAMGDGD69OkArF69mi5duhAWFsaqVato06YNq1aton///jfNU6dOHT766KNyp53+7//+z/bfd9xxB9OmTaN79+7k5eXh6+tLcHAwAPXr17fNqSkqKuL111/n+++/Jzo62vaza9euZfr06fTv35/09HS6dOlCt27dAGjatGkFj56IiNijzDBIGTCA1Rs2AFf+/k5ISHCa6Q86/WSnNWvg1Kkb7zcMOHnyyusqw8CBA9mxY4ftMW3atOu+bv/+/bi5udGzZ0/btpCQEFq3bs3+/fsB6N+/P/v27ePcuXOkpKQwYMAABgwYwKpVqygpKWH9+vUMGDDgpnk6dOhwzTyarVu3MnLkSCIiIvDz87MVo/T09Bu+z+HDhykoKGDQoEH4+vraHp999hlHjhwB4Omnn+arr76ic+fO/Pa3v2X9+vU/e7xEROT2nbl0idX/+7u8S5cuPPbYY05TaEAjNXbLyHDs6yqqTp06DrvSqUOHDgQHB5OSkkJKSgp/+ctfCAsL469//SubN2+mpKTENspzszw/lp+fT2xsLLGxsXz++efUq1eP9PR0YmNjKS4uvuH75OXlAfDtt9/SqFGjcvuuXhY4dOhQTpw4weLFi1m+fDl33303EydO5O9//7s9v3wREblFjYOCuCs5mcBx4+jQuDHs3n3ti/73D2YzqNTY6UfzaB3yusoSGRlJaWkpGzdutBWTCxcucPDgQdsd0i0WC/369WPhwoXs3buXvn374uPjQ1FREdOnT6dbt27XlJafc+DAAS5cuMAbb7xBeHg4AFu2bCn3mh/fwuCqtm3b4unpSXp6+k1PedWrV4/x48czfvx4+vXrx29+8xuVGhERBysrKyMlJYVOnTpdmTLg50e/tWth7dqf/2E/v8oP+BMqNXbq1w8aN74yKfh682osliv7+/Wr+mw/1rJlS0aNGsXjjz/O9OnT8fPz43e/+x2NGjVi1KhRttcNGDCAX/3qV3Tr1s02V+fOO+/k888/5ze/+U2FPzciIgIPDw/+9a9/8dRTT7Fnzx7+9Kc/lXtNkyZNsFgsLFq0iGHDhuHt7Y2fnx+//vWveeGFFygrK6Nv375kZ2ezbt06/P39GT9+PC+//DJRUVG0a9eOoqIiFi1aROSP1ksQEZHbl52dTVJSEidPniQtLY3HHnsMl5Yt4dChm64oDFwpNC1bVk3QH9GcGju5usI771z5759ein/1+dtvV/56Nbdi5syZREVFMWLECKKjozEMg8WLF5e7wWP//v2xWq3l5s4MGDDgmm23ql69esyaNYu5c+fStm1b3njjjWtGUho1asQf//hHfve73xEaGsqkSZMA+NOf/sRLL73E1KlTiYyMZMiQIXz77bc0a9YMuDLCM2XKFDp27Midd96Jq6srX331VcUPjIiIXNehQ4eYPn06J0+exNPTkz59+uDi8r/K0LIldO1684cJhQZ0Q8vbvtnhvHlXroL68aTh8PArhcYZLueu7XRDSxGRW2e1Wvn+++/Z8L+rmxo0aEBCQoLtatWqpBtamiAu7spl21W9orCIiIgj5eXl8dVXX3H69GkAevbsSUxMDG5u1acqVJ+kTszVFew4QyMiIuI0vL29MQwDLy8vRo0aRZs2bcyOVGEqNSIiIrVUaWkpLi4uuLi44OrqytixYwGq7U2GNVFYRESkFvrhhx/45JNPWLFihW1bYGBgtS00oJEaERGRWmfv3r188803FBUVkZ2dTZ8+fWz336vOVGpERERqidLSUpYtW2ZbDDU8PJz4+PgaUWhApUZERKRWuHDhAnPnziUrKwuAvn37MmDAAFxr0OW6KjUiIiI1XGlpKbNmzSIvLw8fHx/GjBnjsPsHOhOVGhERkRrOzc2NmJgYtm/fTnx8PH4m3JepKqjUiIiI1EDnzp2jqKiIxo0bA9CpUyc6duyI5af39qlBdEl3NTVhwgQsFgsWiwUPDw9atGjBa6+9RmlpqdnRRETEZDt27GDGjBn897//JT8/37a9Jhca0EjN7UlLu/mdSiv5LqVDhgxh5syZFBUVsXjxYiZOnIi7uztTpkwp97ri4mI8PDwqLYc9nDGTiEh1V1xczOLFi9m5cyeAbZSmttBIjb3S0qBVK4iKuvGjVasrr6sknp6ehIWF0aRJE55++mliYmL4+uuvmTBhAqNHj+Yvf/kLDRs2pHXr1gCcPHmSX/ziFwQGBhIcHMyoUaM4fvy47f1WrVpFjx49qFOnDoGBgfTp04cTJ04AsHPnTgYOHIifnx/+/v5ERUXZLgl89dVX6dy5c7lsb7/9Nk2bNrU9r4xMIiLy/509e5YZM2awc+dOLBYLAwYM4MEHH6ROnTpmR6syGqmx19URmtmzITLy2v3798ODD958JMfBvL29uXDhAgDJycn4+/uzfPlyAEpKSoiNjSU6Opo1a9bg5ubGn//8Z4YMGcKuXbtwcXFh9OjRPP7443z55ZcUFxezadMm21DluHHj6NKlC++//z6urq7s2LEDd3f3CuVzdCYREQHDMNi+fTtLliyhtLQUPz8/4uLiyv3DsrZQqbldkZHQtaupEQzDIDk5mWXLlvHMM89w7tw56tSpw0cffWQ7xTN79mzKysr46KOPbKVg5syZBAYGsmrVKrp160Z2djYjRoygefPmAET+qKylp6fzm9/8xnaDs5Z2nFZzdCYREbni6NGjlJaW0rx5c8aMGVOrRmd+TKefqrFFixbh6+uLl5cXQ4cO5d577+XVV18FoEOHDuXmrOzcuZPDhw/j5+eHr68vvr6+BAcHU1hYyJEjRwgODmbChAnExsYycuRI3nnnHTIyMmw/P3nyZB577DFiYmJ44403OHLkSIXzOjqTiIhcmfw7YsQIhg4dyrhx42ptoQGVmmpt4MCB7Nixg7S0NC5fvsynn35q+83809/UeXl5REVFsWPHjnKPQ4cO8cADDwBXRklSU1Pp3bs3c+bMoVWrVmzYsAG4Mm9m7969DB8+nBUrVtC2bVvmz58PgIuLC4ZhlPu8kpKSa/I6OpOISG1kGAZbtmxh3rx5tr97vby86NGjR60/Pa/TT9VYnTp1bnlFyK5duzJnzhzq16+Pv7//DV/XpUsXunTpwpQpU4iOjuaLL76gV69eALRq1YpWrVrxwgsvcP/99zNz5kzGjBlDvXr1yMzMxDAM2x+oHTt2VEkmEZHapLCwkEWLFrF3714A2rZta5sWIBqpqTXGjRtH3bp1GTVqFGvWrOHYsWOsWrWKZ599llOnTnHs2DGmTJlCamoqJ06c4LvvviMtLY3IyEguX77MpEmTWLVqFSdOnGDdunVs3rzZNr9lwIABnDt3jr/97W8cOXKEd999lyVLllRqJhGR2ubMmTN8+OGH7N27FxcXFwYNGmS7klSu0EjN7dq/v2LbTeLj48Pq1at58cUXiYuLIzc3l0aNGnH33Xfj7+/P5cuXOXDgAJ9++ikXLlygQYMGTJw4kSeffJLS0lIuXLjAww8/TFZWFnXr1iUuLo4//vGPwJXJu++99x6vv/46f/rTn4iPj+fXv/41H374YaVlEhGpUW6y7plhGGw6fpzl+/ZhLSsjICCAhISEWrcGza2wGD+dDFHD5OTkEBAQQHZ29jWnOAoLCzl27BjNmjXDy8urYm98dZ2an3PoUKUuwCc3d1v/H4uIVIWf+T5ZPGwYm3v0AKBN48bc88ADeHt7V1U609zs+/tGNFJjr5YtrxQWE1cUFhGRGuBn1j1rf+EC21NTiVm8mB7vvoulFhQae6nU3A4VFhERcZT/rXtmGAbnzp2jfv36AEQAz/v6UueVV6CWX930czRRWERExEkUFBTw1Vdf8dFHH3Hu3Dnb9jqeniamqj40UiMiIuIE0n/4gaTp08nJycHV1ZWzZ89Sr149s2NVKyo1cM3CcVJz6P9bEXF2hmGwrm9fVqxfj2EYBAcHM3bsWMLCwsyOVu3U6lJz9YaMBQUFtWImeW1UXFwMgKurq8lJRESulZ+fz4KNGzkcEwOGQfv27RkxYgSeOt1kl1pdalxdXQkMDOTs2bPAlXVTavsS0zVJWVkZ586dw8fHBze3Wv1bXUSc1LZt2zh87hxuJSUMbdiQLk2bYvnfasHlONnaZ86q1v9Nf3V472qxkZrFxcWFiIgIlVURcUp9+vThh+PH6fXrXxN6K99Dfn6VH6oaq9WL7/2Y1Wq97k0YpXrz8PDAxUUX+YmIc8jLy2PNmjUMGjSo/AjyTVYUtqlla59p8b3b4OrqqnkXIiJSaY4ePcq8efPIz8/H1dWVwYMH//+dtaisVCaVGhERkUpUVlZGSkoKq1evBqB+/fp06dLF5FQ1k0qNiIhIJcnNzSUpKYkTJ04A0KVLF4YOHWq7+lYcS6VGRESkEqSnpzNnzhwKCgrw8PBgxIgRdOjQwexYNZqpMyhfffVVLBZLuUebNm1s+wsLC5k4cSIhISH4+voSHx9PVlaWiYlFRERujZ+fH1arldDQUJ544gkVmipg+khNu3bt+P77723Pfzwb/IUXXuDbb79l7ty5BAQEMGnSJOLi4li3bp0ZUUVERG6quLgYDw8PAIKCgnj44YepX7++1sqqIqYfZTc3t+suBZ2dnc3HH3/MF198wV133QXAzJkziYyMZMOGDfTq1auqo4qIiNzQoUOHWLhwIXFxcTRv3hyAhg0bmpyqdjF9AY+0tDQaNmzIHXfcwbhx40hPTwdg69atlJSUEBMTY3ttmzZtiIiIIDU19YbvV1RURE5OTrmHiIhIZbFarXz33Xd8+eWXFBQUsGHDBrMj1VqmlpqePXsya9Ysli5dyvvvv8+xY8fo168fubm5ZGZm4uHhQWBgYLmfCQ0NJTMz84bvOXXqVAICAmyP8PDwSv5ViIhIbXXp0iVmzpxp+8d2jx49uPfee01OVXuZevpp6NChtv/u2LEjPXv2pEmTJvz3v/+1+waTU6ZMYfLkybbnOTk5KjYiIuJwBw4cYOHChRQWFuLl5cU999xDZGSk2bFqNdPn1PxYYGAgrVq14vDhwwwaNIji4mIuXbpUbrQmKyvrprdj9/T01N1NRUSkUp0+fZo5c+YA0KhRIxISEq45syBVz/Q5NT+Wl5fHkSNHaNCgAVFRUbi7u5OcnGzbf/DgQdLT04mOjjYxpYiI1HaNGjWic+fOREdH88gjj6jQOAlTR2p+/etfM3LkSJo0acKZM2d45ZVXcHV15f777ycgIIBHH32UyZMnExwcjL+/P8888wzR0dG68klERKrcgQMHiIiIwMfHB4B77rkHi8Vicir5MVNLzalTp7j//vu5cOEC9erVo2/fvmzYsIF69eoB8NZbb+Hi4kJ8fDxFRUXExsby3nvvmRlZRERqmdLSUpYtW8aWLVto2bIl999/v23BWHEuFsMwDLNDVCZ7bl0uIiICcOHCBRITE21X3fbp04e77roLFxenmr1RI9nz/e1UE4VFREScxe7du1m0aBHFxcX4+PgwZswYWrRoYXYsuQmVGhERkR8pKSlh6dKlbNu2DYAmTZoQFxen0f5qQKVGRETkR6xWK0ePHgWgX79+DBgwQKebqgmVGhEREcAwDCwWC15eXowdO5bCwkLuuOMOs2NJBajUiIhIrVZcXMySJUto2LAh3bt3B3QjyupKpUZERGqts2fPkpiYyLlz59izZw9t27alTp06ZscSO6nUiIhIrWMYBtu3b2fJkiWUlpbi6+tLfHy8Ck01p1IjIiK1SlFREd9++y27d+8GoHnz5owZM0aFpgZQqRERkVrDarXy8ccfc+7cOSwWCwMHDqRv375aHbiGUKkREZFaw9XVlQ4dOrB582YSEhKIiIgwO5I4kEqNiIjUaEVFRRQUFBAUFARA37596datG97e3iYnE0dTqRERkRrrzJkzJCYm4u7uzmOPPYa7uzsWi0WFpoZSqRERkRrHMAw2bdrE8uXLsVqtthsj1q1b1+xoUolUakREpEYpLCzk66+/Zv/+/QC0bt2aUaNGaXSmFlCpERGRGuP06dMkJiZy6dIlXFxcGDRoED179tTVTbWESo2IiNQIhmGQnJzMpUuXCAwMJCEhgUaNGpkdS6qQSo2IiNQIFouF0aNHs2rVKgYPHoyXl5fZkaSK6V7qIiJSbZ08eZI1a9bYnvv7+3PPPfeo0NRSGqkREZFqxzAM1q9fT3JyMoZhEBYWRsuWLc2OJSZTqRERkWolPz+fBQsWcPjwYQDat2+vlYEFUKkREZFq5MSJEyQlJZGbm4ubmxtDhgyha9euurpJAJUaERGpJlJTU1m+fDmGYVC3bl0SEhIIDQ01O5Y4EZUaERGpFvz9/TEMg06dOjFs2DA8PDzMjiRORqVGREScVlFREZ6engC0a9cOf39/wsPDTU4lzkqXdIuIiNMpKytj5cqV/Pvf/yY3N9e2XYVGbkalRkREnEpubi7/+c9/WL16NXl5eezdu9fsSFJN6PSTiIg4jSNHjjBv3jwKCgpwd3dnxIgRdOzY0exYUk2o1IiIiOmunm5au3YtAKGhoSQkJFC3bl2Tk0l1olIjIiKmW7duna3QREVFERsbi7u7u8mppLpRqREREdP17NmTgwcP0qtXL9q3b292HKmmNFFYRESqnNVqZfv27RiGAYCHhwePPvqoCo3cFo3UiIhIlbp06RJJSUmcOnWKy5cv07t3bwDd6kBum0qNiIhUmQMHDrBw4UIKCwvx9PQkKCjI7EhSg6jUiIhIpbNarSxfvpyNGzcC0LBhQxISElRqxKFUakREpFJdvHiRxMREzpw5A0CvXr2IiYnB1dXV5GRS06jUiIhIpSooKCAzMxMvLy9Gjx5N69atzY4kNZRKjYiIOJxhGLaJv40aNSIuLo7GjRsTEBBgcjKpyXRJt4iIONSFCxf45JNPyMzMtG1r166dCo1UOpUaERFxmD179vDhhx9y6tQpFi9ebFuHRqQq6PSTiIjctpKSEpYuXcq2bdsAiIiIID4+XmvPSJVSqRERkdty/vx55s6dy9mzZwHo168fAwYMwMVFJwOkaqnUiIiI3bKysvj4448pKSmhTp06jBkzhubNm5sdS2oplRoREbFbvXr1CA8Pp6ysjLi4OPz8/MyOJLWYSo2IiFTIuXPnCAwMxN3dHRcXF8aOHYuHh4dON4np9DtQRERuiWEYbN++nQ8//JClS5fatnt5eanQiFPQSI2IiPys4uJivv32W3bt2gVcudN2aWkpbm76GhHnod+NIiJyU1lZWcydO5cLFy5gsVgYOHAgffv21eXa4nScZrzwjTfewGKx8Pzzz9u2FRYWMnHiREJCQvD19SU+Pp6srCzzQoqI1CKGYbBlyxZmzJjBhQsX8PPzY/z48fTr10+FRpySU5SazZs3M336dDp27Fhu+wsvvMA333zD3LlzSUlJ4cyZM8TFxZmUUkSkdrl8+TIrVqzAarXSokULnnrqKZo0aWJ2LJEbMv30U15eHuPGjWPGjBn8+c9/tm3Pzs7m448/5osvvuCuu+4CYObMmURGRrJhwwZ69eplVmQRkVrBx8eH0aNHc+7cOXr37q3RGXF6po/UTJw4keHDhxMTE1Nu+9atWykpKSm3vU2bNkRERJCamnrD9ysqKiInJ6fcQ0REfp5hGGzatImDBw/atrVq1Yo+ffqo0Ei1YOpIzVdffcW2bdvYvHnzNfsyMzPx8PAgMDCw3PbQ0NByd379qalTp/LHP/7R0VFFRGq0wsJCvv76a/bv34+XlxcTJ07E19fX7FgiFWLaSM3Jkyd57rnn+Pzzz/Hy8nLY+06ZMoXs7Gzb4+TJkw57bxGRmuj06dNMnz6d/fv34+LiQv/+/alTp47ZsUQqzLSRmq1bt3L27Fm6du1q22a1Wlm9ejX//ve/WbZsGcXFxVy6dKncaE1WVhZhYWE3fF9PT088PT0rM7qISI1gGAYbNmzg+++/p6ysjMDAQBISEmjUqJHZ0UTsYlqpufvuu9m9e3e5bY888ght2rThxRdfJDw8HHd3d5KTk4mPjwfg4MGDpKenEx0dbUZkEZEaw2q1MnfuXNv8mcjISO655x6HjpyLVDXTSo2fnx/t27cvt61OnTqEhITYtj/66KNMnjyZ4OBg/P39eeaZZ4iOjtaVTyIit8nV1RVfX19cXV0ZPHgw3bt312RgqfZMv6T7Zt566y1cXFyIj4+nqKiI2NhY3nvvPbNjiYhUS4ZhUFxcbDtFHxsbS/fu3QkNDTU5mYhjWAzDMMwOUZlycnIICAggOzsbf39/s+OIiJiioKCA+fPnY7VaefDBB3UDSnF69nx/O/VIjYiI3L4TJ06QlJREbm4urq6uZGZm0rBhQ7NjiTicXVV96dKlrF271vb83XffpXPnzjzwwANcvHjRYeFERMR+hmGwevVqPv30U3JzcwkJCeHxxx9XoZEay65S85vf/Ma2Uu/u3bv51a9+xbBhwzh27BiTJ092aEAREam4vLw8Zs+ezcqVKzEMg44dO/LEE09o/ozUaHadfjp27Bht27YFICkpiREjRvD666+zbds2hg0b5tCAIiJScUlJSRw/fhw3NzeGDRtG586ddXWT1Hh2jdR4eHhQUFAAwPfff8/gwYMBCA4O1r2WREScwJAhQ2jQoAGPP/44Xbp0UaGRWsGukZq+ffsyefJk+vTpw6ZNm5gzZw4Ahw4donHjxg4NKCIiPy83N5eTJ0/aRtFDQ0N5/PHHVWakVrFrpObf//43bm5uJCYm8v7779uW1F6yZAlDhgxxaEAREbm5I0eOMH36dJKSkjh9+rRtuwqN1DZap0ZEpJoqKytj1apVrFmzBrgyOpOQkEDdunVNTiZy+6psnRpXV1cyMjKoX79+ue0XLlygfv36WK1We95WRERuUU5ODklJSaSnpwMQFRVFbGws7u7uJicTMY9dpeZGgztFRUV4eHjcViAREbm5tLQ05s+fz+XLl/Hw8GDkyJHX3EtPpDaqUKmZNm0acOU87UcffYSvr69tn9VqZfXq1bRp08axCUVEpJzz589z+fJlwsLCGDt2LMHBwWZHEnEKFSo1b731FnBlpOaDDz7A1dXVts/Dw4OmTZvywQcfODahiIhgGIZt4m+vXr1wd3enc+fOuLnpbjciV1XoT8OxY8cAGDhwIPPmzSMoKKhSQomIyP938OBB1q5dy0MPPYSHhwcWi4Vu3bqZHUvE6dhV8VeuXOnoHCIi8hNWq5Xvv/+eDRs2ALB+/XoGDBhgbigRJ3bLpaYi93T65z//aVcYERG54uLFiyQmJnLmzBkAevbsSb9+/UxOJeLcbrnUbN++/ZZep8WeRERuz/79+1m4cCFFRUV4eXkxevRoWrdubXYsEad3y6VGp5xERCrfli1b+PbbbwFo3Lgx8fHxBAYGmhtKpJrQtHkRESfSpk0bUlJS6NixI3fddVe5q0xF5ObsKjUDBw686WmmFStW2B1IRKS2OXPmDA0bNgTA19eXiRMn4uXlZXIqkerHrlLTuXPncs9LSkrYsWMHe/bsYfz48Y7IJSJS45WUlLBs2TK2bt1KQkIC7dq1A1ChEbGTXaXm6iJ8P/Xqq6+Sl5d3W4FERGqD8+fPk5iYSFZWFgA//PCDyYlEqj+H3qX78OHD9OjRw6n+cOou3SLibHbt2sWiRYsoKSnBx8eHuLg4mjdvbnYsEadSZXfpvpHU1FQNm4qI3EBJSQmLFy9mx44dADRt2pS4uDj8/PzMDSZSQ9hVauLi4so9NwyDjIwMtmzZwksvveSQYCIiNU16erqt0PTv358777wTFxcXc0OJ1CB2lZqAgIByz11cXGjdujWvvfYagwcPdkgwEZGapnnz5gwcOJDw8HCaNWtmdhyRGsehc2qckebUiIhZiouLWb58OX379r3mH4MicnP2fH/bNe558uRJTp06ZXu+adMmnn/+eT788EN73k5EpMbJyspixowZbNmyhfnz51PD//0o4hTsKjUPPPCA7bYJmZmZxMTEsGnTJn7/+9/z2muvOTSgiEh1YhgGW7du5aOPPuL8+fP4+fn97IKlIuIYdpWaPXv20KNHDwD++9//0qFDB9avX8/nn3/OrFmzHJlPRKTaKCoqYt68eSxatIjS0lJatGjBk08+SZMmTcyOJlIr2DVRuKSkBE9PTwC+//577rnnHuDKPUsyMjIcl05EpJq4ePEis2fP5ocffsBisXD33XfTu3dvjdCIVCG7RmratWvHBx98wJo1a1i+fDlDhgwBrty/JCQkxKEBRUSqA19fX9zc3PD39+eRRx6hT58+KjQiVcyukZq//vWvjBkzhjfffJPx48fTqVMnAL7++mvbaSkRkZquqKgId3d3XFxccHd357777sPLywtvb2+zo4nUSnZf0m21WsnJySEoKMi27fjx4/j4+FC/fn2HBbxduqRbRCrD6dOnSUxMpEuXLtx5551mxxGpcarskm74/zP8p0+fTm5uLgAeHh74+PjY+5YiIk7PMAw2bNjAJ598wqVLl9i5cyclJSVmxxIR7Dz9dOLECYYMGUJ6ejpFRUUMGjQIPz8//vrXv1JUVMQHH3zg6JwiIqa7fPkyCxcu5ODBgwBERkZyzz334O7ubnIyEQE7S81zzz1Ht27d2LlzZ7mJwWPGjOHxxx93WDgREWdx6tQpEhMTyc7OxtXVlcGDB9O9e3dNBhZxInaVmjVr1rB+/Xo8PDzKbW/atCmnT592SDAREWdx+fJl/vOf/1BcXExQUBBjx46lQYMGZscSkZ+wq9SUlZVhtVqv2X7q1Cn8/PxuO5SISJVIS4P/zQm8IT8/vFu2ZNCgQRw/fpyRI0fa1ukSEediV6kZPHgwb7/9tu1eTxaLhby8PF555RWGDRvm0IAiIpUiLQ1atbrh7vSICNxKS2l45gwcOkRUVBRRUVE63STixOwqNX//+98ZMmQIbdu2pbCwkAceeIC0tDTq1q3Ll19+6eiMIiKOd3WEZvZsiIy0bTYMg7WHD7Py4EECXF158s9/xis3V2VGpBqwq9SEh4ezc+dO5syZw86dO8nLy+PRRx9l3LhxWnRKRKqXyEjo2hWA/Px85s+fz5EjRwCICA3FpazMzHQiUgEVLjUlJSW0adOGRYsWMW7cOMaNG1cZuUREqtTx48dJSkoiLy8PNzc3hg0bRueyMizFxWZHE5FbVOFS4+7uTmFhYWVkERGpcmWGwZqUFFJSUjAMg3r16pGQkHBlZfRt28yOJyIVYNeKwhMnTuSvf/0rpaWljs4jIlKlLFy55YFhGHTu3JnHHnvMqW71IiK3zq45NZs3byY5OZnvvvuODh06UKdOnXL7582b55BwIiKVxTAMLFy5enP06NEcPXqU9u3bmx1LRG6DXaUmMDCQ+Ph4R2cREal0ZWVlrFq1itzjx7kHsOzfjw/QHq493bR/f9UHFBG72VVqZs6c6egcIiKVLicnh3nz5nHixAkAuoSHE/Hggz//g1pUVKRasPsu3Y7w/vvv07FjR/z9/fH39yc6OpolS5bY9hcWFjJx4kRCQkLw9fUlPj6erKwsExOLSHV1+PBhpk+fzokTJ/Dw8CA+Pp6I5GTYuvXmj0OHoGVLs+OLyC2wa6TGURo3bswbb7xBy5YtMQyDTz/9lFGjRrF9+3batWvHCy+8wLfffsvcuXMJCAhg0qRJxMXFsW7dOjNji0g1YrVaWblype3vjbCwMBISEsrdjFdEagaLYRiG2SF+LDg4mDfffJOEhATq1avHF198QUJCAgAHDhwgMjKS1NRUevXqdUvvl5OTQ0BAANnZ2fj7+1dmdBFxQnPmzOHAgQMAdO/encGDB+PmZuq/50TkFtjz/e00f7KtVitz584lPz+f6Ohotm7dSklJCTExMbbXtGnThoiIiJuWmqKiIoqKimzPc3JyKj27iDivbt262W5E2bZtW7PjiEglMnVODcDu3bvx9fXF09OTp556ivnz59O2bVsyMzPx8PAgMDCw3OtDQ0PJzMy84ftNnTqVgIAA2yM8PLySfwUi4kysVisZGRm2582bN+e5555ToRGpBeweqdm8eTMrV67k7NmzlP3k3ij//Oc/b/l9WrduzY4dO8jOziYxMZHx48eTkpJibyymTJnC5MmTbc9zcnJUbERqiYsXL5KUlMS5c+d48sknCQ4OBsDLy8vkZCJSFewqNa+//jp/+MMfaN26NaGhoeXuXlvRO9l6eHjQokULAKKioti8eTPvvPMO9957L8XFxVy6dKncaE1WVhZhYWE3fD9PT088PT0r9gsSkWpv//79LFy4kKKiIry8vMjOzraVGhGpHewqNe+88w6ffPIJEyZMcHCcKwtjFRUVERUVhbu7O8nJybaF/g4ePEh6ejrR0dEO/1wRqZ5KS0tZvnw5mzZtAq5cVRkfH3/NqWsRqfnsKjUuLi706dPntj98ypQpDB06lIiICHJzc/niiy9YtWoVy5YtIyAggEcffZTJkycTHByMv78/zzzzDNHR0bd85ZOI1Gw//PADiYmJtjk0vXv35q677sLV1dXkZCJiBrtKzQsvvMC7777L22+/fVsffvbsWR5++GEyMjIICAigY8eOLFu2jEGDBgHw1ltv4eLiQnx8PEVFRcTGxvLee+/d1meKSM2xbds2MjIy8Pb2ZsyYMbTUInkitZpd69SUlZUxfPhwDh06RNu2bXF3dy+335luaKl1akRqLqvVyrJly+jbt6/+fIvUMPZ8f9t1Sfezzz7LypUradWqFSEhIeUuoQ4ICLDnLUVEftaFCxf45ptvbFdcurq6MmzYMBUaEQHsPP306aefkpSUxPDhwx2dR0Tkunbt2sWiRYsoKSnB39+f/v37mx1JRJyMXaUmODiY5s2bOzqLiMg1SkpKWLJkCdu3bwegadOmdO3a1eRUIuKM7Dr99Oqrr/LKK69QUFDg6DwiIjbnzp1jxowZtkLTv39/HnroIfz8/ExOJiLOyK6RmmnTpnHkyBFCQ0Np2rTpNROFt23b5pBwIlJ7HThwgHnz5lFSUoKvry9xcXE0a9bM7Fgi4sTsKjWjR492cAwRkfJCQkIAuOOOOxgzZgy+vr4mJxIRZ2fXJd3ViS7pFqk+Ll++jLe3t+15VlYW9evXr/DtV0Sk+quyS7pFRBzJMAy2bt3K22+/zYkTJ2zbf3pvORGRm7H7Ngk3+4vGarXaHUhEapeioiIWLVrEnj17ANixYwdNmjQxOZWIVEd2lZr58+eXe15SUsL27dv59NNP+eMf/+iQYCJS82VkZJCYmMgPP/yAxWLh7rvvpnfv3mbHEpFqyqFzar744gvmzJnDwoULHfWWt01zakScj2EYbNmyhWXLlmG1WvH39ychIYHw8HCzo4mIk7Dn+9uukZob6dWrF0888YQj31JEaqAjR46wePFiAFq1asXo0aPLTRAWEbGHw0rN5cuXmTZtGo0aNXLUW4pIDdW8eXM6dOhAgwYN6NWrlyYDi4hD2FVqgoKCyv0lZBgGubm5+Pj4MHv2bIeFE5GawTAMtm/fTtu2bfHy8sJisTBmzBiVGRFxKLtKzVtvvVXuLyMXFxfq1atHz549CQoKclg4Ean+Ll++zNdff82BAwc4cuQICQkJWCwWFRoRcTi7Ss1dd91FeHj4df9SSk9PJyIi4raDiUj1d+rUKRITE8nOzsbV1VWXaotIpbKr1DRr1oyMjAzq169fbvuFCxdo1qyZ1qkRqeUMwyA1NZXk5GTKysoICgpi7NixNGjQwOxoIlKD2VVqbnQVeF5eHl5eXrcVSESqt4KCAhYsWEBaWhoA7dq1Y+TIkXh6epqcTERqugqVmsmTJwNgsVh4+eWX8fHxse2zWq1s3LiRzp07OzSgiFQ/mZmZuLq6MmTIEKKiojR/RkSqRIVKzfbt24ErIzW7d+/Gw8PDts/Dw4NOnTrx61//2rEJRcTpGYZhKy4+Pj784he/wM3NjbCwMJOTiUhtUqFSs3LlSgAeeeQR3nnnHa3QKyLk5+czf/582rdvbxupbdy4sbmhRKRWsmtOzcyZMx2dQ0SqoePHj5OUlEReXh4ZGRm0bdu23AiuiEhVsqvU5Ofn88Ybb5CcnMzZs2cpKysrt//o0aMOCScizqmsrIw1a9aQkpKCYRjUrVuXsWPHqtCIiKnsKjWPPfYYKSkpPPTQQzRo0ECTAEVqkby8PObNm8exY8cA6Ny5M0OHDlWhERHT2VVqlixZwrfffkufPn0cnUdEnFhRURHTp08nLy8Pd3d3hg8fTqdOncyOJSIC3Ma9n4KDgx2dRUScnKenJ507d+bQoUOMHTuWunXrmh1JRMTGYtxoJb2bmD17NgsXLuTTTz8tt1aNM8rJySEgIIDs7GxdrSVih9zcXKxWK4GBgcCV+TRWqxV3d3dzg4lIjWbP97ddIzX/+Mc/OHLkCKGhoTRt2vSav9y2bdtmz9uKiJM5fPgw8+fPJzAwkEceeQQ3NzdcXFxwcXExO5qIyDXsKjWjR492cAwRcSZlZWWsWLGCdevWAeDv78/ly5fx8/MzOZmIyI3ZdfqpOtHpJ5GKyc7OJikpiZMnTwLQvXt3Bg8ejJubXf8GEhGxS5WdfhKRmunQoUMsWLCAy5cv4+npyT333EPbtm3NjiUickvsKjVWq5W33nqL//73v6Snp1NcXFxu/w8//OCQcCJSdQzDICUlhcuXL9OwYUMSEhIICgoyO5aIyC2za7bfH//4R/75z39y7733kp2dzeTJk4mLi8PFxYVXX33VwRFFpCpYLBYSEhLo3bs3jzzyiAqNiFQ7ds2pad68OdOmTWP48OH4+fmxY8cO27YNGzbwxRdfVEZWu2hOjciNHThwgPPnz9O3b1+zo4iIlFNlc2oyMzPp0KEDAL6+vmRnZwMwYsQIXnrpJXveUkSqUGlpKcuXL2fTpk0AREREEBERYXIqEZHbY9fpp8aNG5ORkQFcGbX57rvvANi8eTOenp6OSyciDvfDDz/wySef2ApNdHQ0jRo1MjmViMjts2ukZsyYMSQnJ9OzZ0+eeeYZHnzwQT7++GPS09N54YUXHJ1RRBxk7969fPPNNxQVFeHt7c3o0aNp1aqV2bFERBzCIevUpKamkpqaSsuWLRk5cqQjcjmM5tSIXPHdd9+RmpoKXDndFB8frz8TIuK0TFunJjo6mujoaEe8lYhUkvr16wPQt29fBg4cqFsdiEiNY1ep+eyzz266/+GHH7YrjIhUUFoa5ObecHeBhwc+7dsD0LlzZxo0aEBoaGhVpRMRqVJ2nX766foVJSUlFBQU4OHhgY+Pj1MtvqfTT1JjpaXBDebDlLi7s2TIEI60aMGTjzyCz/+uVhQRqS6q7PTTxYsXr9mWlpbG008/zW9+8xt73lJEKurqCM3s2RAZadt8LjeXxK1bOZubC4bBkePHbUswiIjUZA47qd6yZUveeOMNnnvuOUe9pYjcishI6NoVunZlh4sLM9at42xuLnU8PXn4s8/ooMu1RaSWcOgNLd3c3Dhz5owj31JEbkFxcTGLFy9m586dANxxxx2MadEC3ylTTE4mIlJ17Co1X3/9dbnnhmGQkZHBv//9b/r06eOQYCJy61auXMnOnTuxWCwMGDCAvn374rJjh9mxRESqlF2lZvTo0eWeWywW6tWrx1133cU//vEPR+QSkQro378/Z86cYeDAgTRt2tTsOCIiprCr1JSVlTk6h4hUQFFRETuPHaM7YAG8vLyYMGECFovF7GgiIqa5rYnC58+fJycnx+6fnzp1Kt27d8fPz4/69eszevRoDh48WO41hYWFTJw4kZCQEHx9fYmPjycrK+t2YotUa5mZmcyYMYMle/awpVs32L8ftm3Dsn07bNv2/x/795sdVUSkSlW41Fy6dImJEydSt25dQkNDCQoKIiwsjClTplBQUFCh90pJSWHixIls2LCB5cuXU1JSwuDBg8nPz7e95oUXXuCbb75h7ty5pKSkcObMGeLi4ioaW6TaMwyDLVu28NFHH3HhwgX8fXwIzcqCBx+EqKhrHw8+eOUH/fzMDS4iUkUqtPjeDz/8QHR0NKdPn2bcuHFE/m9tjH379vHFF1/Qpk0b1q5dy65du9iwYQPPPvtshcKcO3eO+vXrk5KSwp133kl2djb16tXjiy++ICEhAYADBw4QGRlJamoqvXr1+tn31OJ7UhMUFhayaNEi9u7dC0CrVq0YNWoUPqdP33RFYfz8oGXLKkopIuI4lb743muvvYaHhwdHjhy5Zqn11157jcGDB/PQQw/x3XffMW3atIq8NQDZ2dkABAcHA7B161ZKSkqIiYmxvaZNmzZERETcsNQUFRVRVFRke347p8dEnEFGRgZz587l4sWLuLi4EBMTQ69eva7Mn1FhERGxqdDppwULFvD3v//9uveOCQsL429/+xtJSUlMnjyZ8ePHVyhIWVkZzz//PH369KH9/+5Vk5mZiYeHB4GBgeVeGxoaSmZm5nXfZ+rUqQQEBNge4eHhFcoh4myKi4u5dOkSAQEBPPLII0RHR2tCsIjIdVRopCYjI4N27drdcH/79u1xcXHhlVdeqXCQiRMnsmfPHtauXVvhn/2xKVOmMHnyZNvznJwcFRupdgzDsBWXJk2aMHbsWJo2bYq3t7fJyUREnFeFRmrq1q3L8ePHb7j/2LFj1K9fv8IhJk2axKJFi1i5ciWNGze2bQ8LC7P9K/XHsrKyCAsLu+57eXp64u/vX+4hUp2cOnWK999/n/Pnz9u2RUZGqtCIiPyMCpWa2NhYfv/731NcXHzNvqKiIl566SWGDBlyy+9nGAaTJk1i/vz5rFixgmbNmpXbHxUVhbu7O8nJybZtBw8eJD09nejo6IpEF3F6hmGwfv16Zs6cyblz5/j+++/NjiQiUq1U6OqnU6dO0a1bNzw9PZk4cSJt2rTBMAz279/Pe++9R1FREZs3byYiIuKW3u+Xv/wlX3zxBQsXLqR169a27QEBAbZ/lT799NMsXryYWbNm4e/vzzPPPAPA+vXrb+kzdPWTVAcFBQUsXLiQQ4cOAdCuXTtGjBiBl5eXyclERMxhz/d3hUoNXDnF9Mtf/pLvvvuOqz9qsVgYNGgQ//73v2nRosUtv9eNJjvOnDmTCRMmAFcuZf3Vr37Fl19+SVFREbGxsbz33ns3PP30Uyo14uzS09NJSkoiJycHV1dXhgwZQlRUlCYDi0itViWl5qqLFy+SlpYGQIsWLWyXYTsblRpxZsePH+ezzz7DMAyCg4MZO3bsLRd2EZGarNLXqfmxoKAgevToYe+PiwgQERFB48aNCQwMZPjw4Xh6epodSUSk2rK71IiIfU6dOkWDBg1wdXXFxcWFBx98EHd3d51uEhG5Tbd1Q0sRuXVlZWWkpKTwySeflLuyycPDQ4VGRMQBNFIjUgXy8vKYN28ex44dA65MgP/xAnsiInL7VGpEKtnRo0eZN28e+fn5uLu7M3z4cDp16mR2LBGRGkelRqSSXD3dtHr1agDq169PQkIC9erVMzmZiEjNpFIjUklycnLYsGEDAF27dmXIkCG4u7ubnEpEpOZSqRGpJIGBgYwaNQqr1UqHDh3MjiMiUuOp1Ig4SFlZme0eZs2bNwegbdu2JqcSEak9dEm3iANkZ2cza9Ys1q1bx/z58ykqKjI7kohIraORGpHbdOjQIRYsWMDly5fx9PRk6NChWhlYRMQEKjUidrJarSQnJ5OamgpAgwYNSEhIcNr7oImI1HQqNSJ2KC4u5j//+Q+nTp0CoGfPnsTExODmpj9SIiJm0d/AInZwd3cnODiY8+fPM2rUKNq0aWN2JBGRWs9iGIZhdojKZM+ty0Wup7S0lNLSUry8vIArozUFBQUEBgaaG0xEpAay5/tbIzUit+CHH34gMTERX19f7r//fiwWCx4eHnh4eJgdTURE/kelRuRn7N27l2+++YaioiK8vb25ePGiJgOLiDghlRqRGygtLWXZsmVs2bIFgPDwcOLj4wkICDA5mYiIXI9Kjch1XLhwgcTERDIzMwHo27cvAwYMwNXV1eRkIiJyIyo1Ij9hGAZz584lKysLHx8fxowZQ4sWLcyOJSIiP0OlRuQnLBYLI0eOZMWKFYwePRo/Pz+zI4mIyC3QvZ9EgHPnzrF3717b80aNGvHQQw+p0IiIVCMaqZFab8eOHSxevJiysjJCQkIICwszO5KIiNhBpUZqreLiYhYvXszOnTsBaNasGb6+vianEhERe6nUSK109uxZ5s6dy/nz57FYLPTv359+/frh4qIzsiIi1ZVKjdQ627dvZ/HixZSWluLn50dcXBxNmzY1O5aIiNwmlRqpdXJzcyktLaV58+aMGTOGOnXqmB1JREQcQKVGagXDMLBYLMCVhfQCAwPp0KGDbZuIiFR/mkAgNZphGGzevJmPP/6YkpISAFxcXOjYsaMKjYhIDaORGqmxCgsL+eabb9i3bx9wZS5Njx49TE4lIiKVRaVGaqQzZ86QmJjIxYsXcXFx4e6776Z79+5mxxIRkUqkUiM1imEYbNq0ie+++46ysjICAgJISEigcePGZkcTEZFKplIjNUpKSgopKSkAtGnThnvuuQdvb2+TU4mISFVQqZEapUuXLmzdupW+ffvSo0cPTQYWEalFLIZhGGaHqEw5OTkEBASQnZ2Nv7+/2XHEwQzD4MSJE+UWzyspKcHd3d28UCIictvs+f7WJd1SbRUUFPDVV1/x6aefcvDgQdt2FRoRkdpJp5+kWkpPTycpKYmcnBxcXV0pKCgwO5KIiJhMpUaqFcMwWLduHStWrMAwDIKDgxk7dixhYWFmRxMREZOp1Ei1kZ+fz4IFCzh8+DAAHTp0YPjw4Xh6epqcTEREnIFKjVQbJ06c4PDhw7i5uTF06FC6dOmiq5tERMRGpUaqjbZt23LXXXfRqlUrQkNDzY4jIiJORlc/idPKy8sjKSmJvLw827Z+/fqp0IiIyHVppEac0tGjR5k3bx75+fkUFxdz//33mx1JREScnEqNOJWysjJSUlJYvXo1APXq1SMmJsbkVCIiUh2o1IjTyM3NZd68eRw/fhy4csuDoUOHajE9ERG5JSo14hQyMjKYPXs2BQUFeHh4MGLECDp06GB2LBERqUZUasQphISE4O3tjZ+fH2PHjiUkJMTsSCIiUs2YevXT6tWrGTlyJA0bNsRisbBgwYJy+w3D4OWXX6ZBgwZ4e3sTExNDWlqaOWHF4fLy8rh6P1UPDw8efPBBHnvsMRUaERGxi6mlJj8/n06dOvHuu+9ed//f/vY3pk2bxgcffMDGjRupU6cOsbGxFBYWVnFScbRDhw7x3nvvsWHDBtu2wMBA3Nw0eCgiIvYx9Rtk6NChDB069Lr7DMPg7bff5g9/+AOjRo0C4LPPPiM0NJQFCxZw3333VWVUcRCr1UpycjKpqakA7Nu3j549e+LioiWTRETk9jjtP4uPHTtGZmZmuct5AwIC6NmzJ6mpqTcsNUVFRRQVFdme5+TkVHpWuTWXLl0iMTGR06dPA9CjRw8GDRqkQiMiIg7htKUmMzMT4JrVY0NDQ237rmfq1Kn88Y9/rNRsUnEHDhxg4cKFFBYW4uXlxT333ENkZKTZsUREpAapcf9EnjJlCtnZ2bbHyZMnzY5U62VnZzN37lwKCwtp1KgRTz75pAqNiIg4nNOO1ISFhQGQlZVFgwYNbNuzsrLo3LnzDX/O09MTT0/Pyo4nFRAQEEBMTAw5OTnExMTg6upqdiQREamBnHakplmzZoSFhZGcnGzblpOTw8aNG4mOjjYxmdyKffv2kZWVZXseHR1NbGysCo2IiFQaU0dq8vLyOHz4sO35sWPH2LFjB8HBwURERPD888/z5z//mZYtW9KsWTNeeuklGjZsyOjRo80LLTdVWlrKsmXL2LJlCyEhITzxxBN4eHiYHUtERGoBU0vNli1bGDhwoO355MmTARg/fjyzZs3it7/9Lfn5+TzxxBNcunSJvn37snTpUry8vMyKLDdx4cIFEhMTbRO527Rpo5EZERGpMhbj6pKuNVROTg4BAQFkZ2fj7+9vdpwaa/fu3SxatIji4mJ8fHwYM2YMLVq0MDuWiIhUU/Z8fzvtRGGpHkpLS1myZAnbtm0DoEmTJsTFxalAiohIlVOpkdvi4uLCxYsXAejXrx8DBgzQYnoiImIKlRqxS1lZGS4uLri4uBAXF8fZs2e54447zI4lIiK1mEqNVEhxcTFLlizB1dWVESNGAODr64uvr6/JyUREpLZTqZFbdvbsWebOncv58+exWCz07NmTevXqmR1LREQEUKmRW2AYBtu3b2fJkiWUlpbi6+tLfHy8Co2IiDgVlRq5qaKiIr799lt2794NQPPmzRkzZgx16tQxOZmIiEh5KjVyQ4ZhMHv2bE6dOoXFYmHgwIH07dsXi8VidjQREZFr6NpbuSGLxULfvn3x9/dnwoQJ9OvXT4VGRESclkZqpJyioiLOnz9Po0aNAGjdujV33HEH7u7uJicTERG5OY3UiE1GRgbTp0/n888/Jzs727ZdhUZERKoDjdQIhmGwadMmli9fjtVqJSAggMuXLxMQEGB2NBERkVumUlPLXb58ma+//poDBw4AV043jRo1Cm9vb5OTiYiIVIxKTS12+vRpEhMTuXTpEi4uLgwaNIiePXtqMrCIiFRLKjW12Pbt27l06RKBgYEkJCTYJgeLiIhURyo1tVhsbCyenp7069cPLy8vs+OIiIjcFl39VIucPHmShQsXUlZWBly5qmnQoEEqNCIiUiNopKYWMAyD9evXk5ycjGEYhIWF0bNnT7NjiYiIOJRKTQ2Xn5/PggULOHz4MADt27enc+fO5oYSERGpBCo1NdiJEydISkoiNzcXNzc3hgwZQteuXXV1k4iI1EgqNTXU1q1b+fbbbzEMg5CQEMaOHUtoaKjZsURERCqNSk0N1ahRI1xcXGjXrh3Dhw/Hw8PD7EgiIiKVSqWmBsnNzcXPzw+AsLAwnn76aUJCQkxOJSIiUjV0SXcNUFZWxqpVq5g2bRqnT5+2bVehERGR2kQjNdVcbm4u8+bN4/jx4wAcOnRIKwOLiEitpFJTjR05coR58+ZRUFCAu7s7I0aMoGPHjmbHEhERMYVKTTVUVlbGypUrWbt2LQChoaEkJCRQt25dk5OJiIiYR6WmGtqzZ4+t0ERFRREbG4u7u7vJqURERMylUlMNdejQgcOHD9OqVSvat29vdhwRERGnoKufqgGr1cq6desoLi4GwGKxEBcXp0IjIiLyIxqpcXKXLl0iKSmJU6dOce7cOUaPHm12JBEREaekUuPEDhw4wMKFCyksLMTT05PWrVubHUlERMRpqdQ4IavVyvLly9m4cSMADRs2JCEhgaCgIJOTiYiIOC+VGidz6dIl5s6dy5kzZwDo1asXMTExuLq6mpxMRETEuanUOBlXV1eys7Px8vJi9OjROuUkIiJyi1RqnEBZWRkuLlcuRPPz8+Pee+/F39+fgIAAk5OJiIhUH7qk22QXLlxgxowZ7Nu3z7YtPDxchUZERKSCNFJjoj179vDNN99QXFzM999/T5s2bWwjNiIiIlIxKjUmKCkpYenSpWzbtg2AiIgI4uPjVWhERERug0pNFTt//jxz587l7NmzAPTr148BAwao0IiIiNwmlZoqlJuby4wZMyguLqZOnTqMGTOG5s2bmx1LRESkRlCpqUJ+fn506dKFrKws4uLi8PPzMzuSiIhIjaFSU8nOnj2Ll5cX/v7+AAwaNAiLxaLTTSIiIg6mb9ZKYhgG27dvZ8aMGSQlJVFWVgZcWVxPhUZERMTxNFJTCYqLi/n222/ZtWsXAG5ubhQXF+Pl5WVyMhERkZpLpcZOViusWnXlATBgwJXH+fNZzJ07lwsXLmCxWBg4cCB9+/bFYrGYF1ZERKQWUKmpiLQ0yM1lxQp47TXIyf3/u779s0Fk33Rax+zBoAw/Pz/i4+Np0qSJeXlFRERqkWpRat59913efPNNMjMz6dSpE//617/o0aNH1YZIS4NWrQC463+PHyt1dWVGhyc4SyiB7g15/Klx+Pj4VG1GERGRWszpZ6zOmTOHyZMn88orr7Bt2zY6depEbGysbfG6KpN7ZVjmEffZdGXrNY8e1k1smtudQcuWsfSdrnh6qtCIiIhUJacvNf/85z95/PHHeeSRR2jbti0ffPABPj4+fPLJJ6bk2VkSyXa6sp0uuHUvxbv35f8978rO853onZpK1lkLa9aYEk9ERKTWcurTT8XFxWzdupUpU6bYtrm4uBATE0Nqaup1f6aoqIiioiLb85ycHIfn8vIq5J57vqZt2/2UlVk4fLgFZ8+GlntNRobDP1ZERERuwqlHas6fP4/VaiU0tHxhCA0NJTMz87o/M3XqVAICAmyP8PBwh2YKbHiJJ5+cTtu2+7FaXfjuu8GcPVv/mtc1aODQjxUREZGf4dSlxh5TpkwhOzvb9jh58qRD3tcwDDb06kW/R9cSFHSJixcD+fjj/2PDhl5A+cu1vb2gXz+HfKyIiIjcIqc+/VS3bl1cXV3Jysoqtz0rK4uwsLDr/oynpyeenp4OzWEYBknbtrF3yBBcMNi3L5Kvv76HwsLrL6b30kvg6urQCCIiIvIznHqkxsPDg6ioKJKTk23bysrKSE5OJjo6uspyWCwWmoSE4FpaiueuuqT9tzmRhfvowrZyj0j2AzBkSJVFExERkf9x6pEagMmTJzN+/Hi6detGjx49ePvtt8nPz+eRRx6p1M81DIO8vDzbnbS7tW9P88ceI/jiRX73cz+su2+LiIhUOacvNffeey/nzp3j5ZdfJjMzk86dO7N06dJrJg87UkFBAQsWLODcuXM8+eSTeHl5YWnViuCNG23r1RQWwtvvwMl0CI+A558DLy+uFJqWLSstm4iIiFyfxTAMw+wQlSknJ4eAgACys7Px9/f/2defOHGCpKQkcnNzcXNz47777qN58+ZVkFRERESuquj3N1SDkZqqYhgGa9asYdWqVRiGQUhICGPHjq3UESERERFxHJUaIC8vj/nz53P06FEAOnbsyPDhw/Hw8DA5mYiIiNwqlRrg+++/5+jRo7i5uTFs2DA6d+6MxWL5+R8UERERp6FSAwwePJi8vDwGDx5M/frXrg4sIiIizs+p16mpLLm5ueXuHeXj48ODDz6oQiMiIlKN1bqRmiNHjjB//nzy8/Px8fGhU6dOZkcSERERB6g1paasrIwVK1awZs0aAOrXr0+jRo1MTiUiIiKOUmtKzRdffMG5c+cAiIqKIjY2Fnd3d5NTiYiIiKPUmlJz8uRJ/P39GTlyJO3btzc7joiIiDhYjS81VxdMDggI4L777iM4OJicnByTU4mIiMjNXP2ursiND2r8bRJOnTpFeHi42TFERETEDidPnqRx48a39NoaX2rKyso4c+YMfn5+Dl1QLycnh/DwcNtpLbk1Om720XGzj46bfXTc7KPjVnE3O2aGYZCbm0vDhg1xcbm1FWhq/OknFxeXW2549vD399dvXjvouNlHx80+Om720XGzj45bxd3omAUEBFTofWrl4nsiIiJS86jUiIiISI2gUmMnT09PXnnlFTw9Pc2OUq3ouNlHx80+Om720XGzj45bxTn6mNX4icIiIiJSO2ikRkRERGoElRoRERGpEVRqREREpEZQqREREZEaQaXGTu+++y5NmzbFy8uLnj17smnTJrMjOZXVq1czcuRIGjZsiMViYcGCBeX2G4bByy+/TIMGDfD29iYmJoa0tDRzwjqJqVOn0r17d/z8/Khfvz6jR4/m4MGD5V5TWFjIxIkTCQkJwdfXl/j4eLKyskxK7Bzef/99OnbsaFu8Kzo6miVLltj265jdmjfeeAOLxcLzzz9v26Zjd61XX30Vi8VS7tGmTRvbfh2zGzt9+jQPPvggISEheHt706FDB7Zs2WLb74jvBZUaO8yZM4fJkyfzyiuvsG3bNjp16kRsbCxnz541O5rTyM/Pp1OnTrz77rvX3f+3v/2NadOm8cEHH7Bx40bq1KlDbGwshYWFVZzUeaSkpDBx4kQ2bNjA8uXLKSkpYfDgweTn59te88ILL/DNN98wd+5cUlJSOHPmDHFxcSamNl/jxo1544032Lp1K1u2bOGuu+5i1KhR7N27F9AxuxWbN29m+vTpdOzYsdx2Hbvra9euHRkZGbbH2rVrbft0zK7v4sWL9OnTB3d3d5YsWcK+ffv4xz/+QVBQkO01DvleMKTCevToYUycONH23Gq1Gg0bNjSmTp1qYirnBRjz58+3PS8rKzPCwsKMN99807bt0qVLhqenp/Hll1+akNA5nT171gCMlJQUwzCuHCN3d3dj7ty5ttfs37/fAIzU1FSzYjqloKAg46OPPtIxuwW5ublGy5YtjeXLlxv9+/c3nnvuOcMw9PvtRl555RWjU6dO192nY3ZjL774otG3b98b7nfU94JGaiqouLiYrVu3EhMTY9vm4uJCTEwMqampJiarPo4dO0ZmZma5YxgQEEDPnj11DH8kOzsbgODgYAC2bt1KSUlJuePWpk0bIiIidNz+x2q18tVXX5Gfn090dLSO2S2YOHEiw4cPL3eMQL/fbiYtLY2GDRtyxx13MG7cONLT0wEds5v5+uuv6datG2PHjqV+/fp06dKFGTNm2PY76ntBpaaCzp8/j9VqJTQ0tNz20NBQMjMzTUpVvVw9TjqGN1ZWVsbzzz9Pnz59aN++PXDluHl4eBAYGFjutTpusHv3bnx9ffH09OSpp55i/vz5tG3bVsfsZ3z11Vds27aNqVOnXrNPx+76evbsyaxZs1i6dCnvv/8+x44do1+/fuTm5uqY3cTRo0d5//33admyJcuWLePpp5/m2Wef5dNPPwUc971Q4+/SLVIdTZw4kT179pQ7Vy831rp1a3bs2EF2djaJiYmMHz+elJQUs2M5tZMnT/Lcc8+xfPlyvLy8zI5TbQwdOtT23x07dqRnz540adKE//73v3h7e5uYzLmVlZXRrVs3Xn/9dQC6dOnCnj17+OCDDxg/frzDPkcjNRVUt25dXF1dr5nNnpWVRVhYmEmpqperx0nH8PomTZrEokWLWLlyJY0bN7ZtDwsLo7i4mEuXLpV7vY4beHh40KJFC6Kiopg6dSqdOnXinXfe0TG7ia1bt3L27Fm6du2Km5sbbm5upKSkMG3aNNzc3AgNDdWxuwWBgYG0atWKw4cP6/fbTTRo0IC2bduW2xYZGWk7deeo7wWVmgry8PAgKiqK5ORk27aysjKSk5OJjo42MVn10axZM8LCwsodw5ycHDZu3Firj6FhGEyaNIn58+ezYsUKmjVrVm5/VFQU7u7u5Y7bwYMHSU9Pr9XH7XrKysooKirSMbuJu+++m927d7Njxw7bo1u3bowbN8723zp2Py8vL48jR47QoEED/X67iT59+lyzRMWhQ4do0qQJ4MDvhduZzVxbffXVV4anp6cxa9YsY9++fcYTTzxhBAYGGpmZmWZHcxq5ubnG9u3bje3btxuA8c9//tPYvn27ceLECcMwDOONN94wAgMDjYULFxq7du0yRo0aZTRr1sy4fPmyycnN8/TTTxsBAQHGqlWrjIyMDNujoKDA9pqnnnrKiIiIMFasWGFs2bLFiI6ONqKjo01Mbb7f/e53RkpKinHs2DFj165dxu9+9zvDYrEY3333nWEYOmYV8eOrnwxDx+56fvWrXxmrVq0yjh07Zqxbt86IiYkx6tata5w9e9YwDB2zG9m0aZPh5uZm/OUvfzHS0tKMzz//3PDx8TFmz55te40jvhdUauz0r3/9y4iIiDA8PDyMHj16GBs2bDA7klNZuXKlAVzzGD9+vGEYVy7fe+mll4zQ0FDD09PTuPvuu42DBw+aG9pk1ztegDFz5kzbay5fvmz88pe/NIKCggwfHx9jzJgxRkZGhnmhncD//d//GU2aNDE8PDyMevXqGXfffbet0BiGjllF/LTU6Nhd69577zUaNGhgeHh4GI0aNTLuvfde4/Dhw7b9OmY39s033xjt27c3PD09jTZt2hgffvhhuf2O+F6wGIZh2D2eJCIiIuIkNKdGREREagSVGhEREakRVGpERESkRlCpERERkRpBpUZERERqBJUaERERqRFUakRERKRGUKkRERGRGkGlRkRsLBYLCxYsqPTPWbVqFRaL5Zob/9nr+PHjWCwWduzY4ZD3c6SqOqYiolIjUmtkZmbyzDPPcMcdd+Dp6Ul4eDgjR44sdwO5qtK7d28yMjIICAio8s82kzOXL5GawM3sACJS+Y4fP06fPn0IDAzkzTffpEOHDpSUlLBs2TImTpzIgQMHqjSPh4cHYWFhVfqZP1VcXIyHh4epGUTEsTRSI1IL/PKXv8RisbBp0ybi4+Np1aoV7dq1Y/LkyWzYsOGGP/fiiy/SqlUrfHx8uOOOO3jppZcoKSmx7d+5cycDBw7Ez88Pf39/oqKi2LJlCwAnTpxg5MiRBAUFUadOHdq1a8fixYuB659+WrduHQMGDMDHx4egoCBiY2O5ePEiAEuXLqVv374EBgYSEhLCiBEjOHLkSIWOQdOmTfnTn/7Eww8/jL+/P0888QQAa9eupV+/fnh7exMeHs6zzz5Lfn6+7efee+89WrZsiZeXF6GhoSQkJJR7z7fffrvc53Tu3JlXX331uhmaNWsGQJcuXbBYLAwYMMB2PHr06EGdOnUIDAykT58+nDhxokK/PhFRqRGp8X744QeWLl3KxIkTqVOnzjX7AwMDb/izfn5+zJo1i3379vHOO+8wY8YM3nrrLdv+cePG0bhxYzZv3szWrVv53e9+h7u7OwATJ06kqKiI1atXs3v3bv7617/i6+t73c/ZsWMHd999N23btiU1NZW1a9cycuRIrFYrAPn5+UyePJktW7aQnJyMi4sLY8aMoaysrELH4u9//zudOnVi+/btvPTSSxw5coQhQ4YQHx/Prl27mDNnDmvXrmXSpEkAbNmyhWeffZbXXnuNgwcPsnTpUu68884KfeaPbdq0CYDvv/+ejIwM5s2bR2lpKaNHj6Z///7s2rWL1NRUnnjiCSwWi92fI1JrOe6m4iLijDZu3GgAxrx58372tYAxf/78G+5/8803jaioKNtzPz8/Y9asWdd9bYcOHYxXX331uvtWrlxpAMbFixcNwzCM+++/3+jTp8/P5rvq3LlzBmDs3r3bMAzDOHbsmAEY27dvv+HPNGnSxBg9enS5bY8++qjxxBNPlNu2Zs0aw8XFxbh8+bKRlJRk+Pv7Gzk5OTd8z7feeqvctk6dOhmvvPKK7fmPj+n1cl64cMEAjFWrVt38Fy0iP0sjNSI1nGEYdv/snDlz6NOnD2FhYfj6+vKHP/yB9PR02/7Jkyfz2GOPERMTwxtvvFHulNCzzz7Ln//8Z/r06cMrr7zCrl27bvg5V0dqbiQtLY3777+fO+64A39/f5o2bQpQLsut6NatW7nnO3fuZNasWfj6+toesbGxlJWVcezYMQYNGkSTJk244447eOihh/j8888pKCio0Gf+nODgYCZMmEBsbCwjR47knXfeISMjw6GfIVJbqNSI1HAtW7bEYrFUeDJwamoq48aNY9iwYSxatIjt27fz+9//nuLiYttrXn31Vfbu3cvw4cNZsWIFbdu2Zf78+QA89thjHD16lIceeojdu3fTrVs3/vWvf133s7y9vW+aZeTIkfzwww/MmDGDjRs3snHjRoByWW7FT0+/5eXl8eSTT7Jjxw7bY+fOnaSlpdG8eXP8/PzYtm0bX375JQ0aNODll1+mU6dOtrlALi4u15TGH885ulUzZ84kNTWV3r17M2fOHFq1anXTuU4icn0qNSI1XHBwMLGxsbz77rvlJsBedaO1YtavX0+TJk34/e9/T7du3WjZsuV1J6+2atWKF154ge+++464uDhmzpxp2xceHs5TTz3FvHnz+NWvfsWMGTOu+1kdO3a84aXlFy5c4ODBg/zhD3/g7rvvJjIy0jaB+HZ17dqVffv20aJFi2seV6+McnNzIyYmhr/97W/s2rWL48ePs2LFCgDq1atXblQlJyeHY8eO3fDzrr7n1blCP9alSxemTJnC+vXrad++PV988YVDfo0itYlKjUgt8O6772K1WunRowdJSUmkpaWxf/9+pk2bRnR09HV/pmXLlqSnp/PVV19x5MgRpk2bZhuFAbh8+TKTJk1i1apVnDhxgnXr1rF582YiIyMBeP7551m2bBnHjh1j27ZtrFy50rbvp6ZMmcLmzZv55S9/ya5duzhw4ADvv/8+58+fJygoiJCQED788EMOHz7MihUrmDx5skOOy4svvsj69euZNGkSO3bsIC0tjYULF9omCi9atIhp06axY8cOTpw4wWeffUZZWRmtW7cG4K677uI///kPa9asYffu3YwfPx5XV9cbfl79+vXx9vZm6dKlZGVlkZ2dzbFjx5gyZQqpqamcOHGC7777jrS0tBseKxG5CbMn9YhI1Thz5owxceJEo0mTJoaHh4fRqFEj45577jFWrlxpew0/mSj8m9/8xggJCTF8fX2Ne++913jrrbeMgIAAwzAMo6ioyLjvvvuM8PBww8PDw2jYsKExadIk4/Lly4ZhGMakSZOM5s2bG56enka9evWMhx56yDh//rxhGNdOFDYMw1i1apXRu3dvw9PT0wgMDDRiY2Nt+5cvX25ERkYanp6eRseOHY1Vq1b97ATcn7repF7DMIxNmzYZgwYNMnx9fY06deoYHTt2NP7yl78YhnFl0nD//v2NoKAgw9vb2+jYsaMxZ84c289mZ2cb9957r+Hv72+Eh4cbs2bNuulEYcMwjBkzZhjh4eGGi4uL0b9/fyMzM9MYPXq00aBBA8PDw8No0qSJ8fLLLxtWq/WGvxYRuT6LYdzGLEIRERERJ6HTTyIiIlIjqNSIiIhIjaBSIyIiIjWCSo2IiIjUCCo1IiIiUiOo1IiIiEiNoFIjIiIiNYJKjYiIiNQIKjUiIiJSI6jUiIiISI2gUiMiIiI1wv8Dt32yPjXBHO0AAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.scatter(\n", - " classical_res[:n_pipes],\n", - " quantum_res[:n_pipes],\n", - " label=\"Flow rates\",\n", - " color=\"blue\",\n", - " marker=\"o\",\n", - ")\n", - "plt.scatter(\n", - " classical_res[n_pipes:],\n", - " quantum_res[n_pipes:],\n", - " label=\"Pressures\",\n", - " color=\"red\",\n", - " marker=\"s\",\n", - " facecolors=\"none\",\n", - ")\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\", label=\"\")\n", - "plt.xlabel(\"Classical results\")\n", - "plt.ylabel(\"Quantum results\")\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/qnr_vqls/vqls_Net2Loops_D-W.ipynb b/docs/notebooks/qnr_vqls/vqls_Net2Loops_D-W.ipynb deleted file mode 100644 index 1445d1a..0000000 --- a/docs/notebooks/qnr_vqls/vqls_Net2Loops_D-W.ipynb +++ /dev/null @@ -1,683 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net2Loops.inp`. Let's start by setting up the model:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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P368li5dqpEjR+rUqVN64oknftQcUEU5hKWRI0c6Se6+++4LGr/rrrtc7dq1nXPO7dixw0VGRroxY8YEbfPRRx+5qKiooPFOnTq55OTkUvczYcIEFxkZ6Y4ePeqcc+6ZZ55xycnJrkWLFu73v/+9c865oqIil5iY6B599NHA9VJTU13dunXdwYMHA2Mffvihi4iIcH379i31OHr16lXqvvv16+fi4uKcc86tWbPGJSQkuE6dOrlvv/02sM3rr7/uJLl169adcb2OHTvmYmJi3IwZMwJjM2bMCFx369atLioqyv36178OXJ6RkeGaNGkS+Loy1rMshYWFLiYmxt17771B4yVrs3///nKvW9F17tq1q4uOjnZbt24NjH3++eeuRo0ark2bNoGxkjVJS0tzJ0+eDIyPHz/eSXILFixwzlV83c8mIyPDSXJz5swJjH3yySdOkouIiHBr164NjC9btsxJCvo3rOjjeuSRR5wk99577wXG9u3b52rWrOkkue3btwfNKSMjI2iektygQYOCxlauXOkkuZUrVzrnnCsuLnYNGzZ0WVlZrri4OLCd3+939evXdx06dAiad0xMjNu5c2dgbPPmzS4yMtJV5Md2v379gr6/tm/f7iS52rVru6+++iowvmDBAifJLVy4MOi6ktzDDz8cGCsuLnadOnVy0dHRZ/x+w6WLtwnC3IMPPhj0tc/n08GDB3X06FHNnz9fxcXF6tGjhw4cOBD4c/nll6thw4ZauXLlWW/f5/OpqKhI7777rqTv9wD4fD75fD7l5eVJkjZt2qTDhw/L5/NJkr744gtt2LBB/fv312WXXRa4rZtvvlkdOnTQ4sWLz/o4Trdy5UplZWWpffv2mj9/ftB7pSXv47755pv67rvvyr2NFStW6MSJE8rOzi7z8gYNGujee+/VtGnT9MUXX5S5TWWs5w/5/X51795dsbGxFX6bokRF17moqEhvvfWWunbtqgYNGgS2u+KKK9S7d2+tWbNGR48eDbrt3NzcoN8kBw4cqKioqMBtVnTdKyI+Pl49e/YMfH3DDTcoMTFRjRs3DtpjUfL3bdu2nfPjWrx4sVq1ahX4zVySkpKS1KdPnx8199Nt2LBBhYWF6t27tw4ePBj4/jh27Jjat2+v1atXq7i4WEVFRVq2bJm6du2qa6+9NnD9xo0bKysr60fN4Re/+IVq1aoV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JQWdWljix6xnyeMt70/JaWpn2zYyMvKc1tk55/Lz811WVpaLj493Xq/XtW3b1r377rtlrsmqVatcbm6uq1WrlouPj3d9+vQJOn3xbOteUT88fbNEcnKy69SpU6lxlXGKX0Uel3PObdy40WVkZLiYmBh31VVXuT/96U/ub3/7W6WdWlhi/fr1Licnx9WuXdtVr17dJScnux49erh///vfQdutWrXKpaWluejoaNegQQP3wgsvBP7Nf7hGPxwr79TCCRMmlLlmI0eODLpuXFyc27p1q+vYsaPzer2uXr16buTIka6oqKjU9REePM5x5Ajseu2119SnTx8dOHAgcDQ6yvfyyy9rwIABWrduXYXeVsGlp3///po7d26Zb2UgfHHMAExLTEzUM888QwgAMI1jBmBax44dQz0Fk7766iudPHmy3MsjIyN5bxq4iIgBABddTk6OVq1aVe7lycnJfLgNcBFxzACAi+6DDz4o9al3p4uNjVXr1q0v4owA24gBAACM4wBCAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMC6sYOHz4sJo1a6bU1FTddNNNmj59eqinBFRpu3fvVmZmpm688UbdfPPN+uc//xnqKQFV2l133aVatWqpW7duoZ5KpQqrGIiMjFS/fv106623Kjc3V2PGjNHBgwdDPS2gyjp58qTS09OVkZGhe+65R0OGDNGxY8dCPS2gynrggQfUu3dvrV+/XlOnTpXf7w/1lCqFxznnQj2JyuD3++Xz+ZSfnx8Yi46OVmFhoa699toQzgyomsp6zsTGxmrDhg26/vrrQzgzoGoq6znTtGlT5eXlyev1hnBmP15UqCdQWWbOnBn0DyR9/1vPtGnTlJOTE6JZAVXXvHnzSj1njh8/rldffZXnDFCGsp4z+fn5mjVrlnJzc0M0q8oRNnsGBg4cqBdeeCHU0wAAGDNw4EA9//zzoZ7GjxI2ewZSU1PLHM/JydGIESMu7mSAS8C8efM0duzYUuMjRoxgzwBQhvKeM+W9/lxKwmbPgN/vV6tWrfTRRx8FxmJiYrRq1Sq1aNEihDMDqia/36/09HStX78+MBYu738CF0I4HzMQNmcTeL1ePfvss6pbt64kqW7duho/fjwhAJTD6/Vq/Pjxga/r1q2r7777Tlu3bg3hrICqy+v1KiEhQfHx8YqKilJiYqImTpx4yYeAFEZ7Bkrk5+crLS1NH3zwgZo2bRrq6QBVHs8ZAGGzZwAAAJwfYgAAAOOIAQAAjCMGAAAwjhgAAMA4YgAAAOOIAQAAjAu7GPjyyy9DPQXgkrJnz55QTwFAiIVdDBw/fjzUUwAuKeHy/7EDOH9hFwMAAODcEAMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYBwxAACAccQAAADGEQMAABhHDAAAYFzY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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "{'duration': 0.0,\n", - " 'hydraulic_timestep': 3600,\n", - " 'quality_timestep': 300,\n", - " 'rule_timestep': 360,\n", - " 'pattern_timestep': 7200,\n", - " 'pattern_start': 0.0,\n", - " 'report_timestep': 3600,\n", - " 'report_start': 0.0,\n", - " 'start_clocktime': 0.0,\n", - " 'statistic': 'NONE',\n", - " 'pattern_interpolation': False}" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "from pathlib import Path\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "# Define the directory path\n", - "epanet_tmp_dir = Path(\"/Users/murilo/scratch_dir/.epanet_quantum\")\n", - "\n", - "# check if the directory exists\n", - "if not epanet_tmp_dir.exists():\n", - " epanet_tmp_dir.mkdir(parents=True, exist_ok=True)\n", - "\n", - "# set the environment variables\n", - "os.environ[\"EPANET_TMP\"] = str(epanet_tmp_dir)\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET\"\n", - "\n", - "# set up network model\n", - "inp_file = \"networks/Net2Loops_modified.inp\" # reproduces the values in https://doi.org/10.3390/w14060851\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "\n", - "# explicitly set Darcy-Weisbach head loss formulas and pressure dependent demand mode if needed\n", - "wn.options.hydraulic.headloss = \"D-W\"\n", - "wn.options.hydraulic.demand_model = \"PDD\" # 'PDD'\n", - "\n", - "# set up Darcy-Weisbach roughness coefficients for all pipes\n", - "for ix, ip in enumerate(wn.pipe_name_list):\n", - " pipe = wn.get_link(ip)\n", - " pipe.roughness = 0.85 # mm (SI)\n", - "\n", - "# required pressure: the pressure above which the consumer should receive the desired demand\n", - "wn.options.hydraulic.required_pressure = 30.0 # m\n", - "# minimum pressure: this is the pressure below which the consumer cannot receive any water\n", - "wn.options.hydraulic.minimum_pressure = 0.0 # m\n", - "\n", - "# set time duration of the simulation (in seconds)\n", - "wn.options.time.duration = 0\n", - "\n", - "# print options\n", - "dict(wn.options.hydraulic)\n", - "dict(wn.options.time)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using `EpanetSimulator`" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(name 2 3 4 5 6 7 \\\n", - " 0 51.536369 25.058285 40.653824 26.690071 27.148104 26.281374 \n", - " \n", - " name 1 \n", - " 0 4.394531e-07 ,\n", - " name 1 2 3 4 5 6 7 \\\n", - " 0 1.805516 1.731696 1.394582 1.016096 1.074134 1.028799 1.230819 \n", - " \n", - " name 8 \n", - " 0 0.270303 )" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# define classical solver using EpanetSimulator\n", - "sim = wntr.sim.EpanetSimulator(wn)\n", - "\n", - "# run the classical EPANET simulation\n", - "results_original_epanet = sim.run_sim()\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=results_original_epanet.node[\"pressure\"].iloc[0],\n", - " link_attribute=results_original_epanet.link[\"flowrate\"].iloc[0],\n", - " node_colorbar_label=\"Pressure (m)\",\n", - " link_colorbar_label=\"Flow (liters/sec)\",\n", - " node_size=100,\n", - " node_labels=True,\n", - " link_labels=True,\n", - " node_alpha=0.5,\n", - ")\n", - "\n", - "results_original_epanet.node[\"pressure\"], results_original_epanet.link[\"velocity\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Cholesky solver from `QuantumEpanetSimulator`\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. Note that, by default, `QuantumEpanetSimulator` uses a classical `CholeskySolver` by default to iteratively solve the linear problem." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Your EPANET quantum path: /Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET\n", - "Your EPANET temp dir: /Users/murilo/scratch_dir/.epanet_quantum\n", - "\n", - "Size of the Jacobian in EPANET simulator: 6\n", - "Size of the b vector in EPANET simulator: 6\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 2 3 4 5 6 7 \\\n", - " 0 51.536312 25.058249 40.653751 26.690033 27.148067 26.281319 \n", - " \n", - " name 1 \n", - " 0 4.394531e-07 ,\n", - " name 1 2 3 4 5 6 7 \\\n", - " 0 1.805523 1.731696 1.394583 1.016095 1.07413 1.0288 1.230818 \n", - " \n", - " name 8 \n", - " 0 0.270303 )" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# define classical solver using QuantumEpanetSimulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "\n", - "# run the EPANET quantum simulation using classical Cholesky\n", - "results_epanet = sim.run_sim()\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "# load EPANET A and b matrices from temp\n", - "epanet_A, epanet_b = wntr_quantum.sim.epanet.load_epanet_matrix()\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"velocity\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Check that the classical results are equivalent" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas.testing as pdt\n", - "\n", - "pdt.assert_frame_equal(\n", - " results_original_epanet.node[\"pressure\"], results_epanet.node[\"pressure\"]\n", - ")\n", - "pdt.assert_frame_equal(\n", - " results_original_epanet.link[\"flowrate\"], results_epanet.link[\"flowrate\"]\n", - ")\n", - "# pdt.assert_frame_equal(results_original_epanet.link[\"velocity\"], results_epanet.link[\"velocity\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Define a helper function\n", - "\n", - "Before proceeding to the proper quantum solution of the water network model, let's define a helper function. This function checks that the quantum results are within `TOL`% of those obtained classically. It also fills in lists containing the final values of pressures and flow rates obtained." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "TOL = 5 # => per cent\n", - "DELTA = 1.0e-12\n", - "\n", - "\n", - "def get_ape_from_pd_series(quantum_pd_series, classical_pd_series):\n", - " \"\"\"Helper function to evaluate absolute percentage error between classical and quantum results.\"\"\"\n", - " ape = (\n", - " abs(quantum_pd_series - classical_pd_series)\n", - " * 100.0\n", - " / abs(classical_pd_series + DELTA)\n", - " )\n", - " return ape\n", - "\n", - "\n", - "def compare_results(classical_result, quantum_result):\n", - " \"\"\"\n", - " Helper function that compares the classical and quantum simulation results.\n", - " \"\"\"\n", - " classical_data = []\n", - " quantum_data = []\n", - "\n", - " def check_ape(classical_value, quantum_value):\n", - " \"\"\"Helper function to check if the absolute percentage error between classical and quantum results is within TOL.\"\"\"\n", - " ape = (\n", - " abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA)\n", - " )\n", - " is_close_to_classical = ape <= TOL\n", - " if is_close_to_classical:\n", - " print(\n", - " f\"Quantum result {quantum_value} within {ape}% of classical result {classical_value}\"\n", - " )\n", - " quantum_data.append(quantum_value)\n", - " classical_data.append(classical_value)\n", - " return is_close_to_classical\n", - "\n", - " for link in classical_result.link[\"flowrate\"].columns:\n", - " classical_value = classical_result.link[\"flowrate\"][link].iloc[0]\n", - " quantum_value = quantum_result.link[\"flowrate\"][link].iloc[0]\n", - " message = f\"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " for node in classical_result.node[\"pressure\"].columns:\n", - " classical_value = classical_result.node[\"pressure\"][node].iloc[0]\n", - " quantum_value = quantum_result.node[\"pressure\"][node].iloc[0]\n", - " message = f\"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}\"\n", - " assert check_ape(classical_value, quantum_value), message\n", - "\n", - " return classical_data, quantum_data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve water network with `QuantumEpanetSimulator` and VQLS \n", - "\n", - "We now solve the model using VQLS. In this example, we are **preconditioning** the initial linear system using *diagonal scaling* and also using a **mix of two classical optimizers**." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "VQLS Iteration 1000 Cost 1.979e-04\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 1000 F = 1.831331E-04 MAXCV = 0.000000E+00\n", - " X = 2.734845E+00 1.736652E+00 -1.000656E+00 2.542383E+00 -3.405928E+00\n", - " 8.677823E-01 9.731885E-01 1.101253E+00 8.638966E-01 -6.012449E-01\n", - " -5.250679E-01 1.898788E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 52\n", - " Function evaluations: 1196\n", - " Gradient evaluations: 92\n", - "VQLS Iteration 1000 Cost 1.259e-02\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 1000 F = 1.259123E-02 MAXCV = 0.000000E+00\n", - " X = 3.048747E+00 4.212056E-01 -2.354200E+00 1.453815E+00 1.315968E+00\n", - " 9.819956E-01 6.360308E-01 2.160076E+00 2.270800E+00 -3.373932E-01\n", - " -2.991671E+00 -3.329373E-01\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 62\n", - " Function evaluations: 1352\n", - " Gradient evaluations: 104\n", - "VQLS Iteration 1000 Cost 5.787e-03\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 1000 F = 5.784714E-03 MAXCV = 0.000000E+00\n", - " X = 3.967416E+00 1.866698E+00 -1.710696E+00 -1.540454E+00 -1.666658E+00\n", - " -2.012676E+00 -2.661340E+00 1.083362E+00 4.114417E+00 -2.785139E+00\n", - " -3.267877E-01 -3.130314E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 31\n", - " Function evaluations: 780\n", - " Gradient evaluations: 60\n", - "VQLS Iteration 1000 Cost 2.261e-04\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 1000 F = 2.261202E-04 MAXCV = 0.000000E+00\n", - " X = 4.124088E+00 1.060190E+00 8.369358E-01 -1.678325E+00 -1.049492E+00\n", - " 1.461377E+00 -1.062673E+00 3.697373E+00 -2.364353E+00 -3.967300E-01\n", - " 5.680695E-01 1.576068E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 28\n", - " Function evaluations: 650\n", - " Gradient evaluations: 50\n", - "VQLS Iteration 1000 Cost 2.830e-05\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 1000 F = 2.810269E-05 MAXCV = 0.000000E+00\n", - " X = 3.340751E-01 7.463807E-01 -3.748390E+00 1.344803E+00 -3.600213E-01\n", - " 6.779038E-01 1.747229E+00 3.531836E-01 1.746735E+00 -2.944758E+00\n", - " 2.158740E+00 -2.961984E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 15\n", - " Function evaluations: 390\n", - " Gradient evaluations: 30\n", - "Quantum result 0.29642075300216675 within 0.00021113572015155882% of classical result 0.2964201271533966\n", - "Quantum result 0.08774977177381516 within 0.0034048915299666116% of classical result 0.08774678409099579\n", - "Quantum result 0.1809014230966568 within 0.0004777536878233796% of classical result 0.18090228736400604\n", - "Quantum result 0.008238178677856922 within 0.003922974043454313% of classical result 0.00823785550892353\n", - "Quantum result 0.13933716714382172 within 0.002416974518975314% of classical result 0.1393337994813919\n", - "Quantum result 0.05213059112429619 within 0.0004787892092540004% of classical result 0.05213034152984619\n", - "Quantum result 0.06236794963479042 within 0.0017979307429621687% of classical result 0.062366828322410583\n", - "Quantum result -0.00013697450049221516 within 0.006735951393937246% of classical result -0.00013696527457796037\n", - "Quantum result 51.53627395629883 within 7.401960113057395e-05% of classical result 51.536312103271484\n", - "Quantum result 25.05709457397461 within 0.0046050541877866195% of classical result 25.05824851989746\n", - "Quantum result 40.653770446777344 within 4.6916915865864135e-05% of classical result 40.653751373291016\n", - "Quantum result 26.688583374023438 within 0.005431184604249384% of classical result 26.690032958984375\n", - "Quantum result 27.147918701171875 within 0.0005480065698961803% of classical result 27.148067474365234\n", - "Quantum result 26.281112670898438 within 0.0007838025746462793% of classical result 26.28131866455078\n", - "Quantum result 4.39453117451194e-07 within 0.0% of classical result 4.39453117451194e-07\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 2 3 4 5 6 7 \\\n", - " 0 51.536274 25.057095 40.65377 26.688583 27.147919 26.281113 \n", - " \n", - " name 1 \n", - " 0 4.394531e-07 ,\n", - " name 1 2 3 4 5 6 7 \\\n", - " 0 1.805527 1.731755 1.394577 1.016135 1.074156 1.028805 1.23084 \n", - " \n", - " name 8 \n", - " 0 0.270321 )" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit.primitives import Estimator\n", - "from qiskit_algorithms import optimizers as opt\n", - "\n", - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", - "\n", - "qc = RealAmplitudes(n_qubits, reps=3, entanglement=\"full\")\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = VQLS_SOLVER(\n", - " estimator=estimator,\n", - " ansatz=qc,\n", - " optimizer=[opt.COBYLA(maxiter=1000, disp=True), opt.CG(maxiter=500, disp=True)],\n", - " matrix_decomposition=\"symmetric\",\n", - " verbose=True,\n", - " preconditioner=\"diagonal_scaling\",\n", - " reorder=True,\n", - ")\n", - "\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "results_vqls = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "results_classical, results_quantum = compare_results(results_epanet, results_vqls)\n", - "\n", - "results_vqls.node[\"pressure\"], results_vqls.link[\"velocity\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "for i, result in enumerate(results_vqls.linear_solver_results):\n", - " plt.semilogy(result.logger.values, label=f\"iter # {i}\")\n", - " plt.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot Network model with absolute percent errors\n", - "\n", - "To compare the results, we plot the network together with the absolute percent errors (with respect to the classical results) for the predicted pressures and flow rates." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=get_ape_from_pd_series(\n", - " results_vqls.node[\"pressure\"].iloc[0], results_epanet.node[\"pressure\"].iloc[0]\n", - " ),\n", - " link_attribute=get_ape_from_pd_series(\n", - " results_vqls.link[\"flowrate\"].iloc[0],\n", - " results_epanet.link[\"flowrate\"].iloc[0],\n", - " ),\n", - " node_colorbar_label=\"Pressure %\",\n", - " link_colorbar_label=\"Flows %\",\n", - " node_size=150,\n", - " title=f\"{inp_file}: Absolute Percent Error\",\n", - " node_labels=True,\n", - " link_labels=True,\n", - " node_alpha=0.5,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Plot pressures and flow rates\n", - "\n", - "Let's check graphically the equivalence of the results." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "([0.29642013,\n", - " 0.087746784,\n", - " 0.18090229,\n", - " 0.0082378555,\n", - " 0.1393338,\n", - " 0.05213034,\n", - " 0.06236683,\n", - " -0.00013696527,\n", - " 51.536312,\n", - " 25.058249,\n", - " 40.65375,\n", - " 26.690033,\n", - " 27.148067,\n", - " 26.281319,\n", - " 4.3945312e-07],\n", - " [0.29642075,\n", - " 0.08774977,\n", - " 0.18090142,\n", - " 0.008238179,\n", - " 0.13933717,\n", - " 0.05213059,\n", - " 0.06236795,\n", - " -0.0001369745,\n", - " 51.536274,\n", - " 25.057095,\n", - " 40.65377,\n", - " 26.688583,\n", - " 27.147919,\n", - " 26.281113,\n", - " 4.3945312e-07])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "from mpl_toolkits.axes_grid1.inset_locator import inset_axes\n", - "\n", - "fig, ax = plt.subplots()\n", - "ax.scatter(\n", - " results_classical[:n_pipes],\n", - " results_quantum[:n_pipes],\n", - " label=\"Flow rates\",\n", - " color=\"blue\",\n", - " marker=\"o\",\n", - ")\n", - "ax.scatter(\n", - " results_classical[n_pipes:],\n", - " results_quantum[n_pipes:],\n", - " label=\"Pressures\",\n", - " color=\"red\",\n", - " marker=\"s\",\n", - " facecolors=\"none\",\n", - ")\n", - "ax.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\", label=\"\")\n", - "ax.set_xlabel(\"Classical results\")\n", - "ax.set_ylabel(\"Quantum results\")\n", - "ax.legend()\n", - "\n", - "# inset plot\n", - "ax_inset = inset_axes(ax, width=\"35%\", height=\"35%\", loc=\"lower right\")\n", - "ax_inset.scatter(\n", - " results_classical[:n_pipes], results_quantum[:n_pipes], color=\"blue\", marker=\"o\"\n", - ")\n", - "ax_inset.scatter(\n", - " results_classical[n_pipes:],\n", - " results_quantum[n_pipes:],\n", - " color=\"red\",\n", - " marker=\"s\",\n", - " facecolors=\"none\",\n", - ")\n", - "ax_inset.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "ax_inset.set_xlim(-0.25, 0.5)\n", - "ax_inset.set_ylim(-0.25, 0.5)\n", - "ax_inset.set_xticks([-0.25, 0, 0.5])\n", - "ax_inset.set_yticks([-0.25, 0, 0.5])\n", - "# plt.legend()\n", - "plt.show()\n", - "\n", - "results_classical, results_quantum" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "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.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/qnr_vqls/vqls_solver_Net1.ipynb b/docs/notebooks/qnr_vqls/vqls_solver_Net1.ipynb deleted file mode 100644 index 710244d..0000000 --- a/docs/notebooks/qnr_vqls/vqls_solver_Net1.ipynb +++ /dev/null @@ -1,379 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net2Loops.inp`. Let's start by setting up the model:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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oiKH8mrVqqXFixerbt26Hk5W+c6cOaMOHTooIiKiyP7o0qWLcnJy9NBDD5X51kl1VNo+CQ8P1+zZszlnwLjS1kd8fDzrA5JKXyNxcXE6efKk2rdv7+F0P1y1+TRBeHi4MjIyFB0drfr166tFixbasGGDuRDo27evRo0apfXr1+vYsWN6/PHHlZycrKZNmyonJ0eDBg0yFwJX75PLJ5RGREQoPz9fbdu21YoVKzyeEl65en2MHz9e0rcnIOfn56tnz55av369x1PCS1evkXHjxkn69vytvLw83XPPPRoyZIjHU/4w1eacAeBaBQIBJSQkaPv27YqPj/d6HFQxrA98l+q4RqrNkQEAAHB9iAEAAIwjBgAAMI4YAADAOGIAAADjiAEAAIwjBmDOkSNHvB4BVRiftsZ3qY7/Gi4xAHP+85//eD0CqrCCggKvR0AVVx3/4TJiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBAACMIwYAADCOGAAAwDhiAAAA44gBmHPbbbd5PQKqsBo1+LKIstWvX9/rEcodqx7mdOjQwesRUIURA/guTZo08XqEcseqBwDAOGIAAADjiAEAAIwjBgAAMI4YAADAOGIAAADjiAFUa1lZWUpKSlLHjh3V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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "{'duration': 0.0,\n", - " 'hydraulic_timestep': 3600,\n", - " 'quality_timestep': 300,\n", - " 'rule_timestep': 360,\n", - " 'pattern_timestep': 7200,\n", - " 'pattern_start': 0.0,\n", - " 'report_timestep': 3600,\n", - " 'report_start': 0.0,\n", - " 'start_clocktime': 0.0,\n", - " 'statistic': 'NONE',\n", - " 'pattern_interpolation': False}" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "from pathlib import Path\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "epanet_tmp_dir = Path(\"/Users/murilo/scratch_dir/vqls_solver_net1\")\n", - "if not epanet_tmp_dir.exists():\n", - " epanet_tmp_dir.mkdir(parents=True, exist_ok=True)\n", - "\n", - "os.environ[\"EPANET_TMP\"] = str(epanet_tmp_dir)\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET\"\n", - "\n", - "# set up network model\n", - "inp_file = \"networks/Net1.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "wn.options.time.duration = 0\n", - "\n", - "# print options\n", - "dict(wn.options.hydraulic)\n", - "dict(wn.options.time)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using EpanetSimulator from WNTR" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(name 10 11 12 13 21 22 \\\n", - " 0 89.717087 83.890205 82.317276 83.476387 82.76741 83.539085 \n", - " \n", - " name 23 31 32 9 2 \n", - " 0 84.931053 81.500954 77.934105 0.0 36.575996 ,\n", - " name 10 11 12 21 22 31 110 \\\n", - " 0 0.117737 0.077866 0.00816 0.01206 0.007613 0.002575 -0.048338 \n", - " \n", - " name 111 112 113 121 122 9 \n", - " 0 0.030407 0.011905 0.001851 0.008884 0.003734 0.117737 )" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# define the classical EPANET simulator\n", - "sim = wntr.sim.EpanetSimulator(wn)\n", - "\n", - "# run the EPANET simulation\n", - "results_raw_epanet = sim.run_sim()\n", - "\n", - "results_raw_epanet.node[\"pressure\"], results_raw_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Epanet simulator from WNTR-quantum\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. In this example, we use the classical `SPLU_SOLVER` from `quantum_newton_raphson` package." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Object SPLUResult not serializable.\n", - "/Users/murilo/scratch_dir/vqls_solver_net1/sol_info.pckl not created.\n", - "Object SPLUResult not serializable.\n", - "/Users/murilo/scratch_dir/vqls_solver_net1/sol_info.pckl not created.\n", - "Object SPLUResult not serializable.\n", - "/Users/murilo/scratch_dir/vqls_solver_net1/sol_info.pckl not created.\n", - "Object SPLUResult not serializable.\n", - "/Users/murilo/scratch_dir/vqls_solver_net1/sol_info.pckl not created.\n", - "Your EPANET quantum path: /Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET\n", - "Your EPANET temp dir: /Users/murilo/scratch_dir/vqls_solver_net1\n", - "\n", - "Size of the Jacobian in EPANET simulator: 9\n", - "Size of the b vector in EPANET simulator: 9\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 10 11 12 13 21 22 \\\n", - " 0 89.717255 83.890411 82.31739 83.47654 82.76767 83.539268 \n", - " \n", - " name 23 31 32 9 2 \n", - " 0 84.931236 81.501236 77.934402 0.0 36.575996 ,\n", - " name 10 11 12 21 22 31 110 \\\n", - " 0 0.117737 0.077867 0.008159 0.012061 0.007613 0.002575 -0.048477 \n", - " \n", - " name 111 112 113 121 122 9 \n", - " 0 0.030407 0.011903 0.00185 0.008884 0.003734 0.117737 )" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from quantum_newton_raphson.splu_solver import SPLU_SOLVER\n", - "\n", - "# define the classical EPANET simulator\n", - "linear_solver = SPLU_SOLVER()\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=linear_solver)\n", - "\n", - "# run the EPANET simulation\n", - "results_epanet = sim.run_sim(linear_solver=linear_solver)\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "# load EPANET A and b matrices from temp\n", - "epanet_A, epanet_b = wntr_quantum.sim.epanet.load_epanet_matrix()\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve linear system with VQLS and the final matrices from EPANET\n", - "\n", - "For testing purposes, we start by solving the linear system with VQLS and the final A and b matrices from the classical EPANET simulator. Here, we are **preconditioning** the initial linear system using diagonal scaling and also using a **mix of two classical optimizers**." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "VQLS Iteration 500 Cost 7.381e-03\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 500 F = 7.376880E-03 MAXCV = 0.000000E+00\n", - " X = 5.435662E-02 -9.971449E-01 1.451832E+00 -1.276112E-01 1.705785E+00\n", - " -2.935112E-02 2.390396E+00 -2.065370E+00 -2.045880E+00 1.557815E+00\n", - " 3.115673E+00 4.560999E+00 1.399606E+00 -4.063332E-01 -2.265101E+00\n", - " -1.092011E+00 -3.411749E-01 2.915115E+00 1.526919E+00 -1.989766E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 306\n", - " Function evaluations: 9828\n", - " Gradient evaluations: 468\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit.primitives import Estimator\n", - "from qiskit_algorithms import optimizers as opt\n", - "\n", - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", - "\n", - "qc = RealAmplitudes(n_qubits, reps=4, entanglement=\"full\")\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = VQLS_SOLVER(\n", - " estimator=estimator,\n", - " ansatz=qc,\n", - " optimizer=[opt.COBYLA(maxiter=500, disp=True), opt.CG(maxiter=500, disp=True)],\n", - " matrix_decomposition=\"symmetric\",\n", - " verbose=True,\n", - " preconditioner=\"diagonal_scaling\",\n", - " reorder=True,\n", - ")\n", - "\n", - "res = linear_solver(epanet_A, epanet_b)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's check the evolution of the cost function" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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+kgIDAwUPvzwQ7HP4sWLhbCwMOHzzz8Xdu/eLfziF7/odAnquHHjhK1btwqbNm0Shg8fbrcEtaamRtBoNMJ9990n7N27V1i+fLkQGBjoVUt5O5OZmSkMHDhQXCr92WefCREREcJTTz0l9uH57Zq6ujph586dws6dOwUAwmuvvSbs3LlTOHbsmCAIrjuP33//vaBUKoW//vWvwr59+4QFCxZwqbS7euONN4SYmBhBpVIJKSkpwpYtW6Quye0A6PT13nvviX2ampqERx55ROjbt68QGBgo3HrrrcLJkyft9nP06FFh6tSpQkBAgBARESE88cQTQmtrq12f9evXCzqdTlCpVMIVV1xhdwxf8fPwwnPbc//73/+E+Ph4Qa1WC6NGjRL+8Y9/2G232WzCc889J2g0GkGtVgvXXXedcODAAbs+p0+fFu666y4hKChICAkJEWbNmiXU1dXZ9dm1a5cwYcIEQa1WCwMHDhQWL17s9O8mNbPZLDz22GNCTEyM4O/vL1xxxRXCM888Y7cUl+e3a9avX9/pv7GZmZmCILj2PK5cuVIYMWKEoFKphDFjxghffvml0753Z2SCcMFtDomIiIjcHOe8EBERkUdheCEiIiKPwvBCREREHoXhhYiIiDwKwwsRERF5FIYXIiIi8igML0RERORRGF6IiIjIozC8EBERkUdheCEiIiKPwvBCREREHoXhhYiIiDzK/wNqdZ+2MCl+VgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.semilogy(res.logger.values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "and visualize graphically the solution" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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6ywzIXiNTWHPnj3C2tpafPjhh+LkyZNi+fLlwsHBQfz4449Sm7lz5wpXV1exevVqcfjwYTF69OhbTl2+7777RGZmpti1a5cICgqy6OngN5s0aZJo27atNO0+JSVFtG7dWrz66qtSG15n4127dk0cPHhQHDx4UAAQn376qTh48KA4f/68EMI017S0tFR4enqKiRMniuzsbLFy5Urh4ODAafctxZdffin8/PyESqUS999/v9i9e7fcJTUrAG75Wrp0qdSmqqpKTJs2Tbi5uQkHBwcxZswYUVBQYHCcc+fOiYcffljY29uL1q1bi5deeklotdomPpvm4+ZAxGtsGr/++qvo3r27sLW1FV26dBGLFi0y2K/X68Vbb70lPD09ha2trYiIiBC5ubkGbf78808xYcIE4eTkJFxcXMRTTz0lrl271pSnYdY0Go144YUXhJ+fn7CzsxMdOnQQb7zxhsFUbl5n423btu2Wv4snTZokhDDdNT106JAYOHCgsLW1FW3bthVz58416XkohPjLEp1EREREFohjiIiIiMjiMRARERGRxWMgIiIiIovHQEREREQWj4GIiIiILB4DEREREVk8BiIiIiKyeAxEREREZPEYiIhaGIVCgVWrVjX652zfvh0KhaLeg13v1rlz56BQKJCVlWWS41mqd955ByEhIfd8nGXLlsHV1fWej0PUXDAQETUjhYWF+Ne//oUOHTrA1tYWvr6+GDVqlMGDE5vKgAEDUFBQALVa3WSfOWTIECgUinqvZ599Vmrz1+1qtRrh4eHYunWrwXHy8/OhUqnQvXv3W36OQqGAnZ0dzp8/b7A9JiYGTz75pPT+ySefvGU9w4cPlwLjnV7bt2832bW5F+3bt8fnn39usO3RRx/FiRMn5CmISAbWchdARA1z7tw5hIeHw9XVFf/+97/Ro0cPaLVabNq0CQkJCTh+/HiT1qNSqeDl5dWknwkAzzzzDN577z2DbQ4ODgbvly5diuHDh+Pq1at44403MHLkSGRnZ6NDhw4Arvd+/OMf/8DOnTuRmZl5y6eUKxQKzJ49G999990d6xk+fDiWLl1qsM3W1haOjo4oKCiQtr3wwgvQaDQGbVu1atWwk5aBvb097O3t5S6DqMmwh4iomZg2bRoUCgX27NmD2NhYdOrUCd26dcPMmTOxe/fu2/7ca6+9hk6dOsHBwQEdOnTAW2+9Ba1WK+0/dOgQhg4dCmdnZ7i4uKBPnz7Yt28fAOD8+fMYNWoU3Nzc4OjoiG7dumH9+vUAbn3L7Pfff8eQIUPg4OAANzc3REVFoaSkBACwceNGDBw4EK6urnB3d8fIkSNx+vRpo6+Dg4MDvLy8DF4uLi4GbVxdXeHl5YXu3btjwYIFqKqqQlpaGgBACIGlS5di4sSJeOyxx7BkyZJbfs706dPx448/Ijs7+4712Nra1qvHzc1NCow3Xvb29vXaqlSqeserra3F9OnT4e3tDTs7O/j7+2POnDnS/ry8PIwePRpOTk5wcXHBP/7xD1y+fPm29Q0ZMgQzZsww2PbXnq4hQ4bg/PnzePHFF6WeK+DWt8wWLFiAwMBAqFQqdO7cGT/88IPBfoVCgf/+978YM2YMHBwcEBQUhDVr1tzx+hGZCwYiomaguLgYGzduREJCAhwdHevtv9NYD2dnZyxbtgxHjx7FF198gcWLF+Ozzz6T9sfHx6Ndu3bYu3cv9u/fj9dffx02NjYAgISEBNTU1GDnzp04cuQIPv74Yzg5Od3yc7KyshAREYHg4GBkZGRg165dGDVqFHQ6HQCgoqICM2fOxL59+5Ceng6lUokxY8ZAr9ffw5X5ezd6OWprawEA27ZtQ2VlJSIjI/H4449j5cqVqKioqPdz4eHhGDlyJF5//fVGre9m8+bNw5o1a/DLL78gNzcXy5cvR/v27QEAer0eo0ePRnFxMXbs2IG0tDScOXMGjz766F1/XkpKCtq1a4f33nsPBQUFBr1af5WamooXXngBL730ErKzszF16lQ89dRT2LZtm0G7d999F//4xz9w+PBhREdHIz4+HsXFxXddH1GTEURk9jIzMwUAkZKS8rdtAYjU1NTb7v/3v/8t+vTpI713dnYWy5Ytu2XbHj16iHfeeeeW+7Zt2yYAiJKSEiGEEBMmTBDh4eF/W98NV65cEQDEkSNHhBBCnD17VgAQBw8evO3PDB48WNjY2AhHR0eD148//ii1+ev5V1RUiGnTpgkrKytx6NAhIYQQjz32mJgxY4bUvlevXmLp0qUGn3PjGDk5OcLKykrs3LlTCCHE6NGjxaRJk6R2kyZNElZWVvXq+fDDD+vVPmnSJDF69Oi/vS7/+te/xIMPPij0en29fZs3bxZWVlYiLy9P2paTkyMAiD179gghhHj77bdFr169DK7ZCy+8YHCcm8/D399ffPbZZwZtli5dKtRqtfR+wIAB4plnnjFoM27cOBEdHS29ByDefPNN6X15ebkAIDZs2PB3p00kO/YQETUDQoi7/tmff/4Z4eHh8PLygpOTE958803k5eVJ+2fOnImnn34akZGRmDt3rsFtrOeffx4ffPABwsPD8fbbb+Pw4cO3/ZwbPUS3c/LkSUyYMAEdOnSAi4uL1Ovx11oaIj4+HllZWQavRx55xKDNhAkT4OTkBGdnZyQnJ2PJkiXo2bMnSktLkZKSgscff1xq+/jjj9/2tllwcDCeeOKJO/YSDR06tF49fx3kbawnn3wSWVlZ6Ny5M55//nls3rxZ2nfs2DH4+vrC19fXoEZXV1ccO3bsrj+zIY4dO4bw8HCDbeHh4fU+t2fPntKfHR0d4eLigqKiokatjcgUGIiImoGgoCAoFAqjB05nZGQgPj4e0dHRWLt2LQ4ePIg33nhDun0EXJ+mnZOTgxEjRmDr1q0IDg5GamoqAODpp5/GmTNnMHHiRBw5cgShoaH48ssvb/lZfzcAd9SoUSguLsbixYuRmZmJzMxMADCopSHUajU6duxo8HJ2djZo89lnnyErKwuFhYUoLCzEpEmTAAA//fQTqqur0a9fP1hbW8Pa2hqvvfYadu3addsZVe+++y4OHDhw26UMHB0d69VzL4Ole/fujbNnz+L9999HVVUV/vGPfyAuLu6uj6dUKusF6r+OITO1G7dbb1AoFI1+W5TIFBiIiJqBVq1aISoqCl999dUtx7vcbi2gP/74A/7+/njjjTcQGhqKoKCgelPJAaBTp0548cUXsXnzZowdO9ZgJpSvry+effZZpKSk4KWXXsLixYtv+Vk9e/a87fT/P//8E7m5uXjzzTcRERGBrl27SoOtG4OXlxc6duyINm3aGGxfsmQJXnrpJYPenEOHDmHQoEH49ttvb3ksX19fTJ8+Hf/zP/8jjYdqbC4uLnj00UexePFi/Pzzz0hOTkZxcTG6du2KCxcu4MKFC1Lbo0ePorS0FMHBwbc8Vps2bQzGBel0unoDxVUq1d+eW9euXfH7778bbPv9999v+7lEzQ0DEVEz8dVXX0Gn0+H+++9HcnIyTp48iWPHjmHevHkICwu75c8EBQUhLy8PK1euxOnTpzFv3jyp9wcAqqqqMH36dGzfvh3nz5/H77//jr1796Jr164AgBkzZmDTpk04e/YsDhw4gG3btkn7bjZr1izs3bsX06ZNw+HDh3H8+HEsWLAAV69ehZubG9zd3bFo0SKcOnUKW7duxcyZM+/qOlRWVko9PzdeDQlXWVlZOHDgAJ5++ml0797d4DVhwgR89913qKuru+25Xbp0CVu2bKm3r6ampl49V69evatzA4BPP/0UK1aswPHjx3HixAkkJibCy8sLrq6uiIyMRI8ePRAfH48DBw5gz549eOKJJzB48GCEhobe8ngPPvgg1q1bh3Xr1uH48eN47rnn6gXo9u3bY+fOnbh48eJta3/llVewbNkyLFiwACdPnsSnn36KlJQUvPzyy3d9rkRmRe5BTETUcJcuXRIJCQnC399fqFQq0bZtW/HII4+Ibdu2SW1w06DqV155Rbi7uwsnJyfx6KOPis8++0waLFtTUyPGjx8vfH19hUqlEj4+PmL69OmiqqpKCCHE9OnTRWBgoLC1tRVt2rQREydOFFevXhVC1B9ULYQQ27dvFwMGDBC2trbC1dVVREVFSfvT0tJE165dha2trejZs6fYvn27Qa0NHVQNoN4rKirqtud/w/Tp00VwcPAtj1tQUCCUSqVYvXr1bY/x0UcfCQD1BlXfqp7OnTvX+4yGDqpetGiRCAkJEY6OjsLFxUVERESIAwcOSPvPnz8vHnnkEeHo6CicnZ3FuHHjRGFhobT/5kHVtbW14rnnnhOtWrUSHh4eYs6cOfUGVWdkZIiePXsKW1tbceNr4eZB1UII8fXXX4sOHToIGxsb0alTJ/H9998b7L/VdVOr1fUGrROZI4UQ9zBak4iIiKgF4C0zIiIisngMRERERGTxGIiIiIjI4jEQERERkcVjICIiIiKLx0BEREREFo+BiIiIiCweAxERERFZPAYiIiIisngMRERERGTxGIiIiIjI4v0/Gov85URPUvQAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(array([1004.348, 985.231, 965.69 , 967.393, 971.547, 969.079, 968.646, 970.07 , 968.873]),\n", - " array([1003.302, 984.602, 965.993, 967.067, 971.512, 969.378, 968.989, 970.072, 969.032]))" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "\n", - "ref = np.linalg.solve(epanet_A.todense(), epanet_b)\n", - "\n", - "plt.scatter(ref, res.solution)\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "plt.xlabel(\"Classical EPANET solution\")\n", - "plt.ylabel(\"Quantum VQLS solution\")\n", - "plt.show()\n", - "\n", - "ref, res.solution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "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.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/qnr_vqls/vqls_solver_Net1Loops.ipynb b/docs/notebooks/qnr_vqls/vqls_solver_Net1Loops.ipynb deleted file mode 100644 index 44ea6f0..0000000 --- a/docs/notebooks/qnr_vqls/vqls_solver_Net1Loops.ipynb +++ /dev/null @@ -1,307 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net1Loops.inp`. Let's start by setting up the model:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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TZuiqqoqIiJef/31WLVqVYwfPz722Wef0r6OOOKIOOmkk2LJkiUf+zo+7KGHHophw4bF0KFDY+HChbW+Z6+srIyIiHvvvTd27Nix2308+OCDsW3bthg+fHi99/fs2TO+9rWvxezZs+P111+vd5vGWM/G1NB1/uCDD2Lp0qVxxhlnRM+ePUvbHXDAATF27Nh45JFH4p133qm174kTJ8Zee+1Vuj158uQoLy8v7bOh6/5JTJgwoda5BLt+n1566aVa25WXl8ekSZNKt1u1ahWTJk2KN998M5588slGmQt8EmKAJtetW7datzt16hQR/z6UumbNmiiKInr37h1dunSp9fPCCy/Em2+++bH779evX1RUVJQ++HfFwKBBg2LFihXx3nvvle7b9V38K6+8EhERX/rSl+rs79BDD40NGzbUOUmwR48e9T7/e++9FyNGjIgjjzwy5s+fX+fEs8GDB8dXvvKVuOKKK6Jz585x+umnxy233BLbtm2rtd3ixYtjwIABsd9+++32tV5++eXx/vvv7/bcgcZYz8bU0HV+6623oqamZrfb7dy5s9Y5DxERvXv3rnW7ffv2ccABB8S6desiouHr/kl81O/yhx144IHRrl27WmMHH3xwRERpfvBZcs4ATa5ly5b1jhdFETt37oyysrK477776t2uId9j77XXXnHMMcfEww8/HC+++GK88cYbUVVVFfvtt1/s2LEjHn/88Vi+fHkccsgh0aVLl//6dbRt27be8datW8cpp5wSixYtit///vcxcuTIWveXlZXFb3/723jsscfinnvuifvvvz/OP//8uOaaa+Kxxx4rvcYlS5bEhAkTPnIOPXv2jHPOOSdmz54dl156aZ37G2M99xQNXfdP4qN+l6E5EwM0a7169YqiKKJHjx6lv5x256PObq+qqorp06fHAw88EJ07d45DDjkkysrK4vDDD4/ly5fH8uXLa31Id+/ePSIiVq9eXWdff/3rX6Nz5851/rL7qHn95je/idNPPz3OPvvsuO++++r91+uOPfbYOPbYY2PatGlx++23x7hx4+KOO+6ICy64IJ599tn4+9//XueSwvpcfvnlMW/evNIJmB/WWOvZWBq6zm3atImKiordbteiRYs46KCDao2vWbMmTjzxxNLtd999N15//fU45ZRTam33Uev+aVm/fn1s2bKl1u/Q3/72t4iIOiemwmfB1wQ0a6NGjYqWLVvGFVdcUeevq6IoYuPGjaXb7dq1i82bN9e7n6qqqti2bVtcd911MXDgwNIHXVVVVcydOzfWr19f+n434t/fRfft2zduu+22WpcfPvvss7F06dI6Hygfp1WrVrFw4cI46qij4tRTT42//OUvpfvefvvtOq+tb9++ERGlQ9ZLliyJ/fbbLwYMGPCxz9WrV68455xzYtasWfHGG2/Uuq+x1rOxNHSdW7ZsGSeffHIsWrSo1mH0f/7zn3H77bfHwIEDo0OHDrX2PXv27FrnAsycOTPef//90jkXDVn3iIi1a9fG2rVrG+Pllrz//vsxa9as0u3t27fHrFmzokuXLtG/f/9GfS5oCEcGaNZ69eoVV155ZfzoRz+KdevWxRlnnBF77713vPzyy3H33XfHxIkT4+KLL46IiP79+8edd94ZF110URx11FHRvn37OPXUUyMi4rjjjovy8vJYvXp1TJw4sbT/QYMGxcyZMyMiasVARMTVV18dw4cPj+OOOy6+/vWvly5569ixY0ydOvUTv5a2bdvGvffeG//3f/8Xw4cPj2XLlkWfPn3itttui5tuuinOPPPM6NWrV/zrX/+KOXPmRIcOHUofhosXL47hw4c3+K/1KVOmxNy5c2P16tVx+OGHN/p63nPPPfHUU09FRMSOHTvi6aefjiuvvDIiIk477bQ44ogjas3nF7/4RVRUVNQaa9GiRVx22WUNXucrr7wy/vCHP8TAgQPjm9/8ZpSXl8esWbNi27ZtMWPGjDprsH379hg6dGiMHj06Vq9eHTfddFMMHDgwTjvttIiIBq17RMTQoUMjonG/yz/wwANj+vTpsW7dujj44IPjzjvvjFWrVsXs2bNrnfQIn5mmuYgBdn/Z2a5Lw15++eXS2IIFC4qBAwcW7dq1K9q1a1cccsghxbe+9a1i9erVpW3efffdYuzYsUVlZWUREXUuizvqqKOKiCgef/zx0thrr71WRERx0EEH1TvHBx54oDjhhBOKtm3bFh06dChOPfXU4vnnn2/Q6yiK2pcW7rJhw4bisMMOK/bff/9izZo1RXV1dTFmzJiiW7duRevWrYuuXbsWI0eOLFasWFEURVFs2rSpKC8vL+bPn19n/x++tLC+546IWpcW7vK/rueufdf38+FLH3etTX0/LVu2/ETrXBRFUV1dXQwbNqxo3759UVFRUZx44onFo48+Wu+aLFu2rJg4cWLRqVOnon379sW4ceNqXb74ceu+S/fu3ev8Lu3u0sK77rqr1nYvv/xynTXZdbnnihUriuOOO65o06ZN0b179+LGG2+s83rhs1JWFM5sgeZs/vz5MW7cuNiwYUN07NixqafT7N16660xYcKEeOKJJxr0tcpnbciQIbFhw4Z49tlnm3oqUOKcAWjmKisr4/rrrxcCwKfGOQPQzJ188slNPQVgD+fIAAAk55wBAEjOkQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACS3R8XApk2bYsCAAdG3b9/o06dPzJkzp6mnBM3aq6++GkOGDInDDjssjjjiiLjrrruaekrQrJ155pnRqVOnOOuss5p6Ko1qj4qBli1bxnnnnRfHHXdcTJw4MaZNmxYbN25s6mlBs7V9+/YYOHBgDB48OM4555z4zne+E1u2bGnqaUGzNWnSpBg7dmysXLkyZs2aFTU1NU09pUZRVhRF0dSTaAw1NTVRVVUV1dXVpbFWrVrFmjVrolu3bk04M2ie6nvPtG3bNlatWhUHH3xwE84Mmqf63jP9+vWL5cuXR0VFRRPO7H9X3tQTaCxz586t9R8o4t9/9cyePTtGjRrVRLOC5mvBggV13jNbt26NX//6194zUI/63jPV1dUxb968mDhxYhPNqnHsMUcGJk+eHDfffHNTTwOAZCZPnhw33XRTU0/jf7LHHBno27dvveOjRo2KKVOmfLaTgc+BBQsWxFVXXVVnfMqUKY4MQD12957Z3efP58kec2SgpqYmjj322HjmmWdKY23atIlly5bF0Ucf3YQzg+appqYmBg4cGCtXriyN7Snff8KnYU8+Z2CPuZqgoqIibrzxxujatWtERHTt2jVmzJghBGA3KioqYsaMGaXbXbt2jR07dsTatWubcFbQfFVUVESHDh2iffv2UV5eHpWVlfHzn//8cx8CEXvQkYFdqquro3///vHkk09Gv379mno60Ox5zwB7zJEBAOC/IwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACS3x8XAyJEjIyJizJgxceKJJzbxbKD527p1a0REXHvttU08E6Cp7FExUFNTEzU1NRERcdZZZ8XixYubeEbQvNXU1MQll1wSERFr1qwpvX+AXMqKoiiaehKNoaamJqqqqqK6uro01q9fv1i+fHlUVFQ04cygeaqpqYmjjjoqnn/++dKY9wzkVN7UE2gsc+fOrRUCERHV1dVx1VVXxahRo5poVtB8LViwoFYIRPz7PTNv3ryYOHFiE80KaAp7TAysWrWq3vFp06bFtGnTPtvJwOfY7t5LwJ5rj4mBvn371js+cuTIuOKKKz7bycDnwIUXXhh//vOf64zv7r0E7Ln2qHMGjj/++HjqqadKY23bto37778/qqqqmnBm0Dw5zwbYZY+JgYiI5557Lr785S/H1q1bo3Xr1vHd7343fvCDHzT1tKDZqqmpiXnz5sUdd9wR5eXl8bvf/U4IQEJ7VAwAAJ/cHvXvDAAAn5wYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJiQEASE4MAEByYgAAkhMDAJCcGACA5MQAACQnBgAgOTEAAMmJAQBITgwAQHJiAACSEwMAkJwYAIDkxAAAJCcGACA5MQAAyYkBAEhODABAcmIAAJITAwCQnBgAgOTEAAAkJwYAIDkxAADJ/T8qcf1qNCsKYAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "os.environ[\"EPANET_TMP\"] = \"/home/nico/.epanet_quantum\"\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/home/nico/QuantumApplicationLab/vitens/EPANET\"\n", - "\n", - "# set up network model\n", - "inp_file = \"networks/Net1Loops.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "\n", - "# print options\n", - "# dict(wn.options.hydraulic)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Epanet simulator\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. Note that, by default, `QuantumEpanetSimulator` uses a classical `CholeskySolver` to iteratively solve the linear problem." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Your EPANET quantum path: /home/nico/QuantumApplicationLab/vitens/EPANET\n", - "Your EPANET temp dir: /home/nico/.epanet_quantum\n", - "\n", - "Size of the Jacobian in EPANET simulator: 4\n", - "Size of the b vector in EPANET simulator: 4\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 2 3 4 5 1\n", - " 0 57.939995 31.496479 52.434612 21.174667 4.394531e-07,\n", - " name 1 2 3 4 5\n", - " 0 0.163867 0.059455 0.076645 0.043315 0.031685)" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import sys\n", - "\n", - "# define the classical EPANET simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "\n", - "# run the EPANET simulation\n", - "results_epanet = sim.run_sim()\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "util_path = os.path.join(epanet_path, \"src/py/\")\n", - "sys.path.append(util_path)\n", - "\n", - "from quantum_linsolve import load_json_data\n", - "\n", - "epanet_A, epanet_b = load_json_data(os.path.join(epanet_tmp, \"smat.json\"))\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve linear system with VQLS and the final matrices from EPANET\n", - "\n", - "For testing purposes, we start by solving the linear system with VQLS and the final A and b matrices from the classical EPANET simulator. Here, we are **preconditioning** the initial linear system using diagonal scaling and also using a **mix of two classical optimizers**." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "VQLS Iteration 136 Cost 5.066e-08\n", - " Normal return from subroutine COBYLA\n", - "\n", - " NFVALS = 136 F = 5.066030E-08 MAXCV = 0.000000E+00\n", - " X =-1.347440E-02 -8.807702E-01 1.307708E+00 2.989201E+00 3.526457E+00\n", - " -2.800616E-01 2.854411E+00 1.854796E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 3\n", - " Function evaluations: 63\n", - " Gradient evaluations: 7\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit.primitives import Estimator\n", - "from qiskit_algorithms import optimizers as opt\n", - "\n", - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", - "\n", - "qc = RealAmplitudes(n_qubits, reps=3, entanglement=\"full\")\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = VQLS_SOLVER(\n", - " estimator=estimator,\n", - " ansatz=qc,\n", - " optimizer=[opt.COBYLA(maxiter=1000, disp=True), opt.CG(maxiter=500, disp=True)],\n", - " matrix_decomposition=\"symmetric\",\n", - " verbose=True,\n", - " preconditioner=\"diagonal_scaling\",\n", - ")\n", - "\n", - "res = linear_solver(epanet_A, epanet_b)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's check the evolution of the cost function" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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O6mpqbDZbLh27ZpnBiizCRMmICoqSvq96SufIwB88cUXyM/P7/PPJzAyP8eevif68/dobGxst39execGg0HNddJqtZg3bx4yMzOlYw6HA5mZmVi4cOEwjuz6CYKAdevW4d1338Wnn36K8ePH9/mavLw8AEBcXNwQj25oNDc348qVK4iLi8O8efOg0WjcPtP8/HwUFxd75Wf617/+FdHR0bj33nt7Pc/bP8Px48cjNjbW7XMzGo04duyY9LktXLgQjY2NyMnJkc759NNP4XA4pKBupBMDmsuXL+OTTz5BZGRkn6/Jy8uDUqnsUrLxFqWlpairq5N+b/rC5yj6y1/+gnnz5iE5ObnPc0fS59jX90R//h5duHAhzpw54xagikH6jBkzBj1Auk5vvvmmoNPphJ07dwrnz58XvvWtbwlhYWFuHd3e5MknnxRCQ0OFgwcPChUVFdJPS0uLIAiCUFBQILzwwgtCdna2UFhYKLz33nvChAkThEWLFg3zyPvv2WefFQ4ePCgUFhYKhw8fFtLS0oSoqCihurpaEARB+M53viMkJiYKn376qZCdnS0sXLhQWLhw4TCPeuDsdruQmJgoPP/8827HvfUzbGpqEk6ePCmcPHlSACBs2bJFOHnypDTz51e/+pUQFhYmvPfee8Lp06eF++67Txg/frzQ2toqXWPZsmXCDTfcIBw7dkz48ssvhcmTJwuPPPLIcN1SF73do8ViEVasWCGMHTtWyMvLc/vzKc4WOXLkiPDKK68IeXl5wpUrV4Q33nhDGDNmjPD4448P85216+0em5qahOeee07IysoSCgsLhU8++USYO3euMHnyZKGtrU26hjd/jiKDwSAEBAQIr776apfXj/TPsa/vCUHo++9Rm80mzJo1S7j77ruFvLw8Yf/+/cKYMWOEDRs2DHp8DGoG6fe//72QmJgoaLVaYcGCBcLRo0eHe0jXDUC3P3/9618FQRCE4uJiYdGiRUJERISg0+mESZMmCT/84Q8Fg8EwvAMfgFWrVglxcXGCVqsV4uPjhVWrVgkFBQXS862trcJ3v/tdITw8XAgICBBWrlwpVFRUDOOIr89HH30kABDy8/PdjnvrZ/jZZ591+3tz9erVgiA4p3X/5Cc/EWJiYgSdTifceeedXe69rq5OeOSRR4SgoCAhJCREWLNmjdDU1DQMd9O93u6xsLCwxz+fn332mSAIgpCTkyOkpqYKoaGhgp+fnzB9+nThl7/8pVtAMNx6u8eWlhbh7rvvFsaMGSNoNBph3Lhxwtq1a7v8I9GbP0fRH//4R8Hf319obGzs8vqR/jn29T0hCP37e/TatWtCenq64O/vL0RFRQnPPvusYLVaBz0+hWuQRERERF6NPTVERETkExjUEBERkU9gUENEREQ+gUENERER+QQGNUREROQTGNQQERGRT2BQQ0RERD6BQQ0RERH5BAY1RERE5BMY1BAREZFPYFBDREREPoFBDREREfmE/w8EV4rQtjTuXgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.semilogy(res.logger.values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "and visualize graphically the solution" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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nUVEtarST1mvK46Ojvjss88QGhoKJycn/PjjjwgNDQUAXLt2DR06dEBcXBz69OmDXbt2YcSIEUhLS4OLiwsAYOXKlXj//fdx7949KBSKp36GRqOBRqPRv8/Ly4OHhwefsk5UR1JTU7Fu3TrY2dlh7Nix8PT0lLokImqAjH3KepV6ek6fPo0DBw4gKysLOp3OoO2LL76oyiGh1WoRERGBgoIC+Pn5IT4+HqWlpQgICNDv0759e3h6eupDT1xcHDp37qwPPAAQGBiImTNn4vLly+jevftTP2vx4sVYuHBhleokoqoRQuh7cjw9PREaGoqWLVvC2tpa4sqIyFQYHXoWLVqEjz76CO3atYOLi4tBd3RVuqYvXrwIPz8/FBcXw9bWFps3b4aPjw8SEhKgUChgb29vsL+LiwsyMjIAABkZGQaB53H747ZnmTdvHsLDw/XvH/f0EFHtSE9Px9atWzF27Fg4OTkBKF/7i4ioLhkder788kt89913NfbIiXbt2iEhIQG5ubmIjIzElClTcOjQoRo59rMolUoolcpa/QwiKu/dOX36NPbu3QutVouYmBi89NJLUpdFRCbK6NAjl8vh7+9fYwUoFAr9wwN79uyJ06dP48svv8T48eNRUlKCnJwcg96ezMxMuLq6AgBcXV1x6tQpg+M9nt31eB8ikkZxcTG2bduGq1evAij/B87o0aMlroqITJnRU9bnzJmD5cuX10YtAACdTgeNRoOePXvCwsICsbGx+rbExESkpqbCz88PAODn54eLFy8iKytLv09MTAxUKhW7zokkdPfuXXzzzTe4evUq5HI5AgMDMX78eFhZWUldGhGZMKN7et59910EBQWhdevW8PHxgYWFhUF7VFRUpY81b948DBs2DJ6ennj06BF+/PFHHDx4EHv27IFarca0adMQHh4OR0dHqFQqvPXWW/Dz80OfPn0AAEOGDIGPjw8mTZqETz/9FBkZGfjoo48QFhbG21dEErl9+zbWrVsHnU4He3t7hIaGolmzZlKXRURkfOh5++23ceDAAQwcOBBNmjSp1roaWVlZmDx5MtLT06FWq9GlSxfs2bMHf/rTnwAAS5cuhVwux9ixY6HRaBAYGIivv/5a//NmZmaIjo7GzJkz4efnBxsbG0yZMgWffPJJlWsioupp1qwZmjdvDltbW4wcORKWlpZSl0REBKAK6/TY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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(array([561.597, 628.269, 682.218, 680.56 ]),\n", - " array([561.596, 628.269, 682.218, 680.56 ]))" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "\n", - "ref = np.linalg.solve(epanet_A.todense(), epanet_b)\n", - "\n", - "plt.scatter(ref, res.solution)\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "plt.xlabel(\"Classical EPANET solution\")\n", - "plt.ylabel(\"Quantum VQLS solution\")\n", - "plt.show()\n", - "\n", - "ref, res.solution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/qnr_vqls/vqls_solver_Net2Loops.ipynb b/docs/notebooks/qnr_vqls/vqls_solver_Net2Loops.ipynb deleted file mode 100644 index 475f7e5..0000000 --- a/docs/notebooks/qnr_vqls/vqls_solver_Net2Loops.ipynb +++ /dev/null @@ -1,358 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net2Loops.inp`. Let's start by setting up the model:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGbCAYAAABZBpPkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAa10lEQVR4nO3de3BU9d3A4W8gAgkYggIqo1KgWBXqIBeviUQZZBC8oTIi3rAWSrV1aq21on1lRqigVqtWBTtFCzoVRcsoWikj1VirVQNWiqWIoCjeYASUICqc9w+HHdMkCjawIb/nmeGPPXt297s/srOfnD0LBVmWZQEAJKtZvgcAAPJLDABA4sQAACRODABA4sQAACRODABA4sQAACRODABA4sQAACRODMAOdP7550ebNm3yPQYNrKKiIioqKvI9BjQYMUCTcd9998XNN9+c7zF2uJ/+9Kdx8MEHR0TE3XffHQUFBdGqVat4++23a+1bUVERPXv2/EaPU996rly5MsaPHx+HHXZYtGvXLtq3bx8VFRUxb968Wvtec801UVBQEKtXr/5GMwA7hxigyUglBubMmRNDhgypsW3Tpk1x3XXXNejj1Lees2fPjkmTJsW3v/3tuPbaa+Pqq6+Ojz76KAYOHBjTpk1r0Bkaq7lz58bcuXPzPQY0GDEAO8CGDRt2yP2+/vrrsWTJklox0KtXr7jrrrti1apVO+Rxv+zYY4+NN998M+6777646KKL4pJLLolnn302DjzwwPjlL3+5wx+/MWjRokW0aNEi32NAgxED5M3WQ8ivvfZanH/++VFaWhpt27aNUaNGRXV1dY19Z8yYEX369ImioqLYY4894swzz4yVK1fmrq+oqIg5c+bEG2+8EQUFBVFQUBDf+ta3IsuyaN++fVx66aW5fbds2RKlpaXRvHnzWLt2bW77pEmTorCwMD7++OPctieffDLKy8ujdevWUVpaGieffHK8+uqrdT6PxYsXx1lnnRXt2rWLsrKyep/3woULo0OHDlFRUZF7rBdffDEGDRoU7du3j6KioujSpUtccMEFtW47Z86caNu2ba37v/LKK2Pz5s3bfHTgm65nRESPHj2iffv2Ne6vZcuWccIJJ8Rbb70VH3300TbN8GXbss4REQsWLIjBgwdHSUlJtGnTJgYMGBDPPfdcjX22fnTy9NNPx5gxY2LPPfeMkpKSOPfcc+PDDz+sse+2rvt/++9zBv76179GQUFBzJw5MyZMmBD77rtvtGrVKgYMGBCvvfZardv27NkzXnrppTjqqKNyj3vnnXdux4pBwyrM9wAwfPjw6NKlS/zqV7+Kqqqq+N3vfhcdO3aMSZMmRUTEhAkT4uqrr47hw4fHhRdeGB988EHceuutccwxx8SCBQuitLQ0xo0bF+vWrYu33norbrrppoiIaNOmTRQUFMTRRx8dTz/9dO7x/vnPf8a6deuiWbNm8be//S33W3ZlZWUceuihuRP+5s2bF4MHD46uXbvGNddcExs3boxbb701jj766Kiqqsq9OW51xhlnRPfu3WPixIlR3/8M/sILL8SgQYOib9++MXv27CgqKor3338/jj/++OjQoUNcccUVUVpaGitWrIiHHnqo1u0fe+yxGDhwYBQW1nzpdunSJc4999y466674oorrohOnTrVu97/y3p+lXfffTeKi4ujuLj4K/f7b9u6zv/617+ivLw8SkpK4vLLL4/ddtstpkyZEhUVFfHUU0/F4YcfXuN+L7744igtLY1rrrkmlixZEnfccUe88cYbuTfu7Vn3bXXddddFs2bN4rLLLot169bF5MmTY+TIkfH888/X2O/DDz+ME044IYYPHx4jRoyImTNnxtixY6NFixbbFCPQ4DLIk//7v//LIiK74IILamw/9dRTsz333DPLsixbsWJF1rx582zChAk19nnllVeywsLCGtuHDBmSde7cudbjXH/99Vnz5s2z9evXZ1mWZbfcckvWuXPn7LDDDst+/vOfZ1mWZZs3b85KS0uzn/zkJ7nb9erVK+vYsWO2Zs2a3LaXX345a9asWXbuuefWeh4jRoyo9djnnXde1rp16yzLsuyZZ57JSkpKsiFDhmSffPJJbp+HH344i4jshRde+Mr12rBhQ9aqVats2rRpuW3Tpk3L3XbZsmVZYWFh9uMf/zh3ff/+/bMePXrkLjfEetZl6dKlWatWrbJzzjmnxvata/PBBx/Ue9ttXedTTjkla9GiRbZs2bLctlWrVmW77757dswxx+S2bV2TPn36ZJ9++mlu++TJk7OIyGbPnp1l2bave1369++f9e/fP3d5/vz5WURkBx10ULZp06bc9t/85jdZRGSvvPJKjdtGRHbjjTfmtm3atCm3Dl+eGXYWHxOQdz/4wQ9qXC4vL481a9bE+vXr46GHHootW7bE8OHDY/Xq1bk/e++9d3Tv3j3mz5//tfdfXl4emzdvjmeffTYivjgCUF5eHuXl5VFZWRkREYsWLYq1a9dGeXl5RES88847sXDhwjj//PNjjz32yN3XIYccEgMHDozHHnvsa5/Hl82fPz8GDRoUAwYMiIceeihatmyZu660tDQiIh599NH47LPP6r2PJ598MjZt2hSDBw+u8/quXbvGOeecE1OnTo133nmnzn0aYj3/W3V1dZxxxhlRVFS03Scxbus6b968OebOnRunnHJKdO3aNbffPvvsE2eddVY888wzsX79+hr3PXr06Nhtt91yl8eOHRuFhYW5+9zWdd8eo0aNqnEuwdafp9dff73GfoWFhTFmzJjc5RYtWsSYMWPi/fffj5deeqlBZoHtIQbIu/3337/G5Xbt2kXEF4dSly5dGlmWRffu3aNDhw41/rz66qvx/vvvf+399+7dO4qLi3Nv/Ftj4JhjjokXX3wxPvnkk9x1Wz+Lf+ONNyIi4jvf+U6t+zvooINi9erVtU4S7NKlS52P/8knn8SQIUPi0EMPjZkzZ9Y68ax///5x2mmnxfjx46N9+/Zx8sknx7Rp02LTpk019pszZ0707ds39tprr3qf61VXXRWff/55vW/KDbGeX7Z58+Y488wzY/HixfHggw9+5ccTddnWdf7ggw+iurq63v22bNlS45yHiIju3bvXuNymTZvYZ599YsWKFRGx7eu+Pb7qZ/nLOnXqFK1bt66x7YADDoiIyM0HO5NzBsi75s2b17k9y7LYsmVLFBQUxOOPP17nftvyD/rstttucfjhh8fTTz8dr732Wrz77rtRXl4ee+21V3z22Wfx/PPPR2VlZRx44IHRoUOHb/w8ioqK6ty+9eS62bNnx5///OcYOnRojesLCgriwQcfjOeeey4eeeSReOKJJ+KCCy6IG2+8MZ577rncc3zsscdi1KhRXzlD165d4+yzz46pU6fGFVdcUev6hljPL/v+978fjz76aNx7771x3HHHbddt821b1317fNXPMjRmYoBGrVu3bpFlWXTp0iX3m1N9CgoK6r2uvLw8Jk2aFPPmzYv27dvHgQceGAUFBdGjR4+orKyMysrKGm/SnTt3joiIJUuW1Lqvf//739G+fftav9l91Vz33ntvnHzyyXHGGWfE448/Xue/XnfE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ral8/gk7QlM+Z6DJfJuguLg4brvttujYsWNERHTs2DEmT54sBKAexcXFMXny5Nzljh07xmeffRbLli3L41TQeBUXF0dJSUm0adMmCgsLo7S0NG644YZdPgQimtCRga2qqqqiT58+8dJLL0Xv3r3zPQ40el4zQJM5MgAAfDNiAAASJwYAIHFiAAASJwYAIHFiAAASJwYAIHFNLgbee++9fI8Au5S333473yMAedbkYmDjxo35HgF2KU3l/2MHvrkmFwMAwPYRAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIkTAwCQODEAAIlrcjGw55575nsE2KV07Ngx3yMAedbkYmD33XfP9wiwS2nbtm2+RwDyrMnFAACwfcQAACRODABA4sQAACRODABA4sQAACSuycXA0KFDIyJixIgRceyxx+Z5Gmj8Nm7cGBERN910U54nAfKlScVAdXV1VFdXR0TE6aefHnPmzMnzRNC4VVdXx+WXXx4REUuXLs29foC0FGRZluV7iIZQXV0d5eXlUVVVldvWu3fvqKysjOLi4jxOBo1TdXV19OvXLxYvXpzb5jUDaSrM9wANZfr06TVCICKiqqoqJk6cGMOGDav3dlu2bIn169fv6PFgpyopKYlmzb76wN+sWbNqhEDEF6+ZGTNmxOjRo3fkeEAj02RiYOHChXVunzBhQkyYMGHnDgO7sPpeS0DT1WRioFevXnVuHzp0aIwfP37nDgO7gIsvvjj+/ve/19pe32sJaLqa1DkDRx11VLz88su5bUVFRfHEE09EeXl5HieDxsl5NsBWTebbBMXFxXHvvffm/jvWDh06xPjx44UA1KO4uDgqKytj3LhxERFx+OGHCwFIVJM5MrBVVVVV9OnTJ1566aXo3bt3vseBRs9rBmgyRwYAgG9GDABA4sQAACRODABA4sQAACRODABA4ppcDGzZsiXfI8AuxWsGaHIxsHLlynyPALuU5cuX53sEIM+aXAw0sX9DCXY4RwaAJhcDAMD2EQMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJEwMAkDgxAACJa3IxsO++++Z7BNildO7cOd8jAHnW5GKgsLAw3yPALqVFixb5HgHIsyYXAwDA9hEDAJA4MQAAiRMDAJA4MQAAiRMDAJC4JhUDS5YsiREjRkRExIgRI6KoqCj+9Kc/5XcoaOTefvvtiIg4/fTT47vf/W5s2LAhzxMBO1uTioH99tsvTj/99IiIOOmkk6J169YxcODAPE8FjVd1dXVcdNFFEfFFQD/++OPRsmXLPE8F7GwFWZZl+R6iIVRXV0d5eXlUVVXltpWWlsbbb78dxcXFeZwMGqfq6uro27dvvPrqq7ltvXv3jsrKSq8ZSEyT+ef6pk+fXiMEIiLWrl0bEydOjGHDhtV7u40bN8ayZct29HiwU3Xt2vVr39BnzZpVIwQiIqqqqmLGjBkxevToHTke0Mg0mSMDY8eOjTvvvDPfY8Aub+jQofHII4/kewxgJ2oyRwZ69epV5/Zx48Z95ZEBSNWsWbNi4sSJtbb7vwogPU3myEBd5wz4/BPqV11dHWVlZbFgwYLctpKSkvj9738fp512Wh4nA3a2JvNtguLi4qisrIybb745ioqK4re//a0QgK9QXFwczzzzTPzoRz+KPfbYIzp16hTnnnuuEIAENZkjAwDAN9NkjgwAAN+MGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEicGACAxIkBAEjc/wPxbdd+y5+iDwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "{'duration': 0.0,\n", - " 'hydraulic_timestep': 3600,\n", - " 'quality_timestep': 300,\n", - " 'rule_timestep': 360,\n", - " 'pattern_timestep': 7200,\n", - " 'pattern_start': 0.0,\n", - " 'report_timestep': 3600,\n", - " 'report_start': 0.0,\n", - " 'start_clocktime': 0.0,\n", - " 'statistic': 'NONE',\n", - " 'pattern_interpolation': False}" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "from pathlib import Path\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "epanet_tmp_dir = Path(\"/Users/murilo/scratch_dir/vqls_solver_net2loops\")\n", - "if not epanet_tmp_dir.exists():\n", - " epanet_tmp_dir.mkdir(parents=True, exist_ok=True)\n", - "\n", - "os.environ[\"EPANET_TMP\"] = str(epanet_tmp_dir)\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET\"\n", - "\n", - "# set up network model\n", - "inp_file = \"networks/Net2Loops.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "\n", - "# explicitly set Darcy-Weisbach head loss formulas and pressure dependent demand mode\n", - "wn.options.hydraulic.headloss = \"H-W\"\n", - "wn.options.hydraulic.demand_model = \"PDD\"\n", - "\n", - "# required pressure: the pressure above which the consumer should receive the desired demand\n", - "wn.options.hydraulic.required_pressure = 30.00 # m\n", - "# minimum pressure: this is the pressure below which the consumer cannot receive any water\n", - "wn.options.hydraulic.minimum_pressure = 5.00 # m\n", - "\n", - "# set time duration of the simulation (in seconds)\n", - "wn.options.time.duration = 0\n", - "\n", - "# print options\n", - "dict(wn.options.hydraulic)\n", - "dict(wn.options.time)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Epanet simulator\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. Note that, by default, `QuantumEpanetSimulator` uses a classical `CholeskySolver` to iteratively solve the linear problem." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Your EPANET quantum path: /Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET\n", - "Your EPANET temp dir: /Users/murilo/scratch_dir/vqls_solver_net2loops\n", - "\n", - "Size of the Jacobian in EPANET simulator: 6\n", - "Size of the b vector in EPANET simulator: 6\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 2 3 4 5 6 7 \\\n", - " 0 53.374657 30.983078 44.534256 29.516634 30.857758 27.850245 \n", - " \n", - " name 1 \n", - " 0 4.394531e-07 ,\n", - " name 1 2 3 4 5 6 7 \\\n", - " 0 0.307917 0.051032 0.229115 0.031428 0.164357 0.072689 0.023263 \n", - " \n", - " name 8 \n", - " 0 -0.01958 )" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import sys\n", - "\n", - "# define the classical EPANET simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "\n", - "# run the EPANET simulation\n", - "results_epanet = sim.run_sim()\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "# load EPANET A and b matrices from temp\n", - "epanet_A, epanet_b = wntr_quantum.sim.epanet.load_epanet_matrix()\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve linear system with VQLS and the final matrices from EPANET\n", - "\n", - "For testing purposes, we start by solving the linear system with VQLS and the final A and b matrices from the classical EPANET simulator. Here, we are **preconditioning** the initial linear system using diagonal scaling and also using a **mix of two classical optimizers**." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 64/64 [00:00<00:00, 4968.54it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "VQLS Iteration 1000 Cost 1.838e-04\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 1000 F = 1.838430E-04 MAXCV = 0.000000E+00\n", - " X =-2.998589E-01 2.722273E-01 -1.860267E-01 3.293352E+00 -7.855195E-01\n", - " -2.365456E-01 -1.365717E+00 -2.620859E+00 -2.546005E+00 2.455771E+00\n", - " 2.811983E+00 -1.395428E+00\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 64/64 [00:00<00:00, 5060.43it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 21\n", - " Function evaluations: 520\n", - " Gradient evaluations: 40\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit.primitives import Estimator\n", - "from qiskit_algorithms import optimizers as opt\n", - "\n", - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", - "\n", - "qc = RealAmplitudes(n_qubits, reps=3, entanglement=\"full\")\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = VQLS_SOLVER(\n", - " estimator=estimator,\n", - " ansatz=qc,\n", - " optimizer=[opt.COBYLA(maxiter=1000, disp=True), opt.CG(maxiter=500, disp=True)],\n", - " matrix_decomposition=\"pauli\",\n", - " verbose=True,\n", - " preconditioner=\"diagonal_scaling\",\n", - " reorder=True,\n", - ")\n", - "\n", - "res = linear_solver(epanet_A, epanet_b)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's check the evolution of the cost function" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.semilogy(res.logger.values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "and visualize graphically the solution" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAG2CAYAAACEbnlbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABjUklEQVR4nO3dd3hUZf7+8fekTEgPAZIQSOgt9KIQQaVkidIhYZFFwbYoBhvqKqsr6u6K6/5Wd1kVO+hXXVwCiID0KhA6SBUBI6GkACEJSUid5/cHy8hQNIEkk3K/rmuuiznnzMznHGPmznOeYjHGGERERETEzsXZBYiIiIhUNgpIIiIiIpdRQBIRERG5jAKSiIiIyGUUkEREREQuo4AkIiIichkFJBEREZHLKCCJiIiIXEYBSUREROQyCkgiIiIil3FqQGrcuDEWi+WKR1xcHAB5eXnExcVRp04dfHx8iImJITU11eE9kpKSGDhwIF5eXgQFBfHMM89QVFTkjNMRERGRasKpAWnr1q0kJyfbH8uXLwdg5MiRADz55JMsWLCA2bNns3btWk6ePMmIESPsry8uLmbgwIEUFBSwceNGPvnkE2bOnMmLL77olPMRERGR6sFSmRarfeKJJ1i4cCGHDh0iKyuLevXq8cUXXxAbGwvA999/T5s2bUhISKBHjx4sXryYQYMGcfLkSYKDgwF49913efbZZzl16hRWq9WZpyMiIiJVlJuzC7iooKCAzz77jEmTJmGxWNi+fTuFhYVERUXZj2ndujXh4eH2gJSQkED79u3t4QggOjqaCRMmsG/fPjp37nzVz8rPzyc/P9/+3GazkZ6eTp06dbBYLOV3kiIiIlJmjDGcO3eO0NBQXFzK9qZYpQlIX331FRkZGdx7770ApKSkYLVaCQgIcDguODiYlJQU+zGXhqOL+y/uu5apU6fy8ssvl13xIiIi4jTHjh2jYcOGZfqelSYgffTRR9x5552EhoaW+2dNnjyZSZMm2Z9nZmYSHh7OsWPH8PPzK/fPFxERkdJLT0/n/PnzNGjQAICsrCzCwsLw9fUt88+qFAHp6NGjrFixgrlz59q3hYSEUFBQQEZGhkMrUmpqKiEhIfZjtmzZ4vBeF0e5XTzmajw8PPDw8Lhiu5+fnwKSiIhIJbR3714WLFiA1Wrl4Ycfxtvb276vPLrHVIp5kGbMmEFQUBADBw60b+vatSvu7u6sXLnSvu3gwYMkJSURGRkJQGRkJHv27CEtLc1+zPLly/Hz8yMiIqLiTkBERETKRWFhIQsWLGDOnDkUFBQQGBiIzWYr9891eguSzWZjxowZjBs3Dje3n8vx9/fngQceYNKkSQQGBuLn58ejjz5KZGQkPXr0AKB///5ERERwzz338Prrr5OSksILL7xAXFzcVVuIREREpOo4ffo08fHx9rtDt956K7179y7zDtlX4/SAtGLFCpKSkrj//vuv2Pfmm2/i4uJCTEwM+fn5REdH884779j3u7q6snDhQiZMmEBkZCTe3t6MGzeOV155pSJPQURERMrY7t27WbhwIYWFhXh7ezN8+HCaNWtWYZ9fqeZBcpasrCz8/f3JzMxUHyQREREnM8Ywd+5c9u7dS+PGjRkxYsRVO2KX5/e301uQRERERC5lsVgYNGgQDRo04Oabb66QW2qXqxSdtEVERKTmMsawc+dO5s6dy8UbWx4eHvTo0cMp4QjUgiQiIiJOVFBQwKJFi9i9ezcAbdq0oU2bNk6uSgFJREREnCQ1NZXZs2dz5swZLBYLffr0oXXr1s4uC1BAEhERkQpmjGHHjh0sXryY4uJifH19iY2NJTw83Nml2SkgiYiISLkothm2JKaTdi6PIN9a3NwkEFcXC8uWLWPTpk0AtGjRgmHDhuHl5eXkah0pIImIiEiZW7I3mZcX7Cc5M8++rb5/LaYMjqBtRATbtm2jT58+REZGlstSITdK8yCheZBERETK0pK9yUz4bAc/BwyDvyWPLOMJwPS7u9CrsS8+Pj439Dnl+f2tYf4iIiJSZopthpcX7LeHIytF9LEeYYjHAfwt5wF4ecF+PL28r/0mlYACkoiIiJSZLYnp9ttqdS3ZDPHYT2PXDCwYAl1yMUByZh5bEtOdW+ivUB8kERERKTNp5/IAQ4RrKt3cT+BqMZyzWVlT0IzTxvuy4yovBSQRERG5LlcbpVbbCv2sRwh3zQDgp+LabChoRMFlkSPIt5YTKi45BSQREREptWuNUnuwRQHhrhkUGwtbCsP4vrge8PMoNQsQ4n8hTFVm6oMkIiIipXJxlNql4QggJTOPv24rxqVuYxblt+ZgcRCXhyOAKYMjcHWpfEP7L6WAJCIiIiV2+Sg1Dwq5yf0YLtgwgMHCN1kN+fPoWwnxd7yNFuJfi+l3d+GOdvUrvO7S0i02ERERKbFLR6kFu5zjduuPeFsKsWDYUhhuH6VW29vK+mf7XnUm7apAAUlERERK7OIotQ5uyXR2O4mLBTJstThUVPeK41xdLEQ2q+OcQm+QApKIiIhc4VrrqPm72ehvPUQD1ywADhfVIaEwnCJcHV5f2Uep/RoFJBEREXFwrRFqk26pQ9K2lTRwzabIuJBQGM7h4jpUxVFqv0adtEVERMTul0aovbLkR87nF+DpW5sF+W04UlyXqjpK7dcoIImIiAhw5Qg1ADeKATBAtvHgW9OGRx95iNfG9KzSo9R+jW6xiYiICOA4Qg0g1CWTW62JrC9owgmbPwY4eM6dXSeyuaNdfX4TEVJlR6n9GgUkERERAX5eH82CobPbSTq4JWOxQDu3FE4U+HHxJtrF46ryKLVfo4AkIiIiwIWRZ14UcLv1R0JcswH4vqgeWwrDuLSvUVUfoVYSCkgiIiICQGDRGYZ77sdKEQXGhY2FjUks/nk0WnUZoVYSCkgiIiI1yLXmN0pJSWHWrP9gBU7bvFhb0JQs83NLUXUaoVYSCkgiIiI1xLXmN5oyOII72tWnU6dOuLu7Q4MObPvmIFmXHBdyyXE1gcUYY379sOotKysLf39/MjMz8fPzc3Y5IiIiZe7i/EaXfuk3dMngtM2bfNyZfncXotuGYLFcaB26VktTZVKe399qQRIREanmLp/fyAUb3dyP09YtjePFfqwoaMHLC/bzm4gQXP+XgarzCLWS0ESRIiIi1dyl8xv5WPIZ4PE9bd3SAMgwnoAhOTOPLYnpTqyyclELkoiISDV3cd6iRi5n6Wn9CQ9LMfnGlW8LmnDMFnDFcaKAJCIiUu1c3n+otqcr3d2TiPhfq1FasTdrCpuSYzwcXlcT5jcqKQUkERGRauRqI9Ua+roS6ZYJwJ7CELYXhWIu6WVTk+Y3KikFJBERkWriaiPVAE6cK2aVpSmelkJO2AIc9te0+Y1KSp20RUREqoFLR6q5YiPS/ShtXC/cUjNAuvEmu1Y9gv0cb6OF+Ndi+t1dasz8RiWlFiQREZFq4OJINT9LHn2sRwh0OU+RsfBTcW3O444BMnIL+fyBLri4WCr1/EaVgQKSiIhINZB2Lo+mrme4xf0o7hYb540b6wqacB53h+NO5+QztFMDJ1VZdSggiYiIVHGFhYWc2ruB262JACQX+7K2oAnnsV5xrEaqlYwCkoiISBVWXFzMRx99RGpqKgb4rrA+u4pCMTjeNtNItdJxeiftEydOcPfdd1OnTh08PT1p374927Zts+83xvDiiy9Sv359PD09iYqK4tChQw7vkZ6ezpgxY/Dz8yMgIIAHHniA7Ozsij4VERGRCufq6kq7du3w8fGhza0D2VXUAK4SjkAj1UrDqQHp7Nmz9OzZE3d3dxYvXsz+/fv5xz/+Qe3ate3HvP7660ybNo13332XzZs34+3tTXR0NHl5P8/vMGbMGPbt28fy5ctZuHAh69atY/z48c44JRERkXJXUFBARkaG/XnPnj2ZMGECo/p2Y/rdXQjx10i1G2Uxxlw+XUKFee6559iwYQPffvvtVfcbYwgNDeWpp57i6aefBiAzM5Pg4GBmzpzJXXfdxYEDB4iIiGDr1q1069YNgCVLljBgwACOHz9OaGjor9ZRnqsBi4iIlKXU1FRmz56Ni4sLv//973F3d7/imMtn0q6uI9XK8/vbqS1IX3/9Nd26dWPkyJEEBQXRuXNnPvjgA/v+xMREUlJSiIqKsm/z9/ene/fuJCQkAJCQkEBAQIA9HAFERUXh4uLC5s2bK+5kREREypExhu3bt/Phhx9y5swZ8vLyHFqRLuXqYiGyWR2GdmpAZLM61TIclTendtL+8ccfmT59OpMmTeKPf/wjW7du5bHHHsNqtTJu3DhSUlIACA4OdnhdcHCwfV9KSgpBQUEO+93c3AgMDLQfc7n8/Hzy8/Ptz7OyssrytERERMpUfn4+CxcuZO/evQA0b96cYcOG4e3t7eTKqi+nBiSbzUa3bt149dVXAejcuTN79+7l3XffZdy4ceX2uVOnTuXll18ut/cXEREprWvdFktOTiY+Pp709HQsFgv9+vXjlltuwWJRq1B5cmpAql+/PhEREQ7b2rRpw5w5cwAICQkBLtxvrV//545lqampdOrUyX5MWlqaw3sUFRWRnp5uf/3lJk+ezKRJk+zPs7KyCAsLu+HzERERuR5XW2C2vn8tpgyO4PSulaSnp+Pn50dsbKy+ryqIU/sg9ezZk4MHDzps++GHH2jUqBEATZo0ISQkhJUrV9r3Z2VlsXnzZiIjIwGIjIwkIyOD7du3249ZtWoVNpuN7t27X/VzPTw88PPzc3iIiIg4w8UFZi8NRwApmXlM+GwHfq160LFjRx5++GGFowrk1ID05JNPsmnTJl599VUOHz7MF198wfvvv09cXBwAFouFJ554gr/85S98/fXX7Nmzh7FjxxIaGsqwYcOACy1Od9xxB7///e/ZsmULGzZsYOLEidx1110lGsEmIiLiLJcuMHtRXUsOHdyS7dumrjjK4CFD8fT0dEaJNZZTb7HddNNNzJs3j8mTJ/PKK6/QpEkT/vnPfzJmzBj7MX/4wx/Iyclh/PjxZGRk0KtXL5YsWUKtWj/P8fD5558zceJE+vXrh4uLCzExMUybNs0ZpyQiIlJiFxeYvcAQ4ZpGN/fjuFoMZ22eHLMFkJyZx5bEdCKb1XFqrTWNU+dBqiw0D5KIiDjD/F0neHzWLqwUcav1J8JdMwD4qTiADQWNKfhfO8a/7uqkBWavojy/v7UWm4iIiJME+dainks2vd1/xMelgGJjYUthGN8X1+PS5UK0wGzFU0ASERFxEpfTRxjgcRAXDFk2D9YUNOWM+XluIy0w6zwKSCIiIk7i6+uDC4bEotpsLGxMAa72fVpg1rkUkERERCpQQUEBVqsVgIiICO677z72ZbpxcOEBh6H+If+bB0kLzDqHApKIiEgFMMawfv16tmzZwvjx4/H19QUgPDyccKB/2/o1YoHZqkIBSUREpJzl5OQwb948jhw5AsB3331Hr169HI65uMCsVA4KSCIiIuXop59+Ys6cOWRnZ+Pm5saAAQPsy2VJ5aWAJCIiUg5sNhvr1q1j3bp1GGOoV68esbGxBAUFObs0KQEFJBERkXKwadMm1q5dC0CnTp2488477Z2zpfJTQBIRESkH3bp1Y9++fdx888107NjR2eVIKSkgiYiIlAGbzcbu3bvp2LEjFosFq9XKgw8+iMWikWhVkQKSiIjIDcrKymLOnDkkJSWRk5NDz549ARSOqjAFJBERkRtw6NAhvvrqK3Jzc7Farfj7+zu7JCkDCkgiIiLXobi4mFWrVrFx40YAQkJCiI2NpU4dzWVUHSggiYiIlFJmZiZz5szh2LFjANx00030798fNzd9rVYX+i8pIiJSSjk5OZw4cQIPDw+GDBlCRESEs0uSMqaAJCIiUgLGGHun69DQUEaMGEFoaCi1a9d2cmVSHlycXYCIiEhld/bsWWbOnElycrJ9W9u2bRWOqjEFJBERkV9w4MAB3nvvPZKSkli4cCHGGGeXJBVAt9hERESuoqioiGXLlrF161YAGjZsSExMjOY2qiEUkERERC6Tnp5OfHy8/ZbaLbfcQt++fXF1dXVyZVJRFJBEREQucerUKT788EMKCgrw9PRk2LBhtGzZ0tllSQVTQBIREblE3bp1CQsLo7CwkJiYGPz8/JxdkjiBApKIiNR4Z86cwc/PD3d3dywWC7GxsVitVlxcNJapptJ/eRERqdF2797Ne++9x+LFi+3batWqpXBUw6kFSUREaqTCwkIWL17Mzp07gQtzHRUVFWm5EAEUkEREpAY6deoUs2fP5tSpUwDcdttt3H777Wo1EjsFJBERqVF27drFN998Q2FhId7e3sTExNCkSRNnlyWVjAKSiIjUGOfPn2fZsmUUFhbStGlThg8fjo+Pj7PLkkpIAUlERGoMT09Phg8fTnJyMr169dItNbkmBSQREam2jDHs3LkTLy8vWrduDUCLFi1o0aKFkyuTyk4BSUREqqX8/HwWLlzI3r17qVWrFg0aNMDX19fZZUkVoYAkIiLVTnJyMvHx8aSnp2OxWOjVq5f6GkmpKCCJiEi1YYxh27ZtLF26lOLiYvz8/IiNjSUsLMzZpUkVo4AkIiLVgs1mY86cOezfvx+Ali1bMnToULy8vJxcmVRFCkgiIlItuLi44OXlhYuLC1FRUfTo0QOLxeLssqSKUkASEZEqyxhDQUEBHh4eAERHR9OlSxfq16/v5MqkqtMEECIiUiWdP3+e//73v8yaNQubzQaAm5ubwpGUCbUgiYhIlXP8+HHi4+PJzMzE1dWVkydP0rBhQ2eXJdWIApKIiFQZxhgSEhJYuXIlNpuN2rVrExsbS2hoqLNLk2rGqbfYXnrpJSwWi8Pj4kynAHl5ecTFxVGnTh18fHyIiYkhNTXV4T2SkpIYOHAgXl5eBAUF8cwzz1BUVFTRpyIiIuUsNzeX//znPyxfvhybzUbbtm0ZP368wpGUC6e3ILVt25YVK1bYn7u5/VzSk08+yaJFi5g9ezb+/v5MnDiRESNGsGHDBgCKi4sZOHAgISEhbNy4keTkZMaOHYu7uzuvvvpqhZ+LiIiUn7lz53LkyBFcXV2544476Nq1q0apSblxekByc3MjJCTkiu2ZmZl89NFHfPHFF/Tt2xeAGTNm0KZNGzZt2kSPHj1YtmwZ+/fvZ8WKFQQHB9OpUyf+/Oc/8+yzz/LSSy9htVor+nRERKSc/OY3vyE7O5thw4Zd9XtDpCw5fRTboUOHCA0NpWnTpowZM4akpCQAtm/fTmFhIVFRUfZjW7duTXh4OAkJCQAkJCTQvn17goOD7cdER0eTlZXFvn37rvmZ+fn5ZGVlOTxERKRyycnJsU/6CBAcHMxDDz2kcCQVwqktSN27d2fmzJm0atWK5ORkXn75ZW699Vb27t1LSkoKVquVgIAAh9cEBweTkpICQEpKikM4urj/4r5rmTp1Ki+//HLZnoyIiJSZn376iTlz5pCbm4uvr699qRDdUpOK4tSAdOedd9r/3aFDB7p3706jRo3473//i6enZ7l97uTJk5k0aZL9eVZWltbpERGpBGw2G99++y1r167FGEPdunXtk0CKVCSn90G6VEBAAC1btuTw4cP85je/oaCggIyMDIdWpNTUVHvzakhICFu2bHF4j4uj3H6pCdbDw0P/w4mIVDLZ2dnMnTuXxMREADp16sSdd96p/qTiFNfdB6mgoIDjx4+TlJTk8LgR2dnZHDlyhPr169O1a1fc3d1ZuXKlff/BgwdJSkoiMjISgMjISPbs2UNaWpr9mOXLl+Pn50dERMQN1SIiIhXnxx9/5N133yUxMRF3d3eGDRvG0KFDFY7EaUrdgnTo0CHuv/9+Nm7c6LDdGIPFYqG4uLjE7/X0008zePBgGjVqxMmTJ5kyZQqurq6MHj0af39/HnjgASZNmkRgYCB+fn48+uijREZG0qNHDwD69+9PREQE99xzD6+//jopKSm88MILxMXFqYVIRKQKSUtLIycnh6CgIEaOHEndunWdXZLUcKUOSPfeey9ubm4sXLiQ+vXr31CHuePHjzN69GjOnDlDvXr16NWrF5s2baJevXoAvPnmm7i4uBATE0N+fj7R0dG888479te7urqycOFCJkyYQGRkJN7e3owbN45XXnnlumsSEZGKcfEPa7gwaMfV1ZVOnTrh7u7u5MpEwGKMMaV5gbe3N9u3b3eY8bqqy8rKwt/fn8zMTPz8/JxdjohItXf48GHWrVvHmDFj1OIv1608v79L3QcpIiKC06dPl2kRIiJSMxQXF7NixQo+//xzjh07xvr1651dkshVlTog/e1vf+MPf/gDa9as4cyZM5pwUURESiQzM5NPPvnEvlxUt27duP32251clcjVlfoWm4vLhUx1ed+j6+mkXVnoFpuISPn64Ycf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tWtnPDw8TOvWrc3777/vsL8m/R41xpilS5ca4IpzNKZifzYsxhhT6rYvERERkWpMfZBERERELqOAJCIiInIZBSQRERGRyyggiYiIiFxGAUlERETkMgpIIiIiIpdRQBIRERG5jAKSSBVisVj46quvyv1z1qxZg8ViuWLNo+v1008/YbFY2LVrV5m8X0310ksv0alTpxt+n5kzZ16xIrqIOFJAEqkkUlJSePTRR2natCkeHh6EhYUxePBgh3WHKsott9xCcnIy/v7+FfaZvXv3xmKxXPF4+OGH7cdcut3f35+ePXuyatUqh/c5fvw4VquVdu3aXfVzLBYLtWrV4ujRow7bhw0bxr333mt/fu+99161njvuuMMeIH/psWbNmjK7NjeicePG/POf/3TYNmrUKH744QfnFCRSRbg5uwARudDC0rNnTwICAvj73/9O+/btKSwsZOnSpcTFxfH9999XaD1Wq9Upq4D//ve/55VXXnHY5uXl5fB8xowZ3HHHHZw+fZrnn3+eQYMGsXfvXpo2bQpcaB357W9/y7p169i8efNVF+u0WCy8+OKLfPLJJ79Yzx133MGMGTMctnl4eODt7U1ycrJ92+OPP05WVpbDsYGBgSU7aSfw9PTE09PT2WWIVGpqQRKpBB555BEsFgtbtmwhJiaGli1b0rZtWyZNmsSmTZuu+bpnn32Wli1b4uXlRdOmTfnTn/5EYWGhff93331Hnz598PX1xc/Pj65du7Jt2zYAjh49yuDBg6lduzbe3t60bduWb775Brj6LbYNGzbQu3dvvLy8qF27NtHR0Zw9exaAJUuW0KtXLwICAqhTpw6DBg3iyJEjpb4OXl5ehISEODz8/PwcjgkICCAkJIR27doxffp0zp8/z/LlywEwxjBjxgzuuecefve73/HRRx9d9XMmTpzIZ599xt69e3+xHg8PjyvqqV27tj1AXnx4enpecazVar3i/QoKCpg4cSL169enVq1aNGrUiKlTp9r3JyUlMXToUHx8fPDz8+O3v/0tqamp16yvd+/ePPHEEw7bLm0J6927N0ePHuXJJ5+0t2zB1W+xTZ8+nWbNmmG1WmnVqhX/93//57DfYrHw4YcfMnz4cLy8vGjRogVff/31L14/kapMAUnEydLT01myZAlxcXF4e3tfsf+X+or4+voyc+ZM9u/fz7/+9S8++OAD3nzzTfv+MWPG0LBhQ7Zu3cr27dt57rnncHd3ByAuLo78/HzWrVvHnj17+Nvf/oaPj89VP2fXrl3069ePiIgIEhISWL9+PYMHD6a4uBiAnJwcJk2axLZt21i5ciUuLi4MHz4cm812A1fm111sBSkoKABg9erV5ObmEhUVxd13382sWbPIycm54nU9e/Zk0KBBPPfcc+Va3+WmTZvG119/zX//+18OHjzI559/TuPGjQGw2WwMHTqU9PR01q5dy/Lly/nxxx8ZNWrUdX/e3LlzadiwIa+88grJyckOrV6XmjdvHo8//jhPPfUUe/fu5aGHHuK+++5j9erVDse9/PLL/Pa3v2X37t0MGDCAMWPGkJ6eft31iVRq17fWroiUlc2bNxvAzJ0791ePBcy8efOuuf/vf/+76dq1q/25r6+vmTlz5lWPbd++vXnppZeuum/16tUGMGfPnjXGGDN69GjTs2fPX63volOnThnA7NmzxxhjTGJiogHMzp07r/ma22+/3bi7uxtvb2+Hx2effWY/5tLzz8nJMY888ohxdXU13333nTHGmN/97nfmiSeesB/fsWNHM2PGDIfPufge+/btM66urmbdunXGGGOGDh1qxo0bZz9u3LhxxtXV9Yp6/vrXv15R+7hx48zQoUN/9bo8+uijpm/fvsZms12xb9myZcbV1dUkJSXZt+3bt88AZsuWLcYYY6ZMmWI6duzocM0ef/xxh/e5/DwaNWpk3nzzTYdjZsyYYfz9/e3Pb7nlFvP73//e4ZiRI0eaAQMG2J8D5oUXXrA/z87ONoBZvHjxr522SJWkFiQRJzPGXPdrv/zyS3r27ElISAg+Pj688MILJCUl2fdPmjSJBx98kKioKF577TWH216PPfYYf/nLX+jZsydTpkxh9+7d1/yciy1I13Lo0CFGjx5N06ZN8fPzs7eKXFpLSYwZM4Zdu3Y5PIYMGeJwzOjRo/Hx8cHX15c5c+bw0Ucf0aFDBzIyMpg7dy533323/di77777mrfZIiIiGDt27C+2IvXp0+eKei7tNF5a9957L7t27aJVq1Y89thjLFu2zL7vwIEDhIWFERYW5lBjQEAABw4cuO7PLIkDBw7Qs2dPh209e/a84nM7dOhg/7e3tzd+fn6kpaWVa20izqKAJOJkLVq0wGKxlLojdkJCAmPGjGHAgAEsXLiQnTt38vzzz9tvN8GFYeH79u1j4MCBrFq1ioiICObNmwfAgw8+yI8//sg999zDnj176NatG//+97+v+lm/1qF38ODBpKen88EHH7B582Y2b94M4FBLSfj7+9O8eXOHh6+vr8Mxb775Jrt27SIlJYWUlBTGjRsHwBdffEFeXh7du3fHzc0NNzc3nn32WdavX3/NEVsvv/wyO3bsuObUCd7e3lfUcyOdr7t06UJiYiJ//vOfOX/+PL/97W+JjY297vdzcXG5ImBf2getrF28PXuRxWIp99uoIs6igCTiZIGBgURHR/P2229ftb/MteYi2rhxI40aNeL555+nW7dutGjR4oqh6wAtW7bkySefZNmyZYwYMcJhpFVYWBgPP/wwc+fO5amnnuKDDz646md16NDhmtMNnDlzhoMHD/LCCy/Qr18/2rRpY++8XR5CQkJo3rw59erVc9j+0Ucf8dRTTzm09nz33XfceuutfPzxx1d9r7CwMCZOnMgf//hHe3+q8ubn58eoUaP44IMP+PLLL5kzZw7p6em0adOGY8eOcezYMfux+/fvJyMjg4iIiKu+V7169Rz6FRUXF1/R8dxqtf7qubVp04YNGzY4bNuwYcM1P1ekJlBAEqkE3n77bYqLi7n55puZM2cOhw4d4sCBA0ybNo3IyMirvqZFixYkJSUxa9Ysjhw5wrRp0+ytQwDnz59n4sSJrFmzhqNHj7Jhwwa2bt1KmzZtAHjiiSdYunQpiYmJ7Nixg9WrV9v3XW7y5Mls3bqVRx55hN27d/P9998zffp0Tp8+Te3atalTpw7vv/8+hw8fZtWqVUyaNOm6rkNubq69ZejioyRha9euXezYsYMHH3yQdu3aOTxGjx7NJ598QlFR0TXP7eTJk6xYseKKffn5+VfUc/r06es6N4A33niD//znP3z//ff88MMPzJ49m5CQEAICAoiKiqJ9+/aMGTOGHTt2sGXLFsaOHcvtt99Ot27drvp+ffv2ZdGiRSxatIjvv/+eCRMmXBGoGzduzLp16zhx4sQ1a3/mmWeYOXMm06dP59ChQ7zxxhvMnTuXp59++rrPVaTKc3YnKBG54OTJkyYuLs40atTIWK1W06BBAzNkyBCzevVq+zFc1kn7mWeeMXXq1DE+Pj5m1KhR5s0337R3vs3Pzzd33XWXCQsLM1ar1YSGhpqJEyea8+fPG2OMmThxomnWrJnx8PAw9erVM/fcc485ffq0MebKTtrGGLNmzRpzyy23GA8PDxMQEGCio6Pt+5cvX27atGljPDw8TIcOHcyaNWscai1pJ23gikd0dPQ1z/+iiRMnmoiIiKu+b3JysnFxcTHz58+/5nu8+uqrBriik/bV6mnVqtUVn1HSTtrvv/++6dSpk/H29jZ+fn6mX79+ZseOHfb9R48eNUOGDDHe3t7G19fXjBw50qSkpNj3X95Ju6CgwEyYMMEEBgaaoKAgM3Xq1Cs6aSckJJgOHToYDw8Pc/FX/uWdtI0x5p133jFNmzY17u7upmXLlubTTz912H+16+bv739FJ3iR6sJizA30EBURERGphnSLTUREROQyCkgiIiIil1FAEhEREbmMApKIiIjIZRSQRERERC6jgCQiIiJyGQUkERERkcsoIImIiIhcRgFJRERE5DIKSCIiIiKXUUASERERuYwCkoiIiMhl/j8JIY3VZ5XU1gAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(array([616.307, 642.578, 654.64 , 667.24 , 626.585, 588.965]),\n", - " array([616.303, 642.577, 654.64 , 667.239, 626.581, 588.962]))" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "\n", - "ref = np.linalg.solve(epanet_A.todense(), epanet_b)\n", - "\n", - "plt.scatter(ref, res.solution)\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "plt.xlabel(\"Classical EPANET solution\")\n", - "plt.ylabel(\"Quantum VQLS solution\")\n", - "plt.show()\n", - "\n", - "ref, res.solution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "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.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/notebooks/qnr_vqls/vqls_solver_Net3Loops.ipynb b/docs/notebooks/qnr_vqls/vqls_solver_Net3Loops.ipynb deleted file mode 100644 index 1ac36fe..0000000 --- a/docs/notebooks/qnr_vqls/vqls_solver_Net3Loops.ipynb +++ /dev/null @@ -1,352 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Set up water network model\n", - "\n", - "In this example, we test our quantum solvers into a slightly larger network as contained in `Net3Loops.inp`. Let's start by setting up the model:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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KBAIqLKyUpK0efNm1dTUKBAISJI+//xzbdy4URMmTNDJJ58cvq8LLrhAAwYM0LJly773eXzXW2+9pYEDB6p///5avHix2rZtG74uIyNDkvTyyy83OBv/u958803V1dVp0KBBjV7fpUsX/eY3v9HcuXP1+eefN3qbltjPev369dPrr7+uRYsW6frrr1ebNm104MCBZv+81Px9PnLkiF577TUNHz5cXbp0Cd/u1FNP1ejRo7Vy5Urt27cv4r6Li4vVpk2b8OXJkycrISEhfJ/N3ffjMXHixIjzCer/Pn300UcRt0tISNCkSZPClxMTEzVp0iR99dVXWr9+fYvMAhwPYgCeO+OMMyIut2vXTtK3h1K3bt0q55y6deumzMzMiD8ffPCBvvrqq++9/9zcXPn9/vAbf30M9OnTR+vWrdPBgwfD19V/Fr9z505J0i9+8YsG93fOOeeourq6wRtf586dG338gwcPasiQIbrwwgu1cOHCBief9e3bV1dddZWmTZum9u3b64orrtDTTz+turq6iNstXbpU3bt3V4cOHZp8rnfffbe++eabJs8daIn9rNehQwf96le/UmFhoWbNmqWhQ4dqwIAB+uKLL5p9H83d5127dikUCjV5u6NHj0ac8yBJ3bp1i7icmpqqU089VTt27JDU/H0/Hsf6u/xdp512WoMTTM866yxJCs8HtCbOGYDn4uPjG113zuno0aPy+Xx65ZVXGr1dc/5BnzZt2ujiiy/WihUr9OGHH+qLL75QIBBQhw4ddPjwYa1Zs0aVlZU6++yzlZmZ+YOfR3JycqPrbdu21eDBg7VkyRL9/e9/19ChQyOu9/l8+utf/6rVq1frpZde0quvvqprrrlGDzzwgFavXh1+jsuWLdPEiROPOUOXLl00duxYzZ07V1OmTGlwfUvsZ1MKCwtVUlKiJUuWRPzWG62au+/H41h/l4FoRgwgqnXt2lXOOXXu3Dn8m1NTfD5fk9cFAgHNmDFDb7zxhtq3b6+zzz5bPp9P5513niorK1VZWRnxJt2pUydJUlVVVYP7+ve//6327ds3+6uDPp9P8+fP1xVXXKGRI0fqlVdeafRfr+vZs6d69uyp0tJSLViwQGPGjNHzzz+v6667Tps3b9Z///vf8MmOx3L33XervLw8fALmd7XUfjamtrZWkrR3795m/0xz9zkpKUl+v7/J28XF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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import os\n", - "import wntr\n", - "import wntr_quantum\n", - "\n", - "os.environ[\"EPANET_TMP\"] = \"/home/nico/.epanet_quantum\"\n", - "os.environ[\"EPANET_QUANTUM\"] = \"/home/nico/QuantumApplicationLab/vitens/EPANET\"\n", - "\n", - "# set up network model\n", - "inp_file = \"networks/Net3Loops.inp\"\n", - "wn = wntr.network.WaterNetworkModel(inp_file)\n", - "\n", - "# plot network\n", - "wntr.graphics.plot_network(wn, title=wn.name, node_labels=True)\n", - "\n", - "# print options\n", - "# dict(wn.options.hydraulic)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve model using the classical Epanet simulator\n", - "\n", - "We now solve the same problem using the classical Epanet simulator. Note that, by default, `QuantumEpanetSimulator` uses a classical `CholeskySolver` to iteratively solve the linear problem." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/home/nico/QuantumApplicationLab/vitens/wntr-quantum/wntr_quantum/epanet/Linux/libepanet22_amd64.so\n", - "Your EPANET quantum path: /home/nico/QuantumApplicationLab/vitens/EPANET\n", - "Your EPANET temp dir: /home/nico/.epanet_quantum\n", - "\n", - "Size of the Jacobian in EPANET simulator: 8\n", - "Size of the b vector in EPANET simulator: 8\n" - ] - }, - { - "data": { - "text/plain": [ - "(name 2 3 4 5 6 7 \\\n", - " 0 52.194599 29.139265 42.472969 26.306131 27.643869 23.355785 \n", - " \n", - " name 8 9 1 \n", - " 0 13.969273 7.612091 4.394531e-07 ,\n", - " name 1 2 3 4 5 6 7 \\\n", - " 0 0.336412 0.052491 0.256151 0.03239 0.19043 0.078751 0.024721 \n", - " \n", - " name 8 9 10 11 \n", - " 0 -0.017889 0.020009 0.005311 0.007349 )" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import sys\n", - "\n", - "# define the classical EPANET simulator\n", - "sim = wntr_quantum.sim.QuantumEpanetSimulator(wn)\n", - "\n", - "# run the EPANET simulation\n", - "results_epanet = sim.run_sim()\n", - "\n", - "# remember to set up EPANET Quantum environment variables!\n", - "epanet_path = os.environ[\"EPANET_QUANTUM\"]\n", - "epanet_tmp = os.environ[\"EPANET_TMP\"]\n", - "\n", - "# check paths\n", - "print(f\"Your EPANET quantum path: {epanet_path}\")\n", - "print(f\"Your EPANET temp dir: {epanet_tmp}\\n\")\n", - "\n", - "util_path = os.path.join(epanet_path, \"src/py/\")\n", - "sys.path.append(util_path)\n", - "\n", - "from quantum_linsolve import load_json_data\n", - "\n", - "epanet_A, epanet_b = load_json_data(os.path.join(epanet_tmp, \"smat.json\"))\n", - "\n", - "# set the size of the Jacobian (A matrix)\n", - "epanet_A_dim = epanet_A.todense().shape[0]\n", - "print(f\"Size of the Jacobian in EPANET simulator: {epanet_A_dim}\")\n", - "print(f\"Size of the b vector in EPANET simulator: {epanet_b.shape[0]}\")\n", - "\n", - "# save number of nodes and pipes\n", - "n_nodes = (len(results_epanet.node[\"pressure\"].iloc[0]),)\n", - "n_pipes = len(results_epanet.link[\"flowrate\"].iloc[0])\n", - "\n", - "results_epanet.node[\"pressure\"], results_epanet.link[\"flowrate\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGbCAYAAABqC/EcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAuSElEQVR4nO3de3hU1d33/8+eSTITEiaBEBIRAhjLQTyVYCGiQCFCEakKVqW0lYPCU/EAVK0+rWhRi6hVPAB6+6Ng71seKniqWkBEwIqAEIoFRUAIJzGJiEkgkOPs3x/cmTKSmcxgWJNN369e+7rMWmv2fCdiP6y1195j2bZtCwAAGOGKdQEAAPwnIXgBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIniB/1ArV66UZVlatGhRrEsB/qMQvIjavHnzZFlW4PB6verUqZNuu+02FRUVxbo8R5s/f75mzJgR8fh+/foF/buoO37yk5+cviIBfC9xsS4AzjV16lR17NhRFRUV+vDDDzV79mz9/e9/15YtW9SsWbNYl+dI8+fP15YtWzRx4sSIX9O2bVtNmzYtqK1NmzaNXBmAxkLw4pQNHjxYPXr0kCTdfPPNSktL05NPPqk333xTI0aMqPc15eXlSkpKMlnm92LbtioqKpSYmBjrUkJKSUnRL37xi1iX8b3V1NTI7/crISEh1qUApxVLzWg0/fv3lyQVFBRIkkaNGqXk5GTt3LlTV155pZo3b66RI0dKkvx+v2bMmKFu3brJ6/UqIyND48eP17fffht0zg0bNmjQoEFq1aqVEhMT1bFjR40ZMyZozIIFC5STk6PmzZvL5/Ppggsu0NNPPx3of/DBB2VZ1kn11i2Z7969O9DWoUMHXXXVVVq6dKl69OihxMREvfDCC5KkkpISTZw4Ue3atZPH49G5556r6dOny+/3N/i7efPNNzVkyBC1adNGHo9H2dnZeuihh1RbWxsY069fP73zzjvas2dPYMm4Q4cODZ5bOh5aR44ciWjsd/n9fj3yyCNq27atvF6vBgwYoC+++OKkcQsXLlROTo4SExPVqlUr/eIXv9CXX34ZNKZfv37q16/fSa8dNWpU0GfZvXu3LMvSE088oRkzZig7O1sej0efffaZJOnZZ59Vt27d1KxZM7Vo0UI9evTQ/PnzT+nzAU0NM140mp07d0qS0tLSAm01NTUaNGiQLrvsMj3xxBOBJejx48dr3rx5Gj16tO644w4VFBToueee0z//+U+tXr1a8fHxKi4u1sCBA5Wenq57771Xqamp2r17t1577bXA+ZctW6YRI0ZowIABmj59uiRp69atWr16te68885T+hzbtm3TiBEjNH78eN1yyy3q3Lmzjh49qr59++rLL7/U+PHjlZWVpY8++kj33Xefvvrqqwavy86bN0/JycmaPHmykpOT9f7772vKlCkqKyvT448/Lkn63e9+p9LSUu3fv19PPfWUJCk5ObnBerdv366kpCRVVVUpIyNDt9xyi6ZMmaL4+PiIPu+jjz4ql8ulu+66S6WlpXrsscc0cuRIrVu3Lqj+0aNH65JLLtG0adNUVFSkp59+WqtXr9Y///lPpaamRvRe3zV37lxVVFRo3Lhx8ng8atmypV588UXdcccduu6663TnnXeqoqJC//rXv7Ru3Tr9/Oc/P6X3AZoUG4jS3LlzbUn2e++9Z3/99df2vn377AULFthpaWl2YmKivX//ftu2bfumm26yJdn33ntv0Ov/8Y9/2JLsl19+Oah9yZIlQe2vv/66Lclev359yFruvPNO2+fz2TU1NSHHPPDAA3Z9f9TrPkdBQUGgrX379rYke8mSJUFjH3roITspKcnevn17UPu9995ru91ue+/evSHf37Zt++jRoye1jR8/3m7WrJldUVERaBsyZIjdvn37sOc60ZgxY+wHH3zQfvXVV+2//OUv9k9/+lNbkn399dc3+NoVK1bYkuyuXbvalZWVgfann37almRv3rzZtm3brqqqslu3bm2ff/759rFjxwLj3n77bVuSPWXKlEBb37597b59+570XjfddFPQ5yooKLAl2T6fzy4uLg4ae/XVV9vdunWL9FcAOA5LzThleXl5Sk9PV7t27XTjjTcqOTlZr7/+us4+++ygcb/+9a+Dfl64cKFSUlJ0xRVX6ODBg4EjJydHycnJWrFihSQFZlFvv/22qqur660hNTVV5eXlWrZsWaN9ro4dO2rQoEEn1Xz55ZerRYsWQTXn5eWptrZWH3zwQdhznniN+PDhwzp48KAuv/xyHT16VJ9//vkp1zpnzhw98MADGjZsmH75y1/qzTff1C233KJXXnlFa9eujegco0ePDrquevnll0uSdu3aJen4cn9xcbFuvfVWeb3ewLghQ4aoS5cueuedd065/uHDhys9PT2oLTU1Vfv379f69etP+bxAU0bw4pTNnDlTy5Yt04oVK/TZZ59p165dJwVWXFyc2rZtG9S2Y8cOlZaWqnXr1kpPTw86jhw5ouLiYklS3759NXz4cP3hD39Qq1atdPXVV2vu3LmqrKwMnOvWW29Vp06dNHjwYLVt21ZjxozRkiVLvtfn6tix40ltO3bs0JIlS06qNy8vT5ICNYfy6aef6tprr1VKSop8Pp/S09MDG6JKS0u/V73f9Zvf/EaS9N5770U0PisrK+jnFi1aSFLgevuePXskSZ07dz7ptV26dAn0n4r6fte//e1vlZycrB/96Ef6wQ9+oAkTJmj16tWn/B5AU8M1XpyyH/3oR4FdzaF4PB65XMF/v/P7/WrdurVefvnlel9TNwOqe7jD2rVr9dZbb2np0qUaM2aM/vSnP2nt2rVKTk5W69attWnTJi1dulSLFy/W4sWLNXfuXP3qV7/SSy+9FDhPfU7c2HSi+nYw+/1+XXHFFbrnnnvqfU2nTp3q/wXo+Kasvn37yufzaerUqcrOzpbX69XGjRv129/+NqLNWdFo166dJOnQoUMRjXe73fW227Yd9XtbllXv66L5XXft2lXbtm3T22+/rSVLlujVV1/VrFmzNGXKFP3hD3+IuiagqSF4YVx2drbee+899e7dO6LbdHr16qVevXrpkUce0fz58zVy5EgtWLBAN998syQpISFBQ4cO1dChQ+X3+3XrrbfqhRde0P33369zzz03MIMrKSkJ2gQUzUwtOztbR44cCcxwo7Fy5Up98803eu2119SnT59Ae93u7xOF+ktCNOqWiL+7hHuq2rdvL+n4prO6net1tm3bFuiXjs+W697/RNHOipOSknTDDTfohhtuUFVVlYYNG6ZHHnlE9913X9ByN+BELDXDuOuvv161tbV66KGHTuqrqalRSUmJpONLnd+dPV188cWSFFhu/uabb4L6XS6XLrzwwqAx2dnZkhR0Hba8vDwwI4605jVr1mjp0qUn9ZWUlKimpibka+tmlCd+lqqqKs2aNeuksUlJSREvPZeVlQUtu9e9x8MPPyxJJy37n6oePXqodevWev7554Peb/Hixdq6dauGDBkSaMvOztbnn3+ur7/+OtD2ySefRLVU/N1/pwkJCTrvvPNk23bIa/2AkzDjhXF9+/bV+PHjNW3aNG3atEkDBw5UfHy8duzYoYULF+rpp5/Wddddp5deekmzZs3Stddeq+zsbB0+fFgvvviifD6frrzySknHH9xx6NAh9e/fX23bttWePXv07LPP6uKLL1bXrl0lSQMHDlRWVpbGjh2ru+++W263W3/+85+Vnp6uvXv3RlTz3Xffrb/97W+66qqrNGrUKOXk5Ki8vFybN2/WokWLtHv3brVq1are11566aVq0aKFbrrpJt1xxx2yLEv//d//Xe+SbE5Ojv76179q8uTJuuSSS5ScnKyhQ4fWe96NGzdqxIgRGjFihM4991wdO3ZMr7/+ulavXq1x48ape/fuEX22hsTHx2v69OkaPXq0+vbtqxEjRgRuJ+rQoYMmTZoUGDtmzBg9+eSTGjRokMaOHavi4mI9//zz6tatm8rKyiJ6v4EDByozM1O9e/dWRkaGtm7dqueee05DhgxR8+bNG+UzATEVwx3VcKi623DC3eZj28dvIUlKSgrZ/1//9V92Tk6OnZiYaDdv3ty+4IIL7Hvuucc+cOCAbdu2vXHjRnvEiBF2VlaW7fF47NatW9tXXXWVvWHDhsA5Fi1aZA8cONBu3bq1nZCQYGdlZdnjx4+3v/rqq6D3ys/Pt3v27BkY8+STT4a8nWjIkCH11nv48GH7vvvus88991w7ISHBbtWqlX3ppZfaTzzxhF1VVRX2d7F69Wq7V69edmJiot2mTRv7nnvusZcuXWpLslesWBEYd+TIEfvnP/+5nZqaaksKe2vRrl277J/97Gd2hw4dbK/Xazdr1szOycmxn3/+edvv94etx7b/fTvRwoULg9rrbvWZO3duUPtf//pX+4c//KHt8Xjsli1b2iNHjgzcOnai//mf/7HPOeccOyEhwb744ovtpUuXhryd6PHHHz/p9S+88ILdp08fOy0tzfZ4PHZ2drZ9991326WlpQ1+JsAJLNs+hR0UAADglHCNFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAg+JiXUC0bNsvVX8p+cslyyMltJVlxce6LKBBRR9u1qF/7ZLbm6C2V/ZUs8yWsS4JaNBXX5bq8y1FkqRO57XW2e1SY1vQGcCybduOdRGRsit3S0fXS/axfzda8ZL3AlmJ58esLiCcgxu368PRj+nbzQWBNld8nLJ/eYV6PXeH4rwJMawOqF9pyTG9+MxH2rzxQFB7t4sydcudvdWiZbMYVeZ8jgleu2qvdGRl6AGJP5SVeIGxeoBIlG7bp7d7TVBVaXm9/e1+eqny3njIcFVAeBXHqvWHexbrwL7Sevsz2/j0wOOD1SyJvzSeCudc4z26MXz/sc2y7SoztQAR+uSPL4cMXUna97ePVPTRpwYrAhr24YpdIUNXkgoPlOmD5V8YrOjM4ohrvHbN15K/rIFRNdqz4x86dKSFkZqAhvgrq7XrrysaHLf2Ty+rnfc6AxUBkXn37V0Njln9/i795KfnGajmzOOI4JX/WMNjJP3X8zM07am3T3MxQGR8StAM67IGxy1/7W09+9o0AxUBkRl2xZNKbtYq7JjSksj+fxknc8Q1XrvmoFT29wbH7fn6bB0qZ8aLpsFfVaNP+0+Rv6I67Li063LV9t5hhqoCGvbKn3fpq/3hg7X9OS019ckhhio6szhixmvFtZLtTpVqS8IMilf7Tn3UgVuL0IRU/DxPO/68OOyY3Lt/ofTuXQxVBDSs7GBzzZ21NuyYywdkG6rmzOOczVWJOZKsMP0XcT8vmpyLfjdSnlYpIfs73vhjpV9C6KJpubRvR3XIDn2febsOLdSH4D1ljlhqrmNX7T9+H6//cKCtuiZO8b4cWd7OMawMCK1k6x6tHvekildvCbS5EhPU9f/8VD2mj5Mrzh3D6oD6lR+p1LzZ67RhzV75/cdjwuWy1L1nO43+dS8l+zwxrtC5HBW8kmTbtlRTrN27tujWCZP1yGN/VvfuObEuC2jQoc279M+/va/f/v7/avaq13VJn96xLglo0KGD5dr2WbEkqVPX1kpLT4pxRc7niGu8J7IsS4rP0LflX2rJ8n/pkXDLz0AT0vKCc9SiukT5v/9a7uTEWJcDRKRlqyTl9ukY6zLOKM65xgsAwBmA4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAAAMIngBADCI4AUAwCCCFwAAgwheAMAZrUOHDpoxY0asywggeAEAMTdq1ChZlqVHH300qP2NN96QZVkxqur0IHgBAE2C1+vV9OnT9e2338a6lNOK4AUANAl5eXnKzMzUtGnTQo559dVX1a1bN3k8HnXo0EF/+tOfgvqLi4s1dOhQJSYmqmPHjnr55ZdPOkdJSYluvvlmpaeny+fzqX///vrkk08a/fOEQvACAJoEt9utP/7xj3r22We1f//+k/rz8/N1/fXX68Ybb9TmzZv14IMP6v7779e8efMCY0aNGqV9+/ZpxYoVWrRokWbNmqXi4uKg8/zsZz9TcXGxFi9erPz8fHXv3l0DBgzQoUOHTvdHlCTFGXkXAAAicO211+riiy/WAw88oDlz5gT1PfnkkxowYIDuv/9+SVKnTp302Wef6fHHH9eoUaO0fft2LV68WB9//LEuueQSSdKcOXPUtWvXwDk+/PBDffzxxyouLpbH45EkPfHEE3rjjTe0aNEijRs37rR/Rma8AIAmZfr06XrppZe0devWoPatW7eqd+/eQW29e/fWjh07VFtbq61btyouLk45OTmB/i5duig1NTXw8yeffKIjR44oLS1NycnJgaOgoEA7d+48rZ+rDjNeAECT0qdPHw0aNEj33XefRo0a1ajnPnLkiM466yytXLnypL4TA/p0IngBAE3Oo48+qosvvlidO3cOtHXt2lWrV68OGrd69Wp16tRJbrdbXbp0UU1NjfLz8wNLzdu2bVNJSUlgfPfu3VVYWKi4uDh16NDBxEc5CUvNAIAm54ILLtDIkSP1zDPPBNp+85vfaPny5XrooYe0fft2vfTSS3ruued01113SZI6d+6sn/zkJxo/frzWrVun/Px83XzzzUpMTAycIy8vT7m5ubrmmmv07rvvavfu3froo4/0u9/9Ths2bDDy2QheAECTNHXqVPn9/sDP3bt31yuvvKIFCxbo/PPP15QpUzR16tSg5ei5c+eqTZs26tu3r4YNG6Zx48apdevWgX7LsvT3v/9dffr00ejRo9WpUyfdeOON2rNnjzIy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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Plot results on the network\n", - "pressure_at_5hr_ref = results_epanet.node[\"pressure\"].loc[0, :]\n", - "wntr.graphics.plot_network(\n", - " wn,\n", - " node_attribute=pressure_at_5hr_ref,\n", - " node_size=50,\n", - " title=\"Pressure at 5 hours\",\n", - " node_labels=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Solve linear system with VQLS and the final matrices from EPANET\n", - "\n", - "For testing purposes, we start by solving the linear system with VQLS and the final A and b matrices from the classical EPANET simulator. Here, we are **preconditioning** the initial linear system using diagonal scaling and also using a **mix of two classical optimizers**." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "VQLS Iteration 1000 Cost 3.402e-02\n", - " Return from subroutine COBYLA because the MAXFUN limit has been reached.\n", - "\n", - " NFVALS = 1000 F = 3.401889E-02 MAXCV = 0.000000E+00\n", - " X =-7.072034E-03 3.114092E+00 1.274971E+00 -3.272231E+00 2.494664E-01\n", - " -6.452977E-01 -9.303278E-02 1.149657E+00 2.358349E+00 -1.923387E+00\n", - " -1.527626E+00 3.988339E+00\n", - "Optimization terminated successfully.\n", - " Current function value: 0.000000\n", - " Iterations: 84\n", - " Function evaluations: 1820\n", - " Gradient evaluations: 140\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "from qiskit.circuit.library import RealAmplitudes\n", - "from qiskit.primitives import Estimator\n", - "from qiskit_algorithms import optimizers as opt\n", - "\n", - "from quantum_newton_raphson.vqls_solver import VQLS_SOLVER\n", - "\n", - "n_qubits = int(np.ceil(np.log2(epanet_A_dim)))\n", - "\n", - "qc = RealAmplitudes(n_qubits, reps=3, entanglement=\"full\")\n", - "estimator = Estimator()\n", - "\n", - "linear_solver = VQLS_SOLVER(\n", - " estimator=estimator,\n", - " ansatz=qc,\n", - " optimizer=[opt.COBYLA(maxiter=1000, disp=True), opt.CG(maxiter=500, disp=True)],\n", - " matrix_decomposition=\"symmetric\",\n", - " verbose=True,\n", - " preconditioner=\"diagonal_scaling\",\n", - ")\n", - "\n", - "res = linear_solver(epanet_A, epanet_b)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's check the evolution of the cost function" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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bqOWlhZkZ2fj3nvvxbx587zOr127FgUFBVi1ahVyc3Px4osvYubMmSgrK0NionM6V05ODux2770YPvvsM4wZMwY///nPccMNN8BkMuGqq66CWq3utj4WiwUWS+eNNZvNvX1LREREQW/YwGi8eV8uth6ux6otR3C2xQoAUEnOlhW7LCCEgCRJXcw2ci9v2F+Fh97YDSEASQL++MNJuHFscr+9l4vpdXiZPXs2Zs+e3e35FStWYNGiRVi4cCEAYNWqVVi/fj1Wr16NJUuWAABKSkou+BoPPPAAHnjgAQDAfffdhxEjut+zYfny5Xjuued6+S6IiIhCz9WZCUiI0WPVliPKMWOEFg2tzgXs7LKAVt1VeHF/nv2nzcoxIYCDVeaACi8+HfNitVpRXFyM/Pz8zhdQqZCfn4+ioqIeP09tbS0AoKysDDt37sTMmTO7vXbp0qVobGxUvk6ePNnttURERKEuc2A0bslJxYjEaIxMisaD1w9XztkdzkTiOcblYgN4A202kk9nG9XX18PhcCApKcnteFJSEkpLS3v8PLfccgsaGxsRFRWF119/HRpN99XU6/XQ6/WXXGciIqJQolJJ+L87Jyhli92B5z9xfgZbHTIioPbqJrpYS0yAZZfAmyoNoFetNERERNQ9raqzk+XhN3Yj/4rELlpePMKL55MEWNOLT8NLQkIC1Go1ampq3I7X1NQgOTlw+sqIiIjChUolITFGj9omC7aV16Po6BlEdmwpoFZJzunUni0tAd7y4tMxLzqdDpMmTUJhYaFyTJZlFBYWIi8vz5cvRURERD209oE8/Oa2LACAQxaw2J3TptWSBCAMxrw0NzejvLxcKVdUVKCkpATx8fFIT09HQUEBFixYgMmTJ2PKlCl48cUX0dLSosw+IiIiov41NCEKKSYDnnp/PwDn2BfA2fICR0/GvARWeul1eNm1axemT5+ulAsKCgAACxYswJo1azB//nzU1dXhmWeeQXV1NXJycrBhwwavQbxERETUf7Rq784WjcrZ8uIZTQJ976Neh5dp06Z5vSlPixcvxuLFiy+5UkRERORbapUESXIPImq1q9souGYbBdzeRkRERNQ3zp95BHSOefFqafF4XKC1vDC8EBERhQlNR0uLi7qj20iW3a8L9DEvDC9ERERhwhVWXLod8+I1d7oPK3UJGF6IiIjChM5j0K5KxTEv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y8PWrVths9mUaz7//HOMGjUqJLo8euPUqVM4c+YMUlJSAIT3/RNCYPHixXj//fexceNGr64xX/2+5uXluT2H65pg/3t5sfvXlZKSEgBw+/kL1/vnc/4eMRwM3nrrLaHX68WaNWvEwYMHxf333y9iY2PdRoyHq8cee0xs3rxZVFRUiO3bt4v8/HyRkJAgamtrhRDOqZfp6eli48aNYteuXSIvL0/k5eUpj3dNHbzxxhtFSUmJ2LBhgxg4cGDITpVuamoSe/bsEXv27BEAxIoVK8SePXvE8ePHhRDOqdKxsbHigw8+EPv27RO33HJLl1OlJ0yYIHbs2CG2bdsmRowY4TbVt6GhQSQlJYkf/ehHYv/+/eKtt94SkZGRQT/VV4gL37+mpibxi1/8QhQVFYmKigrx73//W0ycOFGMGDFCtLe3K88RrvfvoYceEiaTSWzevNltKm9ra6tyjS9+X11TfR9//HFx6NAhsXLlypCY6nux+1deXi5++ctfil27domKigrxwQcfiGHDhonrrrtOeY5wvn++xvDSQ3/4wx9Eenq60Ol0YsqUKeKrr77yd5UCwvz580VKSorQ6XRi0KBBYv78+aK8vFw539bWJn7605+KuLg4ERkZKW677TZRVVXl9hzHjh0Ts2fPFhERESIhIUE89thjwmaz9fdb6RebNm0SALy+FixYIIRwTpd++umnRVJSktDr9WLGjBmirKzM7TnOnDkj7rrrLhEdHS2MRqNYuHChaGpqcrtm7969YurUqUKv14tBgwaJ559/vr/eYp+60P1rbW0VN954oxg4cKDQarViyJAhYtGiRV7/kxGu96+r+wZAvP7668o1vvp93bRpk8jJyRE6nU4MGzbM7TWC1cXu34kTJ8R1110n4uPjhV6vF5mZmeLxxx93W+dFiPC9f74mCSFE/7XzEBEREV0ejnkhIiKioMLwQkREREGF4YWIiIiCCsMLERERBRWGFyIiIgoqDC9EREQUVBheiIiIKKgwvBAREVFQYXghIiKioMLwQkREREGF4YWIiIiCCsMLERERBZX/D3lLEOIhXrRsAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.semilogy(res.logger.values)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "and visualize graphically the solution" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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U1hYyIgRI2jTpg1jx44t8UJFRK7HgQMHmDVrFrm5udhsNvr160fLli3dXZaIlKEi38bauXMnAwcOvOb+QYMGYYxh2bJlhIaGlkhxIiI3whjDypUryc3NJSIigoceekhBR6QKKnLLjoeHB/n5+dfcX1BQQEBAgHN0g4iIu1ksFoYMGcL69evp2bMnnp6aNF6kKipyy87NN9/MF198cc39//73v7n55ptLpCgRkeu1b98+vvvuO+fz0NBQ4uPjFXREqrAi/9//zDPPMGjQIPLy8nj66aeJiIgAIDU1lb///e/84x//YNasWaVWqIjIL7Hb7Sxfvpy1a9cCEB0dTb169dxblIiUC0UOO/369eOtt97imWee4e9//zvBwcEAZGZm4uHhwd/+9jf69+9faoWKiFxLRkYGM2fO5OjRowDceuut1K5d281ViUh5UewZlI8ePcqMGTPYt28fAI0bNyYhIYHo6OhSKbAsaAZlkYrrp59+Ys6cOZw/fx4fHx8GDBhA8+bN3V2WiJSBov5+FznszJs3jz59+mC1FmsewgpBYUekYlq2bBnff/89ALVq1SIhIUGDJESqkKL+fhc5uQwaNIjo6GheeOEFDhw4UCJFiojciOrVqwMQGxvLvffeq6AjIldV5LBz6NAhHn74YaZPn06TJk3o2rUr//73vzl37lxp1ici4uLS75zWrVvz8MMP06tXLzw8PNxYlYiUZ0UOO9HR0bz00kscOHCAb7/9lnr16jFmzBhq1qzJI488woYNG0qzThGp4goLC5k/fz5TpkxxWdMqMjLSjVWJSEVwXR1wunfvzqeffkpKSgp/+9vf2L59Ox07dqR169YlXZ+ICKdPn+bjjz9m48aNnD17lv3797u7JBGpQG5olq3AwEB69uzJ4cOH+emnn9i1a1dJ1SUiAsCOHTuYO3cu+fn5+Pn5MXjwYBo1auTuskSkArmusHPu3DlmzJjBJ598wnfffUf9+vUZP34899xzTwmXJyJVVUFBAYsWLWLz5s0A1K1blyFDhmjEpIgUW7FuY/3www889NBDzn46tWvX5ttvv2X//v288MIL1KpVq1hvPmXKFFq1akVQUBBBQUHExsaycOFC5/7z588zduxYqlWrRkBAAEOHDuXEiRMu50hOTqZv3774+fkRHh7Os88+S2FhYbHqEJHyZ9WqVc6gc9tttzFq1CgF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djsFBQXO/jj5+flkZ2cTFhbm5spERH5dUX+/i92y06NHD6Kjo686/Dw5OZk6deoU95Qi4gYZGRnMnDkTHx8ffve732GxWLDZbAo6IlLpFDvs1K9fn5SUFMLDw122nz59mvr162ueHZEK4KeffmLOnDmcP38eb29vTp8+rU7IIlJpFTvsXOuuV3Z2toamipRzdrudpUuXsm7dOgCioqJISEiosLegRUSKoshhZ/z48QBYLBZeeukl/Pz8nPvsdjvr1q3T9PEi5diZM2dITEzk+PHjwIXpIuLi4vDw8HBzZSIipavIYWfLli3AhZad7du3uyz+Z7PZaN26Nc8880zJVygiN8wYw4wZM0hJScHHx4dBgwbRtGlTd5clIlImihx2VqxYAcC9997LP//5T41aEqlALBYL/fr1Y+nSpQwaNIjg4GB3lyQiUmaKPfS8MtLQc6mM0tPTSUlJcZkvxxjziwv5iohUJKU29DwnJ4fXX3+dZcuWkZaWhsPhcNl/8ODB4lcrIiVqx44dzJ07F7vdTlhYGDVr1gRQ0BGRKqnYYeeBBx5g1apV3H333dSsWVNfniLlSEFBAYsWLWLz5s0A1KlTB39/fzdXJSLiXsUOOwsXLmT+/Pl07ty5NOoRket06tQpZsyYQVpaGgC33XYb3bp1w2q1urkyERH3uq61sTTDqkj5sm3bNubNm0dBQQH+/v4MGTKEBg0auLssEZFyodj/5PvTn/7ESy+9RG5ubmnUIyLXITMzk4KCAurXr8/DDz+soCMicolit+z8/e9/58CBA0RERFCvXj28vLxc9l/sKyAipevSkVVdunQhKCiIli1b6raViMhlih12Bg0aVApliEhRGWPYunUrmzZtYvTo0Xh5eWGxWGjdurW7SxMRKZeKHXYmTpxYGnWISBHk5+czf/58tm3bBsCmTZvo2LGjm6sSESnfih12RMQ9Tpw4wYwZMzh9+jQWi4Xu3bvToUMHd5clIlLuFTvs2O123nrrLf773/+SnJxMfn6+y/709PQSK05ELty22rx5MwsXLsRutxMYGMjQoUOpW7euu0sTEakQit2T8ZVXXuHNN99k+PDhZGZmMn78eIYMGYLVauXll18uhRJFqrbvv/+eefPmYbfbady4MY888oiCjohIMRQ77HzxxRd8+OGHPP3003h6ejJixAg++ugjXnrpJX744YfSqFGkSmvdujUBAQHExcUxYsQI/Pz83F2SiEiFUuywk5qaSsuWLQEICAggMzMTgH79+jF//vySrU6kCjLGcPjwYefzoKAgHnvsMTp37qzlWURErkOxw07t2rVJSUkBoGHDhixZsgSADRs24O3tXbLViVQx58+fZ8aMGUybNo2ffvrJud1ms7mxKhGRiq3YHZQHDx7MsmXL6NChA4899hh33XUXH3/8McnJyTz11FOlUaNIlXDs2DESExPJyMjAarWSk5Pj7pJERCqFYrfsvP766/zhD38AYPjw4axevZoxY8aQmJjI66+/XqxzTZo0iVtuuYXAwEDCw8MZNGgQe/bscTnm/PnzjB07lmrVqhEQEMDQoUM5ceKEyzHJycn07dsXPz8/wsPDefbZZyksLCzuRxNxC2MMSUlJfPLJJ2RkZBASEsJ9991Hu3bt3F2aiEilcMPz7MTGxhIbG3tdr121ahVjx47llltuobCwkD/84Q/06tWLXbt24e/vD8BTTz3F/PnzmTFjBsHBwYwbN44hQ4awZs0a4MJQ+L59+xIZGcnatWtJSUlh1KhReHl58dprr93oxxMpVefOnWPOnDnOkN+8eXMGDBiAj4+PmysTEak8LMYYU5wXfPbZZ7+4f9SoUdddzMmTJwkPD2fVqlXcfvvtZGZmUqNGDb788ksSEhIA+Omnn2jevDlJSUl07NiRhQsX0q9fP44fP05ERAQA7733Hs899xwnT54sUl+HrKwsgoODyczMJCgo6LrrFymun376ia+++goPDw969erFLbfcok7IIiJFVNTf72K37DzxxBMuzwsKCsjNzcVms+Hn53dDYefiyK6wsDDgwlT4BQUFxMXFOY9p1qwZderUcYadpKQkWrZs6Qw6APHx8YwZM4adO3fStm3bK94nLy+PvLw85/OsrKzrrlnkRjRr1ozu3bvTuHFjatas6e5yREQqpWL32Tlz5ozLIzs7mz179tClSxf+85//XHchDoeDJ598ks6dO3PTTTcBF4a522w2QkJCXI6NiIggNTXVecylQefi/ov7rmbSpEkEBwc7H9HR0dddt0hx5ObmMnv2bM6ePevcdvvttyvoiIiUomKHnatp3Lgxr7/++hWtPsUxduxYduzYwfTp00uipF80YcIEMjMznY8jR46U+nuKHD58mPfee49t27bxzTffuLscEZEqo8QW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8knntqp0TV5++WUsFovLo1mzZs79VelaXHTs2DHuuusuqlWrhq+vLy1btmTjxo3O/VXp+7REGSkV06dPNzabzXzyySdm586d5sEHHzQhISHmxIkT7i6txC1YsMC88MILZtasWQYws2fPdtn/+uuvm+DgYPP111+bH3/80QwYMMDUr1/fnDt3znlM7969TevWrc0PP/xgvvvuO9OoUSMzYsSIMv4kNy4+Pt5MnTrV7Nixw2zdutX06dPH1KlTx2RnZzuPeeSRR0x0dLRZtmyZ2bhxo+nYsaPp1KmTc39hYaG56aabTFxcnNmyZYtZsGCBqV69upkwYYI7PtIN+eabb8z8+fPN3r17zZ49e8wf/vAH4+XlZXbs2GGMqVrX4nLr16839erVM61atTJPPPGEc3tVuiYTJ040LVq0MCkpKc7HyZMnnfur0rUwxpj09HRTt25dc88995h169aZgwcPmsWLF5v9+/c7j6lK36clSWGnlNx6661m7Nixzud2u91ERUWZSZMmubGq0nd52HE4HCYyMtL87W9/c27LyMgw3t7e5j//+Y8xxphdu3YZwGzYsMF5zMKFC43FYjHHjh0rs9pLQ1pamgHMqlWrjDEXPruXl5eZMWOG85jdu3cbwCQlJRljLoRHq9VqUlNTncdMmTLFBAUFmby8vLL9AKUgNDTUfPTRR1X6Wpw9e9Y0btzYLF261HTt2tUZdqraNZk4caJp3br1VfdVtWthjDHPPfec6dKlyzX3V/Xv0xuh21ilID8/n02bNhEXF+fcZrVaiYuLIykpyY2Vlb1Dhw6Rmprqci2Cg4Pp0KGD81okJSUREhJC+/btncfExcVhtVpZt25dmddckjIzMwEICwsDYNOmTRQUFLhcj2bNmlGnTh2X69GyZUsiIiKcx8THx5OVlcXOnTvLsPqSZbfbmT59Ojk5OcTGxlbpazF27Fj69u3r8tmhav792LdvH1FRUTRo0ICRI0eSnJwMVM1r8c0339C+fXuGDRtGeHg4bdu25cMPP3Tur+rfpzdCYacUnDp1Crvd7vI/IEBERASpqaluqso9Ln7eX7oWqamphIeHu+z39PQkLCysQl8vh8PBk08+SefOnbnpppuAC5/VZrMREhLicuzl1+Nq1+vivopm+/btBAQE4O3tzSOPPMLs2bOJiYmpktcCYPr06WzevJlJkyZdsa+qXZMOHTowbdo0Fi1axJQpUzh06BC33XYbZ8+erXLXAuDgwYNMmTKFxo0bs3jxYsaMGcPjjz/Op59+ClTt79MbpVXPRUrJ2LFj2bFjB99//727S3Grpk2bsnXrVjIzM0lMTGT06NGsWrXK3WW5xZEjR3jiiSdYunQpPj4+7i7H7e644w7nn1u1akWHDh2oW7cu//3vf/H19XVjZe7hcDho3749r732GgBt27Zlx44dvPfee4wePdrN1VVsatkpBdWrV8fDw+OKUQMnTpwgMjLSTVW5x8XP+0vXIjIykrS0NJf9hYWFpKenV9jrNW7cOObNm8eKFSuoXbu2c3tkZCT5+flkZGS4HH/59bja9bq4r6Kx2Ww0atSIdu3aMWnSJFq3bs0///nPKnktNm3aRFpaGjfffDOenp54enqyatUqJk+ejKenJxEREVXumlwqJCSEJk2asH///ir596NmzZrExMS4bGvevLnz1l5V/T4tCQo7pcBms9GuXTuWLVvm3OZwOFi2bBmxsbFurKzs1a9fn8jISJdrkZWVxbp165zXIjY2loyMDDZt2uQ8Zvny5TgcDjp06FDmNd8IYwzjxo1j9uzZLF++nPr167vsb9euHV5eXi7XY8+ePSQnJ7tcj+3bt7t8YS1dupSgoKArvggrIofDQV5eXpW8Fj179mT79u1s3brV+Wjfvj0jR450/rmqXZNLZWdnc+DAAWrWrFkl/3507tz5iqkq9u7dS926dYGq931aotzdQ7qymj59uvH29jbTpk0zu3btMg899JAJCQlxGTVQWZw9e9Zs2bLFbNmyxQDmzTffNFu2bDGHDx82xlwYKhkSEmLmzJljtm3bZgYOHHjVoZJt27Y169atM99//71p3LhxhRwqOWbMGBMcHGxWrlzpMpw2NzfXecwjjzxi6tSpY5YvX242btxoYmNjTWxsrHP/xeG0vXr1Mlu3bjWLFi0yNWrUqJDDaZ9//nmzatUqc+jQIbNt2zbz/PPPG4vFYpYsWWKMqVrX4louHY1lTNW6Jk8//bRZuXKlOXTokFmzZo2Ji4sz1atXN2lpacaYqnUtjLkwHYGnp6f5y1/+Yvbt22e++OIL4+fnZz7//HPnMVXp+7QkKeyUon/961+mTp06xmazmVtvvdX88MMP7i6pVKxYscIAVzxGjx5tjLkwXPKPf/yjiYiIMN7e3qZnz55mz549Luc4ffq0GTFihAkICDBBQUHm3nvvNWfPnnXDp7kxV7sOgJk6darzmHPnzplHH33UhIaGGj8/PzN48GCTkpLicp6ff/7Z3HHHHcbX19dUr17dPP3006agoKCMP82Nu++++0zdunWNzWYzNWrUMD179nQGHWOq1rW4lsvDTlW6JsOHDzc1a9Y0NpvN1KpVywwfPtxlTpmqdC0umjt3rrnpppuMt7e3adasmfnggw9c9lel79OSZDHGGPe0KYmIiIiUPvXZERERkUpNYUdEREQqNYUdERERqdQUdkRERKRSU9gRERGRSk1hR0RERCo1hR0RERGp1BR2REREpFJT2BGpQCwWC19//XWpv8/KlSuxWCxXLMJ4vX7++WcsFgtbt24tkfNVVS+//DJt2rS54fNMmzaNkJCQGz6PSEWhsCNSTqSmpvLYY4/RoEEDvL29iY6Opn///i6L/pWVTp06kZKSQnBwcJm9Z7du3bBYLFc8HnnkEecxl24PDg6mc+fOLF++3OU8R48exWazcdNNN131fSwWCz4+Phw+fNhl+6BBg7jnnnucz++5556r1tO7d29nGPylx8qVK0vs2tyIevXq8Y9//MNl2/Dhw9m7d697ChJxA093FyAiF1o+OnfuTEhICH/7299o2bIlBQUFLF68mLFjx/LTTz+VaT02m43IyMgyfU+ABx98kFdffdVlm5+fn8vzqVOn0rt3b06dOsULL7xAv3792LFjBw0aNAAutFr89re/ZfXq1axbt+6qKz1bLBZeeuklPv3001+sp3fv3kydOtVlm7e3N/7+/qSkpDi3PfHEE2RlZbkcGxYWVrQP7Qa+vr74+vq6uwyRMqOWHZFy4NFHH8VisbB+/XqGDh1KkyZNaNGiBePHj+eHH3645uuee+45mjRpgp+fHw0aNOCPf/wjBQUFzv0//vgj3bt3JzAwkKCgINq1a8fGjRsBOHz4MP379yc0NBR/f39atGjBggULgKvfxlqzZg3dunXDz8+P0NBQ4uPjOXPmDACLFi2iS5cuhISEUK1aNfr168eBAweKfR38/PyIjIx0eQQFBbkcExISQmRkJDfddBNTpkzh3LlzLF26FABjDFOnTuXuu+/md7/7HR9//PFV32fcuHF8/vnn7Nix4xfr8fb2vqKe0NBQZxi8+PD19b3iWJvNdsX58vPzGTduHDVr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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(array([599.121, 603.574, 632.034, 601.561, 578.432, 620.536, 663.368, 647.877]),\n", - " array([599.102, 603.557, 632.028, 601.546, 578.42 , 620.529, 663.366, 647.874]))" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import numpy as np\n", - "\n", - "ref = np.linalg.solve(epanet_A.todense(), epanet_b)\n", - "\n", - "plt.scatter(ref, res.solution)\n", - "plt.axline((0, 0), slope=1, linestyle=\"--\", color=\"gray\")\n", - "plt.xlabel(\"Classical EPANET solution\")\n", - "plt.ylabel(\"Quantum VQLS solution\")\n", - "plt.show()\n", - "\n", - "ref, res.solution" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "vitens_wntr_1", - "language": "python", - "name": "python3" - }, - "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.9.0" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From fe4263dd0ad5006583a09f04948db5a174c68047 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 09:31:02 +0100 Subject: [PATCH 05/14] clean up --- examples/qubo_examples.py | 166 -------------------------------------- examples/vqls_examples.py | 165 ------------------------------------- 2 files changed, 331 deletions(-) delete mode 100644 examples/qubo_examples.py delete mode 100644 examples/vqls_examples.py diff --git a/examples/qubo_examples.py b/examples/qubo_examples.py deleted file mode 100644 index 306d65a..0000000 --- a/examples/qubo_examples.py +++ /dev/null @@ -1,166 +0,0 @@ -import os -import matplotlib.pyplot as plt -import numpy as np -import wntr -from qiskit.circuit.library import RealAmplitudes -from qiskit.primitives import Estimator -from quantum_newton_raphson.qubo_solver import QUBO_SOLVER -from qubols.encodings import RangedEfficientEncoding -import wntr_quantum - - -def get_ape_from_pd_series(quantum_pd_series, classical_pd_series): - """Helper function to evaluate absolute percentage error between classical and quantum results.""" - DELTA = 1.0e-12 - ape = ( - abs(quantum_pd_series - classical_pd_series) - * 100.0 - / abs(classical_pd_series + DELTA) - ) - return ape - - -def compare_results(classical_result, quantum_result): - """Helper function that compares the classical and quantum simulation results.""" - TOL = 10 # => per cent - DELTA = 1.0e-12 - classical_data = [] - quantum_data = [] - - def check_ape(classical_value, quantum_value): - """Checks if the absolute percentage error between classical and quantum results is within TOL.""" - ape = ( - abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA) - ) - is_close_to_classical = ape <= TOL - if is_close_to_classical: - print( - f"Quantum result {quantum_value} within {ape}% of classical result {classical_value}" - ) - quantum_data.append(quantum_value) - classical_data.append(classical_value) - return is_close_to_classical - - for link in classical_result.link["flowrate"].columns: - classical_value = classical_result.link["flowrate"][link].iloc[0] - quantum_value = quantum_result.link["flowrate"][link].iloc[0] - message = f"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}" - assert check_ape(classical_value, quantum_value), message - - for node in classical_result.node["pressure"].columns: - classical_value = classical_result.node["pressure"][node].iloc[0] - quantum_value = quantum_result.node["pressure"][node].iloc[0] - message = f"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}" - assert check_ape(classical_value, quantum_value), message - - return classical_data, quantum_data - - -# set EPANET Quantum environment variables -os.environ["EPANET_TMP"] = "/Users/murilo/scratch_dir/.epanet_quantum" -os.environ["EPANET_QUANTUM"] = "/Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET" - -# set input files -path = "../docs/notebooks/networks" -inputs = ["Net1Loops.inp", "Net2Loops.inp", "Net3Loops.inp"] - -# set qiskit Estimator -estimator = Estimator() - -for file in inputs: - - print("##################################") - print(f"Solving for {file} model") - print("##################################") - - # set up network model - input_file = f"{path}/{file}" - model_name = os.path.splitext(file)[0] - wn = wntr.network.WaterNetworkModel(input_file) - - # solve model using the classical EPANET simulator - sim_classical = wntr_quantum.sim.QuantumEpanetSimulator(wn) - results_classical = sim_classical.run_sim() - - # load EPANET A and b matrices from temp - epanet_A, epanet_b = wntr_quantum.sim.epanet.load_epanet_matrix() - - # check the size of the A and b matrices - epanet_A_dim = epanet_A.todense().shape[0] - epanet_b_dim = epanet_b.shape[0] - print(f"* Size of the Jacobian in EPANET simulator: {epanet_A_dim}") - print(f"* Size of the b vector in EPANET simulator: {epanet_b_dim}") - - # save number of nodes and pipes - n_nodes = len(results_classical.node["pressure"].iloc[0]) - n_pipes = len(results_classical.link["flowrate"].iloc[0]) - - # set number of qubits - n_qubits = int(np.ceil(np.log2(epanet_A_dim))) - - # define ansatz - qc = RealAmplitudes(n_qubits, reps=3, entanglement="full") - - # set the qubo solver - qubo_solver = QUBO_SOLVER( - encoding=RangedEfficientEncoding, - num_qbits=15, - num_reads=100, - range=200, - offset=600, - iterations=5, - temperature=1e4, - use_aequbols=True, - ) - - print("* Solving model with EPANET Quantum ...\n") - # solve model using EPANET quantum and QUBOs - sim_quantum = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=qubo_solver) - results_quantum = sim_quantum.run_sim(linear_solver=qubo_solver) - - # plot networt and absolute percent errors - wntr.graphics.plot_network( - wn, - node_attribute=get_ape_from_pd_series( - results_quantum.node["pressure"].iloc[0], - results_classical.node["pressure"].iloc[0], - ), - link_attribute=get_ape_from_pd_series( - results_quantum.link["flowrate"].iloc[0], - results_classical.link["flowrate"].iloc[0], - ), - node_colorbar_label="Pressures", - link_colorbar_label="Flows", - node_size=50, - title=f"{model_name}: Absolute Percent Error", - node_labels=False, - filename=f"{model_name}_wnm_qubo.png", - ) - - # checks if the quantum results are within 5% of the classical ones - classical_data, quantum_data = compare_results(results_classical, results_quantum) - - # plot all data - plt.close() - plt.scatter( - classical_data[:n_pipes], - quantum_data[:n_pipes], - label="Flowrates", - color="blue", - marker="o", - ) - plt.scatter( - classical_data[n_pipes:], - quantum_data[n_pipes:], - label="Pressures", - color="red", - marker="s", - facecolors="none", - ) - plt.axline((0, 0), slope=1, linestyle="--", color="gray", label="") - plt.xlabel("Classical EPANET results") - plt.ylabel("Quantum EPANET results") - plt.legend() - plt.title(f"{model_name}") - plt.savefig(f"{model_name}_results_qubo.png") - plt.close() diff --git a/examples/vqls_examples.py b/examples/vqls_examples.py deleted file mode 100644 index 4695921..0000000 --- a/examples/vqls_examples.py +++ /dev/null @@ -1,165 +0,0 @@ -import os -import matplotlib.pyplot as plt -import numpy as np -import wntr -from qiskit.circuit.library import RealAmplitudes -from qiskit.primitives import Estimator -from qiskit_algorithms import optimizers as opt -from quantum_newton_raphson.vqls_solver import VQLS_SOLVER -import wntr_quantum - - -def get_ape_from_pd_series(quantum_pd_series, classical_pd_series): - """Helper function to evaluate absolute percentage error between classical and quantum results.""" - DELTA = 1.0e-12 - ape = ( - abs(quantum_pd_series - classical_pd_series) - * 100.0 - / abs(classical_pd_series + DELTA) - ) - return ape - - -def compare_results(classical_result, quantum_result): - """Helper function that compares the classical and quantum simulation results.""" - TOL = 5 # => per cent - DELTA = 1.0e-12 - classical_data = [] - quantum_data = [] - - def check_ape(classical_value, quantum_value): - """Checks if the absolute percentage error between classical and quantum results is within TOL.""" - ape = ( - abs(quantum_value - classical_value) * 100.0 / abs(classical_value + DELTA) - ) - is_close_to_classical = ape <= TOL - if is_close_to_classical: - print( - f"Quantum result {quantum_value} within {ape}% of classical result {classical_value}" - ) - quantum_data.append(quantum_value) - classical_data.append(classical_value) - return is_close_to_classical - - for link in classical_result.link["flowrate"].columns: - classical_value = classical_result.link["flowrate"][link].iloc[0] - quantum_value = quantum_result.link["flowrate"][link].iloc[0] - message = f"Flowrate {link}: {quantum_value} not within {TOL}% of classical result {classical_value}" - assert check_ape(classical_value, quantum_value), message - - for node in classical_result.node["pressure"].columns: - classical_value = classical_result.node["pressure"][node].iloc[0] - quantum_value = quantum_result.node["pressure"][node].iloc[0] - message = f"Pressure {node}: {quantum_value} not within {TOL}% of classical result {classical_value}" - assert check_ape(classical_value, quantum_value), message - - return classical_data, quantum_data - - -# set EPANET Quantum environment variables -os.environ["EPANET_TMP"] = "/Users/murilo/scratch_dir/.epanet_quantum" -os.environ["EPANET_QUANTUM"] = "/Users/murilo/Documents/NLeSC_Projects/Vitens/EPANET" - -# set input files -path = "../docs/notebooks/networks" -inputs = ["Net0.inp", "Net1Loops.inp", "Net2Loops.inp", "Net3Loops.inp"] - -# set qiskit Estimator -estimator = Estimator() - -for file in inputs: - - print("##################################") - print(f"Solving for {file} model") - print("##################################") - - # set up network model - input_file = f"{path}/{file}" - model_name = os.path.splitext(file)[0] - wn = wntr.network.WaterNetworkModel(input_file) - - # solve model using the classical EPANET simulator - sim_classical = wntr_quantum.sim.QuantumEpanetSimulator(wn) - results_classical = sim_classical.run_sim() - - # load EPANET A and b matrices from temp - epanet_A, epanet_b = wntr_quantum.sim.epanet.load_epanet_matrix() - - # check the size of the A and b matrices - epanet_A_dim = epanet_A.todense().shape[0] - epanet_b_dim = epanet_b.shape[0] - print(f"* Size of the Jacobian in EPANET simulator: {epanet_A_dim}") - print(f"* Size of the b vector in EPANET simulator: {epanet_b_dim}") - - # save number of nodes and pipes - n_nodes = len(results_classical.node["pressure"].iloc[0]) - n_pipes = len(results_classical.link["flowrate"].iloc[0]) - - # set number of qubits - n_qubits = int(np.ceil(np.log2(epanet_A_dim))) - - # define ansatz - qc = RealAmplitudes(n_qubits, reps=3, entanglement="full") - - # set quantum linear solver - vqls_solver = VQLS_SOLVER( - estimator=estimator, - ansatz=qc, - optimizer=[opt.COBYLA(maxiter=1000, disp=True), opt.CG(maxiter=500, disp=True)], - matrix_decomposition="symmetric", - verbose=True, - preconditioner="diagonal_scaling", - reorder=True, - ) - - print("* Solving model with EPANET Quantum ...\n") - # solve model using EPANET quantum and VQLS - sim_quantum = wntr_quantum.sim.QuantumEpanetSimulator(wn, linear_solver=vqls_solver) - results_quantum = sim_quantum.run_sim(linear_solver=vqls_solver) - - # plot networt and absolute percent errors - wntr.graphics.plot_network( - wn, - node_attribute=get_ape_from_pd_series( - results_quantum.node["pressure"].iloc[0], - results_classical.node["pressure"].iloc[0], - ), - link_attribute=get_ape_from_pd_series( - results_quantum.link["flowrate"].iloc[0], - results_classical.link["flowrate"].iloc[0], - ), - node_colorbar_label="Pressures", - link_colorbar_label="Flows", - node_size=50, - title=f"{model_name}: Absolute Percent Error", - node_labels=False, - filename=f"{model_name}_wnm_vqls.png", - ) - - # checks if the quantum results are within 5% of the classical ones - classical_data, quantum_data = compare_results(results_classical, results_quantum) - - # plot all data - plt.close() - plt.scatter( - classical_data[:n_pipes], - quantum_data[:n_pipes], - label="Flowrates", - color="blue", - marker="o", - ) - plt.scatter( - classical_data[n_pipes:], - quantum_data[n_pipes:], - label="Pressures", - color="red", - marker="s", - facecolors="none", - ) - plt.axline((0, 0), slope=1, linestyle="--", color="gray", label="") - plt.xlabel("Classical EPANET results") - plt.ylabel("Quantum EPANET results") - plt.legend() - plt.title(f"{model_name}") - plt.savefig(f"{model_name}_results_vqls.png") - plt.close() From ee45241e4385aec504fc1bc7e62916454f94cc09 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 09:44:29 +0100 Subject: [PATCH 06/14] test coverage --- .github/workflows/build.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5ebbb7f..9190e94 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,16 +34,30 @@ jobs: git config --global url."https://${{ secrets.ACCESS_TOKEN }}@github".insteadOf https://github python -m pip install --upgrade pip setuptools python -m pip install .[dev,publishing] + pip install tox coveragepy-lcov 'coverage<7' - name: Install EPANET quantum and set environment variables run: | git clone https://github.com/QuantumApplicationLab/EPANET echo "EPANET_TMP=$RUNNER_TEMP" >> $GITHUB_ENV echo "EPANET_QUANTUM=${{ github.workspace }}/EPANET" >> $GITHUB_ENV echo "$GITHUB_ENV" - - name: Run unit tests - run: python -m pytest -v - name: Verify that we can build the package run: python -m build + - name: Run unit tests + run: python -m pytest -v --doctest-modules + - name: run code coverage + run: | + coverage3 run --source wntr_quantum --parallel-mode -m pytest --doctest-modules + coverage3 combine + coverage3 report + - name: Convert to lcov + run: coveragepy-lcov --output_file_path coveralls.info + - name: Upload report to Coveralls + uses: coverallsapp/github-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + file: coveralls.info + format: lcov lint: name: Linting build From 07cb9977a82d3b9b55d5f5f531f366b1ece21546 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 10:10:14 +0100 Subject: [PATCH 07/14] coveragfe again --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9190e94..40cd3b8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,13 +41,13 @@ jobs: echo "EPANET_TMP=$RUNNER_TEMP" >> $GITHUB_ENV echo "EPANET_QUANTUM=${{ github.workspace }}/EPANET" >> $GITHUB_ENV echo "$GITHUB_ENV" + - name: Run unit tests + run: python -m pytest -v - name: Verify that we can build the package run: python -m build - - name: Run unit tests - run: python -m pytest -v --doctest-modules - name: run code coverage run: | - coverage3 run --source wntr_quantum --parallel-mode -m pytest --doctest-modules + coverage3 run --source wntr_quantum --parallel-mode -m pytest coverage3 combine coverage3 report - name: Convert to lcov From d9b9b7846713c1fd25e39cb7e1c9fd88da73b3fa Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 10:13:42 +0100 Subject: [PATCH 08/14] coverage --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 40cd3b8..47eaace 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,10 +41,10 @@ jobs: echo "EPANET_TMP=$RUNNER_TEMP" >> $GITHUB_ENV echo "EPANET_QUANTUM=${{ github.workspace }}/EPANET" >> $GITHUB_ENV echo "$GITHUB_ENV" - - name: Run unit tests - run: python -m pytest -v - name: Verify that we can build the package run: python -m build + - name: Run unit tests + run: python -m pytest -v - name: run code coverage run: | coverage3 run --source wntr_quantum --parallel-mode -m pytest From 71b2391aa037aa0cda769fa26a4df0818f9b14b6 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 10:20:27 +0100 Subject: [PATCH 09/14] coverage --- .github/workflows/build.yml | 2 +- .github/workflows/coverage.yml | 40 ----------------------------- .github/workflows/documentation.yml | 37 -------------------------- 3 files changed, 1 insertion(+), 78 deletions(-) delete mode 100644 .github/workflows/coverage.yml delete mode 100644 .github/workflows/documentation.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 47eaace..08f6984 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,7 +34,7 @@ jobs: git config --global url."https://${{ secrets.ACCESS_TOKEN }}@github".insteadOf https://github python -m pip install --upgrade pip setuptools python -m pip install .[dev,publishing] - pip install tox coveragepy-lcov 'coverage<7' + pip install coveragepy-lcov coverage - name: Install EPANET quantum and set environment variables run: | git clone https://github.com/QuantumApplicationLab/EPANET diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml deleted file mode 100644 index 3e3b364..0000000 --- a/.github/workflows/coverage.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Code coverage - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - coverage: - runs-on: ubuntu-latest - timeout-minutes: 60 - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.11 - uses: actions/setup-python@v4 - with: - python-version: '3.11' - - name: Install tox - run: | - python -m pip install --upgrade pip - pip install tox coveragepy-lcov 'coverage<7' - - name: Install EPANET quantum and set environment variables - run: | - git clone https://github.com/QuantumApplicationLab/EPANET - echo "EPANET_TMP=$RUNNER_TEMP" >> $GITHUB_ENV - echo "EPANET_QUANTUM=${{ github.workspace }}/EPANET" >> $GITHUB_ENV - echo "$GITHUB_ENV" - - name: Run coverage - run: tox -ecoverage - - name: Convert to lcov - run: coveragepy-lcov --output_file_path coveralls.info - - name: Upload report to Coveralls - uses: coverallsapp/github-action@v2 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - file: coveralls.info - format: lcov \ No newline at end of file diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml deleted file mode 100644 index 4541316..0000000 --- a/.github/workflows/documentation.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: documentation - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - build-documentation: - name: Build documentation - runs-on: ubuntu-latest - strategy: - fail-fast: false - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: 3.11 - - name: Python info - shell: bash -e {0} - run: | - which python - python --version - - name: Upgrade pip and install dependencies - run: | - git config --global url."https://${{ secrets.ACCESS_TOKEN }}@github".insteadOf https://github - python -m pip install --upgrade pip setuptools - python -m pip install .[dev,publishing] - - name: Install pandoc using apt - run: sudo apt install pandoc - - name: Build documentation - run: make coverage doctest html - working-directory: docs \ No newline at end of file From f4b733418c92eedceb4da3bd70c59237cc105def Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 15:49:44 +0100 Subject: [PATCH 10/14] coverage --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 08f6984..0bf41ff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,11 +17,11 @@ jobs: fail-fast: false matrix: os: ['ubuntu-latest'] #, 'macos-latest'] #, 'windows-latest'] - python-version: ['3.11'] # '3.10', '3.11', '3.12'] + python-version: ['3.9'] # '3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Python info From a4ad504c669115a9288bde38569bb5d597601734 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 16:07:36 +0100 Subject: [PATCH 11/14] coverage --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0bf41ff..ce1cc92 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,7 +34,7 @@ jobs: git config --global url."https://${{ secrets.ACCESS_TOKEN }}@github".insteadOf https://github python -m pip install --upgrade pip setuptools python -m pip install .[dev,publishing] - pip install coveragepy-lcov coverage + pip install coveragepy-lcov 'coverage<7' - name: Install EPANET quantum and set environment variables run: | git clone https://github.com/QuantumApplicationLab/EPANET @@ -66,10 +66,10 @@ jobs: fail-fast: false steps: - uses: actions/checkout@v4 - - name: Set up Python 3.11 + - name: Set up Python 3.9 uses: actions/setup-python@v5 with: - python-version: 3.11 + python-version: 3.9 - name: Python info shell: bash -e {0} run: | From ed1e689693d281ebcc12ad70a1beb4c48c81d8d2 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 16:31:54 +0100 Subject: [PATCH 12/14] coverage --- .coverage.nico-VirtualBox.6672.XWOiABlx | Bin 0 -> 53248 bytes .coverage.nico-VirtualBox.6699.XSRKmcbx | Bin 0 -> 69632 bytes .github/workflows/build.yml | 4 +--- pyproject.toml | 8 ++++---- 4 files changed, 5 insertions(+), 7 deletions(-) create mode 100644 .coverage.nico-VirtualBox.6672.XWOiABlx create mode 100644 .coverage.nico-VirtualBox.6699.XSRKmcbx diff --git a/.coverage.nico-VirtualBox.6672.XWOiABlx b/.coverage.nico-VirtualBox.6672.XWOiABlx new file mode 100644 index 0000000000000000000000000000000000000000..d867c239a0f00c6e517fb9f1419d586c57fb8239 GIT binary patch literal 53248 zcmeI4&u<$=6vuaM$BrF43#uwBimJ>7+$eEOR22jqAe0CyDwVY9FI8f@w#Ug*@2;~y z^5cMzTck=zoaq4}!M*)o_!GEQTz~^7F1)utVmpbeO4+Ka`L68s?(EE)_dfI98&B5R z>l;^0Uy6?7T81w!C~qjLs(dVjq9`SLSLmH=1vgAs*Z_oTzwu;}+{9G`KExLdW1V8`;K;ZvPpubTrROjZ@2jBQcvnzeqXh}EP zS1w&!U)x+4n`@t3Sr<{6IA0R9)$3wSxXzyFNmq2tt`w%-Hd}^o+FQckmPzfvlWm^p zsEnpMuDBAm=Of*0Q!8I?k%*paT84Wd?#qMautMCMFZcbZfP_eM%jO#5eB69dxUwT% zX}6>oX>s0cFP0V`ep@P3&zw;o$7pnFlvxUV5P zgT^PcjH}0uJEWZLBv=Oxxoc`1>TCyAlaPNMSUnybY7uqpJL6i8YwJ6)u`fI}CyeF5 z-jU%~F;xvcFV_b)?kM|pnl2Iq&DC%~F(+NX{ zTZ?FL$eV{_rjfufTn;qh#1%=?SL$u7Ea@PcU8gzfYoW(@k^+QsK~k*~*ewnfk8Nl< zyV5nbA~-Mc zduqf8E*XTtk%{2N)$bYpwm7ak7n9<(seJXrv*Q$J74%i!=O5n9gepIp3+Y>w^!c3~ zQJG5yDt{pl>bpjlvPsV{T?$#s!O;vLxMJI&%0|-({Lp{-G;~j%dj|SO0tV*^d#be< zR;Td(((yc#rd6J{ybqF6QQI~=&O%;IG##fa4Lh0}sKsTE`ZPTe>TrBk`e-1-J75`G zyR}fKWOCs&zez!t#1|b{mSMN!`HH9ENGj!i4o>bTN+Q%y)F>!D3eh7n6QS`{&RB{3 zl^!u+sg}`>!kq_YNaEhMJSHxhjXpJe>6?}mTqRT{bgVtY6D?QLMVd<&YuV?y0gslx z%6ncVPxDu~{(@SlE-k73AP&YT&*&aa>XwnH9iL`KoaD&Gfxld(giGIchW&)u4dLL^ zs0U7N(Fisp3Q4W_yH0757x=37uR^Uv@iN~s@X6LK%j{x3V zd3WU<{*ix1d!}g5w0~Yt1EDntfB*=900@8p2!H?xfB*=900@9ULZF;IrzU>|$dt14 z#rTf^eE+{x{!!7MXg4)w_Q~w+*-Yh^%4g-js1O?nfB*=900@8p2!H?xfB*=*d;+&h zIi-K0vF%v0VVfUN?NSi(_9gnvGq0mWJ&$_H5s+??g4i6FoVRJ;Rnh zJtD>F-Zy>v|L_|{65L2laNwI=kHp@dCb1V&6RYc{ZTh-SlJx>fzI1xY{DcU@)jg+6 zE5F822b+27pnm!eJkx5p(hIuuAdud{^(m6Nl#bMB5J~7pj)d0I5lWBPktA|6o1XO% zTekj2hNPz8Wz2MFs5aDe>>m=z_y0@f$BOo}@_G4j`R~fF+O65Avv+2*+KW8j@8xF# z^Z)`N00JNY0w4eaAOHd&F!2O#=lU1a)35Z7t^Z3mbNxnof|K=s@lLLPF+H(E3$*Eb zx&EaTB#&MH7jESG^%Oc7UH|7dbN!{1q#mySr>^DtwUmU$>;GJe)(_VI*_6EO$ofCC zLG~9<9~DFH#rOZ|q5s%G00ck)1V8`;KmY_l00ck)1V8`;CYS)<|Ht}&f(IC;fdB}A z00@8p2!H?xfB*=900@8p5y1U_xB&=&00@8p2!H?xfB*=900@8p2uwZ!-2b2aF@}X8 z00JNY0w4eaAOHd&00JNY0w93<|L_42009sH0T2KI5C8!X009sH0T7sc0=WM_`C|+V zK>!3m00ck)1V8`;KmY_l00ck)_y6GoAOHd&00JNY0w4eaAOHd&00JN|`2_w07cINJ literal 0 HcmV?d00001 diff --git a/.coverage.nico-VirtualBox.6699.XSRKmcbx b/.coverage.nico-VirtualBox.6699.XSRKmcbx new file mode 100644 index 0000000000000000000000000000000000000000..a8bf523667772321eb6a1e428b6513a993cc6f4c GIT binary patch literal 69632 zcmeI534B$>y~k(HI%m#?1dVKR0TBWT0TB^YL_k5o$`V3UY`95oAV3n5+z{64IWDMR z-Eddb;({nts<`*5)t2hh=Pp)t$F{sb7ly(ywCf5FRbW#86 zKl))Q@~kUS_+$U%*d>eN(YeM@R?rZH7rGbfX( zsjI4~OlNEAW~8z+Gvesxrc4zZ=wKTRb?m_Yx$_y7*Hpn-*~|>M#N5W3+H~WB)a=ZH z!rTGLyJa);vwQxP#$%+K{T4Q(tjlU(5BF zrVKnF5DUa%)y;L4>``fA_fT0sFVmQwk?Ei8&PxpK2Rc! zI$Cyq=gv5Ga@{ETw32`91GzDe6}xIP>89pJ5lH^GASuq+A0@>zlI(%oDYC8n zQ#&8*c9P@D2PQxw+pzNwKO9H=iC}Sw{V@-?3ASbbBk-Mp;Q!wIx#{f8)Ze$AZH9*T zHm&><4?kGLSrf_!vcIj1&eL*DUfMC|ek}xj_D4UU$!yF1CXdT3D4Lg^1JPt|x~35x zS%|@W1W2(1tI}|Ax}v^0o9n+!=DH^vd-k`NUtqr$-osG^xx?Y{o>1S^R0G2*8@8H; ziLI&LGt*5h3N`gkRn*td$)xM}*Z^mo(FE^V)0E1!;qOPKQ}$n@X#u;&jCs9tZ4!eE z3-cxL(23^@ptd$$SCx!cY#8QOh1ky?PWC=Lh`@=d-tbU1!6W*eYl@2|ds)O1*Y7_U zJYiR@O;_>9oqZ^6uGlg&^LLlyqtWPeHj}NX&7{~NxyIx=R!h1mRoR$ochE@V4x z`w8=|jU7z#cVNMde}Wa<1#wi8>(BxpT8YE25&WlK$^qqoazHtt98eA@2b2TK0p);l zKslfsP!9a?9MG|bZ8rbc!VggR8T_SQ$^qqoazHtt98eA@2b2TK0p);lKslfsP!9ZS zI^bz~*HA3+7#L!`bAGZ2U`YSt`wyUSS6a9eg*(GP{cGN!YPE7eIiMU+4k!nd1IhvA zfO0@Npd3&RCl}OQwhAmpzr?%NxQS~1NpOSvT)%t8!kNfkX^VS(^MpSf&F1mmIZyv&{?w|h~lZ>eMA!=(f|JM&u z_x;ZNUz-Rmb-w>o(dN@vzyD7~TjhXqKslfsP!1>ulmp5E<$!WPIiMU+4*Z}U(6Nqu z_WeH&zd`VydMO8#1IhvAfO0@Npd3&RCulmpTM_Wi$_|4Ta*CulmkB)2Lj*1 zj;3ik?t;6bYt_&H|6o2@btB3F<$!WPIiMU+4k!nd1IhvAfO0@Npd2`;1JwQ$U2AVc z;l6N7xI5e)z8-E2e;Ga;-XGo(ULQ7xSA-YX+kyqbL&45)b~qxO9!?3*3x7c`tjl z&rP|On@9gbKc#Qb2k5Wq<8&pxm|jC$=q!4^v&Z?CPN1Xc@w5-^L_Oz2=PlZ&V^2+Q{@bEN}aJzq0`Pe%F)P|WCz(y){&RU)8tNaExDM?BQwdlWIP#829O@4 z1F`JC*q_?3*}t+MvG28SvahgH_5}L^d#2rF7uwV8(e?>;2b);mSbNMt=JV!P)-l$9 zTaQ}rTCZ5oS!=A7*0t89)xyYMpKPlZCC!;x1?wHJMkmP@qQl4}T_)8h=u@;*s*mBwOQqV0K1P>FwH56|7fZDbZABMJ^%2^JVyQkvAE8L9 z5739`LNE6n68!&1y^lV)K#KR!`#+Il8+vbv6kE}@#Zo+jwl0$5arDeWDK?=4d~GpDIP)_=1K7j^iZ=D>(MW=Qaps#H%W0nTGJ@SI`mM36l>ACxl*h_YwM+W z0IjK$VhwtrR*Kc={yA;Ln%Pp^hwh#w#l2{CjTHBwduK{}N-1tbw^vAUE4nQ$#VzR8=~7&eZYgggZvC+oE70}lOK}ZaF-?kP=$iAS zSdNyRE5(&)`8iT7M^~0fu?#JrD#cQCX{i*Kp`}x#Sc)zyk>XOcY;qg1bdnSoqe~}B z5u=MIND-mPtb*DQN|eSOMWt5;Nm6Y1TI>9roj1&&Jfr#f2_df zmN5de&8G`&%AO{$p=q?hxecQP*3TU&u&(}8fwgrb1kSEKMc}O2!v)sNI$2=4<|KjD z=@SKJs)q@z$_y1)S#^TIipn7Z(-p@HEKd&>IIa9Rfo0PM2|TClSb=5d3=}xEY=FSh zsl@_IO8X1!->XPqQU5}Lg+=`Y_ABfwuy4Ntfdzg02<%hPTVU@##|Yd~(o0~ky+;e| zxx1&p9zA;q?B1ihz}?+pQpZ2~5Rd65Hn;D6l)!fFy9x~3brHBX>@3g=I|-y-M}ZDK zQXp~i1={2YftG!^K-22rKqH{j=~|xHXqfE<>c(LLHN71>6#l2ThRI2q79_hhqtzFv z8D4Uv*6KPIyE^t!Bx!HhB?(>8(G$(oUD(oH=fP1kI8VaI7@zyEKC zaWM)%hq?bd;cvqy!w18a;niUrX2a^R4CeYLh5f@+*giCZuY#Sy?}Ar?XM(BJ3!90Jo ze}Z4=r~D2+@xJl)c-y_rFw1`iX8HGdw|ZB37kMq-Y_Hs#?2YkG^oqTnFw=M4R`(0{ z5AGKCRrh)KG4}!Y4);2DDa`ci-3plLpYERE_I10sfs5$pbUS^AzDS>#duud#p-pkTuRa#qumjYC5*9vwho+Fqzc(!1h;8}t#8`lUn zEj*J&bVyE!iD%@3J5&x^adooQZpE2oD_~V}p0#)pt`xjzF|H82a1l-mUa$~P7d(Ff zE*IP~AOBeJycT@E;O2RFn&50RK2PvfS$wYG#s-{A?Xad<4QK@}6FU}Ng{LOTzXems z2XLv_Gp-d+5j?&Tmk1s=9#0m$VH}<$c*tvbqP)^tbPt{&)q`j)K3l2>(1VyKc386p zjKgP%D-0Zh#|s`X5RVi5+5mi}JR357e1_Q5cK{wMxM&j|Be-7?K3#A@KYW_tO$B(g z;DWw*l)Nfr{CK2P_o3DJ)Lb44EkyThz$3&-T?_Cj@~{=?K0I9P$?J+w7Ti7$pClN1 z<%xo!R}K^G2Y9Gp&&MYSh8{XZF!a#l1w#)VEEsy|ae|?T4iXGK^jN{rLk9{rOguoa zZs1)02R+x)G0*=T&1%I($qk!0uN4<2H)*1;a31a_cA@QyabGF6t;PlNxDU}b+(#;y zM&jO5!88&dBNfaeaWAR1qWAF8ZPa$$Q>rcK4ctSjO=t`5F4eneD^5wZ8NG|UNwo=W z#z#r@4%&pfO7%8+2X~R`E%Y|-EY+LnE!;_}H(=8IRvYyu?kLsk(6S??dJVmf^QC$f zy@rpF>IL*F?jY6k=mnf7)vsXR;ce9OxV==*!M=8F)UWViQay#9!=Y3g&{J3}`!vzR zXan};zV+x~>`Ao_t;eoZFf+zfDwrB$M=JJ|5vlHlr^A*CX1dst3Z}Z)lxh{a8yiyH zg;rr*s+H(2tVwkXx&b4pZbrADR;g}6H=}Q*x)I%k{w6!!4XZJhyRJt!qHm;HfmWiw zwo%ukucca!R-nH~bp=|E_DOX)x&r-Ks->{+E2%C;OVOXCx&&R0zG$N^MPIUpK~y!D zpi9u_$wOu?UV`=tUa%N_CV2h=v|Dh?Vzfu{e6&mOyv67f$t~zp!P$A}kAj=B=wrc+ zO=zd!hDP)U!8HwNhv1nt=)VP5&qUh=S5>2r1ebk)J`h~G5xp;XQYm^*@We@Io8Yr1 zqOF3*pM`!ecMm`jzI4S zUR{MgOxOs%M!yv72k2?R?mqOCVCteL1rr}VCfFkAQNhsqM;G|)Hk*C_|5>;r+!nqa zz8pReRe<&3>f8!|Wl#xN5Y~s8@VszRI5r#}9tYq3r@|vbFVup4!R}yt@NV#G@M~BD zus*mixIMToxIDNZXbxrv>0m0X0vHtx4T^(aLFeGG!1n*fYf6QO& zukvs9uktVP7r{z^8UFeHWd98R6o0Va&+qQ%`<{=yFTI`K@4eT&7re*42faJJ72aju zVsEZj1uFr@dn3H#ygptRubpSO``l06_uaSL-@KfJ=}vPexTB#; zPzb95I=F;>L-#x!hUo)H@Z<6j%{(qSN2$?sRZ$@>i%9yieXFzadYM2Vqsf3bK?eB(-EZ znM_WHdOo4e!>1*`c^{e%Z^m(vSV48lmK2jg7 z_t87+fsVB=wLfUT(_Yb@g|!0rYPV=V)grAKx|Vp^agoU?U{?eUgJ9i==VyL_iWr<6{y5IV6pHB?3}N8Xuhq$RKIlQ;O|0 z?vV({A8Fh@5s*I8IF$&<9%9Fw(faJnVTI zAC`#cU>J$pNdf1CiGcKw#z7(=JEXCn2uKcT>?HznLmIn@fYgx2G!c*)(%4A^B!)DG zNp9{#guIZ(b|N4xq_LF<$O>s}CIXT|8pEt3cMjx)G}aRVDItxuL_kL9#L!JxUqLrO zH$ce_NDgUqK_VbGq|r|j0jVL4mLvi)LmDkk1muD=T9gR*`h!LbrC3R$1&M$}kVf+p z0eK*eS`ql zqI!-C0P8r;UqGVTb)__IiK9>=lcNpvp9F=I(|4#!brNL0pgmS(IkG%2i-_Ckz;Boi6(IDmLk#F9J}ly(T_Op>O!KkIOf4=<2km= zBhfgHK|2zi$~wTL?`DqLTX2%lQ{a&t`j-B`$#m5BZbBc<+zWM z=md`J3PU&&pG3!Vw4jNDIeraII4(IBnm7p1!3H$(SiVs+?PwrF$7rR|03h~rgpkeA zs5lXj%+aWSA|RKe5exe4Fi7QSl#BZyAd{mJ5BxfYM2<$ez_00SrGgXj$j_2GC(1>B ztmDyJXv71*jv=L^5fA)2hK!CzJn-un5;_|3z^`M-=V-(OKL~UUjduVYB& zXv715?q@k^!~?(179`M!2YwyHdITErz^`LijzA+G_}O7c(ufCsoh?S75fA)2tUdUg zMm+HAu=HRrjdRR?ew5BxeT zI{27IJn-vKKG{hl9{6=waZMu>k3h>iI?@aI+^P#*Vn z#72A`_SvQ0qde-f_t-{x(1#foyakW>I)a4j;({P#)~rG3zOd_0ZiB8wgpfXAJ8NC=2$C+0euzC=2+Eq3}pq#OJ(*vXIXh78+0%^BKcB1ImIvV>ZmPsLz;!s0NV~L3Md-~I4`AaAYcsZ2`C#07{hV`%7y~Qu$q9fv4AlwCUA0t zfyUMn5Iz{dQUb!q0v!fyJ{0JS785=a=<^p5J`m_F^9dgZ^yU`AhXFm?O!z3E!=TIu z0llG#@G(H2+d$Y50AC%~&n0{a(Cg~S2)?bhj_?6MpIu9G@gM86W)mL&^_p3Phkrd? zLwNMptJ8!Be?3!8c1EPAwxW;scdVB`n+nm6Q?|>w)_Bg0Dw&RMelaC=c5TiwFzx zK>Z2{i|;^v`wQ0w7a{*VmQ`xSRFuE1c%-2dlMGEf!ehvEOrBh?Fb9pKzl>NqBf8h5*D(7 zs7F}5268B2!5RogcNVFEU~p$)8VJUA7Ndb+XlDT$zUJ2m3(l|!26h&ifnZ!`VHpU9 zbrzGcqqo{D9HfU*AetAO_M5n?+&hpshB1X$_k^*LHH?w%Q~Ij%V9BfK>oi z4s2qZIWTR@0Dx=TdTxVm+FA}Y-NFo5X@O_y5zZ5%n$ zV7C8j?@4HwdMO8#1IhvAfO0@Npd3&RC;@nAL1BhP8quW+fZIPOT(n6&t|L zDH5}S4d9MWBxdy*c0gwmvvLh!K5S*x8o&G=NZLjaiun5T=JQtI`0%{4i!k8bFvJ#;isI2s6Z(m1qEAiWsvB zjRR=MtUiMs(rU-7I^$p)h}CAWW5a#1$_&P^Dv-piFarqHhnUr602jhmR+a%=u#m*8 zDgy{#9K@_B0|-@#nAKze;fsTqm1F>$=aHCIWB{Q=5wn5};8j@?vw93*V}ld3attg0 zgQb8ZX5|>zyyz+#^J+|PAs~raIR>_mgLblN4B+@i60>3q+d7`atQG^fVH}BBDF$!| ze5b`LF&0$9;5#5*im?!^0HiUm#aK`adyvGrVho1$e< zZ2*l~Jq8vovZ5P_c}d3VJAlNzCSw(CA~7$@SpAAf%&Rh1K|d1nvW&Hw7YXOZ}g@zpi3;syVi!@eVR}%9ojnzJn z#Jo&nvHr#DG#2Y$yij976+h;c8q4!Z%u6*E>uS7KW3jHri!~POYP?!wv989;HPF3C j%uS7UW0@9-dBp}Q0VL)n8%sCrnAL0?Z0Y|44^;>` literal 0 HcmV?d00001 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ce1cc92..34ea709 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,11 +43,9 @@ jobs: echo "$GITHUB_ENV" - name: Verify that we can build the package run: python -m build - - name: Run unit tests - run: python -m pytest -v - name: run code coverage run: | - coverage3 run --source wntr_quantum --parallel-mode -m pytest + coverage3 run --source wntr_quantum --parallel-mode -m pytest -v coverage3 combine coverage3 report - name: Convert to lcov diff --git a/pyproject.toml b/pyproject.toml index 5ee9e61..ae3bea2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,16 +39,16 @@ version = "0.1.0" [project.optional-dependencies] dev = [ - "build", # build is not only used in publishing (below), but also in the template's test suite + "build", # build is not only used in publishing (below), but also in the template's test suite "bump-my-version", - "coverage [toml]", + # "coverage [toml]", "pytest", - "pytest-cov", + # "pytest-cov", "ruff", "sphinx", "sphinx_rtd_theme", "sphinx-autoapi", - "tox", + # "tox", "myst_parser", ] publishing = ["build", "twine", "wheel"] From 0a5708f98a54bbb7497e579e96f496c2cc108fe4 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 16:38:11 +0100 Subject: [PATCH 13/14] coverage --- .coverage.nico-VirtualBox.6672.XWOiABlx | Bin 53248 -> 0 bytes .coverage.nico-VirtualBox.6699.XSRKmcbx | Bin 69632 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .coverage.nico-VirtualBox.6672.XWOiABlx delete mode 100644 .coverage.nico-VirtualBox.6699.XSRKmcbx diff --git a/.coverage.nico-VirtualBox.6672.XWOiABlx b/.coverage.nico-VirtualBox.6672.XWOiABlx deleted file mode 100644 index d867c239a0f00c6e517fb9f1419d586c57fb8239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 zcmeI4&u<$=6vuaM$BrF43#uwBimJ>7+$eEOR22jqAe0CyDwVY9FI8f@w#Ug*@2;~y z^5cMzTck=zoaq4}!M*)o_!GEQTz~^7F1)utVmpbeO4+Ka`L68s?(EE)_dfI98&B5R z>l;^0Uy6?7T81w!C~qjLs(dVjq9`SLSLmH=1vgAs*Z_oTzwu;}+{9G`KExLdW1V8`;K;ZvPpubTrROjZ@2jBQcvnzeqXh}EP zS1w&!U)x+4n`@t3Sr<{6IA0R9)$3wSxXzyFNmq2tt`w%-Hd}^o+FQckmPzfvlWm^p zsEnpMuDBAm=Of*0Q!8I?k%*paT84Wd?#qMautMCMFZcbZfP_eM%jO#5eB69dxUwT% zX}6>oX>s0cFP0V`ep@P3&zw;o$7pnFlvxUV5P zgT^PcjH}0uJEWZLBv=Oxxoc`1>TCyAlaPNMSUnybY7uqpJL6i8YwJ6)u`fI}CyeF5 z-jU%~F;xvcFV_b)?kM|pnl2Iq&DC%~F(+NX{ zTZ?FL$eV{_rjfufTn;qh#1%=?SL$u7Ea@PcU8gzfYoW(@k^+QsK~k*~*ewnfk8Nl< zyV5nbA~-Mc zduqf8E*XTtk%{2N)$bYpwm7ak7n9<(seJXrv*Q$J74%i!=O5n9gepIp3+Y>w^!c3~ zQJG5yDt{pl>bpjlvPsV{T?$#s!O;vLxMJI&%0|-({Lp{-G;~j%dj|SO0tV*^d#be< zR;Td(((yc#rd6J{ybqF6QQI~=&O%;IG##fa4Lh0}sKsTE`ZPTe>TrBk`e-1-J75`G zyR}fKWOCs&zez!t#1|b{mSMN!`HH9ENGj!i4o>bTN+Q%y)F>!D3eh7n6QS`{&RB{3 zl^!u+sg}`>!kq_YNaEhMJSHxhjXpJe>6?}mTqRT{bgVtY6D?QLMVd<&YuV?y0gslx z%6ncVPxDu~{(@SlE-k73AP&YT&*&aa>XwnH9iL`KoaD&Gfxld(giGIchW&)u4dLL^ zs0U7N(Fisp3Q4W_yH0757x=37uR^Uv@iN~s@X6LK%j{x3V zd3WU<{*ix1d!}g5w0~Yt1EDntfB*=900@8p2!H?xfB*=900@9ULZF;IrzU>|$dt14 z#rTf^eE+{x{!!7MXg4)w_Q~w+*-Yh^%4g-js1O?nfB*=900@8p2!H?xfB*=*d;+&h zIi-K0vF%v0VVfUN?NSi(_9gnvGq0mWJ&$_H5s+??g4i6FoVRJ;Rnh zJtD>F-Zy>v|L_|{65L2laNwI=kHp@dCb1V&6RYc{ZTh-SlJx>fzI1xY{DcU@)jg+6 zE5F822b+27pnm!eJkx5p(hIuuAdud{^(m6Nl#bMB5J~7pj)d0I5lWBPktA|6o1XO% zTekj2hNPz8Wz2MFs5aDe>>m=z_y0@f$BOo}@_G4j`R~fF+O65Avv+2*+KW8j@8xF# z^Z)`N00JNY0w4eaAOHd&F!2O#=lU1a)35Z7t^Z3mbNxnof|K=s@lLLPF+H(E3$*Eb zx&EaTB#&MH7jESG^%Oc7UH|7dbN!{1q#mySr>^DtwUmU$>;GJe)(_VI*_6EO$ofCC zLG~9<9~DFH#rOZ|q5s%G00ck)1V8`;KmY_l00ck)1V8`;CYS)<|Ht}&f(IC;fdB}A z00@8p2!H?xfB*=900@8p5y1U_xB&=&00@8p2!H?xfB*=900@8p2uwZ!-2b2aF@}X8 z00JNY0w4eaAOHd&00JNY0w93<|L_42009sH0T2KI5C8!X009sH0T7sc0=WM_`C|+V zK>!3m00ck)1V8`;KmY_l00ck)_y6GoAOHd&00JNY0w4eaAOHd&00JN|`2_w07cINJ diff --git a/.coverage.nico-VirtualBox.6699.XSRKmcbx b/.coverage.nico-VirtualBox.6699.XSRKmcbx deleted file mode 100644 index a8bf523667772321eb6a1e428b6513a993cc6f4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69632 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 From be8f44d42925a41ced30cee630e14624703f6679 Mon Sep 17 00:00:00 2001 From: Nicolas Renaud Date: Fri, 13 Dec 2024 16:51:11 +0100 Subject: [PATCH 14/14] clean up --- pyproject.toml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ae3bea2..36334c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,12 +15,7 @@ classifiers = [ "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", ] dependencies = [ "numpy", @@ -39,16 +34,13 @@ version = "0.1.0" [project.optional-dependencies] dev = [ - "build", # build is not only used in publishing (below), but also in the template's test suite + "build", # build is not only used in publishing (below), but also in the template's test suite "bump-my-version", - # "coverage [toml]", "pytest", - # "pytest-cov", "ruff", "sphinx", "sphinx_rtd_theme", "sphinx-autoapi", - # "tox", "myst_parser", ] publishing = ["build", "twine", "wheel"]