{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Random IVM Tetrahedron Volumes (with gmpy2)\n", "\n", "![quadrays](https://upload.wikimedia.org/wikipedia/commons/9/99/Quadray.gif)\n", "\n", "According to a proof by Dr. Robert Gray, at one time archived on a Synergetics listserv, any tetrahedron of IVM vertexes (assuming non-coplanar) will have a whole number volume. \n", "\n", "In this Notebook, we randomly generate IVM tetrahedrons and compute their volumes. Within the error of floating point, we demonstrate this result." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from tetravolume import Qvector" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('0.0',200)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import gmpy2\n", "from gmpy2 import mpfr\n", "gmpy2.get_context().precision=200\n", "mpfr(0)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from itertools import permutations" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(0, 1, 1, 2),\n", " (1, 2, 0, 1),\n", " (0, 2, 1, 1),\n", " (0, 1, 2, 1),\n", " (2, 1, 0, 1),\n", " (1, 1, 2, 0),\n", " (1, 2, 1, 0),\n", " (2, 1, 1, 0),\n", " (1, 0, 2, 1),\n", " (2, 0, 1, 1),\n", " (1, 0, 1, 2),\n", " (1, 1, 0, 2)]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "combos = set()\n", "for combo in permutations((0,1,1,2)):\n", " combos.add(combo)\n", "combos = list(combos)\n", "combos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One frequency:\n", "\n", "![\"freq1\"](freq1.png)\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ivm_vector(a=mpfr('0.0',200), b=mpfr('392.0',200), c=mpfr('222.0',200), d=mpfr('642.0',200))" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import random\n", "\n", "def any_ball():\n", " # random coefficients for arbitrary choice of vectors...\n", " coeffs = [random.randint(0, 300) for _ in range(12)]\n", " vectors = ([coeffs[i] * Qvector(combos[i]) for i in range(12)])\n", " vector_sum = Qvector((mpfr(0),mpfr(0),mpfr(0),mpfr(0)))\n", " for v in vectors:\n", " vector_sum = vector_sum + v\n", " return vector_sum\n", "\n", "any_ball()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ivm_vector(a=mpfr('492.0',200), b=mpfr('329.0',200), c=mpfr('0.0',200), d=mpfr('267.0',200))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A,B,C,D = any_ball(), any_ball(), any_ball(), any_ball()\n", "A" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ivm_vector(a=mpfr('248.0',200), b=mpfr('263.0',200), c=mpfr('0.0',200), d=mpfr('345.0',200))" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A-B" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('182.36501857538358499472121928182087681992193154377123883742419',200)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(A-B).length()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "lengths = [(\"AB\", (A-B).length()),\n", " (\"AC\", (A-C).length()),\n", " (\"AD\", (A-D).length()),\n", " (\"BC\", (B-C).length()),\n", " (\"CD\", (C-D).length()),\n", " (\"DB\", (D-B).length())]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('AB',\n", " mpfr('182.36501857538358499472121928182087681992193154377123883742419',200)),\n", " ('AC',\n", " mpfr('600.15164750252914722690451617422631602104978692970170354841761',200)),\n", " ('AD',\n", " mpfr('551.34199912576948539719539536015344824528780410498293183661653',200)),\n", " ('BC',\n", " mpfr('511.7528700456891428844478216824504677275886445592614561129447',200)),\n", " ('CD',\n", " mpfr('598.36109499197890280611882194630845066148913520677993892985788',200)),\n", " ('DB',\n", " mpfr('383.2270867253513957959972492873305724441048590574352961993633',200))]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lengths" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "from tetravolume import Tetrahedron" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "t = Tetrahedron(*[lengths[i][1] for i in range(6)])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('20009460.0',200)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t.ivm_volume()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('16319836.0',200)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def demo():\n", " A,B,C,D = any_ball(), any_ball(), any_ball(), any_ball()\n", " lengths = [(\"AB\", (A-B).length()),\n", " (\"AC\", (A-C).length()),\n", " (\"AD\", (A-D).length()),\n", " (\"BC\", (B-C).length()),\n", " (\"CD\", (C-D).length()),\n", " (\"DB\", (D-B).length())]\n", " t = Tetrahedron(*[lengths[i][1] for i in range(6)])\n", " return t.ivm_volume()\n", "\n", "demo()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "mpfr('18865099.805174635666877858142242985195480287075042724609375',200)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t.xyz_volume()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDBoYFhoZGRkdHRsfHyEgIiAfIS0pHyUlLioyMC0nLy01PVBCNThLOS0uRWFFS1NWW1xbMkFlbWRYbFBZW1cBERISGRYZLxsbMFc/NT1XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV//AABEIAWgB4AMBIgACEQEDEQH/xAAbAAEAAgMBAQAAAAAAAAAAAAAAAQMCBAUHBv/EAEoQAAIBAgMDCAUHCQcEAwEAAAABAgMRBBIhBTFRExYiQVRxo9IyUmGRoQYUFYGywdEjMzRCU3JzseEXNUOSk6LwJWKC4gck8cL/xAAaAQEBAQEBAQEAAAAAAAAAAAAAAQIDBAUG/8QAKREBAQACAQMEAgIBBQAAAAAAAAECEQMSMVEEEyFBMnFSkTMUIkJh8P/aAAwDAQACEQMRAD8A8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9BzJ2l2bxafmHMnaXZvFp+YD58H0HMnaXZvFp+Ycydpdm8Wn5gPnwfQcydpdm8Wn5hzJ2l2bxafmA+fB9BzJ2l2bxafmHMnaXZvFp+YD58H0HMnaXZvFp+Ycydpdm8Wn5gPnwfQcydpdm8Wn5hzJ2l2bxafmA+fB9BzJ2l2bxafmHMnaXZvFp+YD58H0HMnaXZvFp+Ycydpdm8Wn5gPnwfQcydpdm8Wn5hzJ2l2bxafmA+fB9BzJ2l2bxafmHMnaXZvFp+YD58H0HMnaXZvFp+Ycydpdm8Wn5gPnwfQcydpdm8Wn5hzJ2l2bxafmA+fB9BzJ2l2bxafmHMnaXZvFp+YD58H0HMnaXZvFp+Ycydpdm8Wn5gPnwfQcydpdm8Wn5jn4jYmJpTlTnStKO9Zov+TLMbl2g54Nz6Lr+p/uj+I+i6/qf7o/ib9rP+N/oaYNz6Lr+p/uj+I+i6/qf7o/iPaz/AI3+hpgveDqJ2cfiiPms/V+KOW5HX2eT+N/pSC35tPh8UPm8+HxQ6ontZ/xv9KgWchLh8UORlwG4nt5+KrBnyUuBksPN7ojcJx53tKqBesHU9X4on5lU9X4onVj5b9jl/jf6rXBux2TXauqd13r8Sp4Kot8fii7iezyfxv8ATXBd80qer8UPm0/V+KHVPJ7PJ/G/0pBZ83nw+KI5GXAbjPt5z6rAFnIy4fEchLh8UNw9vPxVYLfm8+HxRi6MuHxG4e3nPqsAZ8lLgOSlwG4nRl4YAz5KXAclLgNw6MvDAGfJS4DkpcBuHRl4e+AArIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8B8of02t3r7KPvz4H5Q/plbvX2Uev0f539LHNBIPpqgEgCjEYfNqtGc6pFp2aszsGM6akrNXPF6j0ePL/unxXr4fVZcc6b8xxmYs6NTAL9V27yl4Cfs9583L0nLj9PX/qOPL7aTEYOTsi+phZRaTtqXRgkrI8+e8Lq93fi4vc+fpTDDpb9WWGTMWc92vZMMcPiCZkVslMhMn0uxJwlTyvecrbFBQndGrQxMqbvFk4vFOpvOu5Y4dNme/pqswkzJsrkzMZzrGTK2ZsxZ0jyZ/KEzJMwJTKxKtQyJkRMkzD0TV7sXR4MwlBreb2DUXNKR18RsO8M9P3GptjPHDeuz5gGxWw7Ta3Nb0KODnO+W2ntNYy5XU7uWeNw+a1wbsdmVOtxX1mxS2XFek2/YtEejH0vLl9ON5cZ9vXgAYeEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+C+UH6ZW719lH3p8F8oP0yt3r7KPX6P87+ljnAkH01QCQBAJAEAkxk7JvgiW6m1ktuo1MRK8u7QqSvoSyaUrST4M/L8mfuZ3K/b9XhhOPCYz6fS7K2DF08899jjbaoRhO0Tq/T6jSyrgfO4vEOpJyZvKyR4+OclyuWTXZFyWYNnON5VnmMWytyJU0XTF5EsxZkYsrFYswZmzFmo45RgSkZKBNi7YmFCUzEJkal0tjKx3tlbayrJI+eTMkxLpuyZTVdTa0oynmj1lOAnaTXH+aNPMzOnKzT4M3x8nRyTONZYTLj6HZATurkn6J8R6aAD4TIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8H8oP0yt3r7KPvD4Pb/6ZW719lHr9H+d/SxzgSD6SgsAAsLAALFdf0GWFdf0Jdxz5v8eX6rrwf5Md+Y0CAbdHAOcMyPzEx2/UZZSd2k2YMznFp2e8rZdOWVRIrbMpMrkzcebOobK2yWzE3I8eV2mLMuU19hgZ0YZpxjxaRqTdTqsiHJmdNaXMJRs2uDsdPZ+D5TTgSz6b47/yrSZizcxuEdJ67jUZjWnbvNxgzFmbMWajllBMyTKzJMWJjksTMkytMyRl2xrt4f8ANw/dRbYroK0Ir2IsP0mH4x8bL8q9MAB8RzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPg9v/plbvX2UfeHwm3/ANMrd6+yj1+k/O/pY5wFhY+koBYWAAWFgBDVzKwsRduVJWbT6ju7DxUcrhI5eNpfrL6zUhUcXdOzPz3Lx3h5Lj9P0GPJOfil/wDbb22YJVLo5jZbWrue8okzlfmr2mqiTKpMzkzBljzZ3asEsg289Dd2VSvUzdUV8eo00ruyO/gsPycEut6vvPX6Xj689/UcuXLWOnMxtHLX9ktTe2TiVSq67mWY3D543XpR1Rzt/ecvV4Xj5N/Ver0uuTjuP27u25QnG6Pm2Xyqyas2Us89u3XHDpmmLMWZMxYjGUYMEsxNONZpl+GhnnFe34GsjsbMw2WOd73u7jtwcXuZyfSZ8nTi3gTYWPuvnPSwAfCZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhNv/AKZW719lH3Z8Lt79Mrd6+yj1+k/O/pY5wJB9FUAkAQCQBBIAENHNxWGcXdax/kdMHHn4Meaartw82XFdxwWzBnWr4CMtY9F/A0qmCqL9W/cfH5PS8mH1v9PpY+owz+2ozFlzpS9V+5kLDze6Evccphl4MrPKhkJXdlqzfpbLnL0rRXvZ0cNgoU9yu+L3nr4vS55d/iPJycuM7NfZ+AydOfpdS4f1OgAfV48Jhj04vHllcruho4vCX6UN/WvvN4E5eLHlx6cm+Pky48t4uFIwZ2a+EjPXc+KNCrgJrd0l7D4/J6Tkw7fMfTw9Thn3+K02YsulRkt8Ze5mPIye6Mvczh0ZeGrZ5UswN6ns+pLqyrizfw2zYQ1fSl7dy+o9PH6bkz+tPLycuMaez9nuTU5q0epPr/odckH1uLix45qPFlncr8hBIOrL0oAHwmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4Xb36ZW719lH3R8Nt79Mrd6+yj1+k/O/pY5wJB9FUAkAQCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6SAD4bIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8Nt79Lrd6/kj7k+G27+l1u9fyR6/Sfnf0sc8E2Fj6AgE2AEAkFEAkAQCQBAJAEAkAQCQBAJAEEgAQSABAJAAgkACCQBAJAHpAAPhoAAAAAADZGZcUBIIzLihmXFASCMy4oZlxQEgjMuKGZcUBIIzLihmXFASCMy4oZlxQEgjMuKGZcUBIIzLihmXFASCMy4oZlxQEgjMuKGZcUBIIzLihmXFAScrF7Ao1akqkpTTk7uzVt1uB1My4oZlxRrHK4/MHG5sUPWqe9fgRzYoetU96/A7WZcUMy4o373J5HF5sUPWqe9fgObFD1qnvX4HazLihmXFD3uTyOLzYoetU96/AnmxQ9ap71+B2cy4oZlxQ97k8ji82KHrVPevwHNih61T3r8DrYisoU5z0eWMpWvvsrnxK/8AkOXZY/6j8pPez8t44ZZdn0HNih61T3r8BzYoetU96/A+f/tDl2WP+o/KP7Q5dlX+p/6j38/LXtZ+H0PNih61T3r8CObFD1qnvX4HA/tCl2Vf6n/qP7QpdlX+p/Qe9n5PZz8O/wA2KHrVPevwHNih61T3r8Dg/wBoMuyr/U/oP7QJ9WFV/wCJ/Qe9n5Paz8O9zYoetU96/AnmxQ9ap71+By18tJdnX+f+hkvllL9gv8/9C+9yeXPVdHmxQ9ap71+A5sUPWqe9fgaC+V7/AGC/z/0NHG//ACEqTyrDqUutZ9F9dh73J5Hd5sUPWqe9fgObFD1qnvX4HzH9pcuxx/1X5Qv/AJKn2OP+r/6j3uTyj6jmxQ9ap71+BHNih61T3r8DkYH5eKtpyCjLg5/y0N5fKl/sV/n/AKD3eTyvy2ebFD1qnvX4DmxQ9ap71+BRznf7Ff5v6GS+Ukn/AIK/zf0Hu8nkW82KHrVPevwJ5sUPWqe9fgYx2+3/AIS/zf0LY7ab/wANf5v6D3eTyK+bFD1qnvX4DmxQ9ap71+Bb9Mv9mvf/AEJ+mH+zXv8A6D3eTyaqnmxQ9ap71+A5sUPWqe9fgbVLaqc4RklHM7K8t79h0My4oe9yeRJgqsXLLmWbhfX3GZo1sPUlOs1GFp08kXmea+u/T28eo5xG8Y51e11ffbrNXZ+GlSzppKLyuKTb/VWbf7TPK/nF7Ozp2zW0vd6AXctHpdJdF2lrudr68N5knc51DBzpRxGZ51JXVl0m7a3XFssp4eeXDaWyJZk5NP0bblo9eI0NqfpLuf3GMZRbaVrxtf2XMp+ku5/ccivs+tJ1tKajUlCXpyv0Xr1daM26ZtsdfKuAyrgfNz2ZWi4U8ua+bpJzyxvFK7fG6ubsNmVVUzOal6XScpXknGyg1uSv1meq+GZnfDqycVa9ld2XfwMsq4HFjseXIwTUeVjKLb5SdpJJrV709Tr001BKVr21s9DUtalt7xnZcBlXA4a2RU5GpHJTVSU7t8pKSdPPmy3cdLLTcYrZFe1K6pudOnCKlykt8aid93q3RWnb5SGfJdZ8ubL123XM8q4HAlseu5Sd4JuMouWeead5qWunRulZ2Mamw6kmrxpKN21FVJWgm49FaaqyfvA+hsuAsuBXhoSjThGXpKMU7O+qXEtAiy4Cy4EgCLLgLLgSAIsuAsuBIAiy4Cy4EgCLLgLLgSAIsuAsuBIAiy4Cy4EgCLLgLLgSAIsuAsuBIA18clyFbT/Dn9lnjKPZsd+Yq/w5/ZZ4yiV6vT9qkJAlEemJJIJRVCyj6Ue8wRZR9JAvaugmZKRWmV4mvkg5dfV3mnz1G0toZVkg+l1vgcYmUm223dsxIxUkogII2aNRpqSdmmfVYWsqlOM11r4nx8GfRfJ6rdThwtJGttR14povpzXWrCMCxQQ2q+mkWXKErGGIxkKUc05JL2733IbXW24jl7S29To3jC06ns9Fd7OLtHb86qcKfQh1+s19xx2yWu+HF95O9sHGVK+08NKpLM877lo9Ej06y4HlHyVf/UcN+/8A/wAs9YI58/5MwAHAAAAAAVz9Jdz+4kifpLuf3GssfT5SVPNrGOZv9VLr1Cb02STUr7RpQgpuaak7LK73ZsqWl92l9QbZA1ntCjlU+VhlbsnmVr8DJ4ule3KQveKtdXvLcvrL03wq8FOJxMaSUpu0XJRv1JvdcfO6fR/KR6fo6rpdw6aLgURxKfKJRlem7NW1el9B86hkhNtpTcVHTVuW5WGqLwVqtFzlTv04pSa9jvZ/AmFSMleLTW66d0QZgAAAAAAAAAAAAAAAAAAAAAAAox35ir/Dn9lnjC3Hs+O/MVf4c/ss8YjuJXq9P9pMkQjJB6YEoEpEaSWUV0kYFlLeimf41so5e1K95KC3R39507nAqSzNvi7lfNrAAkMBKIAVlE6uxsTydVX3S07jlItpyKsfdwmZqocPDbTjGjFzlrust7saWM2vOpeMehH2PpPvY26Y4Wuzj9tQpXjDpz/2rvPnMTiZ1ZZpybfwXcUkXM7enHGYpuGzEXC7df5J/wB44b99/ZZ6yeS/JP8AvLDfvv7LPWhHk5vyWAArkAAAAAK5+ku5/ccl7Ci8ydSWVqSSyq6vLNv69TrT9Jdz+4klkqXGXu5n0RaEYqpZqpyjeRO7+s36tPNCUbtXTV1vV1vRYY1JWi2upXEmuxMZOzlUtiuNvyq9PPbIrXyOHHgyaezpRrU5NZo0qSV00nUnH0W11WTfX1luzaVVylVqvV6Jf8XsLa05uqoRlKMcuryXV+pXO3u5fZtXiIVMQlBwlRtKM8zySV4u6VrlE9h3y/lXdPM+irZs+e6XUr/AyWJrtz0kk7Zeh6LcrcOBFetWcHHp7pWapu8ulZJ8NNSTkynY6m1DC1FOrLlV0+rJuaVl166FcsDPk6CzqUqVSM1dZbpJxa77SZVKtWStHNdXVsl0uqLv1vrNnASqPNyjb1VrxymbbTbJUJfOHVdsqpqC4tt3bfwJwOF5Gnkvm6UpXyqO9t7l3lM6tXlJJZllekcnRkrX9L2speIr20u08t24WcXrdJW7luMm3VIOa+UnKjGbktG5ZYvK31JvuJpuWarUbqXTaisj0XVZdYNukDm8pUUacY5o9Deqd+nfc09yMpVZqVVxjJtQSjeDSv19/UDboA5fLV8q1lvk7qnd2Ud2qXWWRqVFUvJztkj0VDS9m3r1O4NugDT2fUqyzOpfqtpZe22iZjilKdaEbzUEm3aLyt9Sb94Nt4HLeIrZZPpXyvTk/RnfRLit9zfw6ll6UnJvXWOX6rA2tBzfnNXlJ3jJQyyssjbutF1amNSdW1JuU23eTcab6OlrW7+INuoDRpTm6kc6kmqevReVTdr2ZTGtVVLfNzzLV0nor69+gNuoDnVK1aNSEVmcbxzSyb0+5aWMZ16vJ1Z53HK3ljKFrq+m/e7A26YKcNny3m9W724LqRpzq1Wp3z7prIoacI2l18QbbeO/MVf4c/ss8YjuPVsVUqqhUi3LKoVFmyau0NFb266+w8qW4ler0/zKlGSMUjNB64hysrvcYrER4mco3Vjn1IOLaYcuXkyw+Y3fnUfaZRxiXUznAunnvPlZp0Z7QumlHerbzQym3hcJdZpLQmrh0tyLpz7tLKTY2VRXAuhh0/1GNGmiSu46ccNT9VF0MFTe6KY0vS5FvYZJew6tbBKOnJonD7Ozv82vqKvS5aXeTlZv7V2e6cFKKcbb17OJyo15r9ZksWclx+FxBjHGTXWn3osWOfXGD70Tpb96MAZzqKS0gov2P7jAjcu5t1/kl/eWF/ff2WetHkvyT/vLC/vv7LPWg4cvdYACuQAAAAArn6S7n9xJE/SXc/uJAGFWrGEZTk7Rim2+CRmYVaanGUJK8ZJprimBpra1Nr0K2a9sjpSU3pe6XC3WQts0HOMFNtyypO2l5ein7WZ/RdOyV6t07qTqSzrS1k77rCGyqMZRlGLTjl0Uml0d111gULazyV6nIzy021HSWabTtutorr2ln0pGPJxqRlGpNJ5Um7Xdle6T+Bmtm08k4ZqmWbbf5SV7t3dn1ak1dmU5uLlnllSSvN62d1fjqBfiK8acHOV7LfZXMcLi4VouUG2k7apr+ZbKKas0muD3CFNRVopLuVi/Gv8AtfjSlYrp1IZXanFNtdd1eyX1Gu9s0lT5VqooXSTcGr3Td1fetC9Yb8pVlm6NSMVZaNWTV7/WUz2XRdONOTm4wbs3Ud1dWave+4iMvpSlnUOlqovNleTpJtdLdqkUw21Bzksk7Wg4dF5p5r2Si1/2vUtWyaOnpu2TfOVugrR+DMYbFoxd1yl7RSbqSbio3y5bvS137wMJ7doJpNVNevk3Zb7p8Gssr9zN7EVlThKpK+WKcnZXdlv0NGpsnDRtmbV+jrUau3m9ureeXvLpYSjJ1oZnmqpZ4qo81rW0V+jpwAwqbYpRjGUlUjGTss0GuGtn1amT2rSU5xeaOTNeTi1Doq7s+vRpjE7Lo1FFTzvLFxT5SSk02nZu+u5GMtmUJSaeZt5pOLm/145XdX3WQGEdrXjVfJyjkqQh0lJN5kndq11vNie0KcavJNTzXSvkeW7V0r8XZlK2PRcZrNVam4uT5WTbcdFrf2L3Fr2dTclJ582aEvTe+KaT+IGFHasJ0JV8tSMYptqUHFu19FffuLKuMyyism9RctfRu0l36mE9m01SqwTkozi1rJtRvd3Sei1dy6WGjPJKWrSWqdk7a7u/UVLvXw2DXxmJ5KKllurpPW3uJoYbJOpPM5OpLNruSskor2fiTXw8allK9uCk0n3rrJS718KpY205Jx6Kza33uKTehi9oZacpyg1llFSSd7KVul9SZd80hnc7atNPXTVWen1FVbARdJ003GMnFyb1bSa0u/YrCbT522zmx2lCopOdJ5YzyRvFuUpeyNvYdI01sukouNp2cs/pyupcU76C7+jLf0h7UpdG2d5k2ssG3o7P60bxpU9n0Yzi43Uqaskpvc3fVX1v7TZrZ7dDLm/7r2+Am/sm/tXjvzFX+HP7LPG47j2DEZ1h63KOF8k7Zbpei+J4/HcHs9P2rJIySIRmg9cEjCtQU17epliRmkCyWarkVKbi7NGdCneSXtOpOipKzRODwOSopXvw9hY8XJw3H5nZsygoR9iNSVpa2e73anRr2ur7txVJav3GmJG1svB0Z0nOom3G+56s2XhsO4OUYTjb1mzl0as6aeXr1uKuJqT9KbtwNyzSaqipXunaKvpa/Vqbuy6c288UnJGpGnodbZTaaSRnbrhjt0K1WOV3UW7aGls1SSWaLXtXUbGMwKUrp7/cTSw83ZKVl7Bctrjx6b1HDtzUs12oySTStZ9R8PtjA0adSShOzu7xetu5n3tuShJ/rW39ba6jz3atXla9SfFktYyxvaNCxnGHEm1jIxsx49dwAgjq6/ySf/UsL++/ss9dPIfkl/eWF/ff2Weumnm5O6wABgAAAAAVz9Jdz+4kifpLuf3EgCutTzwlC7WZNXi7Ne1MsK603GEpRjmaTaje13wA4c9nYp003OWZz6cY1H6Kjli07re+k9evrsXUcFX5Sm6jqStyfTVbKkkukpRXpNv2dfUHt/opxpOWaWWNm2m8maW5N6bu8vobWdSUclJ5egpOUlGUXJX9F7wNangK8KcqaU3HlHJ/ltZxcpO0X+rvV924yp4Ks5UVUVXKs2bLXtZZrwUtbyaXX1+0so7Wm6acqSU5VHThHOrN5pK7fVuM4bUnPIoUczlnT6aSi4Syy16/Z9wGOzcNXhXqyqOWSWa153/WurK9t3sRsY/BzqtOFaVOy6r6+5ouxlfkqU6mVyyq9lvZoLbX5NzdPdGq2s1vzdrrVJ7nfcaxysu4surt1IKySveyWpyIwawkFOLclXjnTTbb5XV+1dZbR2vKVdUnSsnK2bOnxtp/4mzj8a6Ki1TlO7a6PUSS5XUJLbpq4jCVpYhyWe14uElVcYRSWqcP1tf+aGo8DiuTaTnH83mTq5nNpvO4u+ieml19R2YV70eUytdHNle/dexzY7XnGzmqcouFOo5QdlCM3bW972495O3wMYYCrmwzqQnU5NTzPlFpeSy3V9bL/jJ+Y1F86cac4zqO8ZcqrtaLTXTcyfp7WCdCV5RjN2u7RlJxi9F7L62M57XnyVSpGinGNOpODzq7y6arqCK6NCpBYZVk3avN6tysnGWW+rtq11m3ShUWKnLk3ycoRWbOmrq+uW91vRXW2q4pfkukqcqk1nj0YxtfXreu4toY6c6rgqXQja83JbnHMujvuBGyI2p1NGk61Vq6tpm32LJ4FOvGtnmssbZbvK/b/Ip+kJPDxq5VmnNRguq0pZYt/VqWVMVJVlFWy5oxt+s8ybvf6izK49jq0x2vTbpwkqbqqE4ydNWvNaq2unWnrwOfhtnVnybvOEJtucM8o8mlNyjGK9t8r9h1q+I6PQlG+dQvvUW3bUnDYlShByaUpXSXFrfb+Zk39OPDAYxcrecm3f8AxLKXTT6OryvLdX0tctls+olSmo1bwnUeR4jVKW68uHs1N7DYmUqklJxy9Jq2+OWWXUxxeNcVGVNxcXCU771JK2if17xv4Tqmttb5riOVlJqTu5ttVejKDTywUb6NO2um72mDwtSOFWZVXLlKTqKVTO3FSWa2u63UjpRrvl5Umlbk1OL699mn8BgMS6tNSatLNOLS3XjJxdvcVWlXwlaWIlJZ7XThJVWoRWXc4deuv/4ac9nYmULflFpG/wD9h3c0ned77m7afBH0QA+dhs7Exq3SmujCMZute1pyd5L9boytr/Ut+ZYq09Z5nCSb5W+eWZWcV+rpfhv+s7hIHArUKkMNTVVNtSrPVuVk4Ty3d3bfx0PM47j2THfmKv8ADn9lnjcdwer0/wBskZxMYosig9cSkWJERRbGIVCRlKpkcG/aZxiRisNOajki5WvewYz1Z8tmrG8YspitTYhFqlFS3opgi15JFip3RjKlbqL4ESK01YSgpJS3v3HVwlaMXmtpHXRXNGMNTc2e7VNNy6g1i269dPLJJ5WtU+JvYGzMKlKMoleDk4SsyN/R8o3lw0pcLfHQ89m9WegfKRZsFV9ln7mjz+Rms6YgEEZSQLkFS12Pkj/eWF/ff2WeunkPyR/vPC/vv7LPXivPn3WAAMgAAAACufpLuf3EkT9Jdz+4kAQSYzV01pquvcBqQ+b1YOOWDpxk9HFZM13qr6b7lrw9HPGWSnnikouyzJdSRz47FkqUYZqbcZSl+b6Duraq+9X0LKGyctWEm4TjCEY9KHSuuu999zMtc5ll9xtzwlHpZqdP8o+leK6T9vERwdB5ZRp07wVoSUV0bdSfUNoYXlqbimlJNShJq+Wad07GWDw0aNKNOO6K97639bNOjXhSUnONStKpBdGcKkYZHfuii75lQlBQ5Km4JtpZU4p9djTrbLnJV1nppVbaKD0a69+pt7PwrowlFuLvJyWWNkk+qxJazLd9inh6EWssKSd9LJXv+Jdy0LZs8bXte6tfvOdX2LGdStLNaNSE1FJaxnOOWU0+5L4lFLYMoq+am5XvaUZSpvo5b2b3ladhVouWVSTlZO19bPc/gzUwuAw1JVFTjBRm3nV7xcnvun1lP0OlVjOHJL8nGnJ5Okkrq8HfTR2+ooew5clKF6OsKdO3JvK4xd7tX1k9wHTqQoTcJSVKTXoN5W/qM4YakpTapwUpem1FXl38TnYjY7nOlKLpwUFG6jF2upZnZXt7zcw2EyVq9To/lZRekbS0jbpO+oGXzChljHkaeWLvFZFZPijOGFpxm6kacFOW+SilJ97LQBrPA0+SdKzyuWZa6p5s2nCzL3Ti5KWVZlonbUyAFNLB04QcFFZZSlJp63cndt/WyXhoOcJ5elCMox4JO19PqRaAK5YeDU1lSzq0mtG/rEcNBRhHJHLC2VW3W3WLQBVGhFVJVP1pRUb+xX0XvGHoRpQUIrRX77t3b97LSAJAAAAAUY78xV/hz+yzxuO49kx35ir/AA5/ZZ43HcHq9P8AbOJbErhFvRK5vUMDJ79P5lkei5Sd1US6JtQw0V/UZC9LleefSqCNqjiVBSWW73lElla10ZMqazRfEvS5Z81yml2bNvRrxWpsR0UlwKpxSy+1XFjGOXytitCitVUd5ZcxcUZdWjPHNPRWRZHaNSOqt79X7i2VBcCylR1XRQbjcwu0q86TfJX/AJm7hKvKXdrNGVG6haxbRpW1QVpfKnE5MLl65yS+pas+JPQsfhKdeMeUipRTafFcGn1bjk4/YeHzyUIuCdnFpt/BksZ63yTMT66v8kqVocnXleUU+lFNX+o5GM+T1elGcujOMFd29K3GxNVncrjshlipSe6Lf1EvCz9VrvDFdL5If3nhf339lnr55J8k6DjtLCt29N/ZZ62Vyy7rAAGQAAAABXP0l3P7iSJ+ku5/cSAAMZSSTb3LUDIGmtq0HHMqitprZ/DTUmG0aTqcmpJvKpLg0ybidU8m0q06dLlIa5WnNZXJ5L9KyXXbU5lTaeJg6ScIXlGM9zV80vQWujStx3nU+kaOVy5RWSi27PdLc9xitqULxXKay3aS424cRuHVHPljsROFfJKCmqdRqHJyzQknom9zMqu1KihBxnDWM258nNxlJWtBK+933+w6uIxEKUHOo8sVvdm7e4157WoRvepazlF9GWjjvvpuV9+4qqMHjKtSvKDlTjGOVuGR59YptXvbRsz2zjKlGEHTy3cmm5K63N8V1riZ19oUG5UpVNbO6WZbldpSWl7cGU4TGYaFNVYTllnZauc5br2tq/cBTV2rOLgnZOXJuzpyvllC7fss19xlsfaFWrNxquDWW6ywlHW0X1t+t8Dd+k6OeMFUvKSi4pKTunud0rW9pdiMRGnHNN2V0tzbu9ySWrA1sZUxKmlShGULK7e+/vRdjZ1I0pypJOaV0mrp23rvsY/SNGyefRqLXRluk7Lq4mOG2nRqzcKc7ySbtlkt3evaW3c7La5dfa2IjGEoxjaopzi5Ra0TWSLV9G07/cbMMdWnVlBOEXeaUHCTkko9GWbdZu3A64IjhUdp1eRpZqkMz0nU5KWWLUb5Wr727l2Hx9WpWhBuFO9OE5QcJOd3e8U7rvOuYzjmTi9zVt9gNXamJlSpZoWvmiuktLN6nPltepGnTlKyc403bk5dc8s9zfU0zq0MJCm245rtW1nKX82XgcbZe0a1Sqo1HBxabWWEovcnvb7/AHG5j6laLp8jGMk5LNeVtPc9PabpBrG6u1l1VdbPycsllUyvLfWOa3X7DV2VialaMpzSUW7QWVxlorSvf/uvb2I3iTKAAAAACjHfmKv8Of2WeQYXDuo0lu0u+B7Bi1elUXGE18Gee0qEYQUYqxrGbdcM+mVXCjGNoxS0+JsQMVHXvLYo6aZvyqjExlEvgtA4FRq1IdDudxboX4O5sKG9cSulHotfUNDJxv8A+S+Jp4i96b/7ZL4o36S6K9hr14aSXqu/1MzlPgndWmTFlKZOY5uy+5fT0NJTL4NtX6g3MnaoyTRdSs5W/VV/rscrD1W9FodPDel/4ya91vuEMqxw01GpOnLc7r8GU4mm8r4wdn3PcYY2VpQnxVn9Rbhq6lJxlukrP7jWnNhTq3pLjF/B/wBTeoVf/s36pUWcvI4VHCW56f1LsNUtOm+DlTl7L/8AGCt7E7MpYiLcbU59TS0fej5rauyatFXlG8H+tHWP18Dvqq1KKXGx0q2JShksm30bPdcaZsfEfJuP/UcL/Ef2ZHqR8zD5PRjjKGIpWioyvOHV6LV179x9KYrnVgACAAAAACufpLuf3EkT9Jdz+4kAYzjdNXaurXW9GQA572RTdOFNyqNQd4ttZlpa261vqLI7OjGUJRlNZYqNk1aSW6+huAnTGeiOatjQtNcpVtJJektEndJae0srbLjNpyqVbqMY3TWtndN6b7o3gTph0RhWpKcJQkrxkmmvYznVNhUpRpxbm3CMo5nlcpKTvJu8Wrt63VjpkmmmnS2fGE24zqZXd8ndZLtWb3X+JWtlJKKVateHoSvG8Va2VdG1u/gb4A0qOzlSkpU5z6NNQVNtZGle13lvve+5FbD1K8XTrRjCN07wmpO6d7WlC1jeAHOlsaGSEFVqxUEl0XHpWlmV7x48LFmF2XGlNTVSpJpNdJxtut1Jez3G6AJBBIAEACQQAJBBIAEACQQAJBAArxP5uf7kv5M+Ca/kffYhN05pb3GS+B8X9F4i35ip/lOmCxqRV0iyKNilszEW1oVPcZx2ZX/Yz9xvcVrJEqJtLZtf9jP3GS2dX/Yz9w3BpJamChaT9p0Hs2v+xn7iJbMrv/Bn7huDSgrNr6yKtPdJLdv7jeeza/7GfuMobPrddGdu4biOFXw+XVej/I12mfR/RddXXJTa7uow+hKm9Upr2W0Odnh0xy8vn6bNhzulGP1nWlsPEN/mrLj1lsdgz/ZS72m2TTfVI52Fu5Wj1elL7l7TsQjl373Ft+xW0RfR2dOC0pyf1EfNKzcm6c92mhZJEuW3MrrNB+xp/czTzNHW+j61/wA1PVNbjU+icRb8zO/ca+GdjkqsUn6S3MiF87T/AF45v/KP/PiZR2ZiV/g1PcWywGIyxfIzzRlf0fePg2yk71I243JpVc+Ii+pSVzKeCr5m1Rnu4ewxw2ArxUm6M7uUerqTHwu3ewNbN9UmjoHH2ZQqRqzcoSjHMmrrQ7Jzvdzy7swARkAAAAAVz9Jdz+45r21C9VKE3yab0s8yUsrtrxOlN9JdzNJ7Mw95Pk49JNPV6pu7W/jqBVU2zGEU5U5rWpG2mkoq+Xfq31G5iKzjRnUStJQcrS42vZ2Ners6nJxs1GKqcrKOjUp8Xf7jOdGcrqdWEqbunDJq4vqvmA1Z7cjGF5U5qdovI8uZppu613aM3KeIlKpC1uTnTzrR5ur8Sv6Lw2XLycbXvv8AZbffdbSxnHBUVKElFJwSUek9Fw3gYfPZQpV51Em6UpLo9aSTW/r1LauJcHRTj+ceV2foyytr6tGjD6Po5akUrKompdJ6369XvM5UIydJylfk3da73ly3fvYGwCMy4oZlxQEkmOZcUMy4oCQRmXFDMuKAyBjmXFDMuKAyIIzLiveMy4r3gZAxzLihmXFASSY5lxXvGZcV7wJBGZcV7xmXFe8CSTHMuK94zLigMgY5lxQzLigMgY5lxQzLigJBGZcUMy4oCQRmXFDMuKAkEZlxQzLigJBGZcUMy4oCQRmXFDMuKAkEZlxQzLigJBGZcUMy4oDIgjMuKGZcUBIIzLihmXFAZEEZlxQzLigJBGZcUMy4oCQRmXFDMuKAtMFWg5OGZZlvV9TM5tTZ8pXj0VG9SSlrmbkno/f8EStYyXu6LklvfsIzq+W6va9uuxzJbPnJSzqF88ZpKUsuis9TZpwkqt3H/CSutyab01C3GeWxy0Ol0l0dJa7tL6+8zTvuOdRwk6UK6bzqS6Nl0nprf2ltPDyth9yyLpJt39G3Vo/rBcZ5bpjGUXe1nZ2dup8DI4/zWtKFZZXB8oqtP8pvtZ5G1qk7P3lYdey4Cy4Hz1fZWI6OWU75Lt8tJLO8zatfcm4/UjpV69PEU5UYVstSUWk4y6Sdt90Bv2XAWXA+fr7OxUoQedqUuUlOEajtGbtlyttaJJ+/cbNLA1nWbqOb39NVWo5XC2XJxvd/H2AddW9gsuBwqOz60KNOnlm4wfSXLPNNWaVn1JOztcuw+Cq8pSdXO1GnFSlGq8uda3a0vwv1gdfT2Cy4HHdCq6WIjFPPKu23ezcG1bK9P1bL6hR2bXlTpZ686coLK0pN5rN2d011WA60ZxbcU4trek1dd5lZcDlYXCTp1Z1HFWSqvMneVTNLMtPYlY6GEqTnShKpHJNxTlG98r4AWRlF3tZ2dnbqfASaSbdklvb3HFWAr/OKklenGVSUs6qXTg4ZbZON9SMbseu8NUpxrcrKWuWpfK9H0XeWivZ/UB2nOKai3HM9UtLv6iKdSEr5ZRlbR2adjmzwVWVenNxi/wA03K+sXDNeKXtv/MxwlGphoV3Gm3FRTp03JSk5q/Wlonp8QOvZcBZcCIN5VmVnZXS3XORR2fWcp5pTjJqa5RVW07yumodWnd9YHWnUhG2Zxjd2V2ld8Bmjdq8bpXa0ulxOPjNmVXh5UVJ1ZSbanJpZd2jzX6OmttTbnQm8ROXJrJKjkclJJt3btbf1gblOpCavCUZLjFpozsuBycJCth6MlGk5dOEadNyTcU8sW5SXVvfcdWd7Ozs7O3eBClFtxTV1vXWhKpCLSbim9ybSb7jh4XZddyqZpSpOVOmnU5Rzk5Rbcn1WTv8A0L8TgKrjSpr8o4zjJ1ZNLdK9mndtdz3pAdNV6bclnhePparTv4GUJxkk4uLT3NWaZoVsJJSr1IUqcpOGSnB2UZdbzd7fwNdYWcMNThkaq8vCejWjdTNKWmiVr6cAOzZcBZcCQBFlwFlwJAEWXAWXAkARZcBZcCQBFlwFlwJAEWXAWXAkARZcBZcCQBFlwFlwJAEWXAWXAkARZcBZcCQBFlwFlwJAEWXAWXAkARZcBZcCQBFlwFlwJAAHkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD18HkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD18HkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD18HkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD18HkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD18HkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD18HkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD18HkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD18HkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD18HkHPbaXafCp+Uc9tpdp8Kn5QPXweQc9tpdp8Kn5Rz22l2nwqflA9fB5Bz22l2nwqflHPbaXafCp+UD58AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/2Q==\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo(\"wLHescQT2ZI\") # https://youtu.be/wLHescQT2ZI" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }