{ "cells": [ { "cell_type": "markdown", "id": "f389f465-1007-443d-873b-d27bfa74cbc7", "metadata": {}, "source": [ "# POD vector space tutorial\n", "\n", "In this tutorial you will learn:\n", "- How to construct a vector space using proper orthogonal decomposition\n", "- How to use a truncater" ] }, { "cell_type": "code", "execution_count": 2, "id": "358fb709-9c81-45a3-a871-2549de121580", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "module 'mpi4py' is not installed\n" ] } ], "source": [ "#First, let's import the relavant modules:\n", "import romtools\n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from romtools import vector_space" ] }, { "cell_type": "code", "execution_count": 3, "id": "b1ffa4be-246c-44a9-b486-f517b9f7acb9", "metadata": {}, "outputs": [], "source": [ "#Now, we will load in snapshots from a FOM. Here, we use pre-computed snapshots of the 1D Euler equations obtained using pressio-demo-apps\n", "snapshots = np.load('snapshots.npz')['snapshots']\n", "\n", "## The snapshots are in tensor form:\n", "n_vars, nx, nt = snapshots.shape\n", "## Note that romtools works with tensor forms (https://pressio.github.io/rom-tools-and-workflows/romtools/vector_space.html)" ] }, { "cell_type": "code", "execution_count": 4, "id": "217759fb-6ec9-4488-897b-e5b4db9f4b2c", "metadata": {}, "outputs": [], "source": [ "#Now, let's make a basis using POD that uses the first vector as an affine offset\n", "#First, let's create a \"shifter\" that is responsible for shifting snapshots\n", "#(https://pressio.github.io/rom-tools-and-workflows/romtools/vector_space/utils/shifter.html)\n", "my_shifter = vector_space.utils.create_firstvec_shifter(snapshots)\n", "\n", "#Now, let's create a truncater that controls for how we want to truncate our basis.\n", "#(https://pressio.github.io/rom-tools-and-workflows/romtools/vector_space/utils/truncater.html)\n", "#Let's use an energy-based criterion\n", "my_truncater = vector_space.utils.EnergyBasedTruncater(0.999)" ] }, { "cell_type": "code", "execution_count": 5, "id": "8dddecd2-01f7-4b7c-955e-456a1974fefb", "metadata": {}, "outputs": [ { "data": { "image/png": "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QwD8fEhnk6upX1qHScS7KTCJSL35cO0+HAbc1C2Ubu2CzS6nXqiHSURAgUlE6smZcjuL1ucC8HBc0+ld0hwmEQEFJhGpJ8syD3L8VDkdWwVxW+8ws8upN+phEhFQYBKRemAYBu9WLSVwQ2d8fZrGUgJw/jpMSkwi3kyBSUSu2je7j5CVV0yQvy9jr/fslb0v5BySU14S8WoKTCJy1d5atQeAsddH0rKZ5943rjbOITlzyxARkykwichV2ZlfwtffH8bHAo/eGGV2OfWuakROK32LeDcFJhG5Km+f7V0a0TecTm2amVxN/VMPk4iAApOIXIWC4jP8M/MAABPio02upqE0nQnsInLlFJhE5Iq9t2Yv5XaD67u0YkCnVmaX06A0Iifi3RSYROSKnCyt4KO1+wB4vMn2Lp2/DpMSk4g387vcHbKzs0lLS8NqtTJw4EB69uzZEHWJiJtbuD6X4jMVRIU25/YmtFDlhZyTvk2tQkTMdlmBadasWTz99NO0aNECPz8/jh07RkxMDO+88w79+/dvqBpFxM2UVth56+sfgMq5S01pocoLWTTrW0S4zCG53//+90ydOpVjx45x5MgRfvjhB+Lj4xkyZAirV69uqBpFxM38Y+N+DhWX0t4WyJiYDmaX06DUwyQicJk9TCdOnGD8+PH4+FTmrKioKF5//XVat27N008/zbp16xqkSBFxH+V2B3NXVvYu/fLmaKx+viZX1LA0h0lE4DJ7mPr160d6enqN7WPHjmXLli31VpQrc+bMISoqisDAQGJiYli1atUl26elpRETE0NgYCDR0dHMmzev2vPbt29nzJgxdOnSBYvFwqxZsxqwehHP9mnGAfYfO01oiwDuG9TJ7HIanPPWKCbXISLmuqzA9Ic//IGnn36aRYsWVftrKz09ne7du9d7cbVZtGgRkydPZvr06WRkZBAfH8/IkSPJycmptX12djajRo0iPj6ejIwMpk2bxqRJk1i8eLGzzalTp4iOjuall14iPDy8UY5DxBPZHQZzVp6buxTo37R7l+D8HiZz6xARc1mMy+xnTklJITExkTNnztC/f3/KysrYvn07H330ESNGjGioOp0GDx7MwIEDmTt3rnNb7969GT16NMnJyTXaP/fccyxbtoysrCzntsTERDZv3lxrb1mXLl2YPHkykydPvqy6iouLsdlsFBUVERIScln7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gMjISJMrERERkctVUlKCzWa76PMWw1WkkjpxOBwcPHiQ4OBgLBZLvb1ucXExkZGR5ObmEhISUm+vKzXpXDcOnefGo3PdOHSeG0dDnWfDMCgpKSEiIgIfn4vPVFIPUz3x8fGhY8eODfb6ISEh+ofYSHSuG4fOc+PRuW4cOs+NoyHO86V6lqpo0reIiIiICwpMIiIiIi4oMLk5q9XK888/j9VqNbuUJk/nunHoPDcenevGofPcOMw+z5r0LSIiIuKCephEREREXFBgEhEREXFBgUlERETEBQUmERERERcUmNzcnDlziIqKIjAwkJiYGFatWmV2SR7l66+/5kc/+hERERFYLBY+/fTTas8bhsGMGTOIiIggKCiIYcOGsX379mptSktLefLJJwkNDaV58+bcfffd7N+/vxGPwv0lJydz/fXXExwcTLt27Rg9ejQ7d+6s1kbn+urNnTuXfv36ORfui4uL47///a/zeZ3jhpGcnIzFYmHy5MnObTrX9WPGjBlYLJZqj/DwcOfzbnWeDXFbCxcuNPz9/Y23337b+O6774ynnnrKaN68ubFv3z6zS/MYKSkpxvTp043FixcbgLF06dJqz7/00ktGcHCwsXjxYmPr1q3G2LFjjfbt2xvFxcXONomJiUaHDh2M1NRUY9OmTcYtt9xi9O/f36ioqGjko3Ffw4cPN959911j27ZtRmZmpnHnnXcanTp1Mk6cOOFso3N99ZYtW2b85z//MXbu3Gns3LnTmDZtmuHv729s27bNMAyd44bw7bffGl26dDH69etnPPXUU87tOtf14/nnnzeuueYaIy8vz/koKChwPu9O51mByY0NGjTISExMrLatV69exq9//WuTKvJsFwYmh8NhhIeHGy+99JJz25kzZwybzWbMmzfPMAzDOH78uOHv728sXLjQ2ebAgQOGj4+PsXz58kar3dMUFBQYgJGWlmYYhs51Q2rVqpXxzjvv6Bw3gJKSEqN79+5GamqqMXToUGdg0rmuP88//7zRv3//Wp9zt/OsITk3VVZWxsaNG0lISKi2PSEhgTVr1phUVdOSnZ1Nfn5+tXNstVoZOnSo8xxv3LiR8vLyam0iIiLo27ev/jtcQlFREQCtW7cGdK4bgt1uZ+HChZw8eZK4uDid4wbwP//zP9x5553cfvvt1bbrXNevXbt2ERERQVRUFPfddx979uwB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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Now, let's construct an affine vector space using POD with our shifter and truncater\n", "#Note we don't use the first snapshot in the vector space since this is the affine offset\n", "my_affine_vector_space = vector_space.VectorSpaceFromPOD(snapshots[...,1::],truncater=my_truncater,shifter=my_shifter)\n", "\n", "##It's important to note that we do not do a deep copy of the snapshot matrix for performance reasons.\n", "##Once you pass us the snapshot tensor, we will modify the data in place. \n", "\n", "#We can view the basis and shift vector:\n", "basis = my_affine_vector_space.get_basis()\n", "shift_vector = my_affine_vector_space.get_shift_vector()\n", "\n", "#We can look at the density compoenent of the first basis:\n", "plt.plot(basis[0,:,0])\n", "plt.xlabel(r'Index')\n", "plt.ylabel(r'$\\rho$')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 9, "id": "8d254c75-a66f-4168-9815-8674e11ec572", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The dimension of the vector space is (3, 500, 30)\n", "The number of basis vectors in my vector space is 30\n" ] } ], "source": [ "# We can check the dimension of the vector space\n", "print(\"The dimension of the vector space is \" , my_affine_vector_space.extents())\n", "print(\"The number of basis vectors in my vector space is \" , my_affine_vector_space.extents()[-1])" ] }, { "cell_type": "code", "execution_count": 19, "id": "90e36c9f-9587-479c-b943-a4857d30129d", "metadata": {}, "outputs": [], "source": [ "# We can also check that the basis is orthonormal:\n", "is_identity = np.einsum('ijk,ijl->kl',basis,basis)\n", "assert(np.allclose(is_identity,np.eye(30)))" ] }, { "cell_type": "code", "execution_count": 14, "id": "49e73a93-0b90-4fe5-89d2-766f4b185558", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.00000000e+00 -6.49820039e-17 -2.87199184e-17 6.85538238e-17\n", " 1.08505275e-16 1.95069006e-17 1.68902496e-16 1.19809607e-18\n", " -8.49965602e-17 -1.35652747e-16 7.06651399e-17 -3.11734825e-17\n", " -1.28614626e-16 -4.65911308e-17 6.15458372e-17 1.06960322e-16\n", " 3.94451646e-17 -4.07487376e-17 4.91822635e-18 5.29379883e-17\n", " -1.58658207e-17 -2.28207207e-17 -1.05508567e-17 6.66130411e-17\n", " -4.16235026e-17 5.99126604e-17 -5.90871055e-17 1.84652423e-18\n", " 2.36684114e-17 -6.72750163e-17]\n", " [-6.49820039e-17 1.00000000e+00 -5.60866181e-16 -9.59260028e-17\n", " -1.52515404e-16 -1.12770029e-16 2.03827269e-16 4.31244801e-17\n", " -7.77906188e-17 9.91707660e-19 -1.68957895e-17 1.17843770e-17\n", " -1.28907043e-16 2.66338191e-16 5.32013518e-17 -2.92028597e-17\n", " -6.01981907e-18 1.07763556e-16 -5.05359143e-17 1.07416362e-16\n", " -7.01634619e-17 4.83689401e-17 -1.57560013e-17 3.53855266e-17\n", " 7.36274177e-18 -7.61831655e-17 -8.34256387e-18 -9.50992319e-17\n", " 4.92787895e-17 6.90814993e-17]\n", " [-2.87199184e-17 -5.60866181e-16 1.00000000e+00 3.12153553e-16\n", " 2.38437793e-16 1.75185259e-16 1.41380845e-16 9.65095966e-17\n", " 2.12981149e-17 -1.31336716e-17 1.37309817e-16 -8.14204193e-18\n", " -4.32809598e-17 5.01124155e-17 -6.18353990e-17 6.26843757e-17\n", " 2.84762225e-17 1.09257594e-16 8.50495706e-19 -4.82081525e-17\n", " -2.99425239e-17 1.69774035e-17 -6.42977957e-17 -7.96510519e-19\n", " -8.51483506e-17 1.16358687e-17 5.77928984e-17 2.25097637e-17\n", " -3.38199039e-17 5.55285278e-17]\n", " [ 6.85538238e-17 -9.59260028e-17 3.12153553e-16 1.00000000e+00\n", " 3.76551490e-16 3.22623479e-16 -3.91471649e-16 -5.08338083e-16\n", " -2.86603703e-17 -1.12088223e-16 -5.55446571e-18 -4.72058346e-17\n", " 1.41572074e-17 -4.37972412e-17 2.85348992e-17 1.33157047e-16\n", " -1.25024681e-18 -5.46098234e-19 5.91169042e-17 -7.50061001e-17\n", " 2.03321409e-17 6.29981432e-17 1.12883213e-17 5.97935302e-17\n", " -3.45281200e-17 5.62287832e-17 -1.19783965e-16 -1.31102849e-17\n", " -1.07490123e-16 4.47573548e-17]\n", " [ 1.08505275e-16 -1.52515404e-16 2.38437793e-16 3.76551490e-16\n", " 1.00000000e+00 -7.16788111e-16 -1.12691893e-16 -1.17559468e-16\n", " 3.69604347e-16 -1.88067889e-16 8.41623962e-17 -1.19587229e-16\n", " 1.95530449e-17 -5.91289447e-17 -6.01694393e-17 -1.49602833e-16\n", " -1.66388312e-17 -7.26454148e-18 4.32948510e-17 1.50792282e-16\n", " -3.72583753e-17 -3.89854497e-17 -2.34579984e-17 5.00791229e-17\n", " -6.20596033e-17 -5.40568083e-17 -7.44193443e-17 1.09558031e-17\n", " -1.83238059e-18 6.00995574e-17]\n", " [ 1.95069006e-17 -1.12770029e-16 1.75185259e-16 3.22623479e-16\n", " -7.16788111e-16 1.00000000e+00 8.22539593e-16 6.81098733e-16\n", " -3.53749414e-16 -1.04701116e-17 1.86764865e-16 -2.08550916e-16\n", " -3.17966185e-17 -1.95879451e-16 8.89451551e-17 -1.82796054e-16\n", " 1.60067190e-16 1.33267955e-16 -3.44303640e-17 -1.38787910e-16\n", " 8.01480482e-17 -2.89062142e-18 3.53497865e-17 -4.27440182e-17\n", " -4.89459690e-18 4.60800300e-17 2.09981932e-17 4.03188872e-17\n", " -6.74914318e-17 -6.49837567e-17]\n", " [ 1.68902496e-16 2.03827269e-16 1.41380845e-16 -3.91471649e-16\n", " -1.12691893e-16 8.22539593e-16 1.00000000e+00 -7.85957904e-17\n", " 3.17533825e-16 -1.48202442e-16 2.48351691e-16 -3.12915771e-16\n", " 2.61185959e-16 -2.39137655e-16 1.84663454e-16 -2.25707158e-17\n", " 5.97650274e-17 -1.08305408e-16 -8.12566941e-17 7.03109223e-17\n", " 5.01090812e-17 6.78064516e-17 7.67402073e-18 3.70396583e-17\n", " 8.20391087e-17 -3.36014394e-17 1.12766935e-18 1.46003396e-17\n", " -7.79577224e-18 8.44365332e-18]\n", " [ 1.19809607e-18 4.31244801e-17 9.65095966e-17 -5.08338083e-16\n", " -1.17559468e-16 6.81098733e-16 -7.85957904e-17 1.00000000e+00\n", " -1.79471102e-17 -5.46813724e-17 5.29677550e-17 2.76049816e-16\n", " -2.08642834e-16 -1.34340851e-16 1.81416567e-16 -1.97394068e-16\n", " 1.61988586e-16 -6.55551694e-18 7.57529982e-18 8.48231756e-17\n", " 9.32448271e-18 6.63623052e-17 -7.07959436e-17 8.58564728e-17\n", " -1.87017310e-17 -1.16019091e-16 1.21465382e-16 -8.69284804e-17\n", " 1.20964804e-17 8.42671920e-17]\n", " [-8.49965602e-17 -7.77906188e-17 2.12981149e-17 -2.86603703e-17\n", " 3.69604347e-16 -3.53749414e-16 3.17533825e-16 -1.79471102e-17\n", " 1.00000000e+00 5.44789000e-16 2.81443049e-16 -2.17454621e-16\n", " 2.20802390e-16 1.60261644e-16 -2.21049167e-16 3.49779089e-16\n", " -4.46960741e-16 2.11250650e-16 2.79435218e-16 -6.91210190e-17\n", " -1.14833824e-16 -2.86635471e-17 3.71518763e-17 -1.81057734e-16\n", " 3.77326817e-17 -7.31353157e-17 1.18723140e-16 -1.00635056e-16\n", " 6.80565367e-17 -1.79227308e-16]\n", " [-1.35652747e-16 9.91707660e-19 -1.31336716e-17 -1.12088223e-16\n", " -1.88067889e-16 -1.04701116e-17 -1.48202442e-16 -5.46813724e-17\n", " 5.44789000e-16 1.00000000e+00 2.59539171e-16 -3.46363216e-16\n", " 4.02922953e-16 -2.47479882e-17 2.00645476e-16 -1.63754548e-16\n", " -1.20525919e-16 1.56332407e-16 1.31322952e-16 -1.69685551e-16\n", " -1.31515043e-16 -9.88278646e-17 8.30081826e-17 -6.33407824e-17\n", " 3.77562337e-18 1.10046502e-16 4.20114680e-17 1.28560571e-17\n", " -7.84770011e-19 -1.39568468e-16]\n", " [ 7.06651399e-17 -1.68957895e-17 1.37309817e-16 -5.55446571e-18\n", " 8.41623962e-17 1.86764865e-16 2.48351691e-16 5.29677550e-17\n", " 2.81443049e-16 2.59539171e-16 1.00000000e+00 -1.67089888e-17\n", " -2.11149376e-16 -1.71792768e-16 1.16012897e-16 -4.03080280e-18\n", " 1.65557978e-16 -7.42255168e-17 8.57001611e-17 3.92108677e-17\n", " -3.71664219e-17 5.78091368e-17 -3.08296614e-17 8.50855501e-17\n", " -1.50260501e-16 1.33325372e-16 -6.01787049e-17 2.18461189e-17\n", " -3.21872702e-17 -1.14507011e-16]\n", " [-3.11734825e-17 1.17843770e-17 -8.14204193e-18 -4.72058346e-17\n", " -1.19587229e-16 -2.08550916e-16 -3.12915771e-16 2.76049816e-16\n", " -2.17454621e-16 -3.46363216e-16 -1.67089888e-17 1.00000000e+00\n", " -1.18877773e-15 -2.09194071e-16 2.00590602e-16 -1.15920919e-16\n", " -2.07143867e-17 -8.64258174e-17 9.62832404e-17 -1.66792024e-16\n", " -8.06975691e-17 6.84071960e-18 -2.94443057e-18 5.92131694e-17\n", " -1.47651509e-16 2.83036818e-16 -2.08199267e-16 8.38017325e-17\n", " -1.09342092e-16 -2.22079240e-17]\n", " [-1.28614626e-16 -1.28907043e-16 -4.32809598e-17 1.41572074e-17\n", " 1.95530449e-17 -3.17966185e-17 2.61185959e-16 -2.08642834e-16\n", " 2.20802390e-16 4.02922953e-16 -2.11149376e-16 -1.18877773e-15\n", " 1.00000000e+00 -7.13073758e-16 4.55452499e-16 2.24927541e-16\n", " -5.92282721e-17 -1.19140593e-16 -4.85266049e-17 2.64723247e-17\n", " 1.86115988e-17 8.24372107e-17 -6.08340044e-17 -1.67563604e-17\n", " 6.73499206e-17 -4.99943575e-17 1.04899112e-16 -1.09012042e-16\n", " 4.32115340e-17 -8.29656363e-17]\n", " [-4.65911308e-17 2.66338191e-16 5.01124155e-17 -4.37972412e-17\n", " -5.91289447e-17 -1.95879451e-16 -2.39137655e-16 -1.34340851e-16\n", " 1.60261644e-16 -2.47479882e-17 -1.71792768e-16 -2.09194071e-16\n", " -7.13073758e-16 1.00000000e+00 -8.98130512e-17 4.73849749e-16\n", " -9.08763116e-17 -2.44671277e-16 -2.49038024e-16 1.23754840e-16\n", " -7.06544897e-17 1.30807234e-16 -5.63398006e-17 3.30553307e-17\n", " -7.30909629e-17 -6.68234103e-17 -1.36591650e-16 -2.09484752e-18\n", " -4.11049840e-17 1.11523692e-18]\n", " [ 6.15458372e-17 5.32013518e-17 -6.18353990e-17 2.85348992e-17\n", " -6.01694393e-17 8.89451551e-17 1.84663454e-16 1.81416567e-16\n", " -2.21049167e-16 2.00645476e-16 1.16012897e-16 2.00590602e-16\n", " 4.55452499e-16 -8.98130512e-17 1.00000000e+00 3.14121260e-16\n", " 1.02740081e-16 -3.34298000e-16 -5.78650380e-16 6.08390481e-16\n", " 4.35491317e-16 -3.22351142e-16 1.21687790e-16 -1.40496489e-17\n", " 4.44348164e-17 3.02364689e-17 -3.75316743e-17 -4.81000178e-17\n", " 8.71588943e-17 3.52281432e-18]\n", " [ 1.06960322e-16 -2.92028597e-17 6.26843757e-17 1.33157047e-16\n", " -1.49602833e-16 -1.82796054e-16 -2.25707158e-17 -1.97394068e-16\n", " 3.49779089e-16 -1.63754548e-16 -4.03080280e-18 -1.15920919e-16\n", " 2.24927541e-16 4.73849749e-16 3.14121260e-16 1.00000000e+00\n", " 2.71428547e-16 1.94585472e-16 2.48918560e-16 -2.97112123e-17\n", " -1.83021963e-16 2.93225660e-16 -4.13985119e-16 2.28123755e-16\n", " -1.52250150e-17 -4.29031958e-17 4.22101592e-17 -7.61705369e-17\n", " 4.59737515e-17 2.86233394e-17]\n", " [ 3.94451646e-17 -6.01981907e-18 2.84762225e-17 -1.25024681e-18\n", " -1.66388312e-17 1.60067190e-16 5.97650274e-17 1.61988586e-16\n", " -4.46960741e-16 -1.20525919e-16 1.65557978e-16 -2.07143867e-17\n", " -5.92282721e-17 -9.08763116e-17 1.02740081e-16 2.71428547e-16\n", " 1.00000000e+00 -2.69140676e-16 2.43478233e-16 -2.66265971e-17\n", " 1.42109011e-16 1.78048256e-17 -3.80415777e-16 1.06097048e-17\n", " -1.52084410e-16 -7.32270237e-17 9.79740503e-17 -2.14982454e-17\n", " -1.23744207e-16 4.87010844e-17]\n", " [-4.07487376e-17 1.07763556e-16 1.09257594e-16 -5.46098234e-19\n", " -7.26454148e-18 1.33267955e-16 -1.08305408e-16 -6.55551694e-18\n", " 2.11250650e-16 1.56332407e-16 -7.42255168e-17 -8.64258174e-17\n", " -1.19140593e-16 -2.44671277e-16 -3.34298000e-16 1.94585472e-16\n", " -2.69140676e-16 1.00000000e+00 7.88423554e-16 -4.01156018e-17\n", " 1.06018358e-16 2.74032997e-16 -5.01775543e-16 -1.17662002e-16\n", " 4.16147330e-17 -1.05958836e-16 2.16197269e-16 9.01247499e-17\n", " -1.38358826e-16 1.10142019e-16]\n", " [ 4.91822635e-18 -5.05359143e-17 8.50495706e-19 5.91169042e-17\n", " 4.32948510e-17 -3.44303640e-17 -8.12566941e-17 7.57529982e-18\n", " 2.79435218e-16 1.31322952e-16 8.57001611e-17 9.62832404e-17\n", " -4.85266049e-17 -2.49038024e-16 -5.78650380e-16 2.48918560e-16\n", " 2.43478233e-16 7.88423554e-16 1.00000000e+00 -2.82154004e-16\n", " -7.16723276e-16 -1.10817709e-17 3.72699033e-17 3.53799615e-16\n", " -4.41925014e-16 2.84961775e-16 1.63320358e-16 -2.08425675e-16\n", " 4.45248166e-17 3.61910482e-17]\n", " [ 5.29379883e-17 1.07416362e-16 -4.82081525e-17 -7.50061001e-17\n", " 1.50792282e-16 -1.38787910e-16 7.03109223e-17 8.48231756e-17\n", " -6.91210190e-17 -1.69685551e-16 3.92108677e-17 -1.66792024e-16\n", " 2.64723247e-17 1.23754840e-16 6.08390481e-16 -2.97112123e-17\n", " -2.66265971e-17 -4.01156018e-17 -2.82154004e-16 1.00000000e+00\n", " -3.30193295e-16 -1.08917685e-16 3.38072575e-16 -2.48278876e-16\n", " -1.61530317e-16 1.51435729e-17 3.56301533e-16 -2.53888024e-16\n", " 2.95018332e-16 -7.72308606e-17]\n", " [-1.58658207e-17 -7.01634619e-17 -2.99425239e-17 2.03321409e-17\n", " -3.72583753e-17 8.01480482e-17 5.01090812e-17 9.32448271e-18\n", " -1.14833824e-16 -1.31515043e-16 -3.71664219e-17 -8.06975691e-17\n", " 1.86115988e-17 -7.06544897e-17 4.35491317e-16 -1.83021963e-16\n", " 1.42109011e-16 1.06018358e-16 -7.16723276e-16 -3.30193295e-16\n", " 1.00000000e+00 6.55103429e-17 -9.14689882e-16 2.91678366e-16\n", " 4.70855909e-16 -5.97066915e-16 4.80403219e-16 5.37840738e-17\n", " -3.46542235e-16 2.29180087e-16]\n", " [-2.28207207e-17 4.83689401e-17 1.69774035e-17 6.29981432e-17\n", " -3.89854497e-17 -2.89062142e-18 6.78064516e-17 6.63623052e-17\n", " -2.86635471e-17 -9.88278646e-17 5.78091368e-17 6.84071960e-18\n", " 8.24372107e-17 1.30807234e-16 -3.22351142e-16 2.93225660e-16\n", " 1.78048256e-17 2.74032997e-16 -1.10817709e-17 -1.08917685e-16\n", " 6.55103429e-17 1.00000000e+00 6.26901669e-16 2.08838296e-16\n", " 6.31413899e-17 6.00600077e-17 -2.95066728e-16 5.43859982e-17\n", " -3.19628955e-16 2.54945108e-16]\n", " [-1.05508567e-17 -1.57560013e-17 -6.42977957e-17 1.12883213e-17\n", " -2.34579984e-17 3.53497865e-17 7.67402073e-18 -7.07959436e-17\n", " 3.71518763e-17 8.30081826e-17 -3.08296614e-17 -2.94443057e-18\n", " -6.08340044e-17 -5.63398006e-17 1.21687790e-16 -4.13985119e-16\n", " -3.80415777e-16 -5.01775543e-16 3.72699033e-17 3.38072575e-16\n", " -9.14689882e-16 6.26901669e-16 1.00000000e+00 1.01907368e-15\n", " -4.09098081e-16 3.82940650e-16 -4.22666508e-16 -4.29605905e-16\n", " 2.03297111e-16 -2.37361210e-16]\n", " [ 6.66130411e-17 3.53855266e-17 -7.96510519e-19 5.97935302e-17\n", " 5.00791229e-17 -4.27440182e-17 3.70396583e-17 8.58564728e-17\n", " -1.81057734e-16 -6.33407824e-17 8.50855501e-17 5.92131694e-17\n", " -1.67563604e-17 3.30553307e-17 -1.40496489e-17 2.28123755e-16\n", " 1.06097048e-17 -1.17662002e-16 3.53799615e-16 -2.48278876e-16\n", " 2.91678366e-16 2.08838296e-16 1.01907368e-15 1.00000000e+00\n", " 6.22616103e-16 -4.13221101e-16 7.67061098e-16 -2.98589557e-16\n", " -1.09496720e-16 1.74059481e-16]\n", " [-4.16235026e-17 7.36274177e-18 -8.51483506e-17 -3.45281200e-17\n", " -6.20596033e-17 -4.89459690e-18 8.20391087e-17 -1.87017310e-17\n", " 3.77326817e-17 3.77562337e-18 -1.50260501e-16 -1.47651509e-16\n", " 6.73499206e-17 -7.30909629e-17 4.44348164e-17 -1.52250150e-17\n", " -1.52084410e-16 4.16147330e-17 -4.41925014e-16 -1.61530317e-16\n", " 4.70855909e-16 6.31413899e-17 -4.09098081e-16 6.22616103e-16\n", " 1.00000000e+00 3.68038558e-16 -1.15895163e-15 4.40295223e-16\n", " 3.20051878e-16 -3.59780788e-16]\n", " [ 5.99126604e-17 -7.61831655e-17 1.16358687e-17 5.62287832e-17\n", " -5.40568083e-17 4.60800300e-17 -3.36014394e-17 -1.16019091e-16\n", " -7.31353157e-17 1.10046502e-16 1.33325372e-16 2.83036818e-16\n", " -4.99943575e-17 -6.68234103e-17 3.02364689e-17 -4.29031958e-17\n", " -7.32270237e-17 -1.05958836e-16 2.84961775e-16 1.51435729e-17\n", " -5.97066915e-16 6.00600077e-17 3.82940650e-16 -4.13221101e-16\n", " 3.68038558e-16 1.00000000e+00 -1.20082043e-16 -2.59463718e-16\n", " 9.42313605e-16 -4.01568238e-16]\n", " [-5.90871055e-17 -8.34256387e-18 5.77928984e-17 -1.19783965e-16\n", " -7.44193443e-17 2.09981932e-17 1.12766935e-18 1.21465382e-16\n", " 1.18723140e-16 4.20114680e-17 -6.01787049e-17 -2.08199267e-16\n", " 1.04899112e-16 -1.36591650e-16 -3.75316743e-17 4.22101592e-17\n", " 9.79740503e-17 2.16197269e-16 1.63320358e-16 3.56301533e-16\n", " 4.80403219e-16 -2.95066728e-16 -4.22666508e-16 7.67061098e-16\n", " -1.15895163e-15 -1.20082043e-16 1.00000000e+00 1.11601083e-15\n", " -1.32510132e-15 9.16128717e-16]\n", " [ 1.84652423e-18 -9.50992319e-17 2.25097637e-17 -1.31102849e-17\n", " 1.09558031e-17 4.03188872e-17 1.46003396e-17 -8.69284804e-17\n", " -1.00635056e-16 1.28560571e-17 2.18461189e-17 8.38017325e-17\n", " -1.09012042e-16 -2.09484752e-18 -4.81000178e-17 -7.61705369e-17\n", " -2.14982454e-17 9.01247499e-17 -2.08425675e-16 -2.53888024e-16\n", " 5.37840738e-17 5.43859982e-17 -4.29605905e-16 -2.98589557e-16\n", " 4.40295223e-16 -2.59463718e-16 1.11601083e-15 1.00000000e+00\n", " -3.14991722e-16 -4.17958075e-16]\n", " [ 2.36684114e-17 4.92787895e-17 -3.38199039e-17 -1.07490123e-16\n", " -1.83238059e-18 -6.74914318e-17 -7.79577224e-18 1.20964804e-17\n", " 6.80565367e-17 -7.84770011e-19 -3.21872702e-17 -1.09342092e-16\n", " 4.32115340e-17 -4.11049840e-17 8.71588943e-17 4.59737515e-17\n", " -1.23744207e-16 -1.38358826e-16 4.45248166e-17 2.95018332e-16\n", " -3.46542235e-16 -3.19628955e-16 2.03297111e-16 -1.09496720e-16\n", " 3.20051878e-16 9.42313605e-16 -1.32510132e-15 -3.14991722e-16\n", " 1.00000000e+00 -5.49770690e-16]\n", " [-6.72750163e-17 6.90814993e-17 5.55285278e-17 4.47573548e-17\n", " 6.00995574e-17 -6.49837567e-17 8.44365332e-18 8.42671920e-17\n", " -1.79227308e-16 -1.39568468e-16 -1.14507011e-16 -2.22079240e-17\n", " -8.29656363e-17 1.11523692e-18 3.52281432e-18 2.86233394e-17\n", " 4.87010844e-17 1.10142019e-16 3.61910482e-17 -7.72308606e-17\n", " 2.29180087e-16 2.54945108e-16 -2.37361210e-16 1.74059481e-16\n", " -3.59780788e-16 -4.01568238e-16 9.16128717e-16 -4.17958075e-16\n", " -5.49770690e-16 1.00000000e+00]]\n" ] } ], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8e077e93-c993-49e0-bb42-1438266eaba0", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.12.4" } }, "nbformat": 4, "nbformat_minor": 5 }