Skip to content

Instantly share code, notes, and snippets.

@rpmuller
Last active July 8, 2021 00:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save rpmuller/5745404 to your computer and use it in GitHub Desktop.
Save rpmuller/5745404 to your computer and use it in GitHub Desktop.
Notes, timings, and additional tests for the development of pyquante2 by comparing to to PyQuante (1.6.??).
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "PyQuante Testing"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": "# Development of PyQuante 2\nRick Muller, rpmuller@gmail.com\n\nI've been working on a rewrite of the PyQuante code, trying to get a more intuitive module structure and cleaner bindings of routines. The attached has some timing and other test results playing with the code. This isn't really meant as documentation or a gallery of pyquante2 features, but you can see some of them here.\n\nYou can fork the code from the [pyquante2 github site](https://github.com/rpmuller/pyquante2).\n\n## What's new?\nThere are more modules, and the source code is spread between multiple directories. However, the goal is to have all generally-used modules imported from the main top-level module:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pyquante2 import rhf,h2,h2o,c6h6,basisset",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Many modules have special printing functions to support IPython:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "h2o",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<html><p><h2>Water</h2><p>Stoichiometry = H2O, Charge = 0, Multiplicity = 1</p><table><tr><th>#</th><th>Atno</th><th>Symbol</th><th>x</th><th>y</th><th>z</th></tr><tr><td>0</td><td>8</td><td>O</td><td>0.00000</td><td>0.00000</td><td>0.09169</td></tr><tr><td>1</td><td>1</td><td>H</td><td>1.42296</td><td>0.00000</td><td>-0.98120</td></tr><tr><td>2</td><td>1</td><td>H</td><td>-1.42296</td><td>0.00000</td><td>-0.98120</td></tr></table></p></html>",
"output_type": "pyout",
"prompt_number": 2,
"text": "Stoichiometry = H2O, Charge = 0, Multiplicity = 1\n8 O 0.000000 0.000000 0.091685\n1 H 1.422960 0.000000 -0.981204\n1 H -1.422960 0.000000 -0.981204"
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": "c6h6",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<html><p><h2>Benzene</h2><p>Stoichiometry = H6C6, Charge = 0, Multiplicity = 1</p><table><tr><th>#</th><th>Atno</th><th>Symbol</th><th>x</th><th>y</th><th>z</th></tr><tr><td>0</td><td>6</td><td>C</td><td>1.86582</td><td>1.86582</td><td>0.00000</td></tr><tr><td>1</td><td>6</td><td>C</td><td>2.54875</td><td>-0.68294</td><td>0.00000</td></tr><tr><td>2</td><td>6</td><td>C</td><td>0.68294</td><td>-2.54875</td><td>0.00000</td></tr><tr><td>3</td><td>6</td><td>C</td><td>-1.86582</td><td>-1.86582</td><td>0.00000</td></tr><tr><td>4</td><td>6</td><td>C</td><td>-2.54875</td><td>0.68294</td><td>0.00000</td></tr><tr><td>5</td><td>6</td><td>C</td><td>-0.68294</td><td>2.54875</td><td>0.00000</td></tr><tr><td>6</td><td>1</td><td>H</td><td>3.31743</td><td>3.31743</td><td>0.00000</td></tr><tr><td>7</td><td>1</td><td>H</td><td>4.53169</td><td>-1.21426</td><td>0.00000</td></tr><tr><td>8</td><td>1</td><td>H</td><td>1.21426</td><td>-4.53169</td><td>0.00000</td></tr><tr><td>9</td><td>1</td><td>H</td><td>-3.31743</td><td>-3.31743</td><td>0.00000</td></tr><tr><td>10</td><td>1</td><td>H</td><td>-4.53169</td><td>1.21426</td><td>0.00000</td></tr><tr><td>11</td><td>1</td><td>H</td><td>-1.21426</td><td>4.53169</td><td>0.00000</td></tr></table></p></html>",
"output_type": "pyout",
"prompt_number": 3,
"text": "Stoichiometry = H6C6, Charge = 0, Multiplicity = 1\n6 C 1.865817 1.865817 0.000000\n6 C 2.548754 -0.682937 0.000000\n6 C 0.682937 -2.548754 0.000000\n6 C -1.865817 -1.865817 0.000000\n6 C -2.548754 0.682937 0.000000\n6 C -0.682937 2.548754 0.000000\n1 H 3.317430 3.317430 0.000000\n1 H 4.531693 -1.214264 0.000000\n1 H 1.214264 -4.531693 0.000000\n1 H -3.317430 -3.317430 0.000000\n1 H -4.531693 1.214264 0.000000\n1 H -1.214264 4.531693 0.000000"
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We also try to have decent printing for those objects:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "print c6h6",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Stoichiometry = H6C6, Charge = 0, Multiplicity = 1\n6 C 1.865817 1.865817 0.000000\n6 C 2.548754 -0.682937 0.000000\n6 C 0.682937 -2.548754 0.000000\n6 C -1.865817 -1.865817 0.000000\n6 C -2.548754 0.682937 0.000000\n6 C -0.682937 2.548754 0.000000\n1 H 3.317430 3.317430 0.000000\n1 H 4.531693 -1.214264 0.000000\n1 H 1.214264 -4.531693 0.000000\n1 H -3.317430 -3.317430 0.000000\n1 H -4.531693 1.214264 0.000000\n1 H -1.214264 4.531693 0.000000\n"
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": "The solvers have decent printing as well:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "h2",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<html><p><h2>Hydrogen</h2><p>Stoichiometry = H2, Charge = 0, Multiplicity = 1</p><table><tr><th>#</th><th>Atno</th><th>Symbol</th><th>x</th><th>y</th><th>z</th></tr><tr><td>0</td><td>1</td><td>H</td><td>0.00000</td><td>0.00000</td><td>0.69218</td></tr><tr><td>1</td><td>1</td><td>H</td><td>0.00000</td><td>0.00000</td><td>-0.69218</td></tr></table></p></html>",
"output_type": "pyout",
"prompt_number": 5,
"text": "Stoichiometry = H2, Charge = 0, Multiplicity = 1\n1 H 0.000000 0.000000 0.692176\n1 H 0.000000 0.000000 -0.692176"
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": "bfs = basisset(h2)\nbfs",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 6,
"text": "cgbf((0.0, 0.0, 0.69217561132317929),(0, 0, 0),[3.42525091, 0.62391373, 0.1688554],[0.1543289707029839, 0.5353281424384733, 0.44463454202535485])\ncgbf((0.0, 0.0, -0.69217561132317929),(0, 0, 0),[3.42525091, 0.62391373, 0.1688554],[0.1543289707029839, 0.5353281424384733, 0.44463454202535485])"
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": "solver = rhf(h2,bfs)\nsolver",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<html><h2>RHF Hamiltonian</h2><p><h2>Hydrogen</h2><p>Stoichiometry = H2, Charge = 0, Multiplicity = 1</p><table><tr><th>#</th><th>Atno</th><th>Symbol</th><th>x</th><th>y</th><th>z</th></tr><tr><td>0</td><td>1</td><td>H</td><td>0.00000</td><td>0.00000</td><td>0.69218</td></tr><tr><td>1</td><td>1</td><td>H</td><td>0.00000</td><td>0.00000</td><td>-0.69218</td></tr></table></p><p>Basis set: sto3g, Nbf: 2</p><p>Status: Converged=False</p></html>",
"output_type": "pyout",
"prompt_number": 7,
"text": "RHF Hamiltonian\nStoichiometry = H2, Charge = 0, Multiplicity = 1\n1 H 0.000000 0.000000 0.692176\n1 H 0.000000 0.000000 -0.692176\nBasis set: sto3g, Nbf: 2\nStatus: Converged = False"
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": "solver.converge()\nsolver",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<html><h2>RHF Hamiltonian</h2><p><h2>Hydrogen</h2><p>Stoichiometry = H2, Charge = 0, Multiplicity = 1</p><table><tr><th>#</th><th>Atno</th><th>Symbol</th><th>x</th><th>y</th><th>z</th></tr><tr><td>0</td><td>1</td><td>H</td><td>0.00000</td><td>0.00000</td><td>0.69218</td></tr><tr><td>1</td><td>1</td><td>H</td><td>0.00000</td><td>0.00000</td><td>-0.69218</td></tr></table></p><p>Basis set: sto3g, Nbf: 2</p><p>Status: Converged=True</p><table><tr><th>#</th><th>Energy</th></tr><tr /><td>0</td><td>0.48556</td><tr /><td>1</td><td>-1.11710</td></table></html>",
"output_type": "pyout",
"prompt_number": 8,
"text": "RHF Hamiltonian\nStoichiometry = H2, Charge = 0, Multiplicity = 1\n1 H 0.000000 0.000000 0.692176\n1 H 0.000000 0.000000 -0.692176\nBasis set: sto3g, Nbf: 2\nStatus: Converged = True\n0 0.48556\n1 -1.11710"
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": "print solver",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "RHF Hamiltonian\nStoichiometry = H2, Charge = 0, Multiplicity = 1\n1 H 0.000000 0.000000 0.692176\n1 H 0.000000 0.000000 -0.692176\nBasis set: sto3g, Nbf: 2\nStatus: Converged = True\n0 0.48556\n1 -1.11710\n"
}
],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Simple orbital printing is built it:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pyquante2 import lineplot_orbs,contourplot,line",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": "points = line((0,0,-5),(0,0,5))\nlineplot_orbs(points,solver.orbs[:,:2],bfs,\n title=\"Plots of bonding and antibonding orbitals of H2\")",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEICAYAAACzliQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XdcU9f7B/BPIEHZQzYoKMhGQHFVqyii1irOKmoVrbtq\na39tv7WtdbW2dnxra3Fg3a1abbVurBPrqCBoHQgiCrJRhmAAmef3x/0SRQIEMi4kz/v1yisJOTn3\nySV5cnLuOecKGGMMhBBCNIIW3wEQQghRHUr6hBCiQSjpE0KIBqGkTwghGoSSPiGEaBBK+oQQokEo\n6b8kICAAW7Zs4TWGu3fvwtfXF0ZGRggLC6vzuCpj1NLSwoMHDwAA8+bNwxdffKGS7cpDlfvnxX0S\nGRmJ9u3bq2S7y5cvx5QpUwAAqampMDQ0REsYfb19+3a8+uqr9T4+bNgw/PLLL82qOyUlBVpaWqiu\nrm5ueFJt2LABVlZWMDIyQkFBgULrbok0Muk7OjpCT08PhoaGsLa2xvTp01FcXAwAEAgEEAgEjdah\nrDcgAHzzzTcIDAxEUVERFixYUOdxWWNUtA0bNmDJkiUq325TKWv/SEtofO2TF19fhw4d8PTpU17e\nE011/PhxyZdVY18QqlBRUYH3338fZ86cQVFREUxNTWs9Xt/nfNq0afjss88AAImJiRg5ciQsLS3R\nrl07DB06FImJiSp7DU2lkUlfIBDg6NGjePr0Ka5du4aYmJhmt2CV0bp6+PAhPDw8FF4vIcpUWVnJ\ndwhNlp2djWfPnsHd3b1Jz3uxYVFYWIhRo0YhMTEROTk56NGjB0aOHKmMcBVCI5P+i2xtbTF06FDE\nxcXVeYwxhi+++AKOjo6wsrJCaGgoioqKAAD9+vUDAJiYmMDQ0BBRUVFISkpC//79YWJiAgsLC4SE\nhNS73cOHD8PT0xOmpqYYMGAAEhISAAADBw5EZGQkFixYACMjIyQlJUl9flJSEnr27AljY2OMGjWq\n1s/S+uoGuF85//3vf+Hj4wMTExOEhISgrKxM8vi3334LW1tb2NvbY+vWrbW2+WLrJjIyEvb29vj+\n++9hZWUFW1tbbN++XVI2Ly8PI0aMgLGxMXr06IElS5Y02Kp74403YGNjAxMTE/Tv3x937typtd35\n8+dj+PDhMDIyQq9evSRdTgBw6tQpuLm5wcTEBAsXLgRjrN4v4+joaPTu3RumpqawtbXFwoULUVFR\nIXlcS0sL4eHhcHFxgampqeSXVnx8PObNm4d//vkHhoaGMDMzq7NPanz11VewsLBAx44dsXv3bsnf\nCwsLMXXqVFhaWsLR0RGrVq2SxLl9+3b07dsXH374IczMzNCpUyecOHFC8tzk5GT0798fRkZGGDx4\nMHJzcyWPvdwaDQgIwNKlS9G3b18YGRlhyJAhyMvLk5TfuXMnHBwcYG5uLnl/nzlzRur+aizmPn36\n4P/+7/9gbm6OFStWQCAQgDGGhQsXwsTEBO7u7jh79qykvpqut4SEBMydO7fO/jx27Bj8/PxgbGyM\nDh06YMWKFVLjqtm+k5MTjIyM0KlTp1r7+kVlZWVYtGgR7OzsYGdnh/feew/l5eVITEyUJHsTExMM\nGjSo3m1JU7MfunfvjunTp8PExARCoRCLFi3C3bt3W25XEdNAjo6O7PTp04wxxlJTU5mnpydbunQp\nY4yxgIAAtmXLFsYYY1u2bGHOzs4sOTmZicViNmbMGDZlyhTGGGMpKSlMIBCwqqoqSb0hISHsyy+/\nZIwxVlZWxi5duiR1+3fv3mX6+vrs9OnTrLKykn3zzTfM2dmZVVRU1IlBmv79+zM7OzsWFxfHiouL\n2dixY9mbb74pU92Ojo6sZ8+eLCsri+Xn5zN3d3e2ceNGxhhjERERzMrKSlLvxIkTmUAgYPfv32eM\nMTZt2jT22WefMcYYO3fuHBMKhWzZsmWssrKSHT9+nOnp6bEnT54wxhibMGECmzhxIistLWV37txh\n7du3Z6+++mq9r2nbtm1MLBaz8vJytmjRIubr6yt5LDQ0lLVr145dvXqVVVZWssmTJ7OQkBDGGGOP\nHz9mhoaGbP/+/ayyspKtWbOGCYXCevdfbGwsi4qKYlVVVSwlJYW5u7uzH374QfK4QCBgI0aMYIWF\nhSw1NZVZWFiwEydOMMYY2759O+vbt2+t+qTtk/fff5+Vl5ez8+fPM319fXb37l3GGGNTpkxho0aN\nYmKxmKWkpDAXFxdJnNu2bWMikYht3ryZVVdXsw0bNjBbW1vJdnr16iWp9++//2aGhoaS92JycnKt\n92L//v2Zs7Mzu3fvHistLWUBAQFs8eLFjDHG4uLimIGBAbt06RIrLy9nH3zwAROJROzMmTNS91dj\nMQuFQhYWFsaqqqpYaWmp5G8//PADq6ysZHv37mXGxsasoKCAMVb7vS1tf0ZGRrLbt28zxhi7efMm\ns7KyYgcPHqzzOsViMTMyMmKJiYmMMcays7NZXFyc1Nfw2Wefsd69e7PHjx+zx48fs1deeUXyP5P2\nOX5RzTYrKytr/T00NJQtWbJE6nP+/PPPWv+7lkYjk76DgwMzMDBgJiYmzMHBgc2fP589e/aMMVb7\nTTlw4EC2YcMGyfPu3r3LRCIRq6qqqvNBY4yxqVOnstmzZ7P09PQGt79y5Uo2YcIEyf3q6mpmZ2fH\nzp8/L4lh8+bN9T4/ICCAffzxx5L7d+7cYTo6OqyqqqrRuh0dHdmuXbskj//nP/9hc+fOZYwxNn36\n9Fr1JiYm1kn6NW/0c+fOMV1d3Vqv39LSkkVFRbHKykomEokkH0jGGFuyZEmdD3h9CgoKmEAgYEVF\nRZLtzpo1S/L48ePHmZubG2OMsR07drDevXvXer69vX2DX5ovWrNmDRs9erTkvkAgqPVlPX78eLZ6\n9WrGGJfkpCX9F/eJUChkJSUltZ7/+eefs8rKSqajo8Pi4+Mlj4WHh7OAgABJ3c7OzpLHiouLmUAg\nYDk5Oezhw4d16p00aZLki/7l92JAQABbtWqVpOz69evZ0KFDGWOMrVixgk2aNEnyWElJCdPR0ZGa\n9GWJuUOHDrWes23btjoJr0ePHuyXX36RxPbil0Zj74l3332Xvffee3Vep1gsZiYmJmz//v219os0\nTk5OLCIiQnL/r7/+Yo6OjnXqlKbmcRMTk1oXHR0dyRfHi9LS0pidnR377bffGoyJTxrZvSMQCHDo\n0CEUFBQgJSUFYWFhaNOmTZ1yWVlZcHBwkNzv0KEDKisrkZOTI7Xeb775Bowx9OjRA15eXti2bZvU\ncllZWejQoUOteNq3b4+MjIxaf2vIi6NEOnTogIqKCuTm5spUt7W1teS2rq6u5CB2VlZWnXob0q5d\nO2hpPX8L6enpQSwW4/Hjx6isrKxVl729fb31VFdXY/HixXB2doaxsTE6duwIALW6MKysrGrFLBaL\nAQCZmZl16m5oBE1iYiKGDx8OGxsbGBsb49NPP63V9QHU3j96enqS/SMLU1NT6OrqSu47ODggKysL\neXl5qKioqPN+qu//oqenBwAQi8XIzMyUWm9DXv4f17e/dHV10a5dO6l15ObmNhqztH1tZ2dX637N\nPpBFVFQUBgwYAEtLS5iYmCA8PLzO/wcA9PX1sXfvXmzcuBG2trYYPnw47t69K7XOzMzMOq8hMzNT\npnhq5OXloaCgQHKZNGlSnS7Ex48fY/DgwZg/fz4mTJjQpPpVSSOTvqxsbW2RkpIiuZ+amgqhUAgr\nKyupSdnKygqbNm1CRkYGwsPD8fbbb9fqe36x3ocPH0ruM8aQlpZW58PSkNTU1Fq3RSIRLCws5Krb\nxsamTr0vk2WEiIWFBYRCIdLS0iR/e/H2y3bt2oXDhw/jzJkzKCwsRHJysiT2xtja2taqu+b11mfe\nvHnw8PBAUlISCgsLsWrVKplHYNX32l/8e0FBAUpKSiT3Hz58CFtbW5ibm0MkEtV5PzX0ZVjDxsZG\nar3NGa1ja2uL9PR0yf3S0lKpSRWATDFLi+HFL4WaWG1tbeuUk/bcSZMmYdSoUUhPT8eTJ08wd+7c\nev8/gwcPxsmTJ5GdnQ03NzfMmjVLajlpn2Np8cijoKAAgwcPxqhRo/Dxxx8rtG5Fo6TfgIkTJ2LN\nmjVISUmBWCzGJ598gpCQEGhpacHCwgJaWlq4f/++pPzvv/8u+UCZmJhAIBDUagnXGD9+PI4dO4az\nZ8+ioqIC//3vf9G2bVu88sorkjINJTzGGH799VfEx8ejpKQES5cuxRtvvAGBQIA33nij0bql1VcT\n1/bt2yX1vnwQjTVwgPRF2traGDNmDJYvX47S0lIkJCTgl19+qTdJicVitGnTBmZmZiguLsYnn3wi\nNT5phg0bhri4OPz555+orKzE2rVrkZ2dXW95sVgMQ0ND6OnpISEhARs2bGjwtbz4mq2srJCenl7r\nwK+0fbJs2TJUVFTgwoULOHbsGN544w1oaWlh/Pjx+PTTTyEWi/Hw4UOsWbMGb775ZoPbB7iWsr+/\nv6Teixcv4ujRo43GLc3YsWNx5MgR/PPPPygvL8fy5cvrLautrd2smB89eoS1a9eioqICv//+OxIS\nEjBs2LA65aTtT7FYDFNTU+jo6CA6Ohq7d++W+r559OgRDh06hOLiYohEIujr60NbW1tqPBMnTsQX\nX3yB3Nxc5ObmYuXKlZJho8314j4rKirCkCFD0LdvX3z55Zdy1asKlPQb8NZbb2HKlCno168fOnXq\nBD09Pfz0008AuJ/fn376Kfr06QMzMzNERUUhJiYGvXr1gqGhIUaOHIm1a9fC0dGxTr0uLi749ddf\nsXDhQlhYWODYsWM4cuQIhEKhpExDrTiBQICpU6di2rRpsLGxQXl5OdauXQsAcHV1bbTul+uq2dbQ\noUOxaNEiDBw4EC4uLggMDKwVx8vj3xuKMSwsDIWFhbC2tkZoaCgmTpwIHR0dqWWnTp0KBwcH2NnZ\nwcvLC717925wuy9u29zcHL///jsWL14Mc3NzJCUloW/fvvXG9d1332H37t0wMjLC7NmzERIS0uBr\nenHbgYGB8PT0hLW1NSwtLaXGZmNjIxkZNGXKFMlIIAD46aefoK+vj06dOuHVV1/F5MmTMX369EZf\nIwDs3r0bUVFRMDMzw8qVKxEaGlpv2Zfvv1i3p6cnfvrpJ4SEhMDW1haGhoawtLSU2r3Z3Jh79eqF\ne/fuwcLCAp999hn2799fZ/x7fftz/fr1WLp0KYyMjPD555/X6Sap2V51dTXWrFkDOzs7tGvXDhcu\nXKj3C3zJkiXw9/dHly5d0KVLF/j7+9eaW9HYLyZpj7/42v/880/ExMRg27ZtMDQ0hKGhIYyMjGr9\nompJBEyWphshcvroo4/w6NGjeo9zEH7UtKyTkpIaPU5A1IPcLf0TJ07Azc0NnTt3xtdffy21TGRk\nJPz8/ODl5YWAgAB5N0lagbt37+LmzZtgjCE6Ohpbt27F6NGj+Q6LADhy5AhKSkpQXFyMDz74AF26\ndKGEr0nkGfpTWVnJnJycWHJyMisvL2c+Pj7szp07tcoUFBQwDw8PlpaWxhjjxlUT9Xf16lXm7OzM\n9PT0WMeOHSXDHgn/Zs6cyUxMTJixsTEbNGhQraG1RP3J1b3zzz//YMWKFZKZg6tXrwYALF68WFJm\n/fr1yM7OxsqVK+X8eiKEECIvubp3MjIy6ozFfnm41r1795Cfn48BAwbA39+/2SvsEUIIkZ/0IR0y\nkmWccEVFBa5du4YzZ86gpKQEvXv3Rq9evdC5c+cm10UIIaSupnTYyNXSt7OzqzMBR9rsyMGDB0tm\n/vXr1w83btyQWh/735hnTb8sW7aM9xhayqVmX1RXV2PNP2tg+a0lDtw5gC///hIzDs3gPT56X9C+\n4PvSVHIlfX9/f9y7dw8pKSkoLy/H3r17ERwcXKvMyJEjcfHiRVRVVaGkpARRUVG0bDBpkvzSfIze\nOxq7b+3GlRlXMNp9NKb7Tcf++P0ofFbId3iEtCpyJX2hUIiwsDAMGTIEHh4emDBhAtzd3REeHo7w\n8HAAgJubG4YOHYouXbqgZ8+emDVrFiV9IrP0onR0De+KjqYdcfGti+hoyq3LY21gjaBOQdh1axfP\nERLSurSYyVk163ATbl4DzWcANl/bjA9//hDb3t2GUW6j6jx+5sEZvPfXe7gx94ZGHBOi98VztC+e\na2rupKRPWqSyyjLYfm+Li9Mvwt1C+lmNqlk1XMNcsXPUTvRu31vFERLSMjQ1d9LaO6RFOpF0Al6W\nXvUmfADQEmhhTrc5CI8NV2FkhLRulPRJi7T79m5M9p7caLlpvtNwMOEgCkpb6KnpCGlhKOmTFqeo\nrAgnkk5grPvYRsua65ljWOdh2HljpwoiI6T1o6RPWpyDCQfR36E/2ulJP6PTy2q6eOiYECGNo6RP\nWpxdt3bJ1LVTo59DPzAwXEi9oMSoCFEPlPRJi5IjzkFUehRGuI6Q+TkCgYAO6BIiI0r6pEXZG7cX\nwa7B0BPpNel5U32m4ljiMeSW5DZemBANRkmftCi7b+3GJO9JTX6ema4ZRrqNxPZ/tys+KELUCCV9\n0mIk5Sch+UkyBnUa1Kznz+k2B5tiN9EBXUIaQEmftBh7bu3BeM/xEGo1b8Xv3va90UbYBudSzik4\nMkLUByV90iIwxpo8audlAoEAs7vOpi4eQhpASZ+0CNezr6OiugI97XrKVU+AYwCiMqIUFBUh6oeS\nPmkRdt3ahUnek+ReLdPdwh3pRekoKitSUGSEqBdK+oR3VdVV+O32b5jk1fRROy8TagnhbemN61nX\nFRAZIeqHkj7h3fmH52Glb9XgippN0c22G65lXVNIXYSoG0r6hHfNHZtfn2423RCbFauw+ghRJ5T0\nCa+eVT7DgfgDCPEKUVidlPQJqR8lfcKriHsR8LH2gb2RvcLq9LDwQGphKp6WPVVYnYSoC0r6hFe/\n3/kdEzwnKLROkbYIXpZe+Df7X4XWS4g6oKRPeFNWWYaIpAipJz2XF3XxECIdJX3Cm1MPTsHb0hvW\nBtYKr7urTVcawUOIFJT0CW/2x++X6ZSIzUEtfUKko6RPeFFRVYEjd49gjPsYpdTvaemJ5IJkFJcX\nK6V+QlorSvqEF5EpkXAyc0J74/ZKqV9HWweelp50MJeQl1DSJ7zYH78fY9yU08qvQV08hNRFSZ+o\nXFV1FQ4mHMRYD+X059egpE9IXZT0icpdTrsMKwMrOJs5K3U7XW26IjaTkj4hL5I76Z84cQJubm7o\n3Lkzvv7663rLXb16FUKhEAcOHJB3k6SVU+aonRd5WXrhQcEDlFSUKH1bhLQWciX9qqoqLFiwACdO\nnMCdO3ewZ88exMfHSy330UcfYejQoXT+Ug3HGMOB+AMqSfpthG3gbuGOG9k3lL4tQloLuZJ+dHQ0\nnJ2d4ejoCJFIhJCQEBw6dKhOuZ9++gnjxo2DhYWFPJsjauBq5lXoifTgYeGhku1Rvz4htcmV9DMy\nMtC+/fMhd/b29sjIyKhT5tChQ5g3bx4AyH1mJNK67Y/fj7EeY1X2PqCkT0htQnmeLMsHd9GiRVi9\nejUEAgEYYw127yxfvlxyOyAgAAEBAfKER1oYxhj239mPfW/sU9k2u9l2w7qr61S2PUKULTIyEpGR\nkc1+vlxJ387ODmlpaZL7aWlpsLevvURubGwsQkK4tdJzc3MREREBkUiE4ODgOvW9mPSJ+rmZcxNV\nrAp+1n4q26a3pTeS8pNQWlEKXZGuyrZLiLK83CBesWJFk54vV9L39/fHvXv3kJKSAltbW+zduxd7\n9uypVebBgweS29OnT8eIESOkJnyi/g4kcAdwVdnF10bYBq7mrriZcxM97XuqbLuEtFRy9ekLhUKE\nhYVhyJAh8PDwwIQJE+Du7o7w8HCEh4crKkaiJvbf2a+0tXYaQv36hDwnYC1kDGVNnz9RT3dz72Lg\nzoFIey8NWgLVzgnccHUDYrJisCV4i0q3S4gqNDV30oxcohL74/djtNtolSd8gDuYSzNzCeFQ0icq\noapZuNJ0seqCxLxEPKt8xsv2CWlJKOkTpUvKT0JaYRpedXiVl+23FbaFSzsX3My5ycv2CWlJKOkT\npdsQswHT/aZDqCXXYDG50OkTCeHw9ykkGqG4vBg7/t2BmNkxvMZBI3gI4VBLnyjV7lu70adDHzia\nOPIaBx3MJYRDSZ8oDWMMYVfDsKD7Ar5DgY+VDxJyE1BWWcZ3KITwipI+UZqLqRdRVlmGwE6BfIcC\nXZEunM2ccevRLb5DIYRXlPSJ0oRdDcP87vN5GZsvjZ+NH50onWi8lvFpJGonoygDp+6fQqhvKN+h\nSHhaeOLO4zt8h0EIryjpE6XYdG0TJnpPhFEbI75DkfC08ETc4zi+wyCEVzRkkyhceVU5NsVuwpmp\nZ/gOpRYPCw9q6RONRy19onD77+yHh4WHyk6JKCsHEwcUlBag8Fkh36EQwhtK+kThWsowzZdpCbTg\nZu6G+Nx4vkMhhDeU9IlCXcu6hrTCNIxwHcF3KFJ5Wnoi7hH16xPNRUmfKNS6q+swz38er+vsNMTD\n3AN3cqlfn2guSvpEYfJK8nAg/gBmdp3Jdyj1opY+0XSU9InCbL2+FcGuwbDQt+A7lHrRCB6i6Sjp\nE4UoLi/G2ui1WNhjId+hNMjRxBF5pXkoKiviOxRCeEFJnyjEFxe+QD+HfvC39ec7lAZJRvA8phE8\nRDNR0idyS8hNwM+xP+O7oO/4DkUmNDOXaDJK+kQujDEsOL4AS/otgY2hDd/hyIT69Ykmo6RP5LIv\nbh8elzzGgh4tbzJWfailTzRZyxxMTVqFp2VP8f7J9/HbuN9a7Lh8aailTzQZtfRJs604vwKDOg1C\n3w59+Q6lSRxNHJFbkounZU/5DoUQlaOkT5rl9qPb2HFjB74J+obvUJpMW0sbru1caQ0eopEo6ZMm\nY4xh/vH5WN5/OSz1LfkOp1loZi7RVJT0SZPturULT8ueYq7/XL5DaTZag4doKkr6pEkKnxXiP6f+\ng/Wvr4e2ljbf4TQbtfSJppI76Z84cQJubm7o3Lkzvv766zqP79q1Cz4+PujSpQv69OmDmzdvyrtJ\nwhPGGN776z287vI6etn34jscudAIHqKp5BpnV1VVhQULFuD06dOws7ND9+7dERwcDHd3d0mZTp06\n4e+//4axsTFOnDiB2bNn48qVK3IHTlRvY8xGRGdE48rM1v//62jSEY+KH0FcLoaBjgHf4RCiMnK1\n9KOjo+Hs7AxHR0eIRCKEhITg0KFDtcr07t0bxsbGAICePXsiPT1dnk0SnlxMvYjl55fjYMhBtUiS\n2lracDV3pTV4iMaRq6WfkZGB9u3bS+7b29sjKiqq3vJbtmzBsGHD6n18+fLlktsBAQEICAiQJzyi\nIOlF6Rj/+3jsGLUDzmbOfIejMDUzc7vbdec7FEJkFhkZicjIyGY/X66kLxAIZC577tw5bN26FZcu\nXaq3zItJn7QMzyqfYey+sVjYYyGGOg/lOxyFon590hq93CBesWJFk54vV/eOnZ0d0tLSJPfT0tJg\nb29fp9zNmzcxa9YsHD58GKampvJskqhQzXj89kbtsbjvYr7DUThag4doIrmSvr+/P+7du4eUlBSU\nl5dj7969CA4OrlUmNTUVY8aMwa+//gpnZ/XpGtAEG2I2ICo9CttHbW/Sr7rWglr6RBPJ1b0jFAoR\nFhaGIUOGoKqqCjNmzIC7uzvCw8MBAHPmzMHKlStRUFCAefPmAQBEIhGio6Plj5wo1cXUi1geuRyX\nZ1xWiwO30nQy7YQccQ6N4CEaRcAYY3wHAXDHB1pIKBrv4ZOHeGXrK9gSvEXt+vFf5rvRF5uDN7f4\nM34RUp+m5k6akUtqSS9Kx8CdA7G4z2K1T/gAzcwlmoeSPpHIfJqJgTsG4m3/t7GwZ8s+wbmi0Bo8\nRNNQ0icAgBxxDgJ3BmK673S8/8r7fIejMtTSJ5qGkj7B4+LHCNwZiBDPEHz86sd8h6NSNIKHaBpK\n+houryQPg34ZhFFuo7C0/1K+w1G5TqadkC3ORnF5Md+hEKISlPQ1WEFpAQb/OhhDnIbg8wGfq+VY\n/MYItYTo3K4zEnIT+A6FEJWgpK+hcsQ5GPzrYPRz6IevB32tkQm/Bs3MJZqEkr4GupVzCz0398Sw\nzsPw/eDvNTrhA9SvTzQLJX0NcyzxGAJ3BuKrwK+wImCFxid8gFr6RLPItQwDaT0YY/jhyg/49vK3\nODzxcKs/85UiUUufaBJK+hqgoqoC84/Px5X0K/hnxj9wMHHgO6QWxcnMCZlPM1FcXgx9HX2+wyFE\nqah7R83ll+ZjyK9DkCXOwqW3LlHCl0KoJURns864m3eX71AIUTpK+mrs5P2T8Av3Q1ebrjg44SAM\n2xjyHVKL5W7hTqdOJBqBunfUUFFZEd4/+T5O3j+JzSM2I8gpiO+QWjxag4doCmrpq5mT90/Ce4M3\ntARauDXvFiV8GVFLn2gKaumriZrW/an7p6h13ww0godoCmrpt3LVrBp7b++VtO5vzrtJCb8ZOpt1\nRsqTFJRXlfMdCiFKRS39VqqaVeNA/AEsj1wOAx0DbB+5HQM6DuA7rFarjbANHEwccC/vHjwtPfkO\nhxCloaTfyjDGcOjuISyLXAYdbR18E/QNXnN+jWbWKkBNFw8lfaLOKOm3ElXVVTh27xiWRy4HA8MX\nA77AcJfhlOwViPr1iSagpN/CJeYlYseNHdh5YyesDazxWb/PMNJtJLQEdDhG0dzN3XE08SjfYRCi\nVJT0W6CisiLsi9uHbf9uQ1J+Et7s8iaOTzoObytvvkNTax4WHvjm0jd8h0GIUlHSbyEyn2bir6S/\ncOL+CfyV9BcGdhyIxX0WY6jzUIi0RXyHpxHczN1wL/8eKqsrIdSijwZRT/TO5smzyme48PAC/rr/\nF/66/xcyijIwqNMgDHYajLDXwmChb8F3iBpHT6QHawNrJBcko3O7znyHQ4hSUNJXAcYYHhQ8QExm\nDK5mXkVMZgyuZV2Dt5U3BncajJ9H/Izutt2hraXNd6gar+ZgLiV9oq4o6SuYuFyMu7l3kZCbgLjH\ncYjJjEG6hiETAAAgAElEQVRMZgz0dfThb+uP7rbd8cmrn6CHXQ+YtDXhO1zykpqkP9JtJN+hEKIU\nlPSb4WnZUzwsfIiUJylIeZKCxLxEJOQmICE3AbkluXBp5wI3cze4m7vjnZ7vwN/WH9YG1nyHTWTg\nbu6OyJRIvsMgRGko6b+AMYa80jxkPc1CljgLmU8zJbfTitLw8AmX6MuqyuBo4ggHYwc4mDjAxcwF\nrzm/BjdzNziYONBwylbMw8ID66+u5zsMQpRG7qR/4sQJLFq0CFVVVZg5cyY++uijOmXeeecdRERE\nQE9PD9u3b4efn5+8m21UNatG4bNC5Jfmo+BZAQpKCyTXj0sec5fi2te5JbnQF+nDxtAGtoa2sDGw\ngY2hDZxMndDPoR8cTRzhaOKIdrrtaFKUmnI3d0dCbgKqWTV9eRO1JFfSr6qqwoIFC3D69GnY2dmh\ne/fuCA4Ohru7u6TM8ePHkZSUhHv37iEqKgrz5s3DlStXpNaXVpiG0spSlFaUorSyFCUVJSitKEVx\nRTHE5WIUl//v+n/3xeViFJUVSb2Iy8UwbGMI07amMNU1rXVtoW8BR2NHdLftDgs9C1joW0iu2wrb\nyrNLSCtn3NYYxm2NkVaYRmcZI2pJrqQfHR0NZ2dnODo6AgBCQkJw6NChWkn/8OHDCA0NBQD07NkT\nT548QU5ODqysrOrU12tLL+gKdaEn0oOuSBe6Ql3oinRhoGMAAx0D6Iv0JdftjNtBX0cfxm2MYdTG\nCEZtjGDclrttqGMIozZGNBqGNEvNwVxK+kQdyZX0MzIy0L59e8l9e3t7REVFNVomPT1datIv/WIW\nyrWBp1qAiUkAtMwCwHSAqjZAqQ5Q1AZo88KlbVvuoqtb96KnB+jr170YGHDX2vR9QOrhbu6OO4/v\n4LXOr/EdCmmhKiuBp0+B4mLpl5ISoLS07qXkWSXEZcUoqSxGcYUYpZXFKK0S41l1Mcqqi1HOSlCB\nUlSwUlSgFJWCUlSiFHMGvI7vFvYHAERGRiIyMrLZscuV9GXt12aMyfS86OjlKC8HKipQ67qsjLu8\neLusDHj2jLuUlgKPH3PXNfel/SPE4uf/ED09wMgIMDbmrmsupqbcxcys9u127QBLS8DCAtDRkWev\nkZbOw8IDMZkxfIdBlKy0FHj0iLvk5QEFBUB+Pnddc/vJE6CoCCgs/N91EUNRWSHKhI+ha5aHtqb5\nEBkVQGhQAG39Agj0CoC2BajWKUSVsAiVwkJUaBWhQlCEMv0iVOo/QxuBPtoI9NFW2wC62vrQ1TaA\nnkgf5kL9Wj0deiJd6LfRhZ6oHYa5G0jiDggIQEBAgOT+ihUrmvS65Ur6dnZ2SEtLk9xPS0uDvb19\ng2XS09NhZ2cntT5nZ3mikV11NfcFUFRU+1JYWPsf/uABd52fz70pHj0CcnMBQ0PuC6DmYmsL2NvX\nvtjZcb9GSOvjYeGBnTd28h0GaSaxGEhPr3vJynqe5B894hqVlpaAuQWDsWUhdC2yIDTNgsAoE1Xt\nslBum4lS7WwU4xHE1bl4UvEYT8pz0VbYFrb6Fmin2w6muqYw0zV74ZihLUzbesKkrUmtLueai75I\nn/dBIHIlfX9/f9y7dw8pKSmwtbXF3r17sWfPnlplgoODERYWhpCQEFy5cgUmJiZSu3ZUSUvrecu+\nqaqruS+FmjdOTg6Qmcm9qa5de/4Gy8zkfiU4Oz+/dO78/LYJzctqsdzN3RGfGw/GGO8fUFIXY9xn\n7949ICmJu9Tcvn+f6xF4uRHWySsXjn2TUK6XArH2Q+RVpyCrhBuCfbfwIbQEWpIRe7aGttwIPgN7\nWBv4w1LfEhb6FjDXM4e5nnmrH+whV9IXCoUICwvDkCFDUFVVhRkzZsDd3R3h4eEAgDlz5mDYsGE4\nfvw4nJ2doa+vj23btikkcL5oaXFdPe3aAS8cr66juhrIzq79pty///ltAwPA1/f5xccHcHGhYw0t\ngYW+BYRaQmSLs2FjaMN3OBrt2TMgLg7491/gxo3n1yJR7UbUyJFAJ6dqaJs/QHZlAu7mJUgmTB7P\nTUCluBKd23SGYxtHOBg4wM/EE6OMh3HzbUwcYNSmGS3AVkrAXu5w54lAIKjT96+uGAPS0mq/if/9\nl/v56eUF9OoF9O8P9OsHmJvzHa1m6r+9P5b2W4rAToF8h6JRUlKA8+e5y9WrXMvd2bl248jHB2jX\njuFh4UNczbiKmKwYXM24itisWJi0NYGHhQfczN3g1s6NuzZ3g6W+pdr+amtq7qSk34IUFXFfAJcu\ncW/6y5eB9u25L4CaC889Yxpj7tG58LL0woIeC/gORW0xxiX1yEju/f7339wAjZr3eq9egKcnd2yM\nMYa7eXfxV9JfOPXgFKIyoiDSEqG7XXf42/iju113dLPpppGr01LSVyOVlcD1689bPhcvAm5uwNix\nwJgxQKdOfEeovtZGrUVCbgLWv05LMigSY0BsLHDgANfdKRYDAQHPE72LC1DTIC8oLcCZ5DP46/5f\nOHn/JKpZNYY4DcFgp8Ho074P7IykDwjRNJT01Vh5OXDuHPdhOXiQGyE0dix3aej4Amm60w9O44u/\nv0DktEi+Q2n1qqu5X60HDnAXkej5+9bf/3mSB4Di8mLsj9+P7f9ux9XMq+jboS+GOA3BEKchcDN3\nU9suGnlQ0tcQVVVcy3//fu6DZGYGzJsHvPkmN6SUyCejKANdN3VFzgc5fIfSamVmAps2AZs3c+/P\nml+oXl61Ez1jDBdTL2L7je04EH8Afdr3wTTfaRjuMrzVj5RRBUr6Gqi6musXXbeO+yUweTLw9tvU\n+pcHYwwmX5vg/jv3Ya5HR9NlxRjXFbluHXD6NDBxIvde9PKqWza3JBcbYzZi+7/boaOtg+m+0/Fm\nlzdpxFQTNTV30jKCakBLCxg4kGv137zJzQEYOPD53yor+Y6w9REIBPCw8ED843i+Q2kVnj4F1q8H\nvL25JB8QADx8yP3t5YSfV5KHT858AtcwVzwsfIjdY3cj7u04fNjnQ0r4KkBJX83Y2wOff8594GbP\nBr7/HvDwAPbu5X4RENnVTNIi9SstBb77DnByAs6cAX76iRtXP39+3cmPBaUFWHpuKVzCXJBXmofr\nc67j5xE/o4ddD+qrVyFK+mpKRwcICeH6/det4z6Y3boBx49zP8FJ42pW2yR1VVQA4eHcBKnLl58P\nMBgwoHZ/PQAUPivEisgV6PxTZ2Q8zUDMrBiEDw9HB+MO/ASv4SjpqzmBAAgKAqKjgc8+Az74gJv0\ndeEC35G1fDWrbZLnqquB3bu540V//AH8+Sc3kMDTs25Zxhj23NoD1zBXJD9JxpWZV7AleAs6mnZU\nfeBEgk6XqCEEAm7kxMiRwK+/AlOnch/ctWtVt9Bda+Nh4UHdOy+IjATeeYdboXbTJu6YUX1yxDmY\nd2weEvMScXTSUfjb+qssTtIwaulrGG1tIDQUSEgAAgO5WY/ffUcHe6VxMHFAfmk+isqK+A6FV4WF\nwJw5wJQpwPLlwD//1J/wa1r3Pht94G7hjtjZsZTwWxhK+hqqTRvg/fe5bp+ICKB3b27kD3lOS6AF\n13auGj2C58iR5+Pqb9/mfi3Wd8w1W5yNMfvGYNWFVTg66ShWDVyFNkJaX7yloaSv4Tp14sZTz50L\nDBoELF3KrX9COJraxfP4MTBpEvB//wf88guwcSN3wqH6HIg/AJ+NPvCw8KDWfQtHSZ9AIABmzOBW\n+rx1C/DzA+o5d73G0cQRPHv2cOPt7e25BQBfOElTHYwxrDy/Eu/99R6OTqTWfWtAB3KJhK0tNxLj\njz+4A77LlnFLO2jyEGp3c3dsub6F7zBUorwcePdd7oDtkSNA9+4Nly+tKMWMwzPwoOABomZGwdrA\nWiVxEvlQS5/UIhAAb7zBjb1ev56b4KXJ3T2a0tLPyeEO7GdmAlFRjSf8bHE2BuwYAAaGc6HnKOG3\nIpT0iVROTtwojbw8bqRGVhbfEfHDycwJWeIsFJcX8x2K0sTGAj16cP/nP/9s/DSiN3NuoufmnnjN\n+TXsHrMbuiJd1QRKFIKSPqmXoSHX1TNkCJcUoqP5jkj1hFpCdDbrjITcBL5DUYpdu4ChQ4E1a4AV\nK7h1nBpy5O4RDNo5CN8M+gbLApbR8gmtECV90iAtLW5ET1gYMHw4sGMH3xGpnqelp9p18VRWcrOz\nly4Fzp7lhmI2Zsu1LZh7bC6OTjqKCV4TlB8kUQo6kEtkMnIkN3N31CggOZmbpKMpPMw9EPc4ju8w\nFKa8HBg3jlss7epVbq37xuz4dweWn1+O89POw9mMpnC3ZtTSJzLz9OTO37tnD9cdoCnUqaVfVcXN\nyAa4xfdkSfi7bu7CJ2c/wekppynhqwFq6ZMmsbQETp0CXn2VW7d/+nS+I1I+TwtPtWjpMwYsWMAd\nlI+I4E5b2Jh9cfvw4akPcXrqabiauyo/SKJ0lPRJk3XoAJw8yU3aMTaWrT+4NXMyc0Lm00yUVJRA\nT6THdzjN9umnXHfO2bOArgwDbv6M/xPvRLyDU1NOwcPCQ/kBEpWg7h3SLK6uwLFj3PINp0/zHY1y\nqcMInm+/5YZjRkQ0PiQT4EbpzDs2DxGTI+Bt5a38AInKUNInzda1Kzekc+JEbkKPOmvNk7Q2b+ZO\npHPyJGBh0Xj5iHsRmHlkJo5OOgo/Gz/lB0hUipI+kUu/fsD27UBwMLcKo7pqrf36f/zBDcs8eRJo\n377x8jGZMZh6cCoOhRyiRdPUFCV9IrfXX+dG8wwdCmRk8B2NcrTGlv7589xJyo8fB1xcGi+fI87B\nmL1jsGn4JvSy76X8AAkvKOkThZg0iVupc84c9TwHr6elJ+IetZ6W/tOn3NDM7dsBX9/Gy1dUVWD8\nH+MR6huK0e6jlR4f4Y9cST8/Px9BQUFwcXHB4MGD8eTJkzpl0tLSMGDAAHh6esLLywtr166VZ5Ok\nBfv0UyAtjVt/Xd04mToh42kGSitK+Q5FJh99xK2lM2yYbOXfP/k+DHUMsSJghXIDI7yTK+mvXr0a\nQUFBSExMRGBgIFavXl2njEgkwpo1axAXF4crV65g3bp1iI/XvJNSaAIdHa5l+cEH3GqN6kSkLYKz\nmXOrGMFz9iy3NPL338tWfvu/2/HX/b/w65hfoSWgH//qTq7/8OHDhxH6v+l9oaGhOHjwYJ0y1tbW\n8P3f70sDAwO4u7sjU90yApHw8+OGcapjN09r6NcXi4GZM4HwcG7yXGOuZlzFf079B39O+BMmbWV4\nAmn15JqclZOTAysrKwCAlZUVcnJyGiyfkpKC69evo2fPnlIfX/7Cgi4BAQEIaOiUPaTFWrIE8Pfn\nVnB8802+o1Gc1jCCZ/FioH9/2bp1csQ5GLtvLMKHh9Pkq1YkMjISkZGRzX6+gLGG22NBQUHIzs6u\n8/dVq1YhNDQUBQUFkr+ZmZkhPz9faj1isRgBAQFYsmQJRo0aVTcQgQCNhEJakWvXuNE8N24ANjZ8\nR6MYf9z5A7/e/BUHQ+r+om0JIiO5L9lbtwBT04bLVlRVYNAvg9DPoR8+H/C5SuIjytHU3NloS//U\nqVP1PmZlZYXs7GxYW1sjKysLlpaWUstVVFRg7NixePPNN6UmfKJ+unblunjmzgUOHlSPUy625JZ+\ncTE3eio8vPGEDwAfnf6IDtxqKLn69IODg7Hjfwus79ixQ2pCZ4xhxowZ8PDwwKJFi+TZHGllliwB\nHjzgVuVUB85mzkgvSm+RI3g+/hjo25ebM9GY2MxY7L61GztH76QDt5qIySEvL48FBgayzp07s6Cg\nIFZQUMAYYywjI4MNGzaMMcbYhQsXmEAgYD4+PszX15f5+vqyiIiIOnXJGQppoWJiGLO0ZCwri+9I\nFMNznSe7nnWd7zBqiYxkzM6Osfz8xstWVVexHj/3YFuvbVV+YEQlmpo7G+3TVxXq01dfS5YAd+4A\nBw7wHYn8xv8+HqPcRmGS9yS+QwHAnQjF25ubET1iROPlf479Gdv+3YaLb12kVr6aaGrupP86UbrP\nPuNOvv3PP3xHIr+W1q+/aRPg5SVbws8tycWSc0uw/vX1lPA1GP3nidK1acO19pct4zsS+bWksfol\nJcDXX3MnNJfFJ2c+wQTPCfC1lmFdBqK2KOkTlZg2DUhKAi5c4DsS+bSkNXg2bAD69AF8fBovG5Ue\nhaOJR7FywErlB0ZaNEr6RCVEIq6bp7W39p3NnJFWlIZnlc94jUMs5k6MIsv+rKquwtvH38bXg76m\nWbeEkj5RnSlTgNRU4Nw5viNpPh1tHXQy7YS7uXd5jWPdOu50lV5ejZcNjw2Hvkgfb3ZRo+nRpNko\n6ROVEQq5E3osW9a61+Xhu1+/qAj4739la+U/Kn6EZZHLsG7YOgjUYYYckRslfaJSkyYBOTncSpCt\nFd8jeH76CRg8GHB3b7zsR6c/wlSfqXSeWyIh14JrhDSVUMi1UJcu5dZ7b42NTw8LD/x2+zdetl1Y\nCPzwA3DpUuNlr6Rfwan7pxA/n5YyJ89RS5+o3IQJQEEBd97W1ojPlv4PP3BLLchy+sNvL3+LT1/9\nFIZtDJUfGGk1aEYu4cW+fVy/9JUrra+1X15VDuPVxnjy0RO0EbZR2XYLCoDOnYGoKMDJqeGyqYWp\n8Av3w8NFD2GgY6CaAAkvaEYuaRXGjeMmFx0/znckTaejrYOOJh1xN0+1I3i+/x4YNarxhA8AG2M2\nYkqXKZTwSR2U9AkvtLSA5cu5vv3W+ANP1SN48vKA9eu5mc2NeVb5DJuvbcbb3d9WfmCk1aGkT3gz\nejRQVQUcOsR3JE3naanafv3vvuN+HTk6Nl52X9w+dLXpCpd2MnT8E41DSZ/wpqa1v3Jl62vte5ir\nrqWfm8strPbpp7KVD4sOw4IeC5QbFGm1KOkTXo0cCVRXA0eP8h1J06hyDZ41a7hWfocOjZeNzohG\nbkkuXnN+TfmBkVaJkj7hlUDA9euvWNG6WvudzToj5UkKyirLlLqd/Hxg40buzFiyCIsOw9vd34a2\nlrZS4yKtFyV9wrtRo4CyMiAigu9IZNdG2AYdTTsiMS9Rqdv54Qfu2IcsffmPih/hSOIRvOX3llJj\nIq0bJX3COy0tbgXO1tbaV/YInoICbsTOJ5/IVn7ztc0Y6z4WZrpmSouJtH6U9EmLMG4ct1xwa5ql\n623pjRs5N5RW/9q13BmxOnVqvGxldSU2xGzA/O7zlRYPUQ+U9EmLoKXFjUFvTa39bjbdEJsVq5S6\nCwu5hdVkbeUfvnsYDsYO8LPxU0o8RH1Q0ictxvjx3IHLM2f4jkQ23Wy7ITYzVinLh/z0EzBsGLfs\ngixomCaRFSV90mJoa7eu1r6NgQ2EWkKkFaUptN6iIuDHH2Uflx/3KA4JuQkY4z5GoXEQ9URJn7Qo\nISHcevuRkXxH0jiBQCBp7SvSunXcevmurjKWv7oOs7vNho62jkLjIOqJkj5pUYRCroW7YgXfkchG\n0f36YjE3GUuWNXYA4GnZU+y5vQezu81WWAxEvdFJVEiLM3ky8PnnwPnzQP/+yt9eZSWwZw938FQa\nZ2dg6FDpj3Wz6YaNsRsVFsv69dzJZWQ5KxYAHLt3DL3te8PW0FZhMRD1RkmftDhCITdqZeVK5R/U\nzcwEJk7kloLw8ZFeZu1a7iTkP/4I6OrWfqybbTfEHuEO5sp7DtriYm755NOnZX/O/vj9GOs+Vq7t\nEs1CJ1EhLVJFBdenvX59/a1seZ08CYSGAgsWcMscaNXT2fn0KTBnDhAXx5385cW+dsYYrP9rjZhZ\nMWhv3F6ueJYv57bx+++ylS+pKIHNf21w/537MNczl2vbpPWik6gQtSASAVu3AtOmAampiq27spLr\nM3/rLa5b59NP60/4AGBoCOzaBcyfD/TtC+ze/fwxgUCAbjbdcC3rmlwxnTrFraS5Zo3szzl5/yT8\nbf0p4ZMmaXbSz8/PR1BQEFxcXDB48GA8efKk3rJVVVXw8/PDiBEjmrs5ooECAoAPPgDGjgWePVNM\nnZmZQGAgEB0NxMZy25CFQADMns11vaxYwd0uLeUe62rTVa6DuampwJQp3JeJvb3sz9sfvx9j3GiY\nJmmaZif91atXIygoCImJiQgMDMTq1avrLfvjjz/Cw8ND7j5Ponnefx9wcADefVf+uk6dArp144ZD\nnjgBWFk1vQ4fHyAmhhtl07MnkJgo3wieZ8+4L7UPPpD9CwjgztN7LPEYRruPbtZ2ieZqdtI/fPgw\nQkNDAQChoaE4ePCg1HLp6ek4fvw4Zs6cSX32pMkEAmDbNm4kz7ZtzauDMe7MU6GhsnXnNObl7p6i\nu82fmfvuu9yX2vvvN+15Zx6cgbuFO43aIU3W7NE7OTk5sPpfU8nKygo5OTlSy7333nv49ttvUVRU\n1NxNEQ1naAgcOMAN3/TxAbp2lf25paVcV8ydO8CVK7KdiEQWAgF3cNfLCxj3RnuI51QhoygT9sZ2\nMtdR82UWHc3V1xQ0aoc0V4NJPygoCNnZ2XX+vmrVqlr3BQKB1K6bo0ePwtLSEn5+foiUYYrl8uXL\nJbcDAgIQ0JTfu0SteXhwM1XHjeO6V8xkWD04I4Nbq9/ZGbhwAdDTU3xcffoA0VECeK3uhskfxuLE\nj3Z1hnVKc+0a8J//cEnfyKhp26ysrsShu4ewpJ+MM7iIWomMjJQpn9aLNZOrqyvLyspijDGWmZnJ\nXF1d65T5+OOPmb29PXN0dGTW1tZMT0+PTZkyRWp9coRCNMj//R9jQ4cyVlXVcLnLlxmztWXsq68Y\nq65Wflz/OfEJ81q4lHXrxlhqasNl8/IY69iRsb17m7etMw/OsG7h3Zr3ZKJ2mpo7m92zGRwcjB07\ndgAAduzYgVGjRtUp8+WXXyItLQ3Jycn47bffMHDgQOzcubO5myQEq1cDJSVcKzkmBoiPB9LSuNU5\ny8q4/vutW7lz727aBCxe3PSuk+bo0b4rHHtdw4QJ3AHeS5e4WEpLuRObp6RwY/Cjo7kZx6NHc6uK\nNgd17RB5NLtPf/HixRg/fjy2bNkCR0dH7Nu3DwCQmZmJWbNm4dixY3WeQ6N3iLxEImDvXm6M/Zw5\n3CxWsfj5NcCddOTvvwE3N9XF1c22GxZGLMSRD7l+/uBg4MkTLl59fcDA4Pm1pyf35dUc1awaf8b/\niXOh5xT7AojGoBm5RK2Ul3NLNGur+LzgjDGYf2uO2/Nuw8bQBhUV3C8MoYIXOrmcdhmzj8zG7bdv\nK7Zi0mrRjFyi0XR0VJ/wgeczc2vG64tEik/4wP+6djyoa4c0HyV9QhREGWvrv4gxhv13qD+fyIeS\nPiEKosxz5gLAtaxrEGmL4G3prbRtEPVHSZ8QBelq01XuhdcaUjNqhwZEEHlQ0idEQTqadERJRQly\nxNJnp8uDMUZDNYlCUNInREEEAoHcK27WJ+5xHEorSuFv66/wuolmoaRPiAIp62Du/jv7McZ9DHXt\nELlR0idEgZR1MPeP+D+oa4coBCV9QhRIGUn/Vs4tFD4rRJ8OfRRaL9FMlPQJUaBOpp3wtOwpHhU/\nUlidu27twkTvidAS0MeVyI/eRYQoUM3BXEUN3axm1dhzew8me09WSH2EUNInRMEUeTD3UuolGOoY\n0oQsojCU9AlRMEX26+++vRuTvSfTqB2iMJT0CVEwRSX98qpy/HHnD0z0nqiAqAjhUNInRMGczJxQ\n+KxQ7pm5J++fhGs7VziaOComMEJASZ8QhdMSaGGE6wjsvrVbrnp239qNSd6TFBQVIRxK+oQowZxu\ncxAeG97sEwOJy8U4fu84xns285yKhNSDkj4hStCnfR9oa2nj/MPzzXr+oYRD6NOhD8z1zBUcGdF0\nlPQJUQKBQCBp7TfHrlu7aGw+UQpK+oQoyZQuUxBxL6LJs3MfFz/G5bTLCHYNVlJkRJNR0idESUx1\nTTHafTS2/7u9Sc/bF7cPr7u8DgMdA+UERjQaJX1ClGhOtznYFLsJ1axa5ufUTMgiRBko6ROiRD3t\nekJfRx9nk8/KVD65IBn38u4hqFOQkiMjmoqSPiFKJBAIMLfbXGyM2ShT+T239+ANzzcg0hYpOTKi\nqSjpE6Jkk7tMxpnkM8gWZzdYjjGGXbd2YZIXTcgiykNJnxAlM2pjhHEe47D1+tYGy93MuYmSihK8\n0v4VFUVGNBElfUJUYG63udgUuwlV1VVSH39Q8ABvHX4LM/1m0oqaRKko6ROiAt1su8Fczxwn75+s\n89gfd/5Ar829MM1nGj559RMeoiOapNlJPz8/H0FBQXBxccHgwYPx5MkTqeWePHmCcePGwd3dHR4e\nHrhy5Uqzg9UUkZGRfIfQYqjTvnh5hm5ZZRkWRizER6c/wvHJx7Gw58IGW/nqtC/kRfui+Zqd9Fev\nXo2goCAkJiYiMDAQq1evllru3XffxbBhwxAfH4+bN2/C3d292cFqCnpDP6dO+2Ki90T8/fBvpBel\nIyk/Ca9sfQVZT7MQOzsW/rb+jT5fnfaFvGhfNF+zk/7hw4cRGhoKAAgNDcXBgwfrlCksLMSFCxfw\n1ltvAQCEQiGMjY2bu0lCWjUDHQOEeIVg9pHZeGXLK3jL9y38/sbvMGlrwndoRIM0O+nn5OTAysoK\nAGBlZYWcnLonjEhOToaFhQWmT5+Orl27YtasWSgpKWl+tIS0cvO7z0duSS4iJkdgfo/5dNCWqJyA\nNbDgd1BQELKz644tXrVqFUJDQ1FQUCD5m5mZGfLz82uVi4mJQe/evXH58mV0794dixYtgpGREVau\nXFk3EHrzE0JIszTlvA3Chh48depUvY9ZWVkhOzsb1tbWyMrKgqWlZZ0y9vb2sLe3R/fu3QEA48aN\nq7fvv7knmyCEECK7ZnfvBAcHY8eOHQCAHTt2YNSoUXXKWFtbo3379khMTAQAnD59Gp6ens3dJCGE\nEDk12L3TkPz8fIwfPx6pqalwdHTEvn37YGJigszMTMyaNQvHjh0DANy4cQMzZ85EeXk5nJycsG3b\nNq572kwAAAPSSURBVDqYSwghfGE8i4iIYK6urszZ2ZmtXr2a73BUavr06czS0pJ5eXlJ/paXl8cG\nDRrEOnfuzIKCglhBQQGPEapOamoqCwgIYB4eHszT05P9+OOPjDHN3B+lpaWsR48ezMfHh7m7u7PF\nixczxjRzX9SorKxkvr6+bPjw4Ywxzd0XDg4OzNvbm/n6+rLu3bszxpq+L3idkVtVVYUFCxbgxIkT\nuHPnDvbs2YP4+Hg+Q1Kp6dOn48SJE7X+Juv8B3UjEomwZs0axMXF4cqVK1i3bh3i4+M1cn+0bdsW\n586dw7///oubN2/i3LlzuHjxokbuixo//vgjPDw8JAM+NHVfCAQCREZG4vr164iOjgbQjH2him+n\n+ly+fJkNGTJEcv+rr75iX331FY8RqV5ycnKtlr6rqyvLzs5mjDGWlZXFXF1d+QqNVyNHjmSnTp3S\n+P1RXFzM/P392e3btzV2X6SlpbHAwEB29uxZSUtfU/eFo6Mjy83NrfW3pu4LXlv6GRkZaN++veS+\nvb09MjIyeIyIf7LMf1B3KSkpuH79Onr27Kmx+6O6uhq+vr6wsrLCgAED4OnpqbH74r333sO3334L\nLa3n6UpT94VAIMCgQYPg7++Pn3/+GUDT90WDQzaVjcbmN0wgEGjcPhKLxRg7dix+/PFHGBoa1npM\nk/aHlpYW/v33XxQWFmLIkCE4d+5crcc1ZV8cPXoUlpaW8PPzq3fpBU3ZFwBw6dIl2NjY4PHjxwgK\nCoKbm1utx2XZF7y29O3s7JCWlia5n5aWBnt7ex4j4l/N/AcA9c5/UFcVFRUYO3YspkyZIhkCrMn7\nAwCMjY3x+uuvIzY2ViP3xeXLl3H48GF07NgREydOxNmzZzFlyhSN3BcAYGNjAwCwsLDA6NGjER0d\n3eR9wWvS9/f3x71795CSkoLy8nLs3bsXwcHBfIbEO1nmP6gjxhhmzJgBDw8PLFq0SPJ3Tdwfubm5\nklVrS0tLcerUKfj5+Wnkvvjyyy+RlpaG5ORk/Pbbbxg4cCB++eUXjdwXJSUlePr0KQCguLgYJ0+e\nhLe3d9P3hbIOOMjq+PHjzMXFhTk5ObEvv/yS73BUKiQkhNnY2DCRSMTs7e3Z1q1bWV5eHgsMDNS4\noWgXLlxgAoGA+fj4MF9fX+br68siIiI0cn/cvHmT+fn5MR8fH+bt7c2++eYbxhjTyH3xosjISDZi\nxAjGmGbuiwcPHjAfHx/m4+PDPD09Jfmyqfui2ZOzCCGEtD505ixCCNEglPQJIUSDUNInhBANQkmf\nEEI0CCV9QgjRIJT0CSFEg/w/A3aBybkcry0AAAAASUVORK5CYII=\n"
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": "contourplot('yz',h2,solver.orbs[:,1],bfs,\n title=\"Contours of H2 antibonding orbital\")",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"png": "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\ngg==\n"
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Iterators and convergence\nThe iterator throws an exception if convergence isn't achieved:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "solver = rhf(h2,basisset(h2))",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": "solver",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<html><h2>RHF Hamiltonian</h2><p><h2>Hydrogen</h2><p>Stoichiometry = H2, Charge = 0, Multiplicity = 1</p><table><tr><th>#</th><th>Atno</th><th>Symbol</th><th>x</th><th>y</th><th>z</th></tr><tr><td>0</td><td>1</td><td>H</td><td>0.00000</td><td>0.00000</td><td>0.69218</td></tr><tr><td>1</td><td>1</td><td>H</td><td>0.00000</td><td>0.00000</td><td>-0.69218</td></tr></table></p><p>Basis set: sto3g, Nbf: 2</p><p>Status: Converged=False</p></html>",
"output_type": "pyout",
"prompt_number": 14,
"text": "RHF Hamiltonian\nStoichiometry = H2, Charge = 0, Multiplicity = 1\n1 H 0.000000 0.000000 0.692176\n1 H 0.000000 0.000000 -0.692176\nBasis set: sto3g, Nbf: 2\nStatus: Converged = False"
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": "solver.converge(maxiters=1)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 15,
"text": "[0.48556025168474959]"
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": "solver.energies",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 16,
"text": "[0.48556025168474959]"
}
],
"prompt_number": 16
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Comparing timings and results with v1"
},
{
"cell_type": "code",
"collapsed": false,
"input": "import PyQuante, pyquante2",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Tests in the utils unit tests:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "print map(PyQuante.pyints.fact2,[0,1,3,8,-1]), map(pyquante2.utils.fact2,[0,1,3,8,-1])\nfor a,b in [(5,2),(10,5)]:\n print PyQuante.pyints.binomial(a,b),pyquante2.utils.binomial(a,b)\nprint PyQuante.pyints.Fgamma(0,0),pyquante2.utils.Fgamma(0,0)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "[1, 1, 3, 384, 1] [1, 1, 3, 384, 1]\n10 10\n252 252\n0.999999996667 1.0\n"
}
],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Test one-e integrals and pgbfs\nTests in the one.py unit tests:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "s1 = PyQuante.PGBF.PGBF(1,(0.,0.,0.))\ns2 = pyquante2.pgbf(1)\nprint s1.overlap(s1),pyquante2.S(s2,s2)\nprint s1.kinetic(s1),pyquante2.T(s2,s2)\nprint s1.nuclear(s1,(0,0,0)),pyquante2.V(s2,s2,(0,0,0))",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "1.0 1.0\n1.5 1.5\n-1.59576911629 -1.59576912161\n"
}
],
"prompt_number": 19
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Confused about the incomplete gamma function at small values. It would be nice to be able to use the scipy routines as a replacement, but they don't seem to give the same results across the board."
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pyquante2.utils import *\nfrom math import gamma\nfrom scipy.special import gammainc\nfor x in [0.1,2,3,4]:\n print gamma(x),gammainc(x,1e-10),gammainc(x,1e10),gamm_inc(x,1e-10),gamm_inc(x,1e10)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "9.51350769867 0.10511370061 1.0 0.999999999991 9.51350769867\n1.0 4.99999999967e-21 1.0 4.99999999967e-21 1.0\n2.0 1.66666666654e-31 1.0 3.33333333308e-31 2.0\n6.0 4.16666666633e-42 1.0 2.4999999998e-41 6.0\n"
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": "This doesn't make any sense.\n\n## Test cgbfs with one-e integrals:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from PyQuante.CGBF import CGBF\nfrom pyquante2 import cgbf,S,T\nc1 = CGBF((0,0,0),(0,0,0))\nc1b = CGBF((0,0,1.0),(0,0,0))\nexps,coefs = [],[]\nfor ex,co in [(3.4252509099999999, 0.15432897000000001),\n (0.62391373000000006, 0.53532813999999995),\n (0.16885539999999999, 0.44463454000000002)]:\n exps.append(ex)\n coefs.append(co)\n c1.add_primitive(ex,co)\n c1b.add_primitive(ex,co)\nc1.normalize()\nc1b.normalize()\n\nc2 = cgbf(exps=exps,coefs=coefs)\nc2b = cgbf((0,0,1.0),exps=exps,coefs=coefs)\n\nprint \"Overlaps\"\nprint c1.overlap(c1), S(c2,c2)\nprint c1.overlap(c1b), S(c2,c2b)\n\nprint \"Kinetics\"\nprint c1.kinetic(c1), T(c2,c2)\nprint c1.kinetic(c1b), T(c2,c2b)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Overlaps\n1.0 1.0\n0.796588300697 0.796588300697\nKinetics\n0.760031883567 0.760031883567\n0.383253671655 0.383253671655\n"
}
],
"prompt_number": 21
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# Integral routines and timing:\n\n## Timing top level ERI routines"
},
{
"cell_type": "code",
"collapsed": false,
"input": "s = pyquante2.pgbf(1)\nfrom pyquante2.ints import two,hgp\n%timeit two.ERI(s,s,s,s)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "1000 loops, best of 3: 347 us per loop\n"
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit hgp.ERI_hgp(s,s,s,s)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "1000 loops, best of 3: 238 us per loop\n"
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pyquante2 import ctwo\n%timeit ctwo.ERI(s,s,s,s)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "100000 loops, best of 3: 6.54 us per loop\n"
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit ctwo.ERI_hgp(s,s,s,s)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "100000 loops, best of 3: 4.98 us per loop\n"
}
],
"prompt_number": 25
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Nice speedup from Cython, but I had expected more relative speedup between hgp and the normal code. First run of this (little cython optimization) gave 4.4 us from ERI, and 3.84 from hgp. Python was 162 us."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Timing comparison for different vrr routines:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pyquante2.ctwo import ERI,ERI_hgp,vrr,vrr_recursive,vrr_nonrecursive\nfrom pyquante2.ints.hgp import vrr as pyvrr",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": "zero = array([0,0,0],'d')\n%timeit pyvrr(zero,1.,(0,0,0),1.,zero,1.,1., zero,1.,(0,0,0),1.,zero,1.,1.,0)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "1000 loops, best of 3: 214 us per loop\n"
}
],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit vrr(0,0,0,1.,0,0,0,1.,0,0,0,1.,1.,0,0,0,1.,0,0,0,1.,0,0,0,1.,1.,0)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "1000000 loops, best of 3: 1.67 us per loop\n"
}
],
"prompt_number": 28
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit vrr_recursive(0,0,0,1.,0,0,0,1.,0,0,0,1.,1.,0,0,0,1.,0,0,0,1.,0,0,0,1.,1.,0)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "1000000 loops, best of 3: 1.87 us per loop\n"
}
],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit vrr_nonrecursive(0,0,0,1.,0,0,0,1.,0,0,0,1.,1.,0,0,0,1.,0,0,0,1.,0,0,0,1.,1.,0)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "1000000 loops, best of 3: 1.92 us per loop\n"
}
],
"prompt_number": 30
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Again, first time through I had expected more differences between the versions. The python version is 150 us, vrr was 1.21, and vrr_recursive was 1.26. For the added complexity of vrr (storing intermediate quantities) it almost seems worth it to go back to the recursive version.\n\nvrr is now set to the recursive version. I can remove the nonrecursive version if needed."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Comparison of old and new ERI code:\n\nPGBF code:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from PyQuante.PGBF import coulomb\nfrom pyquante2.ctwo import ERI_hgp, ERI\n\ns1 = PyQuante.PGBF.PGBF(1,(0.,0.,0.))\ns2 = pyquante2.pgbf(1)\n\ns1b = PyQuante.PGBF.PGBF(1,(0.,0.,1.))\ns2b = pyquante2.pgbf(1,(0,0,1))\n\n%timeit coulomb(s1,s1,s1,s1)\n%timeit ERI_hgp(s2,s2,s2,s2)\nprint coulomb(s1,s1,s1,s1), ERI_hgp(s2,s2,s2,s2)\nprint coulomb(s1,s1,s1b,s1b), ERI_hgp(s2,s2,s2b,s2b), ERI(s2,s2,s2b,s2b)\nprint coulomb(s1,s1b,s1,s1b), ERI_hgp(s2,s2b,s2,s2b), ERI(s2,s2b,s2,s2b)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "100000 loops, best of 3: 5.22 us per loop\n100000 loops, best of 3: 6.05 us per loop"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n1.12837916333 1.12837916333\n0.842700790029 0.842700790029 0.842700790029\n0.415107496037 0.415107496037 0.415107496037\n"
}
],
"prompt_number": 31
},
{
"cell_type": "markdown",
"metadata": {},
"source": "The new routines run at the same speed, which isn't altogether surprising, but it's nice to know I haven't lost anything due to the Cython wrappers.\n\nCGBF code:"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from PyQuante.CGBF import CGBF,coulomb\nfrom pyquante2 import cgbf\nfrom pyquante2.ctwo import ERI_hgp\n\nc1 = CGBF((0,0,0),(0,0,0))\nc1b = CGBF((0,0,1.0),(0,0,0))\nexps,coefs = [],[]\nfor ex,co in [(3.4252509099999999, 0.15432897000000001),\n (0.62391373000000006, 0.53532813999999995),\n (0.16885539999999999, 0.44463454000000002)]:\n exps.append(ex)\n coefs.append(co)\n c1.add_primitive(ex,co)\n c1b.add_primitive(ex,co)\nc1.normalize()\nc1b.normalize()\n\nc2 = cgbf(exps=exps,coefs=coefs)\nc2b = cgbf((0,0,1.0),exps=exps,coefs=coefs)\n\n%timeit coulomb(c1,c1,c1,c1)\n%timeit ERI_hgp(c2,c2,c2,c2)\n%timeit ERI(c2,c2,c2,c2)\nprint coulomb(c1,c1,c1,c1), ERI_hgp(c2,c2,c2,c2)\nprint coulomb(c1,c1,c1b,c1b), ERI_hgp(c2,c2,c2b,c2b)\nprint coulomb(c1,c1b,c1,c1b), ERI_hgp(c2,c2b,c2,c2b)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "10000 loops, best of 3: 49.4 us per loop\n10000 loops, best of 3: 41.4 us per loop"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n1000 loops, best of 3: 1.22 ms per loop"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n0.774605941338 0.774605941338\n0.650177460815 0.650177460815\n0.455901518744 0.455901518744\n"
}
],
"prompt_number": 32
},
{
"cell_type": "markdown",
"metadata": {},
"source": "# SCF examples:\n\n## LiH, STO-3G"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from PyQuante.Ints import getbasis,getints,getT,getV\nfrom PyQuante.hartree_fock import rhf\nfrom PyQuante.Molecule import Molecule\n\nLiH = Molecule('lih',\n [(3,( .0000000000, .0000000000, .0000000000)),\n (1,( .0000000000, .0000000000,1.629912))],\n units='Angstroms')\nbfs = getbasis(LiH,'sto-3g')\nnbf = len(bfs)\nnocc,nopen = LiH.get_closedopen()\nassert nopen==0\nS,h,Ints = getints(bfs,LiH)\nen,orbe,orbs = rhf(LiH,integrals=(S,h,Ints),verbose=True)\nprint \"SCF completed, E = \",en \nprint \"S = \\n\",S\nprint \"h = \\n\",h\nprint \"I2 = \\n\",Ints[:5]",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "SCF completed, E = -7.86073576968\nS = \n[[ 1. 0.24113665 0. 0. 0. 0.06239818]\n [ 0.24113665 1. 0. 0. 0. 0.38780341]\n [ 0. 0. 1. 0. 0. 0. ]\n [ 0. 0. 0. 1. 0. 0. ]\n [ 0. 0. 0. 0. 1. 0.50716955]\n [ 0.06239818 0.38780341 0. 0. 0.50716955 1. ]]\nh = \n[[-4.73076107 -1.06286658 0. 0. -0.01551519 -0.28307001]\n [-1.06286658 -1.39257572 0. 0. -0.12049949 -0.67475424]\n [ 0. 0. -1.13302238 0. 0. 0. ]\n [ 0. 0. 0. -1.13302238 0. 0. ]\n [-0.01551519 -0.12049949 0. 0. -1.22977649 -0.82314252]\n [-0.28307001 -0.67475424 0. 0. -0.82314252 -1.43835583]]\nI2 = \narray('d', [1.6803951639324308, 0.26542036372307215, 0.049941457073764725, 0.39772685976397343, 0.09286014333241713])\n"
}
],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": "from PyQuante.TestMolecules import h2o\nbfs = getbasis(h2o,'sto-3g')\nnbf = len(bfs)\nS,h,Ints = getints(bfs,h2o)\nen,orbe,orbs = rhf(h2o,integrals=(S,h,Ints),verbose=True)\nprint \"SCF completed, E = \",en \nprint \"S = \\n\",S\nprint \"h = \\n\",h\nprint \"I2 = \\n\",Ints[:5]\n",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "SCF completed, E = -74.9598407887\nS = \n[[ 1.00000000e+00 2.36703937e-01 0.00000000e+00 0.00000000e+00\n -3.95628520e-18 5.58181517e-02 5.58181517e-02]\n [ 2.36703937e-01 1.00000000e+00 0.00000000e+00 0.00000000e+00\n -6.93671951e-18 4.84133479e-01 4.84133479e-01]\n [ 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00\n 0.00000000e+00 3.18049483e-01 -3.18049483e-01]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ -3.95628520e-18 -6.93671951e-18 0.00000000e+00 0.00000000e+00\n 1.00000000e+00 -2.39804296e-01 -2.39804296e-01]\n [ 5.58181517e-02 4.84133479e-01 3.18049483e-01 0.00000000e+00\n -2.39804296e-01 1.00000000e+00 2.54586613e-01]\n [ 5.58181517e-02 4.84133479e-01 -3.18049483e-01 0.00000000e+00\n -2.39804296e-01 2.54586613e-01 1.00000000e+00]]\nh = \n[[ -3.27375153e+01 -7.61673386e+00 0.00000000e+00 0.00000000e+00\n 1.92563167e-02 -1.81001390e+00 -1.81001390e+00]\n [ -7.61673386e+00 -9.34981296e+00 0.00000000e+00 0.00000000e+00\n 2.25272914e-01 -3.83196154e+00 -3.83196154e+00]\n [ 0.00000000e+00 0.00000000e+00 -7.63461067e+00 0.00000000e+00\n 0.00000000e+00 -2.08476894e+00 2.08476894e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 -7.46989436e+00\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 1.92563167e-02 2.25272914e-01 0.00000000e+00 0.00000000e+00\n -7.56353430e+00 1.64578178e+00 1.64578178e+00]\n [ -1.81001390e+00 -3.83196154e+00 -2.08476894e+00 0.00000000e+00\n 1.64578178e+00 -5.13309366e+00 -1.64475717e+00]\n [ -1.81001390e+00 -3.83196154e+00 2.08476894e+00 0.00000000e+00\n 1.64578178e+00 -1.64475717e+00 -5.13309366e+00]]\nI2 = \narray('d', [4.785065388755281, 0.7413803495021389, 0.13687338489814346, 1.1189468626126458, 0.2566333938755287])\n"
}
],
"prompt_number": 34
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pyquante2 import molecule,lih,basisset,rhf\nfrom pyquante2.ints.integrals import onee_integrals,twoe_integrals\nfrom pyquante2.utils import dmat,trace2,geigh\n\nlih = molecule([\n (3,.0000000000, .0000000000, .0000000000),\n (1, .0000000000, .0000000000,1.629912)],\n units='Angstroms')\n\nbfs = basisset(lih,'sto3g')\n\ni1 = onee_integrals(bfs,lih)\ni2 = twoe_integrals(bfs)\nprint \"S = \\n\",i1.S\nprint \"h = \\n\",i1.T + i1.V\nprint \"I2 = \\n\",i2._2e_ints[:5]\ns = rhf(lih,bfs)\ns.converge()",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "S = \n[[ 1. 0.24113665 0. 0. 0. 0.06239931]\n [ 0.24113665 1. 0. 0. 0. 0.38780552]\n [ 0. 0. 1. 0. 0. 0. ]\n [ 0. 0. 0. 1. 0. 0. ]\n [ 0. 0. 0. 0. 1. 0.50717121]\n [ 0.06239931 0.38780552 0. 0. 0.50717121 1. ]]\nh = \n[[-4.73076276 -1.06286698 0. 0. -0.01551535 -0.28307525]\n [-1.06286698 -1.39257664 0. 0. -0.12049997 -0.67475941]\n [ 0. 0. -1.13302317 0. 0. 0. ]\n [ 0. 0. 0. -1.13302317 0. 0. ]\n [-0.01551535 -0.12049997 0. 0. -1.22977768 -0.82314683]\n [-0.28307525 -0.67475941 0. 0. -0.82314683 -1.4383608 ]]\nI2 = \n[[[[ 1.68039516e+00 2.65420364e-01 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 6.67460269e-02]\n [ 2.65420364e-01 3.97726860e-01 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.45977260e-01]\n [ 0.00000000e+00 0.00000000e+00 3.96639641e-01 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.96639641e-01\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 3.96639641e-01 1.77730867e-01]\n [ 6.67460269e-02 1.45977260e-01 0.00000000e+00 0.00000000e+00\n 1.77730867e-01 3.23596627e-01]]\n\n [[ 2.65420364e-01 4.99414571e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.26228730e-02]\n [ 4.99414571e-02 9.28601433e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 3.44386672e-02]\n [ 0.00000000e+00 0.00000000e+00 9.28803966e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 9.28803966e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 9.28803966e-02 4.23962450e-02]\n [ 1.26228730e-02 3.44386672e-02 0.00000000e+00 0.00000000e+00\n 4.23962450e-02 7.77132412e-02]]\n\n [[ 0.00000000e+00 0.00000000e+00 8.98131923e-03 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 1.37882688e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 8.98131923e-03 1.37882688e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 2.86733880e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 2.86733880e-03 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 8.98131923e-03\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.37882688e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 8.98131923e-03 1.37882688e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 2.86733880e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.86733880e-03\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 8.98131923e-03 1.49253636e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 1.37882688e-02 5.61064034e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 8.98131923e-03 1.37882688e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 8.72195152e-03]\n [ 1.49253636e-03 5.61064034e-03 0.00000000e+00 0.00000000e+00\n 8.72195152e-03 1.47614365e-02]]\n\n [[ 6.67460269e-02 1.26228730e-02 0.00000000e+00 0.00000000e+00\n 1.49253636e-03 3.48752569e-03]\n [ 1.26228730e-02 2.38897188e-02 0.00000000e+00 0.00000000e+00\n 2.89165611e-03 1.03806824e-02]\n [ 0.00000000e+00 0.00000000e+00 2.36090454e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.36090454e-02\n 0.00000000e+00 0.00000000e+00]\n [ 1.49253636e-03 2.89165611e-03 0.00000000e+00 0.00000000e+00\n 2.44619671e-02 1.33296474e-02]\n [ 3.48752569e-03 1.03806824e-02 0.00000000e+00 0.00000000e+00\n 1.33296474e-02 2.45457394e-02]]]\n\n\n [[[ 2.65420364e-01 4.99414571e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.26228730e-02]\n [ 4.99414571e-02 9.28601433e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 3.44386672e-02]\n [ 0.00000000e+00 0.00000000e+00 9.28803966e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 9.28803966e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 9.28803966e-02 4.23962450e-02]\n [ 1.26228730e-02 3.44386672e-02 0.00000000e+00 0.00000000e+00\n 4.23962450e-02 7.77132412e-02]]\n\n [[ 3.97726860e-01 9.28601433e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 2.38897188e-02]\n [ 9.28601433e-02 2.90562294e-01 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.12630635e-01]\n [ 0.00000000e+00 0.00000000e+00 2.90496975e-01 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.90496975e-01\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 2.90496975e-01 1.44016166e-01]\n [ 2.38897188e-02 1.12630635e-01 0.00000000e+00 0.00000000e+00\n 1.44016166e-01 2.78154454e-01]]\n\n [[ 0.00000000e+00 0.00000000e+00 1.37882688e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 6.41843282e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 1.37882688e-02 6.41843282e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.30566993e-02]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 1.30566993e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.37882688e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 6.41843282e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 1.37882688e-02 6.41843282e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.30566993e-02]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.30566993e-02\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 1.37882688e-02 2.89165611e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 6.41843282e-02 3.30528301e-02]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 1.37882688e-02 6.41843282e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 5.05803326e-02]\n [ 2.89165611e-03 3.30528301e-02 0.00000000e+00 0.00000000e+00\n 5.05803326e-02 1.04756020e-01]]\n\n [[ 1.45977260e-01 3.44386672e-02 0.00000000e+00 0.00000000e+00\n 5.61064034e-03 1.03806824e-02]\n [ 3.44386672e-02 1.12630635e-01 0.00000000e+00 0.00000000e+00\n 3.30528301e-02 7.09163009e-02]\n [ 0.00000000e+00 0.00000000e+00 1.06969865e-01 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.06969865e-01\n 0.00000000e+00 0.00000000e+00]\n [ 5.61064034e-03 3.30528301e-02 0.00000000e+00 0.00000000e+00\n 1.23834010e-01 9.95709532e-02]\n [ 1.03806824e-02 7.09163009e-02 0.00000000e+00 0.00000000e+00\n 9.95709532e-02 2.17355090e-01]]]\n\n\n [[[ 0.00000000e+00 0.00000000e+00 8.98131923e-03 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 1.37882688e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 8.98131923e-03 1.37882688e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 2.86733880e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 2.86733880e-03 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 1.37882688e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 6.41843282e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 1.37882688e-02 6.41843282e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.30566993e-02]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 1.30566993e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 3.96639641e-01 9.28803966e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 2.36090454e-02]\n [ 9.28803966e-02 2.90496975e-01 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.06969865e-01]\n [ 0.00000000e+00 0.00000000e+00 3.12945510e-01 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.79207231e-01\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 2.79207231e-01 1.34348349e-01]\n [ 2.36090454e-02 1.06969865e-01 0.00000000e+00 0.00000000e+00\n 1.34348349e-01 2.53941149e-01]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.68691394e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 1.68691394e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 1.68691394e-02 5.18541969e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 1.68691394e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 5.18541969e-03 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 2.86733880e-03 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 1.30566993e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 2.86733880e-03 1.30566993e-02 0.00000000e+00 0.00000000e+00\n 5.18541969e-03 5.28151702e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 5.18541969e-03 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 5.28151702e-03 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]]]\n\n\n [[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 8.98131923e-03\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.37882688e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 8.98131923e-03 1.37882688e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 2.86733880e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.86733880e-03\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.37882688e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 6.41843282e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 1.37882688e-02 6.41843282e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.30566993e-02]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.30566993e-02\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.68691394e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 1.68691394e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 3.96639641e-01 9.28803966e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 2.36090454e-02]\n [ 9.28803966e-02 2.90496975e-01 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.06969865e-01]\n [ 0.00000000e+00 0.00000000e+00 2.79207231e-01 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.12945510e-01\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 2.79207231e-01 1.34348349e-01]\n [ 2.36090454e-02 1.06969865e-01 0.00000000e+00 0.00000000e+00\n 1.34348349e-01 2.53941149e-01]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 1.68691394e-02 5.18541969e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.68691394e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 5.18541969e-03\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.86733880e-03\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.30566993e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 2.86733880e-03 1.30566993e-02 0.00000000e+00 0.00000000e+00\n 5.18541969e-03 5.28151702e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 5.18541969e-03\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 5.28151702e-03\n 0.00000000e+00 0.00000000e+00]]]\n\n\n [[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 8.98131923e-03 1.49253636e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 1.37882688e-02 5.61064034e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 8.98131923e-03 1.37882688e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 8.72195152e-03]\n [ 1.49253636e-03 5.61064034e-03 0.00000000e+00 0.00000000e+00\n 8.72195152e-03 1.47614365e-02]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 1.37882688e-02 2.89165611e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 6.41843282e-02 3.30528301e-02]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 1.37882688e-02 6.41843282e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 5.05803326e-02]\n [ 2.89165611e-03 3.30528301e-02 0.00000000e+00 0.00000000e+00\n 5.05803326e-02 1.04756020e-01]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 1.68691394e-02 5.18541969e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 1.68691394e-02 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 5.18541969e-03 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 1.68691394e-02 5.18541969e-03]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.68691394e-02\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 5.18541969e-03\n 0.00000000e+00 0.00000000e+00]]\n\n [[ 3.96639641e-01 9.28803966e-02 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 2.44619671e-02]\n [ 9.28803966e-02 2.90496975e-01 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 1.23834010e-01]\n [ 0.00000000e+00 0.00000000e+00 2.79207231e-01 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.79207231e-01\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 3.12945510e-01 1.63177308e-01]\n [ 2.44619671e-02 1.23834010e-01 0.00000000e+00 0.00000000e+00\n 1.63177308e-01 3.26218201e-01]]\n\n [[ 1.77730867e-01 4.23962450e-02 0.00000000e+00 0.00000000e+00\n 8.72195152e-03 1.33296474e-02]\n [ 4.23962450e-02 1.44016166e-01 0.00000000e+00 0.00000000e+00\n 5.05803326e-02 9.95709532e-02]\n [ 0.00000000e+00 0.00000000e+00 1.34348349e-01 0.00000000e+00\n 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.34348349e-01\n 0.00000000e+00 0.00000000e+00]\n [ 8.72195152e-03 5.05803326e-02 0.00000000e+00 0.00000000e+00\n 1.63177308e-01 1.41995363e-01]\n [ 1.33296474e-02 9.95709532e-02 0.00000000e+00 0.00000000e+00\n 1.41995363e-01 3.17406555e-01]]]]"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n"
},
{
"output_type": "pyout",
"prompt_number": 35,
"text": "[-3.1596039710068511,\n -7.8207331845299244,\n -7.8597189212209964,\n -7.8606098325514955,\n -7.860713927416132,\n -7.8607399825987567]"
}
],
"prompt_number": 35
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pyquante2 import molecule,h2o,basisset,rhf\nfrom pyquante2.ints.integrals import onee_integrals,twoe_integrals\nfrom pyquante2.utils import dmat,trace2,geigh\n\nbfs = basisset(h2o,'sto3g')\n\ni1 = onee_integrals(bfs,h2o)\ni2 = twoe_integrals(bfs)\nprint \"S = \\n\",i1.S\nprint \"h = \\n\",i1.T + i1.V\nprint \"I2 = \\n\",i2._2e_ints[:5]\ns = rhf(h2o,bfs)\ns.converge()",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "S = \n[[ 1.00000000e+00 2.36703937e-01 0.00000000e+00 0.00000000e+00\n -4.36556721e-18 5.58187997e-02 5.58187997e-02]\n [ 2.36703937e-01 1.00000000e+00 0.00000000e+00 0.00000000e+00\n 0.00000000e+00 4.84136727e-01 4.84136727e-01]\n [ 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00\n 0.00000000e+00 3.18050818e-01 -3.18050818e-01]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ -4.36556721e-18 0.00000000e+00 0.00000000e+00 0.00000000e+00\n 1.00000000e+00 -2.39805302e-01 -2.39805302e-01]\n [ 5.58187997e-02 4.84136727e-01 3.18050818e-01 0.00000000e+00\n -2.39805302e-01 1.00000000e+00 2.54589471e-01]\n [ 5.58187997e-02 4.84136727e-01 -3.18050818e-01 0.00000000e+00\n -2.39805302e-01 2.54589471e-01 1.00000000e+00]]\nh = \n[[ -3.27375212e+01 -7.61673524e+00 0.00000000e+00 0.00000000e+00\n 1.92565169e-02 -1.81003520e+00 -1.81003520e+00]\n [ -7.61673524e+00 -9.34981821e+00 0.00000000e+00 0.00000000e+00\n 2.25274817e-01 -3.83199371e+00 -3.83199371e+00]\n [ 0.00000000e+00 0.00000000e+00 -7.63461683e+00 0.00000000e+00\n 0.00000000e+00 -2.08478101e+00 2.08478101e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 -7.46989864e+00\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 1.92565169e-02 2.25274817e-01 0.00000000e+00 0.00000000e+00\n -7.56353965e+00 1.64579197e+00 1.64579197e+00]\n [ -1.81003520e+00 -3.83199371e+00 -2.08478101e+00 0.00000000e+00\n 1.64579197e+00 -5.13311455e+00 -1.64478037e+00]\n [ -1.81003520e+00 -3.83199371e+00 2.08478101e+00 0.00000000e+00\n 1.64579197e+00 -1.64478037e+00 -5.13311455e+00]]\nI2 = \n[[[[ 4.78506539e+00 7.41380350e-01 0.00000000e+00 ...,\n -1.09317641e-17 1.77733105e-01 1.77733105e-01]\n [ 7.41380350e-01 1.11894686e+00 0.00000000e+00 ...,\n -2.97941395e-18 4.13579000e-01 4.13579000e-01]\n [ 0.00000000e+00 0.00000000e+00 1.11581381e+00 ...,\n 0.00000000e+00 2.31295029e-01 -2.31295029e-01]\n ..., \n [ -1.09317641e-17 -2.97941395e-18 0.00000000e+00 ...,\n 1.11581381e+00 -1.74392806e-01 -1.74392806e-01]\n [ 1.77733105e-01 4.13579000e-01 2.31295029e-01 ...,\n -1.74392806e-01 5.38762938e-01 1.64766439e-01]\n [ 1.77733105e-01 4.13579000e-01 -2.31295029e-01 ...,\n -1.74392806e-01 1.64766439e-01 5.38762938e-01]]\n\n [[ 7.41380350e-01 1.36873385e-01 0.00000000e+00 ...,\n -3.29465902e-18 3.25165492e-02 3.25165492e-02]\n [ 1.36873385e-01 2.56633394e-01 0.00000000e+00 ...,\n -5.73294162e-19 9.59611007e-02 9.59611007e-02]\n [ 0.00000000e+00 0.00000000e+00 2.56683985e-01 ...,\n 0.00000000e+00 5.43844411e-02 -5.43844411e-02]\n ..., \n [ -3.29465902e-18 -5.73294162e-19 0.00000000e+00 ...,\n 2.56683985e-01 -4.10050112e-02 -4.10050112e-02]\n [ 3.25165492e-02 9.59611007e-02 5.43844411e-02 ...,\n -4.10050112e-02 1.27038426e-01 3.85534447e-02]\n [ 3.25165492e-02 9.59611007e-02 -5.43844411e-02 ...,\n -4.10050112e-02 3.85534447e-02 1.27038426e-01]]\n\n [[ 0.00000000e+00 0.00000000e+00 2.44774121e-02 ...,\n 0.00000000e+00 1.19158318e-03 -1.19158318e-03]\n [ 0.00000000e+00 0.00000000e+00 3.78086072e-02 ...,\n 0.00000000e+00 5.72000216e-03 -5.72000216e-03]\n [ 2.44774121e-02 3.78086072e-02 0.00000000e+00 ...,\n -3.36278574e-19 1.31229075e-02 1.31229075e-02]\n ..., \n [ 0.00000000e+00 0.00000000e+00 -3.36278574e-19 ...,\n 0.00000000e+00 -2.15397470e-03 2.15397470e-03]\n [ 1.19158318e-03 5.72000216e-03 1.31229075e-02 ...,\n -2.15397470e-03 1.02011735e-02 6.77626358e-21]\n [ -1.19158318e-03 -5.72000216e-03 1.31229075e-02 ...,\n 2.15397470e-03 6.77626358e-21 -1.02011735e-02]]\n\n ..., \n [[ -1.09317641e-17 -3.29465902e-18 0.00000000e+00 ...,\n 2.44774121e-02 -8.98434932e-04 -8.98434932e-04]\n [ -3.29465902e-18 -5.19621701e-18 0.00000000e+00 ...,\n 3.78086072e-02 -4.31279145e-03 -4.31279145e-03]\n [ 0.00000000e+00 0.00000000e+00 -5.22260861e-18 ...,\n 0.00000000e+00 -2.15397470e-03 2.15397470e-03]\n ..., \n [ 2.44774121e-02 3.78086072e-02 0.00000000e+00 ...,\n -5.89516576e-18 1.18901803e-02 1.18901803e-02]\n [ -8.98434932e-04 -4.31279145e-03 -2.15397470e-03 ...,\n 1.18901803e-02 -7.69152401e-03 -2.77201102e-03]\n [ -8.98434932e-04 -4.31279145e-03 2.15397470e-03 ...,\n 1.18901803e-02 -2.77201102e-03 -7.69152401e-03]]\n\n [[ 1.77733105e-01 3.25165492e-02 1.19158318e-03 ...,\n -8.98434932e-04 7.82466264e-03 7.70178443e-03]\n [ 3.25165492e-02 6.05107138e-02 2.22268203e-03 ...,\n -1.67586721e-03 2.32041931e-02 2.24675658e-02]\n [ 1.19158318e-03 2.22268203e-03 6.06194552e-02 ...,\n -1.67895211e-04 1.37576874e-02 -1.21261199e-02]\n ..., \n [ -8.98434932e-04 -1.67586721e-03 -1.67895211e-04 ...,\n 6.05233682e-02 -1.03730794e-02 -1.00494912e-02]\n [ 7.82466264e-03 2.32041931e-02 1.37576874e-02 ...,\n -1.03730794e-02 3.10267308e-02 9.22400692e-03]\n [ 7.70178443e-03 2.24675658e-02 -1.21261199e-02 ...,\n -1.00494912e-02 9.22400692e-03 2.96592475e-02]]\n\n [[ 1.77733105e-01 3.25165492e-02 -1.19158318e-03 ...,\n -8.98434932e-04 7.70178443e-03 7.82466264e-03]\n [ 3.25165492e-02 6.05107138e-02 -2.22268203e-03 ...,\n -1.67586721e-03 2.24675658e-02 2.32041931e-02]\n [ -1.19158318e-03 -2.22268203e-03 6.06194552e-02 ...,\n 1.67895211e-04 1.21261199e-02 -1.37576874e-02]\n ..., \n [ -8.98434932e-04 -1.67586721e-03 1.67895211e-04 ...,\n 6.05233682e-02 -1.00494912e-02 -1.03730794e-02]\n [ 7.70178443e-03 2.24675658e-02 1.21261199e-02 ...,\n -1.00494912e-02 2.96592475e-02 9.22400692e-03]\n [ 7.82466264e-03 2.32041931e-02 -1.37576874e-02 ...,\n -1.03730794e-02 9.22400692e-03 3.10267308e-02]]]\n\n\n [[[ 7.41380350e-01 1.36873385e-01 0.00000000e+00 ...,\n -3.29465902e-18 3.25165492e-02 3.25165492e-02]\n [ 1.36873385e-01 2.56633394e-01 0.00000000e+00 ...,\n -5.73294162e-19 9.59611007e-02 9.59611007e-02]\n [ 0.00000000e+00 0.00000000e+00 2.56683985e-01 ...,\n 0.00000000e+00 5.43844411e-02 -5.43844411e-02]\n ..., \n [ -3.29465902e-18 -5.73294162e-19 0.00000000e+00 ...,\n 2.56683985e-01 -4.10050112e-02 -4.10050112e-02]\n [ 3.25165492e-02 9.59611007e-02 5.43844411e-02 ...,\n -4.10050112e-02 1.27038426e-01 3.85534447e-02]\n [ 3.25165492e-02 9.59611007e-02 -5.43844411e-02 ...,\n -4.10050112e-02 3.85534447e-02 1.27038426e-01]]\n\n [[ 1.11894686e+00 2.56633394e-01 0.00000000e+00 ...,\n -5.19621701e-18 6.05107138e-02 6.05107138e-02]\n [ 2.56633394e-01 8.17206319e-01 0.00000000e+00 ...,\n -2.38435084e-18 3.36126862e-01 3.36126862e-01]\n [ 0.00000000e+00 0.00000000e+00 8.17022603e-01 ...,\n 0.00000000e+00 2.03480113e-01 -2.03480113e-01]\n ..., \n [ -5.19621701e-18 -2.38435084e-18 0.00000000e+00 ...,\n 8.17022603e-01 -1.53420797e-01 -1.53420797e-01]\n [ 6.05107138e-02 3.36126862e-01 2.03480113e-01 ...,\n -1.53420797e-01 5.08392632e-01 1.45628156e-01]\n [ 6.05107138e-02 3.36126862e-01 -2.03480113e-01 ...,\n -1.53420797e-01 1.45628156e-01 5.08392632e-01]]\n\n [[ 0.00000000e+00 0.00000000e+00 3.78086072e-02 ...,\n 0.00000000e+00 2.22268203e-03 -2.22268203e-03]\n [ 0.00000000e+00 0.00000000e+00 1.80518391e-01 ...,\n 0.00000000e+00 4.28953693e-02 -4.28953693e-02]\n [ 3.78086072e-02 1.80518391e-01 0.00000000e+00 ...,\n -4.78751979e-19 8.36883904e-02 8.36883904e-02]\n ..., \n [ 0.00000000e+00 0.00000000e+00 -4.78751979e-19 ...,\n 0.00000000e+00 -1.86629967e-02 1.86629967e-02]\n [ 2.22268203e-03 4.28953693e-02 8.36883904e-02 ...,\n -1.86629967e-02 1.03864238e-01 -4.33680869e-19]\n [ -2.22268203e-03 -4.28953693e-02 8.36883904e-02 ...,\n 1.86629967e-02 -4.33680869e-19 -1.03864238e-01]]\n\n ..., \n [[ -2.97941395e-18 -5.73294162e-19 0.00000000e+00 ...,\n 3.78086072e-02 -1.67586721e-03 -1.67586721e-03]\n [ -5.73294162e-19 -2.38435084e-18 0.00000000e+00 ...,\n 1.80518391e-01 -3.23424322e-02 -3.23424322e-02]\n [ 0.00000000e+00 0.00000000e+00 -1.21542565e-18 ...,\n 0.00000000e+00 -1.86629967e-02 1.86629967e-02]\n ..., \n [ 3.78086072e-02 1.80518391e-01 0.00000000e+00 ...,\n -2.17292961e-18 7.30074931e-02 7.30074931e-02]\n [ -1.67586721e-03 -3.23424322e-02 -1.86629967e-02 ...,\n 7.30074931e-02 -7.83119979e-02 -2.43052691e-02]\n [ -1.67586721e-03 -3.23424322e-02 1.86629967e-02 ...,\n 7.30074931e-02 -2.43052691e-02 -7.83119979e-02]]\n\n [[ 4.13579000e-01 9.59611007e-02 5.72000216e-03 ...,\n -4.31279145e-03 2.32041931e-02 2.24675658e-02]\n [ 9.59611007e-02 3.36126862e-01 4.28953693e-02 ...,\n -3.23424322e-02 1.68271813e-01 1.37634766e-01]\n [ 5.72000216e-03 4.28953693e-02 3.40989193e-01 ...,\n -7.84754695e-03 1.23734852e-01 -6.94473081e-02]\n ..., \n [ -4.31279145e-03 -3.23424322e-02 -7.84754695e-03 ...,\n 3.36498015e-01 -9.32941280e-02 -7.42124336e-02]\n [ 2.32041931e-02 1.68271813e-01 1.23734852e-01 ...,\n -9.32941280e-02 3.14059122e-01 7.16787171e-02]\n [ 2.24675658e-02 1.37634766e-01 -6.94473081e-02 ...,\n -7.42124336e-02 7.16787171e-02 2.12655417e-01]]\n\n [[ 4.13579000e-01 9.59611007e-02 -5.72000216e-03 ...,\n -4.31279145e-03 2.24675658e-02 2.32041931e-02]\n [ 9.59611007e-02 3.36126862e-01 -4.28953693e-02 ...,\n -3.23424322e-02 1.37634766e-01 1.68271813e-01]\n [ -5.72000216e-03 -4.28953693e-02 3.40989193e-01 ...,\n 7.84754695e-03 6.94473081e-02 -1.23734852e-01]\n ..., \n [ -4.31279145e-03 -3.23424322e-02 7.84754695e-03 ...,\n 3.36498015e-01 -7.42124336e-02 -9.32941280e-02]\n [ 2.24675658e-02 1.37634766e-01 6.94473081e-02 ...,\n -7.42124336e-02 2.12655417e-01 7.16787171e-02]\n [ 2.32041931e-02 1.68271813e-01 -1.23734852e-01 ...,\n -9.32941280e-02 7.16787171e-02 3.14059122e-01]]]\n\n\n [[[ 0.00000000e+00 0.00000000e+00 2.44774121e-02 ...,\n 0.00000000e+00 1.19158318e-03 -1.19158318e-03]\n [ 0.00000000e+00 0.00000000e+00 3.78086072e-02 ...,\n 0.00000000e+00 5.72000216e-03 -5.72000216e-03]\n [ 2.44774121e-02 3.78086072e-02 0.00000000e+00 ...,\n -3.36278574e-19 1.31229075e-02 1.31229075e-02]\n ..., \n [ 0.00000000e+00 0.00000000e+00 -3.36278574e-19 ...,\n 0.00000000e+00 -2.15397470e-03 2.15397470e-03]\n [ 1.19158318e-03 5.72000216e-03 1.31229075e-02 ...,\n -2.15397470e-03 1.02011735e-02 6.77626358e-21]\n [ -1.19158318e-03 -5.72000216e-03 1.31229075e-02 ...,\n 2.15397470e-03 6.77626358e-21 -1.02011735e-02]]\n\n [[ 0.00000000e+00 0.00000000e+00 3.78086072e-02 ...,\n 0.00000000e+00 2.22268203e-03 -2.22268203e-03]\n [ 0.00000000e+00 0.00000000e+00 1.80518391e-01 ...,\n 0.00000000e+00 4.28953693e-02 -4.28953693e-02]\n [ 3.78086072e-02 1.80518391e-01 0.00000000e+00 ...,\n -4.78751979e-19 8.36883904e-02 8.36883904e-02]\n ..., \n [ 0.00000000e+00 0.00000000e+00 -4.78751979e-19 ...,\n 0.00000000e+00 -1.86629967e-02 1.86629967e-02]\n [ 2.22268203e-03 4.28953693e-02 8.36883904e-02 ...,\n -1.86629967e-02 1.03864238e-01 -4.33680869e-19]\n [ -2.22268203e-03 -4.28953693e-02 8.36883904e-02 ...,\n 1.86629967e-02 -4.33680869e-19 -1.03864238e-01]]\n\n [[ 1.11581381e+00 2.56683985e-01 0.00000000e+00 ...,\n -5.22260861e-18 6.06194552e-02 6.06194552e-02]\n [ 2.56683985e-01 8.17022603e-01 0.00000000e+00 ...,\n -1.21542565e-18 3.40989193e-01 3.40989193e-01]\n [ 0.00000000e+00 0.00000000e+00 8.80159091e-01 ...,\n 0.00000000e+00 2.18379651e-01 -2.18379651e-01]\n ..., \n [ -5.22260861e-18 -1.21542565e-18 0.00000000e+00 ...,\n 7.85270201e-01 -1.51065162e-01 -1.51065162e-01]\n [ 6.06194552e-02 3.40989193e-01 2.18379651e-01 ...,\n -1.51065162e-01 5.26915942e-01 1.45284425e-01]\n [ 6.06194552e-02 3.40989193e-01 -2.18379651e-01 ...,\n -1.51065162e-01 1.45284425e-01 5.26915942e-01]]\n\n ..., \n [[ 0.00000000e+00 0.00000000e+00 -3.36278574e-19 ...,\n 0.00000000e+00 -1.67895211e-04 1.67895211e-04]\n [ 0.00000000e+00 0.00000000e+00 -4.78751979e-19 ...,\n 0.00000000e+00 -7.84754695e-03 7.84754695e-03]\n [ -3.36278574e-19 -4.78751979e-19 0.00000000e+00 ...,\n 4.74444448e-02 -1.14686513e-02 -1.14686513e-02]\n ..., \n [ 0.00000000e+00 0.00000000e+00 4.74444448e-02 ...,\n 0.00000000e+00 1.25358845e-02 -1.25358845e-02]\n [ -1.67895211e-04 -7.84754695e-03 -1.14686513e-02 ...,\n 1.25358845e-02 -2.95928282e-02 -1.08420217e-19]\n [ 1.67895211e-04 7.84754695e-03 -1.14686513e-02 ...,\n -1.25358845e-02 -1.08420217e-19 2.95928282e-02]]\n\n [[ 2.31295029e-01 5.43844411e-02 1.31229075e-02 ...,\n -2.15397470e-03 1.37576874e-02 1.21261199e-02]\n [ 5.43844411e-02 2.03480113e-01 8.36883904e-02 ...,\n -1.86629967e-02 1.23734852e-01 6.94473081e-02]\n [ 1.31229075e-02 8.36883904e-02 2.18379651e-01 ...,\n -1.14686513e-02 1.14555834e-01 -1.59980511e-02]\n ..., \n [ -2.15397470e-03 -1.86629967e-02 -1.14686513e-02 ...,\n 1.97681017e-01 -6.78492639e-02 -3.65604761e-02]\n [ 1.37576874e-02 1.23734852e-01 1.14555834e-01 ...,\n -6.78492639e-02 2.63890558e-01 4.53601710e-02]\n [ 1.21261199e-02 6.94473081e-02 -1.59980511e-02 ...,\n -3.65604761e-02 4.53601710e-02 9.39252241e-02]]\n\n [[ -2.31295029e-01 -5.43844411e-02 1.31229075e-02 ...,\n 2.15397470e-03 -1.21261199e-02 -1.37576874e-02]\n [ -5.43844411e-02 -2.03480113e-01 8.36883904e-02 ...,\n 1.86629967e-02 -6.94473081e-02 -1.23734852e-01]\n [ 1.31229075e-02 8.36883904e-02 -2.18379651e-01 ...,\n -1.14686513e-02 -1.59980511e-02 1.14555834e-01]\n ..., \n [ 2.15397470e-03 1.86629967e-02 -1.14686513e-02 ...,\n -1.97681017e-01 3.65604761e-02 6.78492639e-02]\n [ -1.21261199e-02 -6.94473081e-02 -1.59980511e-02 ...,\n 3.65604761e-02 -9.39252241e-02 -4.53601710e-02]\n [ -1.37576874e-02 -1.23734852e-01 1.14555834e-01 ...,\n 6.78492639e-02 -4.53601710e-02 -2.63890558e-01]]]\n\n\n [[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n ..., \n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n ..., \n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n ..., \n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]]\n\n ..., \n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n ..., \n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n ..., \n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]]\n\n [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n ..., \n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ...,\n 0.00000000e+00 0.00000000e+00 0.00000000e+00]]]\n\n\n [[[ -1.09317641e-17 -3.29465902e-18 0.00000000e+00 ...,\n 2.44774121e-02 -8.98434932e-04 -8.98434932e-04]\n [ -3.29465902e-18 -5.19621701e-18 0.00000000e+00 ...,\n 3.78086072e-02 -4.31279145e-03 -4.31279145e-03]\n [ 0.00000000e+00 0.00000000e+00 -5.22260861e-18 ...,\n 0.00000000e+00 -2.15397470e-03 2.15397470e-03]\n ..., \n [ 2.44774121e-02 3.78086072e-02 0.00000000e+00 ...,\n -5.89516576e-18 1.18901803e-02 1.18901803e-02]\n [ -8.98434932e-04 -4.31279145e-03 -2.15397470e-03 ...,\n 1.18901803e-02 -7.69152401e-03 -2.77201102e-03]\n [ -8.98434932e-04 -4.31279145e-03 2.15397470e-03 ...,\n 1.18901803e-02 -2.77201102e-03 -7.69152401e-03]]\n\n [[ -2.97941395e-18 -5.73294162e-19 0.00000000e+00 ...,\n 3.78086072e-02 -1.67586721e-03 -1.67586721e-03]\n [ -5.73294162e-19 -2.38435084e-18 0.00000000e+00 ...,\n 1.80518391e-01 -3.23424322e-02 -3.23424322e-02]\n [ 0.00000000e+00 0.00000000e+00 -1.21542565e-18 ...,\n 0.00000000e+00 -1.86629967e-02 1.86629967e-02]\n ..., \n [ 3.78086072e-02 1.80518391e-01 0.00000000e+00 ...,\n -2.17292961e-18 7.30074931e-02 7.30074931e-02]\n [ -1.67586721e-03 -3.23424322e-02 -1.86629967e-02 ...,\n 7.30074931e-02 -7.83119979e-02 -2.43052691e-02]\n [ -1.67586721e-03 -3.23424322e-02 1.86629967e-02 ...,\n 7.30074931e-02 -2.43052691e-02 -7.83119979e-02]]\n\n [[ 0.00000000e+00 0.00000000e+00 -3.36278574e-19 ...,\n 0.00000000e+00 -1.67895211e-04 1.67895211e-04]\n [ 0.00000000e+00 0.00000000e+00 -4.78751979e-19 ...,\n 0.00000000e+00 -7.84754695e-03 7.84754695e-03]\n [ -3.36278574e-19 -4.78751979e-19 0.00000000e+00 ...,\n 4.74444448e-02 -1.14686513e-02 -1.14686513e-02]\n ..., \n [ 0.00000000e+00 0.00000000e+00 4.74444448e-02 ...,\n 0.00000000e+00 1.25358845e-02 -1.25358845e-02]\n [ -1.67895211e-04 -7.84754695e-03 -1.14686513e-02 ...,\n 1.25358845e-02 -2.95928282e-02 -1.08420217e-19]\n [ 1.67895211e-04 7.84754695e-03 -1.14686513e-02 ...,\n -1.25358845e-02 -1.08420217e-19 2.95928282e-02]]\n\n ..., \n [[ 1.11581381e+00 2.56683985e-01 0.00000000e+00 ...,\n -5.89516576e-18 6.05233682e-02 6.05233682e-02]\n [ 2.56683985e-01 8.17022603e-01 0.00000000e+00 ...,\n -2.17292961e-18 3.36498015e-01 3.36498015e-01]\n [ 0.00000000e+00 0.00000000e+00 7.85270201e-01 ...,\n 0.00000000e+00 1.97681017e-01 -1.97681017e-01]\n ..., \n [ -5.89516576e-18 -2.17292961e-18 0.00000000e+00 ...,\n 8.80159091e-01 -1.62638022e-01 -1.62638022e-01]\n [ 6.05233682e-02 3.36498015e-01 1.97681017e-01 ...,\n -1.62638022e-01 5.09979865e-01 1.49079118e-01]\n [ 6.05233682e-02 3.36498015e-01 -1.97681017e-01 ...,\n -1.62638022e-01 1.49079118e-01 5.09979865e-01]]\n\n [[ -1.74392806e-01 -4.10050112e-02 -2.15397470e-03 ...,\n 1.18901803e-02 -1.03730794e-02 -1.00494912e-02]\n [ -4.10050112e-02 -1.53420797e-01 -1.86629967e-02 ...,\n 7.30074931e-02 -9.32941280e-02 -7.42124336e-02]\n [ -2.15397470e-03 -1.86629967e-02 -1.51065162e-01 ...,\n 1.25358845e-02 -6.78492639e-02 3.65604761e-02]\n ..., \n [ 1.18901803e-02 7.30074931e-02 1.25358845e-02 ...,\n -1.62638022e-01 7.57254664e-02 5.88677920e-02]\n [ -1.03730794e-02 -9.32941280e-02 -6.78492639e-02 ...,\n 7.57254664e-02 -1.98969320e-01 -4.46735990e-02]\n [ -1.00494912e-02 -7.42124336e-02 3.65604761e-02 ...,\n 5.88677920e-02 -4.46735990e-02 -1.25906109e-01]]\n\n [[ -1.74392806e-01 -4.10050112e-02 2.15397470e-03 ...,\n 1.18901803e-02 -1.00494912e-02 -1.03730794e-02]\n [ -4.10050112e-02 -1.53420797e-01 1.86629967e-02 ...,\n 7.30074931e-02 -7.42124336e-02 -9.32941280e-02]\n [ 2.15397470e-03 1.86629967e-02 -1.51065162e-01 ...,\n -1.25358845e-02 -3.65604761e-02 6.78492639e-02]\n ..., \n [ 1.18901803e-02 7.30074931e-02 -1.25358845e-02 ...,\n -1.62638022e-01 5.88677920e-02 7.57254664e-02]\n [ -1.00494912e-02 -7.42124336e-02 -3.65604761e-02 ...,\n 5.88677920e-02 -1.25906109e-01 -4.46735990e-02]\n [ -1.03730794e-02 -9.32941280e-02 6.78492639e-02 ...,\n 7.57254664e-02 -4.46735990e-02 -1.98969320e-01]]]]"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n"
},
{
"output_type": "pyout",
"prompt_number": 36,
"text": "[-65.138374025697487,\n -74.467494698388464,\n -74.958013783771676,\n -74.959757388633875,\n -74.959839790498989,\n -74.959853191419228]"
}
],
"prompt_number": 36
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pyquante2 import h2o,basisset,rhf\nfrom pyquante2.utils import dmat\nfrom pyquante2.ints.integrals import twoe_integrals,twoe_integrals_compressed\nbfs = basisset(h2o,'sto3g')\nsolver = rhf(h2o,bfs)\nsolver.converge()\nD = dmat(solver.orbs,h2o.nocc())\ni2 = twoe_integrals(bfs)\ni2c = twoe_integrals_compressed(bfs)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 37
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit twoe_integrals(bfs)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "10 loops, best of 3: 193 ms per loop\n"
}
],
"prompt_number": 38
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit twoe_integrals_compressed(bfs)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "10 loops, best of 3: 182 ms per loop\n"
}
],
"prompt_number": 39
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit i2.get_j(D)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "100000 loops, best of 3: 10.1 us per loop\n"
}
],
"prompt_number": 40
},
{
"cell_type": "code",
"collapsed": false,
"input": "%timeit i2c.get_j(D)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "100 loops, best of 3: 4.86 ms per loop\n"
}
],
"prompt_number": 41
},
{
"cell_type": "code",
"collapsed": false,
"input": "(i2.get_j(D)-i2c.get_j(D)).max()",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 42,
"text": "2.2204460492503131e-16"
}
],
"prompt_number": 42
},
{
"cell_type": "markdown",
"metadata": {},
"source": "There are several significant results here:\n\n* The uncompressed integrals don't take any longer\n* The get_j() function is much faster.\n* The uncompressed ones are now"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from pyquante2 import h2o,basisset,rhf\nfrom pyquante2.utils import dmat\nfrom pyquante2.ints.integrals import twoe_integrals,twoe_integrals_compressed\nbfs = basisset(h2o,'6-31g**')\nsolver = rhf(h2o,bfs)\nsolver.converge()\nD = dmat(solver.orbs,h2o.nocc())\ni2 = twoe_integrals(bfs)\ni2c = twoe_integrals_compressed(bfs)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 43
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 44
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment