Skip to content

Instantly share code, notes, and snippets.

@thejevans
Last active March 2, 2022 16:13
Show Gist options
  • Save thejevans/c0092e3e0a9b16017b32aac7a47d3582 to your computer and use it in GitHub Desktop.
Save thejevans/c0092e3e0a9b16017b32aac7a47d3582 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 29,
"id": "3e571f2e-aaba-446e-8f5c-30ea5a9568e3",
"metadata": {},
"outputs": [
{
"data": {
"application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1BhZ2VzIDIgMCBSIC9UeXBlIC9DYXRhbG9nID4+CmVuZG9iago4IDAgb2JqCjw8IC9FeHRHU3RhdGUgNCAwIFIgL0ZvbnQgMyAwIFIgL1BhdHRlcm4gNSAwIFIKL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gL1NoYWRpbmcgNiAwIFIKL1hPYmplY3QgNyAwIFIgPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9Bbm5vdHMgMTAgMCBSIC9Db250ZW50cyA5IDAgUiAvTWVkaWFCb3ggWyAwIDAgMjkzLjQgMjg2LjIgXQovUGFyZW50IDIgMCBSIC9SZXNvdXJjZXMgOCAwIFIgL1R5cGUgL1BhZ2UgPj4KZW5kb2JqCjkgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxMiAwIFIgPj4Kc3RyZWFtCnictVjBbhw3DL3PV+jYHiyLFEWJx6RpDRToIYmBHoqeXMet0bSIAzS/36fd7dq7K2mEYoL1GKNZcvREPj5Ke/3m/p8/7u7f3bx2371frp9Hd58Xco/L9StyD58d/rngHnF9wf1NHS8Bo48LW/SCuz8Pd1zUM0bhePf7snxYPrmMQb04Gy7yxT3du5/dX+76Fe+neMT1Ba+6cac4OEefqFBhRxI91VnVh1Ky4EkhzzmrJEy1vG8ZU8h4RIGz4+Q1EFvXlhmvEyopu/pETLn0jTX7SMSpOArijTmmPgwW82wlqLgcvOC7IFOvnlhhSb6UYjk61uCTlUwzOJiSz/jW9GDdCusogG37QRA7DoNAdiC9WPEUpEE82x4ingJZ1ItsrSM6y0EP0vHx3Jr/R+JEPXKm6jGWtZC+yPLUAsiw4MqtA7VGtpk9pQI7x7ANKcTMewdyVUje3azn4XzRUIomNUcE7Nj3+dd26NJv/f1n7Gs7dMnXe3+PSm3752xMhWdPI6Q7pUqjQ6JbMR6XctujX8qdGfo62pmgCb+JcygsbYcBnJ7HgA2N2UdTtO377Gma99nQNF8N56SKth1GMtr2GMpix+WZKOdy1AI8QtW27xdk276bgg6clvI2MQ61oePQj2fHo91mesbdNtPD009Wc22DaHbsV9vkifFMmzxxaLbJZpC7UDrWg9C0YtCp3Ys5h0m6NB709kvjAeTmpD2yt20nthkdz5VtxhmGuZkunPqTNF83cnjr1o9UWF0J0eCqhoEc7otikIUIapiDLk8Pz4evKQ8s7sRy6Vs+PSyfDhEhdzyMvDyQ3H101z8F9+bvo9kVS/bCJhICE7lYPO2UO0SODXsouzBzkcIpuitK6FVZYxKNKJhLe6Locwwl1iAjOeCDlIh7sxYccDioCbpfyOqUfM58+LTAn6HJ5iMTKjchew17xaE52P6DuQSUCYmiRFRnA3rxgSIIYaQIICHWlooAGlkzkhw9B4vMUiwhNmseJFhfyYiMahUyC55ILaScY3O5lMBy5CmCvuhN69E/g7S+BuTeUzTQi0H/OmYPouFPsmjDIwsSCoVRM2SgzieYgOESWjG9iuZp13YiWOaukG7RLGJCLfxn1tAy2AupVJFt4kdfKC9YDzw78d0r4qVDYmxUNCI8jP2WmbedGkTQopkwQ9eJuUYIywszEWTsikDKrBRPELydUxX3cPJjDcaHGr/a5VfBeCQ/6H65iBcIVadZXt+66x8Amd3th93PR7e/Lb+4b8K37ld3++Py/e1GCMijPIpqNkh7XbxpoqN89GDQxjAoRITZKKFUGY0bacXuwCCUyQYwePNo5KpfhszXckA6KlvAMJMRjLg1DAgduBBL5ABao6vhQGEloWhyHuCQrbMCfc6UMfWufmezkrYOhyQPYaBiDKI6nFOgsmhIaEoygKFfOSuztZI3xgFWYvVBA3RMpqNRvjI3Et5VFM1Kg9AAh22NI/vaf4z2AjZbKrS5kEpA85FIsiMp2gf2KmiriuzoCMjWUgqW1r1xpYjkaQmjraWUsBONSTnt6gYt1I5NvIthax3FfoAUW0/dN5VZitLmOnqMBSkOdBz2G5oRhK01lMinWHb7jHrGWt9o0NbyecpLrggiMPy3V+vi2Fo+a2UWdPhw2PJOA9laQSMOqTjG4nRfdXxeME4VdPkXjQG6wAplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjEyNjYKZW5kb2JqCjEwIDAgb2JqClsgXQplbmRvYmoKMTggMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA0MDAgPj4Kc3RyZWFtCnicNVNJbgMxDLvPK/SBAtZq+z1TBL3k/9eS8gzQVIolkdSS2iVDSuVHXcpDZpj86uWxxK3ke7lae7ZSXGFriu0p92XIsYmPb7HUYzUZgacT35ChjKBG3RgBioKKqDpCyEN7X77OS4zdGWHrqYmoRomsRqU9PO0xggwqYc3RRhSqJSrVv/3c199lqnhf6E2hK4aCh3ywSqyNLIRjTsFf4o0mHc9wCsw6MLOCXvDWpnrdJpNTyt0jJB8tlHi1l8M7I4F/anJno5SuRqU9NO2Bt0a1jFzx6EqsikoTnVJ5IMJeEEEPPkNyDvEEHzbryAQa/tsevV5Oq+3g/Oix99IhGF9CTGtOBQ4Yrc+CvdBie1BHTxcUPFPjsJLVpQ/WC67NNr3J937UqEXrU8Sp991GbyZTEpq+xwOMFTgWILj36qvD1AK4jhlFnAuixQVhUvQC22FGYP+nJnBHRIkYjdrWo28LHjmQkeiDNTW0L4i/C8yQO7fDQwsePR6VMIPaCtnQBiTuqtVjmG8/7O3zD3saoucKZW5kc3RyZWFtCmVuZG9iagoxOSAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDI1NCA+PgpzdHJlYW0KeJxNUUtuBTEI288pfIEnhV8I55nqqYvX+29rGKnqyg4Jxji7NhYy8RLD1o3Uwpdcsh76c0XasM+wKCHT2P+Y52mWC34UepwY0Cpi4r6M0n4KpgdeC+Y+eF9uNiyWwncigqjGm70EljWWTHJQ7fQNmURxfqHY4oHoDqcfTpQ9q5jK4E1fNay7XwUpgrAuQVUIteV0AOYsZp+U20ydUyQc4sq2BbHu054vBe1bce4pg9zT9jBLvteAcZR4J+BKlU139KBrPTjbDEtmyBfGzLunc6IaVSyYFlVt68xppINtT4WWLVqxcXZKn3TF+ZbZ9i8avd5///m5vq/3LxohXbwKZW5kc3RyZWFtCmVuZG9iagoyMCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDk1ID4+CnN0cmVhbQp4nEWOwRHAIAgE/1RBCQqCoZ9MJg/t/xtBjR/Y4eAONcWERUZRSVjJ8M7AeqHUgh2yEpIatpgdcrXBC8w1jjpI0aAWNDfd8lBmXuqhtPx2n8r45wcyT9o5nvl8aMsjOAplbmRzdHJlYW0KZW5kb2JqCjIxIDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMzMxID4+CnN0cmVhbQp4nC1SS3LFMAjb+xRcoDPmb5/ndTpd9N1/W4m8RQIJIAnZdUu2pMmXupSbdKh869K9RUveT5Iqf0sdmTe+jqiV6MGjV17LMKtqYoGOfcWqJ76Wm0/mhV4L8YvZTFTC7iBEtBh4I13sBiuuYn0kNiqV4gfI2UTD2wJoUGKBytaJUAA9zBQ8NlxbXDcqDVJAY8PQWTQA91pIsrZ0S1GiHalmu/aVVtL0WOHuEyn4TJYbJmGlzJAa8toleXTsi7snejsrTukmBaEK8QmDDn0J0BjQ4T6NN0wxYpH8/IGqLwjWi6MpCiu2CA8B6z2n81q/y0kGv9/LKyZzMDgWC8jyO2wGYXCEzgYtYLz58TpxpuzIujOTl+sSpZTYMRaRhxESgcnMYC07DPfhmTHaAxSDaURlfHgmS94QHSWcebQRhWqJOuo/+3C3n39n13xqCmVuZHN0cmVhbQplbmRvYmoKMjIgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA4NCA+PgpzdHJlYW0KeJxNzEEOwCAIBMA7r+AJLNq1/qdpetD/X6vYxF5gkmVhpZoCaUx60eJVLwhQFMm0i58p1EI0DM3zg/zEmiP1KDfJxE+rO19vWTT3Xskj9wuCXhs+CmVuZHN0cmVhbQplbmRvYmoKMjMgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCA3MSA+PgpzdHJlYW0KeJwzszRTMFAwMwcRhmYK5kaWCimGXEA+iJXLBRPLAbPMjIyBLGNjI6DqHC5DE0swbWJooWBqaQhSY45gQHRlcKUBAJvhEw0KZW5kc3RyZWFtCmVuZG9iagoyNCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDMzMCA+PgpzdHJlYW0KeJw1UktuRDEI2+cUXKBS+CfnmWrURXv/bW1euwIFMLZJ3ZItZfKhLhUmHSqfuhxPXlt+ltudzHeIxxU7R9yOvJa14rXEysU6nujGCjI96EWHZs+MeqFCFFUgAVWJiD2MqNycLGxPR6D/mYm0QYnSQWV89kyGzewgE8483IhCtkQd9n96Xutr5Q1ppTZm2SnfK8E4gZ0eUntL7kZsIvWVIp+EQXrAryeCMdQxc75sE4OXiTfqB25ssQAn7DCYGu5TMYlxMUeHKyp1iQbu0Q2WLnFQuU+kyp4ssScSHBsVTVRKoZAscDgHR0YLuslMq8APLm5oq8QcCok2aA8w48npCSOZ5WR6MYlzgf6hxzwdmsHbfILnLIAOOI/mBH2lOT6fAhDNT3F7/lJgOSNkYHxe6kijN2FzjymJYzbOxiM0Dvd/IB7r/Qtd4H2eCmVuZHN0cmVhbQplbmRvYmoKMjUgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAzNTEgPj4Kc3RyZWFtCnicNZJLsmQhCETnroINVIR81fXUi44eVO9/2gdvvYFBCgJJYp2SKbXkpS6lJStMfnRElfhx+TdSU3xPyTTx3JJri9uS96jpYidvmuXXzhsBqafk3tKp7hKOP9YSqp2nnR299j0s/fGQ99IpSo9XENDgIkojvSzNuvoS5XyGThONQys8TsvF/VKzyU23WOdriK249j3cHuTVbxkJit0Fcng1l4Th2Xat3ZyLgsit1Dkw2aer1RSnlxsWoQxebWF+7KLPRQG7z7ClX+Rwa+QMHkjjqyQQl4rnSNAjlLeI2zatLj9QwpwXuZCxxURCclr8y6J3CEfY12Vu+SAzxaLFQcbZkmtSheUrs+UuOb3ZDgAWneDNAhd5reqyw2qJ+K0aAcLDbvu/+PffNMfHE1vJKZhvqdN6NOOqoOeBybo280YaqcEChXumYursjSTKBDMlVWOG/H7K9/g7/vwHybmCMAplbmRzdHJlYW0KZW5kb2JqCjI2IDAgb2JqCjw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMjExID4+CnN0cmVhbQp4nD1QS24FMQza5xQcIf7GPs+rqrd4vf+2eKJ2MyAzIEJ2YuM0P7kbxxVfsrQKYoWfNcdhn4dt4vmHezcP2LFh2bB2WCVceO2CW+K1nF6Pe/VTD8beowwzh29DpNC7EaVULA4rGUyJ4tDqB19L4zIdZR9I09tBRaIet6gwzVAEawok2c2OooYjBsnAIVf6j8mkepEV5u0zg+nF23GYF72qjGRaTZPgCunJFs4GelFHGeY1V4Pzj+BCLpMWwWxuENzEjKnOl5xp/7f6Z73X9y+yoE0nCmVuZHN0cmVhbQplbmRvYmoKMjcgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAyMjAgPj4Kc3RyZWFtCnicPZDLjQMxDEPvrkINLGD97XpmEeSy/V9XlJ0cBiYw5BOl2EGTbNEPK0W9aUK/PCwmaTj9tTKP+phcSquR+6JnGCf5dtK1KNhI7bzP0HmU5G6HhNyMmDVFNJqKF3PqTylJJTik8shwTvwpCqsQqHzn8JmzjjKOdqDbyaAtKGgP6mefZ7wH1tSw2g1KrBaXmuWTvLILJucCb7LqgsPoPVB1cWnF2QaWOIG0BlzeHVA1qsGyOmqhs91hwCCecxNwuLjey1fCrBUawIFKJ4OSoMSFxnfKe7z+AdDjVTUKZW5kc3RyZWFtCmVuZG9iagoxNiAwIG9iago8PCAvQmFzZUZvbnQgL0VWSUNBTytEZWphVnVTYW5zLUJvbGQgL0NoYXJQcm9jcyAxNyAwIFIKL0VuY29kaW5nIDw8Ci9EaWZmZXJlbmNlcyBbIDQ4IC96ZXJvIC9vbmUgL3R3byAvdGhyZWUgL2ZvdXIgL2ZpdmUgL3NpeCAvc2V2ZW4gL2VpZ2h0IC9uaW5lIF0KL1R5cGUgL0VuY29kaW5nID4+Ci9GaXJzdENoYXIgMCAvRm9udEJCb3ggWyAtMTA3MCAtNDE2IDE5NzYgMTE3NSBdIC9Gb250RGVzY3JpcHRvciAxNSAwIFIKL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0gL0xhc3RDaGFyIDI1NQovTmFtZSAvRVZJQ0FPK0RlamFWdVNhbnMtQm9sZCAvU3VidHlwZSAvVHlwZTMgL1R5cGUgL0ZvbnQgL1dpZHRocyAxNCAwIFIgPj4KZW5kb2JqCjE1IDAgb2JqCjw8IC9Bc2NlbnQgOTI5IC9DYXBIZWlnaHQgMCAvRGVzY2VudCAtMjM2IC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTA3MCAtNDE2IDE5NzYgMTE3NSBdIC9Gb250TmFtZSAvRVZJQ0FPK0RlamFWdVNhbnMtQm9sZAovSXRhbGljQW5nbGUgMCAvTWF4V2lkdGggMTQ0MCAvU3RlbVYgMCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL1hIZWlnaHQgMCA+PgplbmRvYmoKMTQgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDM0OCA0NTYgNTIxIDgzOCA2OTYKMTAwMiA4NzIgMzA2IDQ1NyA0NTcgNTIzIDgzOCAzODAgNDE1IDM4MCAzNjUgNjk2IDY5NiA2OTYgNjk2IDY5NiA2OTYgNjk2CjY5NiA2OTYgNjk2IDQwMCA0MDAgODM4IDgzOCA4MzggNTgwIDEwMDAgNzc0IDc2MiA3MzQgODMwIDY4MyA2ODMgODIxIDgzNwozNzIgMzcyIDc3NSA2MzcgOTk1IDgzNyA4NTAgNzMzIDg1MCA3NzAgNzIwIDY4MiA4MTIgNzc0IDExMDMgNzcxIDcyNCA3MjUKNDU3IDM2NSA0NTcgODM4IDUwMCA1MDAgNjc1IDcxNiA1OTMgNzE2IDY3OCA0MzUgNzE2IDcxMiAzNDMgMzQzIDY2NSAzNDMKMTA0MiA3MTIgNjg3IDcxNiA3MTYgNDkzIDU5NSA0NzggNzEyIDY1MiA5MjQgNjQ1IDY1MiA1ODIgNzEyIDM2NSA3MTIgODM4CjYwMCA2OTYgNjAwIDM4MCA0MzUgNjU3IDEwMDAgNTAwIDUwMCA1MDAgMTQ0MCA3MjAgNDEyIDExNjcgNjAwIDcyNSA2MDAgNjAwCjM4MCAzODAgNjU3IDY1NyA2MzkgNTAwIDEwMDAgNTAwIDEwMDAgNTk1IDQxMiAxMDk0IDYwMCA1ODIgNzI0IDM0OCA0NTYgNjk2CjY5NiA2MzYgNjk2IDM2NSA1MDAgNTAwIDEwMDAgNTY0IDY0NiA4MzggNDE1IDEwMDAgNTAwIDUwMCA4MzggNDM4IDQzOCA1MDAKNzM2IDYzNiAzODAgNTAwIDQzOCA1NjQgNjQ2IDEwMzUgMTAzNSAxMDM1IDU4MCA3NzQgNzc0IDc3NCA3NzQgNzc0IDc3NCAxMDg1CjczNCA2ODMgNjgzIDY4MyA2ODMgMzcyIDM3MiAzNzIgMzcyIDgzOCA4MzcgODUwIDg1MCA4NTAgODUwIDg1MCA4MzggODUwIDgxMgo4MTIgODEyIDgxMiA3MjQgNzM4IDcxOSA2NzUgNjc1IDY3NSA2NzUgNjc1IDY3NSAxMDQ4IDU5MyA2NzggNjc4IDY3OCA2NzgKMzQzIDM0MyAzNDMgMzQzIDY4NyA3MTIgNjg3IDY4NyA2ODcgNjg3IDY4NyA4MzggNjg3IDcxMiA3MTIgNzEyIDcxMiA2NTIgNzE2CjY1MiBdCmVuZG9iagoxNyAwIG9iago8PCAvZWlnaHQgMTggMCBSIC9maXZlIDE5IDAgUiAvZm91ciAyMCAwIFIgL25pbmUgMjEgMCBSIC9vbmUgMjIgMCBSCi9zZXZlbiAyMyAwIFIgL3NpeCAyNCAwIFIgL3RocmVlIDI1IDAgUiAvdHdvIDI2IDAgUiAvemVybyAyNyAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDE2IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL0NBIDAgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PgovQTIgPDwgL0NBIDEgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvTTAgMTMgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvQkJveCBbIC0xNi4xODAzMzk4ODc1IC0xNi4xODAzMzk4ODc1IDE2LjE4MDMzOTg4NzUgMTYuMTgwMzM5ODg3NSBdCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlIC9MZW5ndGggMTM5IC9TdWJ0eXBlIC9Gb3JtIC9UeXBlIC9YT2JqZWN0ID4+CnN0cmVhbQp4nG2QMQ7DMAhFd07BBb71ncSuWTvmGlmqSrn/mnQwcWUWC3/gfSDrV6i73A9yTrlx3fSUJVktrHkQS2o0tlthIpeVpq9kLNU2hUeHPGn0FmfAuS7x19I/T9ohneEOg5XzvTrie3hI4I8ZgsgL80iY58bfXggWR3AfhIdEcHGEThhW/Ii85QLpD1j2CmVuZHN0cmVhbQplbmRvYmoKMiAwIG9iago8PCAvQ291bnQgMSAvS2lkcyBbIDExIDAgUiBdIC9UeXBlIC9QYWdlcyA+PgplbmRvYmoKMjggMCBvYmoKPDwgL0NyZWF0aW9uRGF0ZSAoRDoyMDIyMDMwMjExMTEyOC0wNCcwMCcpCi9DcmVhdG9yIChNYXRwbG90bGliIHYzLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjUuMSkgPj4KZW5kb2JqCnhyZWYKMCAyOQowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAwNzExMCAwMDAwMCBuIAowMDAwMDA2NTk1IDAwMDAwIG4gCjAwMDAwMDY2MjcgMDAwMDAgbiAKMDAwMDAwNjcyNiAwMDAwMCBuIAowMDAwMDA2NzQ3IDAwMDAwIG4gCjAwMDAwMDY3NjggMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzM0IDAwMDAwIG4gCjAwMDAwMDE2OTYgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAxNjc1IDAwMDAwIG4gCjAwMDAwMDY4MDAgMDAwMDAgbiAKMDAwMDAwNTM4MiAwMDAwMCBuIAowMDAwMDA1MTcwIDAwMDAwIG4gCjAwMDAwMDQ3OTAgMDAwMDAgbiAKMDAwMDAwNjQ0MyAwMDAwMCBuIAowMDAwMDAxNzE2IDAwMDAwIG4gCjAwMDAwMDIxODkgMDAwMDAgbiAKMDAwMDAwMjUxNiAwMDAwMCBuIAowMDAwMDAyNjgzIDAwMDAwIG4gCjAwMDAwMDMwODcgMDAwMDAgbiAKMDAwMDAwMzI0MyAwMDAwMCBuIAowMDAwMDAzMzg2IDAwMDAwIG4gCjAwMDAwMDM3ODkgMDAwMDAgbiAKMDAwMDAwNDIxMyAwMDAwMCBuIAowMDAwMDA0NDk3IDAwMDAwIG4gCjAwMDAwMDcxNzAgMDAwMDAgbiAKdHJhaWxlcgo8PCAvSW5mbyAyOCAwIFIgL1Jvb3QgMSAwIFIgL1NpemUgMjkgPj4Kc3RhcnR4cmVmCjczMjcKJSVFT0YK\n",
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"293.4pt\" height=\"286.2pt\" viewBox=\"0 0 293.4 286.2\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n",
" <metadata>\n",
" <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
" <cc:Work>\n",
" <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
" <dc:date>2022-03-02T11:11:28.553390</dc:date>\n",
" <dc:format>image/svg+xml</dc:format>\n",
" <dc:creator>\n",
" <cc:Agent>\n",
" <dc:title>Matplotlib v3.5.1, https://matplotlib.org/</dc:title>\n",
" </cc:Agent>\n",
" </dc:creator>\n",
" </cc:Work>\n",
" </rdf:RDF>\n",
" </metadata>\n",
" <defs>\n",
" <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
" </defs>\n",
" <g id=\"figure_1\">\n",
" <g id=\"patch_1\">\n",
" <path d=\"M 0 286.2 \n",
"L 293.4 286.2 \n",
"L 293.4 0 \n",
"L 0 0 \n",
"z\n",
"\" style=\"fill: #ffffff\"/>\n",
" </g>\n",
" <g id=\"axes_1\">\n",
" <g id=\"LineCollection_1\">\n",
" <path d=\"M 273.518182 143.1 \n",
"L 26.088742 104.922355 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 273.518182 143.1 \n",
"L 107.511027 260.59871 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 273.518182 143.1 \n",
"L 221.241857 243.050372 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 273.518182 143.1 \n",
"L 267.311258 181.277645 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 273.518182 143.1 \n",
"L 249.298064 215.718196 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 273.518182 143.1 \n",
"L 267.311258 104.922355 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 273.518182 143.1 \n",
"L 185.888973 25.60129 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 273.518182 143.1 \n",
"L 249.298064 70.481804 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 107.511027 260.59871 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 221.241857 243.050372 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 267.311258 181.277645 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 185.888973 260.59871 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 267.311258 104.922355 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 44.101936 215.718196 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 185.888973 25.60129 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 26.088742 181.277645 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 249.298064 70.481804 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 146.7 19.554545 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 107.511027 25.60129 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 19.881818 143.1 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 72.158143 43.149628 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 104.922355 \n",
"L 44.101936 70.481804 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #ff0000\"/>\n",
" <path d=\"M 107.511027 260.59871 \n",
"L 221.241857 243.050372 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 260.59871 \n",
"L 267.311258 181.277645 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 260.59871 \n",
"L 185.888973 260.59871 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 260.59871 \n",
"L 267.311258 104.922355 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 260.59871 \n",
"L 44.101936 215.718196 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 260.59871 \n",
"L 26.088742 181.277645 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 260.59871 \n",
"L 72.158143 243.050372 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 260.59871 \n",
"L 146.7 266.645455 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 221.241857 243.050372 \n",
"L 267.311258 181.277645 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 221.241857 243.050372 \n",
"L 185.888973 260.59871 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 221.241857 243.050372 \n",
"L 249.298064 215.718196 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 221.241857 243.050372 \n",
"L 146.7 266.645455 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 267.311258 181.277645 \n",
"L 185.888973 260.59871 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 267.311258 181.277645 \n",
"L 249.298064 215.718196 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 267.311258 181.277645 \n",
"L 267.311258 104.922355 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 185.888973 260.59871 \n",
"L 249.298064 215.718196 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 185.888973 260.59871 \n",
"L 44.101936 215.718196 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 185.888973 260.59871 \n",
"L 72.158143 243.050372 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 185.888973 260.59871 \n",
"L 146.7 266.645455 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 267.311258 104.922355 \n",
"L 44.101936 215.718196 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 267.311258 104.922355 \n",
"L 185.888973 25.60129 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 267.311258 104.922355 \n",
"L 249.298064 70.481804 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 267.311258 104.922355 \n",
"L 221.241857 43.149628 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 44.101936 215.718196 \n",
"L 185.888973 25.60129 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 44.101936 215.718196 \n",
"L 26.088742 181.277645 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 44.101936 215.718196 \n",
"L 72.158143 243.050372 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 44.101936 215.718196 \n",
"L 19.881818 143.1 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 185.888973 25.60129 \n",
"L 26.088742 181.277645 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 185.888973 25.60129 \n",
"L 249.298064 70.481804 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 185.888973 25.60129 \n",
"L 146.7 19.554545 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 185.888973 25.60129 \n",
"L 107.511027 25.60129 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 185.888973 25.60129 \n",
"L 221.241857 43.149628 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 181.277645 \n",
"L 72.158143 243.050372 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 181.277645 \n",
"L 146.7 19.554545 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 181.277645 \n",
"L 107.511027 25.60129 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 26.088742 181.277645 \n",
"L 19.881818 143.1 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 249.298064 70.481804 \n",
"L 146.7 19.554545 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 249.298064 70.481804 \n",
"L 221.241857 43.149628 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 72.158143 243.050372 \n",
"L 146.7 266.645455 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 146.7 19.554545 \n",
"L 107.511027 25.60129 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 146.7 19.554545 \n",
"L 72.158143 43.149628 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 146.7 19.554545 \n",
"L 221.241857 43.149628 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 25.60129 \n",
"L 19.881818 143.1 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 25.60129 \n",
"L 72.158143 43.149628 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 107.511027 25.60129 \n",
"L 44.101936 70.481804 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #ff0000\"/>\n",
" <path d=\"M 19.881818 143.1 \n",
"L 72.158143 43.149628 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #000000\"/>\n",
" <path d=\"M 19.881818 143.1 \n",
"L 44.101936 70.481804 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #ff0000\"/>\n",
" <path d=\"M 72.158143 43.149628 \n",
"L 44.101936 70.481804 \n",
"\" clip-path=\"url(#pcaaa14c6a9)\" style=\"fill: none; stroke: #ff0000\"/>\n",
" </g>\n",
" <g id=\"PathCollection_1\">\n",
" <defs>\n",
" <path id=\"m428eac440e\" d=\"M 0 11.18034 \n",
"C 2.965061 11.18034 5.80908 10.002309 7.905694 7.905694 \n",
"C 10.002309 5.80908 11.18034 2.965061 11.18034 0 \n",
"C 11.18034 -2.965061 10.002309 -5.80908 7.905694 -7.905694 \n",
"C 5.80908 -10.002309 2.965061 -11.18034 0 -11.18034 \n",
"C -2.965061 -11.18034 -5.80908 -10.002309 -7.905694 -7.905694 \n",
"C -10.002309 -5.80908 -11.18034 -2.965061 -11.18034 0 \n",
"C -11.18034 2.965061 -10.002309 5.80908 -7.905694 7.905694 \n",
"C -5.80908 10.002309 -2.965061 11.18034 0 11.18034 \n",
"z\n",
"\" style=\"stroke: #9467bd\"/>\n",
" </defs>\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <use xlink:href=\"#m428eac440e\" x=\"273.518182\" y=\"143.1\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"26.088742\" y=\"104.922355\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"107.511027\" y=\"260.59871\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"221.241857\" y=\"243.050372\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"267.311258\" y=\"181.277645\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"185.888973\" y=\"260.59871\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"249.298064\" y=\"215.718196\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"267.311258\" y=\"104.922355\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"44.101936\" y=\"215.718196\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"185.888973\" y=\"25.60129\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"26.088742\" y=\"181.277645\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"249.298064\" y=\"70.481804\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"72.158143\" y=\"243.050372\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"146.7\" y=\"19.554545\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"107.511027\" y=\"25.60129\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"146.7\" y=\"266.645455\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"19.881818\" y=\"143.1\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"72.158143\" y=\"43.149628\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"221.241857\" y=\"43.149628\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" <use xlink:href=\"#m428eac440e\" x=\"44.101936\" y=\"70.481804\" style=\"fill: #9467bd; stroke: #9467bd\"/>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_1\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 0 -->\n",
" <g transform=\"translate(269.343494 146.41125)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-30\" d=\"M 2944 2338 \n",
"Q 2944 3213 2780 3570 \n",
"Q 2616 3928 2228 3928 \n",
"Q 1841 3928 1675 3570 \n",
"Q 1509 3213 1509 2338 \n",
"Q 1509 1453 1675 1090 \n",
"Q 1841 728 2228 728 \n",
"Q 2613 728 2778 1090 \n",
"Q 2944 1453 2944 2338 \n",
"z\n",
"M 4147 2328 \n",
"Q 4147 1169 3647 539 \n",
"Q 3147 -91 2228 -91 \n",
"Q 1306 -91 806 539 \n",
"Q 306 1169 306 2328 \n",
"Q 306 3491 806 4120 \n",
"Q 1306 4750 2228 4750 \n",
"Q 3147 4750 3647 4120 \n",
"Q 4147 3491 4147 2328 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-30\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_2\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 1 -->\n",
" <g transform=\"translate(21.914054 108.233605)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-31\" d=\"M 750 831 \n",
"L 1813 831 \n",
"L 1813 3847 \n",
"L 722 3622 \n",
"L 722 4441 \n",
"L 1806 4666 \n",
"L 2950 4666 \n",
"L 2950 831 \n",
"L 4013 831 \n",
"L 4013 0 \n",
"L 750 0 \n",
"L 750 831 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_3\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 2 -->\n",
" <g transform=\"translate(103.336339 263.90996)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-32\" d=\"M 1844 884 \n",
"L 3897 884 \n",
"L 3897 0 \n",
"L 506 0 \n",
"L 506 884 \n",
"L 2209 2388 \n",
"Q 2438 2594 2547 2791 \n",
"Q 2656 2988 2656 3200 \n",
"Q 2656 3528 2436 3728 \n",
"Q 2216 3928 1850 3928 \n",
"Q 1569 3928 1234 3808 \n",
"Q 900 3688 519 3450 \n",
"L 519 4475 \n",
"Q 925 4609 1322 4679 \n",
"Q 1719 4750 2100 4750 \n",
"Q 2938 4750 3402 4381 \n",
"Q 3866 4013 3866 3353 \n",
"Q 3866 2972 3669 2642 \n",
"Q 3472 2313 2841 1759 \n",
"L 1844 884 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-32\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_4\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 3 -->\n",
" <g transform=\"translate(217.067169 246.361622)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-33\" d=\"M 2981 2516 \n",
"Q 3453 2394 3698 2092 \n",
"Q 3944 1791 3944 1325 \n",
"Q 3944 631 3412 270 \n",
"Q 2881 -91 1863 -91 \n",
"Q 1503 -91 1142 -33 \n",
"Q 781 25 428 141 \n",
"L 428 1069 \n",
"Q 766 900 1098 814 \n",
"Q 1431 728 1753 728 \n",
"Q 2231 728 2486 893 \n",
"Q 2741 1059 2741 1369 \n",
"Q 2741 1688 2480 1852 \n",
"Q 2219 2016 1709 2016 \n",
"L 1228 2016 \n",
"L 1228 2791 \n",
"L 1734 2791 \n",
"Q 2188 2791 2409 2933 \n",
"Q 2631 3075 2631 3366 \n",
"Q 2631 3634 2415 3781 \n",
"Q 2200 3928 1806 3928 \n",
"Q 1516 3928 1219 3862 \n",
"Q 922 3797 628 3669 \n",
"L 628 4550 \n",
"Q 984 4650 1334 4700 \n",
"Q 1684 4750 2022 4750 \n",
"Q 2931 4750 3382 4451 \n",
"Q 3834 4153 3834 3553 \n",
"Q 3834 3144 3618 2883 \n",
"Q 3403 2622 2981 2516 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-33\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_5\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 4 -->\n",
" <g transform=\"translate(263.136571 184.588895)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-34\" d=\"M 2356 3675 \n",
"L 1038 1722 \n",
"L 2356 1722 \n",
"L 2356 3675 \n",
"z\n",
"M 2156 4666 \n",
"L 3494 4666 \n",
"L 3494 1722 \n",
"L 4159 1722 \n",
"L 4159 850 \n",
"L 3494 850 \n",
"L 3494 0 \n",
"L 2356 0 \n",
"L 2356 850 \n",
"L 288 850 \n",
"L 288 1881 \n",
"L 2156 4666 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-34\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_6\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 5 -->\n",
" <g transform=\"translate(181.714286 263.90996)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-35\" d=\"M 678 4666 \n",
"L 3669 4666 \n",
"L 3669 3781 \n",
"L 1638 3781 \n",
"L 1638 3059 \n",
"Q 1775 3097 1914 3117 \n",
"Q 2053 3138 2203 3138 \n",
"Q 3056 3138 3531 2711 \n",
"Q 4006 2284 4006 1522 \n",
"Q 4006 766 3489 337 \n",
"Q 2972 -91 2053 -91 \n",
"Q 1656 -91 1267 -14 \n",
"Q 878 63 494 219 \n",
"L 494 1166 \n",
"Q 875 947 1217 837 \n",
"Q 1559 728 1863 728 \n",
"Q 2300 728 2551 942 \n",
"Q 2803 1156 2803 1522 \n",
"Q 2803 1891 2551 2103 \n",
"Q 2300 2316 1863 2316 \n",
"Q 1603 2316 1309 2248 \n",
"Q 1016 2181 678 2041 \n",
"L 678 4666 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-35\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_7\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 6 -->\n",
" <g transform=\"translate(245.123377 219.029446)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-36\" d=\"M 2316 2303 \n",
"Q 2000 2303 1842 2098 \n",
"Q 1684 1894 1684 1484 \n",
"Q 1684 1075 1842 870 \n",
"Q 2000 666 2316 666 \n",
"Q 2634 666 2792 870 \n",
"Q 2950 1075 2950 1484 \n",
"Q 2950 1894 2792 2098 \n",
"Q 2634 2303 2316 2303 \n",
"z\n",
"M 3803 4544 \n",
"L 3803 3681 \n",
"Q 3506 3822 3243 3889 \n",
"Q 2981 3956 2731 3956 \n",
"Q 2194 3956 1894 3657 \n",
"Q 1594 3359 1544 2772 \n",
"Q 1750 2925 1990 3001 \n",
"Q 2231 3078 2516 3078 \n",
"Q 3231 3078 3670 2659 \n",
"Q 4109 2241 4109 1563 \n",
"Q 4109 813 3618 361 \n",
"Q 3128 -91 2303 -91 \n",
"Q 1394 -91 895 523 \n",
"Q 397 1138 397 2266 \n",
"Q 397 3422 980 4083 \n",
"Q 1563 4744 2578 4744 \n",
"Q 2900 4744 3203 4694 \n",
"Q 3506 4644 3803 4544 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-36\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_8\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 7 -->\n",
" <g transform=\"translate(263.136571 108.233605)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-37\" d=\"M 428 4666 \n",
"L 3944 4666 \n",
"L 3944 3988 \n",
"L 2125 0 \n",
"L 953 0 \n",
"L 2675 3781 \n",
"L 428 3781 \n",
"L 428 4666 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-37\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_9\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 8 -->\n",
" <g transform=\"translate(39.927248 219.029446)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-38\" d=\"M 2228 2088 \n",
"Q 1891 2088 1709 1903 \n",
"Q 1528 1719 1528 1375 \n",
"Q 1528 1031 1709 848 \n",
"Q 1891 666 2228 666 \n",
"Q 2563 666 2741 848 \n",
"Q 2919 1031 2919 1375 \n",
"Q 2919 1722 2741 1905 \n",
"Q 2563 2088 2228 2088 \n",
"z\n",
"M 1350 2484 \n",
"Q 925 2613 709 2878 \n",
"Q 494 3144 494 3541 \n",
"Q 494 4131 934 4440 \n",
"Q 1375 4750 2228 4750 \n",
"Q 3075 4750 3515 4442 \n",
"Q 3956 4134 3956 3541 \n",
"Q 3956 3144 3739 2878 \n",
"Q 3522 2613 3097 2484 \n",
"Q 3572 2353 3814 2058 \n",
"Q 4056 1763 4056 1313 \n",
"Q 4056 619 3595 264 \n",
"Q 3134 -91 2228 -91 \n",
"Q 1319 -91 855 264 \n",
"Q 391 619 391 1313 \n",
"Q 391 1763 633 2058 \n",
"Q 875 2353 1350 2484 \n",
"z\n",
"M 1631 3419 \n",
"Q 1631 3141 1786 2991 \n",
"Q 1941 2841 2228 2841 \n",
"Q 2509 2841 2662 2991 \n",
"Q 2816 3141 2816 3419 \n",
"Q 2816 3697 2662 3845 \n",
"Q 2509 3994 2228 3994 \n",
"Q 1941 3994 1786 3844 \n",
"Q 1631 3694 1631 3419 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-38\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_10\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 9 -->\n",
" <g transform=\"translate(181.714286 28.91254)scale(0.12 -0.12)\">\n",
" <defs>\n",
" <path id=\"DejaVuSans-Bold-39\" d=\"M 641 103 \n",
"L 641 966 \n",
"Q 928 831 1190 764 \n",
"Q 1453 697 1709 697 \n",
"Q 2247 697 2547 995 \n",
"Q 2847 1294 2900 1881 \n",
"Q 2688 1725 2447 1647 \n",
"Q 2206 1569 1925 1569 \n",
"Q 1209 1569 770 1986 \n",
"Q 331 2403 331 3084 \n",
"Q 331 3838 820 4291 \n",
"Q 1309 4744 2131 4744 \n",
"Q 3044 4744 3544 4128 \n",
"Q 4044 3513 4044 2388 \n",
"Q 4044 1231 3459 570 \n",
"Q 2875 -91 1856 -91 \n",
"Q 1528 -91 1228 -42 \n",
"Q 928 6 641 103 \n",
"z\n",
"M 2125 2350 \n",
"Q 2441 2350 2600 2554 \n",
"Q 2759 2759 2759 3169 \n",
"Q 2759 3575 2600 3781 \n",
"Q 2441 3988 2125 3988 \n",
"Q 1809 3988 1650 3781 \n",
"Q 1491 3575 1491 3169 \n",
"Q 1491 2759 1650 2554 \n",
"Q 1809 2350 2125 2350 \n",
"z\n",
"\" transform=\"scale(0.015625)\"/>\n",
" </defs>\n",
" <use xlink:href=\"#DejaVuSans-Bold-39\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_11\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 10 -->\n",
" <g transform=\"translate(17.739367 184.588895)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-30\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_12\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 11 -->\n",
" <g transform=\"translate(240.948689 73.793054)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_13\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 12 -->\n",
" <g transform=\"translate(63.808768 246.361622)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-32\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_14\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 13 -->\n",
" <g transform=\"translate(138.350625 22.865795)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-33\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_15\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 14 -->\n",
" <g transform=\"translate(99.161652 28.91254)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-34\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_16\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 15 -->\n",
" <g transform=\"translate(138.350625 269.956705)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-35\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_17\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 16 -->\n",
" <g transform=\"translate(11.532443 146.41125)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-36\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_18\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 17 -->\n",
" <g transform=\"translate(63.808768 46.460878)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-37\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_19\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 18 -->\n",
" <g transform=\"translate(212.892482 46.460878)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-38\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <g id=\"text_20\">\n",
" <g clip-path=\"url(#pcaaa14c6a9)\">\n",
" <!-- 19 -->\n",
" <g transform=\"translate(35.752561 73.793054)scale(0.12 -0.12)\">\n",
" <use xlink:href=\"#DejaVuSans-Bold-31\"/>\n",
" <use xlink:href=\"#DejaVuSans-Bold-39\" x=\"69.580078\"/>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" </g>\n",
" <defs>\n",
" <clipPath id=\"pcaaa14c6a9\">\n",
" <rect x=\"7.2\" y=\"7.2\" width=\"279\" height=\"271.8\"/>\n",
" </clipPath>\n",
" </defs>\n",
"</svg>\n"
],
"text/plain": [
"<Figure size 1500x1500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from matplotlib import pyplot as plt, animation\n",
"import networkx as nx\n",
"import random\n",
"import numpy as np\n",
"\n",
"import matplotlib_inline.backend_inline\n",
"matplotlib_inline.backend_inline.set_matplotlib_formats('svg', 'pdf')\n",
"\n",
"# parameters to change\n",
"m = 4\n",
"nodes_to_add = 15\n",
"fps = 1\n",
"filename = 'ani.gif'\n",
"\n",
"fig = plt.figure(figsize=(5,5), dpi=300)\n",
"G = nx.complete_graph(m + 1)\n",
"pi_rads = [2 * i / (m + 1) for i in range(m+1)]\n",
"circ = list(range(m+1))\n",
"\n",
"def pi_rad_to_xy(pi_rad):\n",
" return np.cos(np.pi * pi_rad), np.sin(np.pi * pi_rad)\n",
"\n",
"def add_node(m):\n",
" new_node = nx.number_of_nodes(G)\n",
" idx = random.randint(0, new_node - 1)\n",
" link = (circ[idx - 1], circ[idx])\n",
" G.add_node(new_node)\n",
" \n",
" lo = (idx - m//2) % len(circ)\n",
" hi = (idx + m//2) % len(circ)\n",
" \n",
" if hi < lo:\n",
" m_neighbors = circ[lo:]\n",
" m_neighbors.extend(circ[:hi])\n",
" else:\n",
" m_neighbors = circ[lo:hi]\n",
" \n",
" for node in m_neighbors:\n",
" G.add_edge(new_node, node)\n",
" \n",
" circ.insert(idx, new_node)\n",
" mean = (pi_rads[idx - 1] + pi_rads[idx]) / 2\n",
" if pi_rads[idx] <= 0 and pi_rads[idx - 1] > 0:\n",
" mean -= 1\n",
" pi_rads.insert(idx, mean)\n",
"\n",
"flag = [0, False]\n",
" \n",
"def animate(frame):\n",
" fig.clear()\n",
" plt.xlim([-1.1, 1.1])\n",
" plt.ylim([-1.1, 1.1])\n",
" if flag[0] > 1:\n",
" if flag[1]:\n",
" flag[1] = False\n",
" pi_rads_temp = [2 * i / nx.number_of_nodes(G) for i in range(nx.number_of_nodes(G))]\n",
" for i, pi_rad in enumerate(pi_rads_temp):\n",
" pi_rads[i] = pi_rad\n",
" else:\n",
" flag[1] = True\n",
" add_node(m)\n",
" edges = G.edges()\n",
" colors = ['r' if nx.number_of_nodes(G) - 1 in (u,v) else 'k' for u,v in edges]\n",
" else:\n",
" flag[0] = flag[0] + 1\n",
" colors = ['k'] * (nx.number_of_nodes(G) - 1)\n",
" \n",
" pos = {node: pi_rad_to_xy(pi_rad) for node, pi_rad in zip(circ, pi_rads)}\n",
" nx.draw(G, pos=pos, with_labels=True, node_size=500, node_color='C4', font_weight='bold', edge_color=colors)\n",
"\n",
"ani = animation.FuncAnimation(fig, animate, frames=2 * nodes_to_add + 1, interval=1000 / fps, repeat=True)\n",
"ani.save(filename)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1d6973ae-5447-4e45-af9f-d066f3e50019",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "64d2c01e-56c3-4fbc-a4c2-9aa6f19cec1b",
"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.9.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment