From 3810aa8001fe557d7d02e7790658dae4dc7639b2 Mon Sep 17 00:00:00 2001 From: Jeff Lantz Date: Wed, 1 Mar 2023 17:41:32 -0500 Subject: [PATCH 1/6] Added hooks for conda env, auto generate pdf, and .gitattribute for nbstripout --- .gitattributes | 3 + README.md | 8 ++ spider-algorithm.ipynb | 240 ++++++++++++++++++++++------------------- 3 files changed, 143 insertions(+), 108 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f24d933 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.ipynb filter=nbstripout +*.zpln filter=nbstripout +*.ipynb diff=ipynb diff --git a/README.md b/README.md index 492e99f..6926b54 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,11 @@ This directory contains an ipython notebook contianing Python code for the Spider Algorithm. Information on how it works and references are contained inside notebook. This project was done by Jeffrey Lantz and Riley Guyett as part of their senior theses with Professor Hubbard in Spring 2023. + +## Development Note: +The python environment is managed via (mini)conda, which can be installed [here](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html). The environment is managed in env.yaml, and should be automatically managed via git hooks. However, on initial install, one may need to run `conda env create -f env.yml` + +Additionally, as working with Jupyter notebooks in version control can be difficult, we have included `nbstripout` in the conda environment. This may need to be manually initialized with `nbstripout --install --attributes .gitattributes`. This makes `git diff` show fewer non-code related changes, at the expense of not showing output data. To counteract this, a pdf of the code is automatically generated and included with commits so a sample output is visible from the repository. +An alternative still being considered is to include hooks to do a 'clean run' of the notebook and export the code to a .py, but it's not clear that this is a better workflow pattern. + +In order to run the Jupyter Notebook, simply call `jupyter lab` from the root directory of the repository, then select `spider-algorithm.ipynb` from the file explorer on the left. Jupyterlab supports a few nice features over jupyter notebook, accessible under `Settings > Advanced Settings Editor`. Here you can change the theme to dark under `Theme > Selected Theme`, and enable automatically formatting the code on saving the notebook under `Jupyterlab Code Formatter > Auto format config`. diff --git a/spider-algorithm.ipynb b/spider-algorithm.ipynb index be0217a..4e5c2da 100644 --- a/spider-algorithm.ipynb +++ b/spider-algorithm.ipynb @@ -2,13 +2,14 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "import numpy as np\n", "import math\n", + "\n", "import matplotlib.pyplot as plt\n", + "import numpy as np\n", "from matplotlib.lines import Line2D" ] }, @@ -27,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -36,122 +37,156 @@ " ## It has legs that go off to infinity (or |z| = exp(2). Close enough)\n", " ## The legs land at points in C and do not cross.\n", " ## Spiders may be equivalent under a certain homotopy condition, which we currently ignore\n", - " \n", - " \n", + "\n", " ## A spider may be is defined by a rational angle\n", " ## In this case, it has legs going radially with endpoints at exp(2^j 2pi i theta)\n", - " def __init__(self, theta=0, endpoints=np.empty(0), legs=np.empty((0,0))):\n", - " if theta == 0: # If we are given the endpoints & legs\n", - " self.endpoints = endpoints # Give the endpoints\n", - " self.legs = legs # Give the legs\n", - " else: # If we are given the starting angle\n", - " angles = np.array([theta, theta*2 % 1]) # Initialize an array of angles\n", - " while not any(np.abs(angles[-1]*2 % 1 - angles[:-1]) < math.pow(10,-6)): # While the angles in the array differ by at least 10^-6\n", - " angles = np.append(angles, angles[-1]*2 % 1) # Add double the last angle to the array\n", - " self.endpoints = np.exp(2 * np.pi * 1j * angles) # The endpoints are points on the unit circle of those angles\n", - " self.legs = np.kron(np.linspace(1, 3, 100), self.endpoints[:, np.newaxis]) # Legs are straight lines perpindicular to the circle\n", - " self.divline = np.linspace(-1,1,100)*np.sqrt(self.endpoints[0]) # Constructs the appropriate line dividing the space in two halves\n", - " self.knead = [] # Initialize the kneading sequence\n", - " for point in self.endpoints: # For each endpoint\n", - " if round((point / np.sqrt(self.endpoints[0])).imag,7) > 0: # If the endpoint is in region A\n", - " self.knead.append('A') # Give it a kneading value of 'A'\n", - " elif round((point / np.sqrt(self.endpoints[0])).imag,7) < 0: # If the endpoint is in region B\n", - " self.knead.append('B') # Give it a kneading value of 'B'\n", - " elif round((point / np.sqrt(self.endpoints[0])).real,7) == -1: # If the endpoint hits the cc boundary of A\n", - " self.knead.append('*1') # Give it a kneading value of '*1'\n", - " elif round((point / np.sqrt(self.endpoints[0])).real,7) == 1: # If the endpoint hits the C boundary of A\n", - " self.knead.append('*2') # Give it a kneading value of '*2'\n", - " \n", - " def graph(self,draw_circ=False): # To graph the spider\n", - " plt.figure(figsize=(10,10)) # Makes a 10x10 grid\n", - " for leg in self.legs: # For each leg\n", - " plt.plot(leg.real, leg.imag, 'black') # Plot the leg in black\n", + " def __init__(self, theta=0, endpoints=np.empty(0), legs=np.empty((0, 0))):\n", + " if theta == 0: # If we are given the endpoints & legs\n", + " self.endpoints = endpoints # Give the endpoints\n", + " self.legs = legs # Give the legs\n", + " else: # If we are given the starting angle\n", + " angles = np.array([theta, theta * 2 % 1]) # Initialize an array of angles\n", + " while not any(\n", + " np.abs(angles[-1] * 2 % 1 - angles[:-1]) < math.pow(10, -6)\n", + " ): # While the angles in the array differ by at least 10^-6\n", + " angles = np.append(\n", + " angles, angles[-1] * 2 % 1\n", + " ) # Add double the last angle to the array\n", + " self.endpoints = np.exp(\n", + " 2 * np.pi * 1j * angles\n", + " ) # The endpoints are points on the unit circle of those angles\n", + " self.legs = np.kron(\n", + " np.linspace(1, 3, 100), self.endpoints[:, np.newaxis]\n", + " ) # Legs are straight lines perpindicular to the circle\n", + " self.divline = np.linspace(-1, 1, 100) * np.sqrt(\n", + " self.endpoints[0]\n", + " ) # Constructs the appropriate line dividing the space in two halves\n", + " self.knead = [] # Initialize the kneading sequence\n", + " for point in self.endpoints: # For each endpoint\n", + " if (\n", + " round((point / np.sqrt(self.endpoints[0])).imag, 7) > 0\n", + " ): # If the endpoint is in region A\n", + " self.knead.append(\"A\") # Give it a kneading value of 'A'\n", + " elif (\n", + " round((point / np.sqrt(self.endpoints[0])).imag, 7) < 0\n", + " ): # If the endpoint is in region B\n", + " self.knead.append(\"B\") # Give it a kneading value of 'B'\n", + " elif (\n", + " round((point / np.sqrt(self.endpoints[0])).real, 7) == -1\n", + " ): # If the endpoint hits the cc boundary of A\n", + " self.knead.append(\"*1\") # Give it a kneading value of '*1'\n", + " elif (\n", + " round((point / np.sqrt(self.endpoints[0])).real, 7) == 1\n", + " ): # If the endpoint hits the C boundary of A\n", + " self.knead.append(\"*2\") # Give it a kneading value of '*2'\n", + "\n", + " def graph(self, draw_circ=False): # To graph the spider\n", + " plt.figure(figsize=(10, 10)) # Makes a 10x10 grid\n", + " for leg in self.legs: # For each leg\n", + " plt.plot(leg.real, leg.imag, \"black\") # Plot the leg in black\n", " if draw_circ == True:\n", - " plt.plot(np.exp(np.linspace(0, 2*np.pi, 100) * 1j).real, np.exp(np.linspace(0, 2*np.pi, 100) * 1j).imag, 'black') # Plot the unit circle in black\n", - " limit=5 # Set limits for axis\n", - " plt.plot(self.divline.real,self.divline.imag,'red') # Plots the dividing line in red\n", - " plt.scatter(self.endpoints.real,self.endpoints.imag, s=20, marker='o') # Plots the endpoints of the spider in blue\n", - " i = 0 # Intializing an index\n", - " while i < len(self.endpoints): # While this is a valid index for an endpoint\n", - " plt.text(1.1*self.legs[i][99].real, 1.1*self.legs[i][99].imag,'z_'+str(i+1)) # Label the endpoints\n", - " i += 1 # Increase the index\n", - " plt.xlim((-limit,limit)) # Plot real axis\n", - " plt.ylim((-limit,limit)) # Plot imaginary axis\n", - " plt.ylabel('Imaginary') # Label the imaginary axis\n", - " plt.show() # Show the plot\n", - " \n", + " plt.plot(\n", + " np.exp(np.linspace(0, 2 * np.pi, 100) * 1j).real,\n", + " np.exp(np.linspace(0, 2 * np.pi, 100) * 1j).imag,\n", + " \"black\",\n", + " ) # Plot the unit circle in black\n", + " limit = 5 # Set limits for axis\n", + " plt.plot(\n", + " self.divline.real, self.divline.imag, \"red\"\n", + " ) # Plots the dividing line in red\n", + " plt.scatter(\n", + " self.endpoints.real, self.endpoints.imag, s=20, marker=\"o\"\n", + " ) # Plots the endpoints of the spider in blue\n", + " i = 0 # Intializing an index\n", + " while i < len(self.endpoints): # While this is a valid index for an endpoint\n", + " plt.text(\n", + " 1.1 * self.legs[i][99].real,\n", + " 1.1 * self.legs[i][99].imag,\n", + " \"z_\" + str(i + 1),\n", + " ) # Label the endpoints\n", + " i += 1 # Increase the index\n", + " plt.xlim((-limit, limit)) # Plot real axis\n", + " plt.ylim((-limit, limit)) # Plot imaginary axis\n", + " plt.ylabel(\"Imaginary\") # Label the imaginary axis\n", + " plt.show() # Show the plot\n", + "\n", " def update(self):\n", - " z_2 = self.endpoints[1] # Select z_2 so we don't have to keep calling it\n", - " i = 0 # Initialize an index\n", - " new_endpoints= np.empty(0) # Initialize an array for future endpoints\n", - " while i " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "favorite.graph(True)" ] }, { "cell_type": "code", - "execution_count": 44, - "metadata": { - "scrolled": false - }, + "execution_count": null, + "metadata": {}, "outputs": [], "source": [ "favorite.update()" @@ -159,20 +194,9 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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/vvva+HChZKkAgUK6JNPPtHrr78ui8WSov3/8ssvev/99/Xzzz9LsheqESNGKCQkRN7e95++HADgfphWHABwLw8PacoUafBg+/LAgfbC5ES/OyuWJ5vqPJo3qSxJ9lKzYMECbdiwQaVLl9b58+f1xhtvqHHjxim+WW21atW0bds2rVy5UqVKlVJkZKS6deumJ554Ql9//bUy0e8RAQDJQGECgMzGYpFCQ6UJE+zLH34ode1qH31ycs8995z27dun4cOHy8fHR2vXrlXZsmU1fvz4ZE8KIdknl2jatKn+/PNPTZ06VUFBQfrrr7/UtGlT1axZUzt27EjHTwEAcCUUJgDIrN5/X5o5016gZsywX9eUgtJhFj8/P40YMUJ//PGHateurVu3bql///56+umn9csvv6RoX97e3urWrZsiIiI0ePBgZcmSRdu2bVO1atXUrFkzRUREpNOnAAC4CgoTAGRmnTpJX34peXlJixfbZ9CLjTU7VbI8+uij+umnn7RgwQLlzp1b+/fvV/Xq1fXOO+/o2rVrKdpXQECAQkNDdfToUbVv314Wi0UrVqzQ448/rl69euny5cvp8yEAAE6PwgQAmV3z5tKqVZKfn7Rmjf1eTS4yc5zFYlHr1q11+PBhtW3bVjabTTNmzFCZMmW0dOnSFF+PVKhQIX322Wfat2+fGjZsqISEBE2ZMkUlSpTQ2LFjdevWrXT6JAAAZ0VhAgBIjRtLa9fa79m0caP9RrdXr5qdKtny5MmjefPmaePGjXr00Ud18eJFvfnmm2rUqJGOHz+e4v2VK1dO33//vcLDw1WhQgVFR0dr0KBBKl26tObPn6/ExMR0+BQAAGdEYQIA2NWubS9LuXNLv/4q1aolnT9vdqoUqV27tvbt26cRI0bIx8dHP/zwg5544gmNGzcuRZNC3FGvXj39/vvvWrhwoYoUKaK///5b7dq101NPPaV169alwycAADgbChMA4P9VqiRt2SIVLCgdOCA9+6yUwmm7zebr66vhw4dr//79eu6553Tr1i0NHDhQTz31VNK9l1LCw8NDrVq10pEjRzR+/HgFBgbqjz/+0AsvvKD69etr7969jv8QAACnQWECANzt8celrVulYsWk48elGjWkQ4fMTpVipUuX1o8//qgFCxYoT548OnDggKpXr64uXbron3/+SfH+/Pz81LdvXx07dky9e/eWt7e3wsPD9dRTT6lNmzY6c+ZMOnwKAIDZKEwAgHsVLy5t22YvT2fPSjVrSrt3m50qxf49KUS7du0kSTNnzlSZMmX05Zdfpuomtblz59akSZN0+PBhNW/eXDabTQsXLlTp0qU1cOBARUVFOfpjAABMRGECANxfwYLS5s320/QuX5bq1LGPPLmg3Llza+7cudq0aZPKlCmjS5cu6a233tILL7yQqkkhJKl48eJasmSJfv31V9WqVUuxsbEaN26cSpQooSlTpig+Pt7BnwIAYAYKEwDAWJ480oYN9gkgoqOlBg3ss+m5qFq1amnv3r0aNWqUfH19tX79epUtW1ZjxoxJdcGpXLmyNm7cqNWrV6tMmTK6cuWKevXqpccff1zLly9P1SgWAMB5UJgAAA8WEGAvSY0aSbduSa+8Ii1fbnaqVPP19dXQoUO1f/9+1a1bV7GxsRo8eLAqVqyobdu2pWqfFotFL7/8svbv368ZM2YoX758OnbsmN544w1Vq1Yt1fsFAJiPwgQAeLgsWaSvv7bf5DYhQXrzTWnuXLNTpUmpUqUUHh6uzz//XEFBQTp48KBq1KihTp06pWpSCEny8vJS586dFRERoREjRihbtmzauXOnatSooSZNmujIkSMO/hQAgPRGYQIAJI+Pj7RokdSpk2S1Sh06SJMnm50qTSwWi95++20dOnRIHTp0kCTNnj1bZcqU0eLFi1N9Ol327Nk1fPhwRUREqHPnzvL09NTq1atVtmxZde3aVRcvXnTkxwAApCMKEwAg+Tw9pRkzpL597cvvviuNGCG5+HU6uXPn1pw5c7RlyxY99thjunTpklq2bKkGDRro2LFjqd5v/vz5NWPGDO3fv18vvfSSEhMTNX36dJUsWVKjRo1STEyMAz8FACA9UJgAACljsUgffiiFhtqXR460Fyer1dxcDlCjRg3t3btXo0ePlq+vr8LDw/XEE0/ogw8+SNOsd4899pi++eYbbdq0SZUrV9aNGzc0fPhwlSpVSnPmzFFiYqIDPwUAwJEoTACAlLNYpMGDpbAw+/Inn9hP0bt929xcDuDj46MhQ4bowIEDqlevnmJjYzVkyBBVrFhRW9M4rXqtWrW0c+dOLVmyRMWKFdP58+cVEhKiJ598Ut999x0z6gGAE6IwAQBSr3t3acEC+6l68+fbJ4OIizM7lUOULFlS69ev1xdffKG8efPq4MGDqlmzpkJCQnT16tVU79disah58+Y6dOiQJk2apJw5c+rPP//Uiy++qLp16+r333934KcAAKQVhQkAkDatW0srVtgnhTh3zi1Gme6wWCxq2bKlDh06pI4dO0qS5syZozJlyuiLL75I04iQr6+vevfurWPHjqlv377y9fXVxo0bValSJbVs2VInT5500KcAAKSFxZaJxv+jo6MVGBioqKgoBQQEmB0HANzL1q3SE09IOXOanSTdbNu2TZ07d9bBgwclSXXr1tWMGTNUsmTJNO/71KlTGjJkiL744gtJ9lMDe/ToocGDByunG/83BQCzJLcbMMIEAHCMGjXcuixJ0rPPPqs9e/YoNDRUfn5+2rBhg5544gmFhoamaVIISSpatKg+//xz/f7776pbt67i4+P10UcfqUSJEvroo48U5yanOgKAq6EwAQCQAj4+Pho8eLAOHDig559/XnFxcRo6dKgqVKigLVu2pHn/Tz31lMLDw/X999/riSee0D///KP3338/6d5QVjeYjRAAXAmFCQCAVChRooTWrVunxYsXK2/evDp06JBq1aqlDh066MqVK2nat8ViUcOGDbV371599tlnKliwoE6ePKmWLVuqSpUq2rhxo4M+BQDgYShMAACkksViUYsWLXT48GF16tRJkjR37lyVKVNGCxcuTPM04Z6enmrfvr2OHj2q0NBQ+fv76/fff9dzzz2nF198UX/++acjPgYA4AEoTAAApFHOnDk1c+ZMbdu2TWXLltXly5fVpk0b1atXT3/99VfS+45H3tDGI5d04nJMivafNWtWDR48WBEREerWrZu8vLz03XffqXz58goJCdG5c+cc/ZEAAP/FLHkAADjQnckaRo0apdjYWPn6+uq9fgN0smA9bT8ZlfS+mqWCFNaiogKzeqf4GH/99ZcGDhyor776SpK9UL333nvq27ev/P39HfZZAMCdJbcbUJgAAEgHx48fV9euXbVu3TpJkneuwsrVoJv8ipSTJHlaLKpeMo8WdqiS6mNs375dffv21S+//CJJyps3r0aMGKGOHTvK2zvlRQwAMhOmFQcAwETFixfX2rVrNXnmPHlky6GEq3/r4pcDdfn7yUq8Fa1Em01bjkam+PS8f6tevbq2b9+uFStWqGTJkrp06ZK6du2qcuXKafXq1Wm+hgoAQGECACDdWCwWla/VSAU7zlD2Cg0lSTH7f9S52V1048AG2Ww2nbyS+sJ05xivvfaaDh48qLCwMOXJk0dHjhxRkyZNVLNmTe3cudMRHwUAMi0KEwAA6ahorqzy9Muu3A26KV/LCfLOU1TWW9G68t0kXVwyWNZ/zjrkON7e3urevbsiIiI0cOBA+fn5adu2bXrmmWfUvHlzRUREOOQ4AJDZUJgAAEhHxYOyq2apIHlaLPIr/JgKtP1EOWq1lcXLV3Gn/1CjWs9o5MiRiouLc8jxAgMDNWbMGB09elRt27aVxWLRsmXL9Pjjj6tXr166fPmyQ44DAJkFkz4AAJDOom4mqMeXe7TlaGTSuoo5EnTjpxn6Mdw+KcSjjz6qGTNmqHbt2g499h9//KF+/folTT4REBCggQMHqlevXsqSJYtDjwUAroRZ8u6DwgQAMNOJyzE6eSVGj+TOpmJ5sslms2nZsmXq3bu3Lly4IElq06aNJk6cqDx58jj02OHh4erbt6/27dsnSQoODlZoaKjefvtteXhwwgmAzIdZ8gAAcDLF8mRTnUfzqliebJLsEzY0b95chw4d0jvvvCOLxaIFCxaoTJkymj9/vkNnuXv++ee1e/duLViwQMHBwTpz5ozatGmjp556SuHh4Q47DgC4GwoTAAAmy5Ejhz799FNt375d5cqV05UrV9SuXTs999xzOnLkiMOO4+HhodatW+vIkSMaN26cAgMDtW/fPtWvX18NGjTQH3/84bBjAYC7oDABAOAkqlWrpt9//10ffvihsmTJok2bNql8+fIaPny4YmNjHXacLFmyqH///jp27Jh69eolb29vrV+/XhUqVFDbtm31999/O+xYAODqKEwAADgRb29v9evXTwcPHlSjRo0UHx+vUaNGqXz58vrpp58ceqzcuXNr8uTJOnTokJo3by6bzaYFCxaoVKlSGjRokKKiohx6PABwRRQmAACc0COPPKJvv/1Wy5YtU4ECBXT06FHVrVtXbdq0UWRk5MN3kAIlSpTQkiVLtHPnTtWoUUOxsbEaO3asSpYsqbCwMMXHxzv0eADgSihMAAA4KYvFombNmunQoUPq2rWrLBaLFi5cqDJlymjevHkOnRRCkqpUqaLNmzdr1apVKlOmjC5fvqyePXuqbNmyWrFihcOPBwCugMIEAICTCwwM1LRp0/TLL7+ofPnyunr1qtq3b686dero0KFDDj2WxWLRK6+8ov3792vGjBnKly+fIiIi1KxZM/3nP//R9u3bHXo8AHB2FCYAAFxE1apVtWvXLk2YMEFZs2bV5s2b9eSTT2rYsGEOnRRCkry8vNS5c2cdPXpUw4YNU9asWbVjxw49++yzatq0qY4dO+bQ4wGAs6IwAWmQmJio/v376+zZs2ZHAZBJeHt76/3339eff/6pRo0aKSEhQaNHj1b58uW1YcMGhx/P399fI0eOVEREhEJCQuTh4aGvv/5aV69edfixAMAZUZiANAgLC9P48eP1n//8RwkJCWbHAZCJ3JkUYvny5UmTQtSrV0+tWrXSpUuXHH68AgUKaNasWdq/f78mTpyoypUrO/wYAOCMLLZMdAVndHS0AgMDFRUVpYCAALPjwMWdPn1ajz/+uGJiYjRr1iyFhISYHQlAJhUVFaXBgwfr008/lc1mU86cOTVhwgS1a9dOHh78bhQA7ie53YDvokAq2Gw2de3aVTExMapRo4Y6dOhgdiQAmVhgYKCmTp2qHTt2qEKFCvrnn3/UsWNH1a5dWwcPHjQ7HgC4NAoTkArLly/Xd999J29vb82cOZPf4AJwClWqVNFvv/2miRMnKmvWrNq6dasqVKigIUOG6NatW2bHS5ZNmzbplVdeUYECBZQtWzZVqFBBixYtMjsWgEyMn/KAFLp27Zp69eolSRo4cKAee+wxkxMBwP/z8vLSe++9p4MHD+qll15SQkKCPvjgA5UrV04//vij2fEe6ueff1b58uW1cuVK/fHHH2rXrp1at26tb7/91uxoADIprmECUqhTp06aPXu2Hn30Ue3bt0++vr5mRwKA+7LZbFq1apW6d++uc+fOSZJatmypjz/+WHnz5k3XY588eVLFihW7Z32tWrW0adOmFO2rcePGypcvn+bOneugdADANUxAutiyZYtmz54tSZo1axZlCYBTs1gsevXVV3Xo0CH16NFDFotFixYtUpkyZTR79mxZrdZ0O3ZwcLDOnz+f9NizZ49y586tmjVrpnhfUVFRypUrVzqkBICHY4QJSKa4uDg9+eSTOnLkiDp27JhUnADAVezatUudOnXSnj17JEnVq1fXzJkzVbZs2XQ9bmxsrGrXrq2goCCtXr06Rdd9Llu2TK1atdLu3bvTPSeAzIURJsDBxo0bpyNHjihfvnwaP3682XEAIMUqVaqkX3/9VR999JGyZcum7du3q0KFCho8eHC6TgrRvn17Xb9+XYsXL05RWdq4caPatWun2bNnU5YAmIbCBCTDoUOHNGbMGEnSlClTlDNnTpMTAUDqeHl5qU+fPjp48KBefvll3b59W2PGjFG5cuUUHh7u8OOFhoZq3bp1+uabb+Tv75/s7TZv3qyXXnpJkyZNUuvWrR2eCwCSi8IEPITValXnzp0VHx+vxo0bq1mzZmZHAoA0K1KkiFavXq2vvvpKhQoV0rFjx1S/fn299dZbunjxokOOsXLlSo0aNUrLli1TiRIlkr3dpk2b1LhxY3344Yfq1KmTQ7IAQGpRmICHmDt3rrZu3aps2bJp2rRpslgsZkcCAIe5MylEr1695OHhoS+//FJlypTRvHnz0rTfAwcOqHXr1urfv7/Kli2rCxcu6MKFC7p69eoDt9u4caMaN26snj176rXXXkv2dgCQXihMwANcuHBBffv2lSSNHj1aRYsWNTkRADiev7+/Jk+erF9//VVPPfWUrl27ppMnT6Zpn7t27dLNmzcVGhqqAgUKJD2aNm36wO0WLFigmzdvauzYsSnaDgDSC7PkAQ/QvHlzLVu2TE8//bR27twpT09PsyMBQLq6ffu25s2bp1atWsnPz8/sOACQbpLbDbwyMBPgUr777jstW7ZMnp6emj17NmUJQKbg5eWlkJAQs2MAgNPglDzgPm7cuKGuXbtKkt59911VrFjR5EQA4B4aNmyo7Nmz3/dxZzZSAHAmjDAB9zFs2DCdPn1ajzzyiEaMGGF2HABwG3PmzDG851OuXLkyOA0APByFCfgfu3bt0ieffCJJmj59urJly2ZyIgBwH4UKFTI7AgCkCKfkAf9y+/ZthYSEyGq16q233tILL7xgdiQAAACYiMIE/MvkyZO1d+9e5cyZU5MmTTI7DgAAAEzmEoXp5MmT6tChg4oVK6YsWbKoRIkSGj58uOLj482OBjdy4sQJDRs2TJI0ceJE5c2b1+REAAAAMJtLXMN0+PBhWa1WzZw5UyVLltSBAwcUEhKimJgYTZw40ex4cAM2m03vvPOObt26pdq1a6tdu3ZmRwIAAIATcNkb106YMEHTp0/X8ePHk70NN66FkcWLF6tly5by9fXVH3/8odKlS5sdCQAAAOnI7W9cGxUV9dDpR+Pi4hQXF5e0HB0dnd6x4IKuXr2q3r17S5KGDBlCWQIAAEASl7iG6X9FREQoLCxMnTt3fuD7xo4dq8DAwKRHcHBwBiWEK+nbt68iIyP1+OOPq1+/fmbHAQAAgBMxtTANGDBAFovlgY/Dhw/ftc3Zs2f1wgsvqFmzZgoJCXng/gcOHKioqKikx5kzZ9Lz48AFbdy4UXPnzpUkzZo1Sz4+PiYnAgAAgDMx9RqmyMhIXbly5YHvKV68eNIPsefOnVPt2rX1zDPPaP78+fLwSFnf4xom/FtsbKzKly+vo0ePqkuXLpo+fbrZkQAAAJBBXOIapqCgIAUFBSXrvWfPnlWdOnX09NNPa968eSkuS8D/+uCDD3T06FEVKFBA48aNMzsOAAAAnJBLTPpw9uxZ1a5dW0WLFtXEiRMVGRmZ9Fr+/PlNTAZX9eeffyaVpLCwMAUGBpqcCAAAAM7IJQpTeHi4IiIiFBERocKFC9/1movOig4TWa1WderUSbdv39Yrr7yipk2bmh0JAAAATsolzmtr27atbDbbfR9ASs2cOVM///yzsmfPrqlTp8pisZgdCQAAAE7KJQoT4Cjnzp3TgAEDJEljxoy5Z8QSAAAA+DcKEzKVHj16KDo6WlWrVlXXrl3NjgMAAAAnR2FCprF69Wp99dVX8vLy0qxZs+Tp6Wl2JAAAADg5ChMyhevXr6tbt26SpL59+6p8+fImJwIAAIAroDAhUxg0aJDOnj2rEiVKaOjQoWbHAQAAgIugMMHt7dy5U9OmTZMkzZgxQ1myZDE5EQAAAFwFhQluLSEhQSEhIbLZbGrdurXq1atndiQAAAC4EAoT3NrHH3+s/fv3K3fu3Proo4/MjgMAAAAXQ2GC2zp27JhGjBghyV6c8uTJY24gAAAAuBwKE9ySzWZT586dFRsbq7p166pVq1ZmRwIAAIALojDBLX3++efasGGD/Pz8NGPGDFksFrMjAQAAwAVRmOB2IiMj1adPH0nS8OHDVbJkSZMTAQAAwFVRmOB23nvvPV25ckXly5fXe++9Z3YcAAAAuDAKE9xKeHi4Pv/8c1ksFs2aNUve3t5mRwIAAIALozDBbdy8eVNdunSRJHXv3l1Vq1Y1OREAAABcHYUJbmP06NE6fvy4ChcurNDQULPjAAAAwA1QmOAW/vjjD02YMEGSNG3aNAUEBJicCAAAAO6AwgSXl5iYqJCQECUmJqpp06Z6+eWXzY4EAAAAN0Fhgsv79NNP9euvvyogIEBhYWFmxwEAAIAboTDBpZ05c0aDBg2SJI0bN04FCxY0OREAAADcCYUJLstms6lbt266ceOGqlWrps6dO5sdCQAAAG6GwgSX9dVXX2nNmjXy9vbW7Nmz5eHBlzMAAAAci58w4ZKioqLUo0cPSVL//v1VtmxZkxMBAADAHVGY4JIGDhyo8+fPq1SpUho8eLDZcQAAAOCmKExwOdu3b9f06dMlSTNnzpSfn5/JiQAAAOCuKExwKfHx8erUqZMkqV27dqpTp47JiQAAAODOKExwKePHj9fBgwcVFBSkiRMnmh0HAAAAbo7CBJfx119/KTQ0VJI0efJk5cqVy+REAAAAcHcUJrgEm82mzp07Ky4uTg0aNFCLFi3MjgQAAIBMgMIElzBv3jxt2rRJWbNm1fTp02WxWMyOBAAAgEyAwgSnd+nSJb3//vuSpJEjR6pYsWImJwIAAEBmQWGC03v33Xf1zz//qGLFiurdu7fZcQAAAJCJUJjg1H744QctXrxYHh4emjVrlry8vMyOBAAAgEyEwgSnFRMTo3feeUeS1LNnT1WqVMnkRAAAAMhsKExwWsOHD9fJkydVpEgRjR492uw4AAAAyIQoTHBKe/bs0eTJkyVJ06dPV/bs2c0NBAAAgEyJwgSnc/v2bYWEhCgxMVFvvPGGGjVqZHYkAAAAZFIUJjidsLAw/f7778qRI4c++eQTs+MAAAAgE6MwwamcOnVKQ4YMkSSNHz9e+fPnNzkRAAAAMjMKE5yGzWZTt27ddPPmTdWoUUMdOnQwOxIAAAAyOQoTnMayZcv03XffycfHRzNnzpSHB1+eAAAAMBc/kcIp/PPPP+rVq5ckadCgQXrsscdMTgQAAABQmOAk+vXrp4sXL+qxxx7TgAEDzI4DAAAASKIwwQls2bJFc+bMkSTNnDlTvr6+JicCAAAA7ChMMFVcXJw6deokSQoJCVGNGjVMTgQAAAD8PwoTTDV27FgdOXJE+fPn1/jx482OAwAAANyFwgTTHDp0SGPGjJEkffLJJ8qRI4e5gQAAAID/QWGCKaxWqzp16qSEhAQ1btxYzZo1MzsSAAAAcA8KE0wxZ84cbdu2TdmyZdOnn34qi8VidiQAAADgHhQmZLjz58+rX79+kqTQ0FAVKVLE5EQAAADA/VGYkOF69eqlqKgoPf300+rRo4fZcQAAAABDFCZkqG+//VbLly+Xp6enZs+eLU9PT7MjAQAAAIYoTMgwN27cUNeuXSVJffr0UcWKFU1OBAAAADwYhQkZZsiQITpz5oyKFSum4cOHmx0HAAAAeCgKEzLEb7/9prCwMEnS9OnTlS1bNpMTAQAAAA9HYUK6S0hIUEhIiKxWq1q2bKkGDRqYHQkAAABIFgoT0t3kyZO1b98+5cqVSx9//LHZcQAAAIBkozAhXR0/fjzpeqWPPvpIefPmNTkRAAAAkHwUJqQbm82md955R7du3VKdOnXUpk0bsyMBAAAAKUJhQrpZvHix1q9fL19fX82YMUMWi8XsSAAAAECKUJiQLq5cuaJ3331XkjR06FCVLl3a5EQAAABAylGYkC7ef/99RUZGqmzZsurbt6/ZcQAAAIBUoTDB4X766SfNnz9fFotFs2bNko+Pj9mRAAAAgFShMMGhYmNj1blzZ0lSly5d9J///MfkRAAAAEDqUZjgUKGhoYqIiFDBggU1duxYs+MAAAAAaUJhgsPcvn1b33//vSRp6tSpCgwMNDkRAAAAkDZeZgeA+/Dy8tKOHTu0atUqvfrqq2bHAQAAANKMESY4lI+Pj9544w2zYwAAAAAOQWECAAAAAAMUJgAAAAAwQGECAAAAAAMUJgAAAAAwQGECAAAAAAMUJgAAAAAwQGECAAAAAAMUJgAAAAAwQGECAAAAAAMUJgAAAAAwQGECAAAAAAMUJjxURESE/P39lSNHDrOjAAAAABmKwoQHSkhIUIsWLVSjRg2zowAAAAAZjsLk5k6ePCmLxXLPo3bt2snafsiQISpTpozeeOON9A0KAAAAOCEvswMgfQUHB+v8+fNJyxcuXFC9evVUs2bNh277008/afny5dq7d6+++uqr9IwJAAAAOCUKk5vz9PRU/vz5JUmxsbFq0qSJqlWrphEjRjxwuytXrqht27b64osvFBAQkAFJAQAAAOdDYcpE2rdvr+vXrys8PFweHg8+GzMkJERvvfVWskaiAAAAAHdlsdlsNrNDZJTo6GgFBgYqKioq042ahIaGatKkSfr1119VokSJh74/R44cunHjRtKyzWaT1WqVp6enZs2apfbt26dnXAAAACBdJbcbMMKUCaxcuVKjRo3S2rVrk1WWJOmXX35RYmJi0vLq1av14Ycf6ueff1ahQoXSKyoAAADgVChMbu7AgQNq3bq1+vfvr7Jly+rChQuSJB8fH+XKlctwu8cee+yu5V27dsnDw0NPPPFEuuYFAAAAnAnTiru5Xbt26ebNmwoNDVWBAgWSHk2bNjU7GgAAAOD0uIYJAAAAQKaT3G7ACBMAAAAAGKAwZVINGzZU9uzZ7/sYM2aM2fEAAAAAp8CkD5nUnDlzdOvWrfu+9qDJIAAAAIDMhMKUSTE1OAAAAPBwnJIHAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAYoTAAAAABggMIEAAAAAAZcrjDFxcWpQoUKslgs2rt3r9lxAAAAALgxlytM/fr1U8GCBc2OAQAAACATcKnCtHbtWq1fv14TJ040OwoAAACATMDL7ADJdfHiRYWEhGjVqlXKmjVrsraJi4tTXFxc0nJ0dHR6xQMAAADghlxihMlms6lt27bq0qWLKlWqlOztxo4dq8DAwKRHcHBwOqYEAAAA4G5MLUwDBgyQxWJ54OPw4cMKCwvT9evXNXDgwBTtf+DAgYqKikp6nDlzJp0+CQAAAAB3ZLHZbDazDh4ZGakrV6488D3FixfXG2+8oTVr1shisSStT0xMlKenp1q2bKkFCxYk63jR0dEKDAxUVFSUAgIC0pQdAAAAgOtKbjcwtTAl1+nTp++6/ujcuXNq0KCBVqxYoapVq6pw4cLJ2g+FCQAAAICU/G7gEpM+FClS5K7l7NmzS5JKlCiR7LIEAAAAACnlEpM+AAAAAIAZXGKE6X898sgjcoEzCQEAAAC4OEaYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMAAhQkAAAAADFCYAAAAAMCAl9kBMpLNZpMkRUdHm5wEAAAAgJnudII7HcFIpipM169flyQFBwebnAQAAACAM7h+/boCAwMNX7fYHlap3IjVatW5c+fk7+8vi8VidhyXEB0dreDgYJ05c0YBAQFmx4Eb42sNGYWvNWQUvtaQUfhaSx2bzabr16+rYMGC8vAwvlIpU40weXh4qHDhwmbHcEkBAQH8D4gMwdcaMgpfa8gofK0ho/C1lnIPGlm6g0kfAAAAAMAAhQkAAAAADFCY8EC+vr4aPny4fH19zY4CN8fXGjIKX2vIKHytIaPwtZa+MtWkDwAAAACQEowwAQAAAIABChMAAAAAGKAwAQAAAIABChMAAAAAGKAwAQAAAIABChNSLC4uThUqVJDFYtHevXvNjgM3c/LkSXXo0EHFihVTlixZVKJECQ0fPlzx8fFmR4ObmDZtmh555BH5+fmpatWq+vXXX82OBDczduxYVa5cWf7+/sqbN6+aNGmiI0eOmB0Lbm7cuHGyWCzq3bu32VHcDoUJKdavXz8VLFjQ7BhwU4cPH5bVatXMmTP1559/atKkSZoxY4YGDRpkdjS4gaVLl6pPnz4aPny4du/erSeffFINGjTQpUuXzI4GN7J582Z169ZNO3bsUHh4uBISElS/fn3FxMSYHQ1u6rffftPMmTNVvnx5s6O4Je7DhBRZu3at+vTpo5UrV6ps2bLas2ePKlSoYHYsuLkJEyZo+vTpOn78uNlR4OKqVq2qypUra+rUqZIkq9Wq4OBg9ejRQwMGDDA5HdxVZGSk8ubNq82bN6tmzZpmx4GbuXHjhp566il9+umnCg0NVYUKFTR58mSzY7kVRpiQbBcvXlRISIg+//xzZc2a1ew4yESioqKUK1cus2PAxcXHx+v3339XvXr1ktZ5eHioXr16+uWXX0xMBncXFRUlSXwfQ7ro1q2bGjdufNf3NjiWl9kB4BpsNpvatm2rLl26qFKlSjp58qTZkZBJREREKCwsTBMnTjQ7Clzc5cuXlZiYqHz58t21Pl++fDp8+LBJqeDurFarevfurerVq+uJJ54wOw7czJIlS7R792799ttvZkdxa4wwZXIDBgyQxWJ54OPw4cMKCwvT9evXNXDgQLMjw0Ul92vt386ePasXXnhBzZo1U0hIiEnJASD1unXrpgMHDmjJkiVmR4GbOXPmjHr16qVFixbJz8/P7DhujWuYMrnIyEhduXLlge8pXry43njjDa1Zs0YWiyVpfWJiojw9PdWyZUstWLAgvaPCxSX3a83Hx0eSdO7cOdWuXVvPPPOM5s+fLw8Pfr+DtImPj1fWrFm1YsUKNWnSJGl9mzZtdO3aNa1evdq8cHBL3bt31+rVq7VlyxYVK1bM7DhwM6tWrdKrr74qT0/PpHWJiYmyWCzy8PBQXFzcXa8h9ShMSJbTp08rOjo6afncuXNq0KCBVqxYoapVq6pw4cImpoO7OXv2rOrUqaOnn35aX3zxBd/w4TBVq1ZVlSpVFBYWJsl+ulSRIkXUvXt3Jn2Aw9hsNvXo0UNff/21Nm3apFKlSpkdCW7o+vXrOnXq1F3r2rVrpzJlyqh///6cAupAXMOEZClSpMhdy9mzZ5cklShRgrIEhzp79qxq166tokWLauLEiYqMjEx6LX/+/CYmgzvo06eP2rRpo0qVKqlKlSqaPHmyYmJi1K5dO7OjwY1069ZNixcv1urVq+Xv768LFy5IkgIDA5UlSxaT08Fd+Pv731OKsmXLpty5c1OWHIzCBMCphIeHKyIiQhEREfeUcQbEkVbNmzdXZGSkhg0bpgsXLqhChQr64Ycf7pkIAkiL6dOnS5Jq16591/p58+apbdu2GR8IQJpwSh4AAAAAGOAqagAAAAAwQGECAAAAAAMUJgAAAAAwQGECAAAAAAMUJgAAAAAwQGECAAAAAAMUJgAAAAAwQGECAAAAAAMUJgAAAAAwQGECAAAAAAMUJgAAAAAw8H/b12W4xmnUmQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "favorite.graph()" ] @@ -187,7 +211,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -201,9 +225,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.16" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } From 0d857d5a9b36d91e6e556f9670c71fcea73ace49 Mon Sep 17 00:00:00 2001 From: Jeff Lantz Date: Wed, 1 Mar 2023 17:42:59 -0500 Subject: [PATCH 2/6] add conda env file, fix commit hook to include .pdf, not .py --- env.yml | 192 +++++++++++++++++++++++++++++++++++++++++++ spider-algorithm.pdf | Bin 0 -> 78400 bytes 2 files changed, 192 insertions(+) create mode 100644 env.yml create mode 100644 spider-algorithm.pdf diff --git a/env.yml b/env.yml new file mode 100644 index 0000000..d7c73ab --- /dev/null +++ b/env.yml @@ -0,0 +1,192 @@ +name: spideralgorithm +channels: + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=main + - _openmp_mutex=5.1=1_gnu + - anyio=3.5.0=py38h06a4308_0 + - argon2-cffi=21.3.0=pyhd3eb1b0_0 + - argon2-cffi-bindings=21.2.0=py38h7f8727e_0 + - astroid=2.14.2=py38h06a4308_0 + - asttokens=2.0.5=pyhd3eb1b0_0 + - attrs=22.1.0=py38h06a4308_0 + - babel=2.11.0=py38h06a4308_0 + - backcall=0.2.0=pyhd3eb1b0_0 + - beautifulsoup4=4.11.1=py38h06a4308_0 + - black=22.6.0=py38h06a4308_0 + - blas=1.0=mkl + - bleach=4.1.0=pyhd3eb1b0_0 + - brotli=1.0.9=h5eee18b_7 + - brotli-bin=1.0.9=h5eee18b_7 + - brotlipy=0.7.0=py38h27cfd23_1003 + - ca-certificates=2023.01.10=h06a4308_0 + - certifi=2022.12.7=py38h06a4308_0 + - cffi=1.15.1=py38h5eee18b_3 + - charset-normalizer=2.0.4=pyhd3eb1b0_0 + - click=8.0.4=py38h06a4308_0 + - colorama=0.4.6=py38h06a4308_0 + - comm=0.1.2=py38h06a4308_0 + - contourpy=1.0.5=py38hdb19cb5_0 + - cryptography=39.0.1=py38h9ce1e76_0 + - cycler=0.11.0=pyhd3eb1b0_0 + - dbus=1.13.18=hb2f20db_0 + - debugpy=1.5.1=py38h295c915_0 + - decorator=5.1.1=pyhd3eb1b0_0 + - defusedxml=0.7.1=pyhd3eb1b0_0 + - dill=0.3.6=py38h06a4308_0 + - entrypoints=0.4=py38h06a4308_0 + - executing=0.8.3=pyhd3eb1b0_0 + - expat=2.4.9=h6a678d5_0 + - flit-core=3.6.0=pyhd3eb1b0_0 + - fontconfig=2.14.1=h52c9d5c_1 + - fonttools=4.25.0=pyhd3eb1b0_0 + - freetype=2.12.1=h4a9f257_0 + - giflib=5.2.1=h5eee18b_3 + - glib=2.69.1=he621ea3_2 + - gst-plugins-base=1.14.1=h6a678d5_1 + - gstreamer=1.14.1=h5eee18b_1 + - icu=58.2=he6710b0_3 + - idna=3.4=py38h06a4308_0 + - importlib-metadata=4.11.3=py38h06a4308_0 + - importlib_resources=5.2.0=pyhd3eb1b0_1 + - intel-openmp=2021.4.0=h06a4308_3561 + - ipykernel=6.19.2=py38hb070fc8_0 + - ipython=8.10.0=py38h06a4308_0 + - ipython_genutils=0.2.0=pyhd3eb1b0_1 + - isort=5.9.3=pyhd3eb1b0_0 + - jedi=0.18.1=py38h06a4308_1 + - jinja2=3.1.2=py38h06a4308_0 + - jpeg=9e=h7f8727e_0 + - json5=0.9.6=pyhd3eb1b0_0 + - jsonschema=4.17.3=py38h06a4308_0 + - jupyter_client=7.4.9=py38h06a4308_0 + - jupyter_core=5.2.0=py38h06a4308_0 + - jupyter_server=1.23.4=py38h06a4308_0 + - jupyterlab=3.5.3=py38h06a4308_0 + - jupyterlab_code_formatter=1.5.3=pyhd8ed1ab_0 + - jupyterlab_pygments=0.1.2=py_0 + - jupyterlab_server=2.19.0=py38h06a4308_0 + - kiwisolver=1.4.4=py38h6a678d5_0 + - krb5=1.19.4=h568e23c_0 + - lazy-object-proxy=1.6.0=py38h27cfd23_0 + - lcms2=2.12=h3be6417_0 + - ld_impl_linux-64=2.38=h1181459_1 + - lerc=3.0=h295c915_0 + - libbrotlicommon=1.0.9=h5eee18b_7 + - libbrotlidec=1.0.9=h5eee18b_7 + - libbrotlienc=1.0.9=h5eee18b_7 + - libclang=10.0.1=default_hb85057a_2 + - libdeflate=1.17=h5eee18b_0 + - libedit=3.1.20221030=h5eee18b_0 + - libevent=2.1.12=h8f2d780_0 + - libffi=3.4.2=h6a678d5_6 + - libgcc-ng=11.2.0=h1234567_1 + - libgomp=11.2.0=h1234567_1 + - libllvm10=10.0.1=hbcb73fb_5 + - libpng=1.6.37=hbc83047_0 + - libpq=12.9=h16c4e8d_3 + - libsodium=1.0.18=h7b6447c_0 + - libstdcxx-ng=11.2.0=h1234567_1 + - libtiff=4.5.0=h6a678d5_2 + - libuuid=1.41.5=h5eee18b_0 + - libwebp=1.2.4=h11a3e52_1 + - libwebp-base=1.2.4=h5eee18b_1 + - libxcb=1.15=h7f8727e_0 + - libxkbcommon=1.0.1=hfa300c1_0 + - libxml2=2.9.14=h74e7548_0 + - libxslt=1.1.35=h4e12654_0 + - lxml=4.9.1=py38h1edc446_0 + - lz4-c=1.9.4=h6a678d5_0 + - markupsafe=2.1.1=py38h7f8727e_0 + - matplotlib=3.7.0=py38h06a4308_0 + - matplotlib-base=3.7.0=py38h417a72b_0 + - matplotlib-inline=0.1.6=py38h06a4308_0 + - mccabe=0.7.0=pyhd3eb1b0_0 + - mistune=0.8.4=py38h7b6447c_1000 + - mkl=2021.4.0=h06a4308_640 + - mkl-service=2.4.0=py38h7f8727e_0 + - mkl_fft=1.3.1=py38hd3c417c_0 + - mkl_random=1.2.2=py38h51133e4_0 + - munkres=1.1.4=py_0 + - mypy_extensions=0.4.3=py38h06a4308_1 + - nbclassic=0.5.2=py38h06a4308_0 + - nbclient=0.5.13=py38h06a4308_0 + - nbconvert=6.5.4=py38h06a4308_0 + - nbformat=5.7.0=py38h06a4308_0 + - nbstripout=0.6.1=pyhd8ed1ab_0 + - ncurses=6.4=h6a678d5_0 + - nest-asyncio=1.5.6=py38h06a4308_0 + - notebook=6.5.2=py38h06a4308_0 + - notebook-shim=0.2.2=py38h06a4308_0 + - nspr=4.33=h295c915_0 + - nss=3.74=h0370c37_0 + - numpy=1.23.5=py38h14f4228_0 + - numpy-base=1.23.5=py38h31eccc5_0 + - openssl=1.1.1t=h7f8727e_0 + - packaging=22.0=py38h06a4308_0 + - pandocfilters=1.5.0=pyhd3eb1b0_0 + - parso=0.8.3=pyhd3eb1b0_0 + - pathspec=0.10.3=py38h06a4308_0 + - pcre=8.45=h295c915_0 + - pexpect=4.8.0=pyhd3eb1b0_3 + - pickleshare=0.7.5=pyhd3eb1b0_1003 + - pillow=9.4.0=py38h6a678d5_0 + - pip=22.3.1=py38h06a4308_0 + - pkgutil-resolve-name=1.3.10=py38h06a4308_0 + - platformdirs=2.5.2=py38h06a4308_0 + - ply=3.11=py38_0 + - prometheus_client=0.14.1=py38h06a4308_0 + - prompt-toolkit=3.0.36=py38h06a4308_0 + - psutil=5.9.0=py38h5eee18b_0 + - ptyprocess=0.7.0=pyhd3eb1b0_2 + - pure_eval=0.2.2=pyhd3eb1b0_0 + - pycparser=2.21=pyhd3eb1b0_0 + - pygments=2.11.2=pyhd3eb1b0_0 + - pylint=2.16.2=py38h06a4308_0 + - pyopenssl=23.0.0=py38h06a4308_0 + - pyparsing=3.0.9=py38h06a4308_0 + - pyqt=5.15.7=py38h6a678d5_1 + - pyqt5-sip=12.11.0=py38h6a678d5_1 + - pyrsistent=0.18.0=py38heee7806_0 + - pysocks=1.7.1=py38h06a4308_0 + - python=3.8.16=h7a1cb2a_2 + - python-dateutil=2.8.2=pyhd3eb1b0_0 + - python-fastjsonschema=2.16.2=py38h06a4308_0 + - pytz=2022.7=py38h06a4308_0 + - pyzmq=23.2.0=py38h6a678d5_0 + - qt-main=5.15.2=h327a75a_7 + - qt-webengine=5.15.9=hd2b0992_4 + - qtwebkit=5.212=h4eab89a_4 + - readline=8.2=h5eee18b_0 + - requests=2.28.1=py38h06a4308_0 + - send2trash=1.8.0=pyhd3eb1b0_1 + - setuptools=65.6.3=py38h06a4308_0 + - sip=6.6.2=py38h6a678d5_0 + - six=1.16.0=pyhd3eb1b0_1 + - sniffio=1.2.0=py38h06a4308_1 + - soupsieve=2.3.2.post1=py38h06a4308_0 + - sqlite=3.40.1=h5082296_0 + - stack_data=0.2.0=pyhd3eb1b0_0 + - terminado=0.17.1=py38h06a4308_0 + - tinycss2=1.2.1=py38h06a4308_0 + - tk=8.6.12=h1ccaba5_0 + - toml=0.10.2=pyhd3eb1b0_0 + - tomli=2.0.1=py38h06a4308_0 + - tomlkit=0.11.1=py38h06a4308_0 + - tornado=6.2=py38h5eee18b_0 + - traitlets=5.7.1=py38h06a4308_0 + - typing-extensions=4.4.0=py38h06a4308_0 + - typing_extensions=4.4.0=py38h06a4308_0 + - urllib3=1.26.14=py38h06a4308_0 + - wcwidth=0.2.5=pyhd3eb1b0_0 + - webencodings=0.5.1=py38_1 + - websocket-client=0.58.0=py38h06a4308_4 + - wheel=0.38.4=py38h06a4308_0 + - wrapt=1.14.1=py38h5eee18b_0 + - xz=5.2.10=h5eee18b_1 + - zeromq=4.3.4=h2531618_0 + - zipp=3.11.0=py38h06a4308_0 + - zlib=1.2.13=h5eee18b_0 + - zstd=1.5.2=ha4553b6_0 +prefix: /home/jeff/anaconda3/envs/spideralgorithm diff --git a/spider-algorithm.pdf b/spider-algorithm.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1e8c633e5fb4057104aabba5eb0960e4f825cff7 GIT binary patch literal 78400 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%0AFd~>KBkgcR7HwdX# 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�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 Date: Wed, 1 Mar 2023 18:15:22 -0500 Subject: [PATCH 3/6] test 3 --- spider-algorithm.pdf | Bin 78400 -> 78394 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/spider-algorithm.pdf b/spider-algorithm.pdf index 1e8c633e5fb4057104aabba5eb0960e4f825cff7..2c6cc1e4222f9d7dfb4a634d93c2d55dd51b2ef6 100644 GIT binary patch delta 5075 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 MN5R9Rrms%%UyYvRw*UYD delta 5161 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 WZ-BSG1DT|xw3q}L7Z*fdo$Nn=$^xwb From e25d4d5098907dd2e38150d77660af7e65173c8d Mon Sep 17 00:00:00 2001 From: Jeff Lantz Date: Wed, 1 Mar 2023 18:30:51 -0500 Subject: [PATCH 4/6] test 5 --- .gitignore | 1 + spider-algorithm.pdf | Bin 78394 -> 78401 bytes 2 files changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 176af7e..57555f7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .ipynb_checkpoints/ +.commit diff --git a/spider-algorithm.pdf b/spider-algorithm.pdf index 2c6cc1e4222f9d7dfb4a634d93c2d55dd51b2ef6..266f811e8c2337e6a89d2e28ef47ffa2c944aa1e 100644 GIT binary patch delta 4913 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 QU?UTgBj@H;*ViEb7knj@X#fBK From 62c005b54a5198e1ce276af15fd40304558eed8e Mon Sep 17 00:00:00 2001 From: Jeff Lantz Date: Wed, 1 Mar 2023 18:53:05 -0500 Subject: [PATCH 5/6] Wrap up hook dev --- README.md | 5 ++-- env.yml | 60 ------------------------------------------- spider-algorithm.pdf | Bin 78401 -> 78397 bytes 3 files changed, 2 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 6926b54..6b7ace4 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,9 @@ This directory contains an ipython notebook contianing Python code for the Spide This project was done by Jeffrey Lantz and Riley Guyett as part of their senior theses with Professor Hubbard in Spring 2023. -## Development Note: +## Developer Notes The python environment is managed via (mini)conda, which can be installed [here](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html). The environment is managed in env.yaml, and should be automatically managed via git hooks. However, on initial install, one may need to run `conda env create -f env.yml` -Additionally, as working with Jupyter notebooks in version control can be difficult, we have included `nbstripout` in the conda environment. This may need to be manually initialized with `nbstripout --install --attributes .gitattributes`. This makes `git diff` show fewer non-code related changes, at the expense of not showing output data. To counteract this, a pdf of the code is automatically generated and included with commits so a sample output is visible from the repository. -An alternative still being considered is to include hooks to do a 'clean run' of the notebook and export the code to a .py, but it's not clear that this is a better workflow pattern. +Additionally, as working with Jupyter notebooks in version control can be difficult, we have included `nbstripout` in the conda environment. This may need to be manually initialized with `nbstripout --install --attributes .gitattributes`. This makes `git diff` show fewer non-code related changes, at the expense of not showing output data. I tried to include automatically generated outputs, but it wasn't working; for now, if we choose to include sample outputs in the repo, they will be added manually. In order to run the Jupyter Notebook, simply call `jupyter lab` from the root directory of the repository, then select `spider-algorithm.ipynb` from the file explorer on the left. Jupyterlab supports a few nice features over jupyter notebook, accessible under `Settings > Advanced Settings Editor`. Here you can change the theme to dark under `Theme > Selected Theme`, and enable automatically formatting the code on saving the notebook under `Jupyterlab Code Formatter > Auto format config`. diff --git a/env.yml b/env.yml index d7c73ab..316efd4 100644 --- a/env.yml +++ b/env.yml @@ -15,10 +15,7 @@ dependencies: - backcall=0.2.0=pyhd3eb1b0_0 - beautifulsoup4=4.11.1=py38h06a4308_0 - black=22.6.0=py38h06a4308_0 - - blas=1.0=mkl - bleach=4.1.0=pyhd3eb1b0_0 - - brotli=1.0.9=h5eee18b_7 - - brotli-bin=1.0.9=h5eee18b_7 - brotlipy=0.7.0=py38h27cfd23_1003 - ca-certificates=2023.01.10=h06a4308_0 - certifi=2022.12.7=py38h06a4308_0 @@ -27,37 +24,24 @@ dependencies: - click=8.0.4=py38h06a4308_0 - colorama=0.4.6=py38h06a4308_0 - comm=0.1.2=py38h06a4308_0 - - contourpy=1.0.5=py38hdb19cb5_0 - cryptography=39.0.1=py38h9ce1e76_0 - - cycler=0.11.0=pyhd3eb1b0_0 - - dbus=1.13.18=hb2f20db_0 - debugpy=1.5.1=py38h295c915_0 - decorator=5.1.1=pyhd3eb1b0_0 - defusedxml=0.7.1=pyhd3eb1b0_0 - dill=0.3.6=py38h06a4308_0 - entrypoints=0.4=py38h06a4308_0 - executing=0.8.3=pyhd3eb1b0_0 - - expat=2.4.9=h6a678d5_0 - flit-core=3.6.0=pyhd3eb1b0_0 - - fontconfig=2.14.1=h52c9d5c_1 - - fonttools=4.25.0=pyhd3eb1b0_0 - - freetype=2.12.1=h4a9f257_0 - - giflib=5.2.1=h5eee18b_3 - - glib=2.69.1=he621ea3_2 - - gst-plugins-base=1.14.1=h6a678d5_1 - - gstreamer=1.14.1=h5eee18b_1 - icu=58.2=he6710b0_3 - idna=3.4=py38h06a4308_0 - importlib-metadata=4.11.3=py38h06a4308_0 - importlib_resources=5.2.0=pyhd3eb1b0_1 - - intel-openmp=2021.4.0=h06a4308_3561 - ipykernel=6.19.2=py38hb070fc8_0 - ipython=8.10.0=py38h06a4308_0 - ipython_genutils=0.2.0=pyhd3eb1b0_1 - isort=5.9.3=pyhd3eb1b0_0 - jedi=0.18.1=py38h06a4308_1 - jinja2=3.1.2=py38h06a4308_0 - - jpeg=9e=h7f8727e_0 - json5=0.9.6=pyhd3eb1b0_0 - jsonschema=4.17.3=py38h06a4308_0 - jupyter_client=7.4.9=py38h06a4308_0 @@ -67,48 +51,20 @@ dependencies: - jupyterlab_code_formatter=1.5.3=pyhd8ed1ab_0 - jupyterlab_pygments=0.1.2=py_0 - jupyterlab_server=2.19.0=py38h06a4308_0 - - kiwisolver=1.4.4=py38h6a678d5_0 - - krb5=1.19.4=h568e23c_0 - lazy-object-proxy=1.6.0=py38h27cfd23_0 - - lcms2=2.12=h3be6417_0 - ld_impl_linux-64=2.38=h1181459_1 - - lerc=3.0=h295c915_0 - - libbrotlicommon=1.0.9=h5eee18b_7 - - libbrotlidec=1.0.9=h5eee18b_7 - - libbrotlienc=1.0.9=h5eee18b_7 - - libclang=10.0.1=default_hb85057a_2 - - libdeflate=1.17=h5eee18b_0 - - libedit=3.1.20221030=h5eee18b_0 - - libevent=2.1.12=h8f2d780_0 - libffi=3.4.2=h6a678d5_6 - libgcc-ng=11.2.0=h1234567_1 - libgomp=11.2.0=h1234567_1 - - libllvm10=10.0.1=hbcb73fb_5 - - libpng=1.6.37=hbc83047_0 - - libpq=12.9=h16c4e8d_3 - libsodium=1.0.18=h7b6447c_0 - libstdcxx-ng=11.2.0=h1234567_1 - - libtiff=4.5.0=h6a678d5_2 - - libuuid=1.41.5=h5eee18b_0 - - libwebp=1.2.4=h11a3e52_1 - - libwebp-base=1.2.4=h5eee18b_1 - - libxcb=1.15=h7f8727e_0 - - libxkbcommon=1.0.1=hfa300c1_0 - libxml2=2.9.14=h74e7548_0 - libxslt=1.1.35=h4e12654_0 - lxml=4.9.1=py38h1edc446_0 - - lz4-c=1.9.4=h6a678d5_0 - markupsafe=2.1.1=py38h7f8727e_0 - - matplotlib=3.7.0=py38h06a4308_0 - - matplotlib-base=3.7.0=py38h417a72b_0 - matplotlib-inline=0.1.6=py38h06a4308_0 - mccabe=0.7.0=pyhd3eb1b0_0 - mistune=0.8.4=py38h7b6447c_1000 - - mkl=2021.4.0=h06a4308_640 - - mkl-service=2.4.0=py38h7f8727e_0 - - mkl_fft=1.3.1=py38hd3c417c_0 - - mkl_random=1.2.2=py38h51133e4_0 - - munkres=1.1.4=py_0 - mypy_extensions=0.4.3=py38h06a4308_1 - nbclassic=0.5.2=py38h06a4308_0 - nbclient=0.5.13=py38h06a4308_0 @@ -119,23 +75,16 @@ dependencies: - nest-asyncio=1.5.6=py38h06a4308_0 - notebook=6.5.2=py38h06a4308_0 - notebook-shim=0.2.2=py38h06a4308_0 - - nspr=4.33=h295c915_0 - - nss=3.74=h0370c37_0 - - numpy=1.23.5=py38h14f4228_0 - - numpy-base=1.23.5=py38h31eccc5_0 - openssl=1.1.1t=h7f8727e_0 - packaging=22.0=py38h06a4308_0 - pandocfilters=1.5.0=pyhd3eb1b0_0 - parso=0.8.3=pyhd3eb1b0_0 - pathspec=0.10.3=py38h06a4308_0 - - pcre=8.45=h295c915_0 - pexpect=4.8.0=pyhd3eb1b0_3 - pickleshare=0.7.5=pyhd3eb1b0_1003 - - pillow=9.4.0=py38h6a678d5_0 - pip=22.3.1=py38h06a4308_0 - pkgutil-resolve-name=1.3.10=py38h06a4308_0 - platformdirs=2.5.2=py38h06a4308_0 - - ply=3.11=py38_0 - prometheus_client=0.14.1=py38h06a4308_0 - prompt-toolkit=3.0.36=py38h06a4308_0 - psutil=5.9.0=py38h5eee18b_0 @@ -145,9 +94,6 @@ dependencies: - pygments=2.11.2=pyhd3eb1b0_0 - pylint=2.16.2=py38h06a4308_0 - pyopenssl=23.0.0=py38h06a4308_0 - - pyparsing=3.0.9=py38h06a4308_0 - - pyqt=5.15.7=py38h6a678d5_1 - - pyqt5-sip=12.11.0=py38h6a678d5_1 - pyrsistent=0.18.0=py38heee7806_0 - pysocks=1.7.1=py38h06a4308_0 - python=3.8.16=h7a1cb2a_2 @@ -155,14 +101,10 @@ dependencies: - python-fastjsonschema=2.16.2=py38h06a4308_0 - pytz=2022.7=py38h06a4308_0 - pyzmq=23.2.0=py38h6a678d5_0 - - qt-main=5.15.2=h327a75a_7 - - qt-webengine=5.15.9=hd2b0992_4 - - qtwebkit=5.212=h4eab89a_4 - readline=8.2=h5eee18b_0 - requests=2.28.1=py38h06a4308_0 - send2trash=1.8.0=pyhd3eb1b0_1 - setuptools=65.6.3=py38h06a4308_0 - - sip=6.6.2=py38h6a678d5_0 - six=1.16.0=pyhd3eb1b0_1 - sniffio=1.2.0=py38h06a4308_1 - soupsieve=2.3.2.post1=py38h06a4308_0 @@ -171,7 +113,6 @@ dependencies: - terminado=0.17.1=py38h06a4308_0 - tinycss2=1.2.1=py38h06a4308_0 - tk=8.6.12=h1ccaba5_0 - - toml=0.10.2=pyhd3eb1b0_0 - tomli=2.0.1=py38h06a4308_0 - tomlkit=0.11.1=py38h06a4308_0 - tornado=6.2=py38h5eee18b_0 @@ -188,5 +129,4 @@ dependencies: - zeromq=4.3.4=h2531618_0 - zipp=3.11.0=py38h06a4308_0 - zlib=1.2.13=h5eee18b_0 - - zstd=1.5.2=ha4553b6_0 prefix: /home/jeff/anaconda3/envs/spideralgorithm diff --git a/spider-algorithm.pdf b/spider-algorithm.pdf index 266f811e8c2337e6a89d2e28ef47ffa2c944aa1e..f1c8b0d855f444b1722a9009be1346b3fd89103f 100644 GIT binary patch delta 5020 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 H)j;>iE8 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 From 093cd32828af20b1fa07e30e62745f9515a11811 Mon Sep 17 00:00:00 2001 From: Jeff Lantz Date: Wed, 1 Mar 2023 18:54:53 -0500 Subject: [PATCH 6/6] Updating conda environment --- env.yml | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/env.yml b/env.yml index 316efd4..d7c73ab 100644 --- a/env.yml +++ b/env.yml @@ -15,7 +15,10 @@ dependencies: - backcall=0.2.0=pyhd3eb1b0_0 - beautifulsoup4=4.11.1=py38h06a4308_0 - black=22.6.0=py38h06a4308_0 + - blas=1.0=mkl - bleach=4.1.0=pyhd3eb1b0_0 + - brotli=1.0.9=h5eee18b_7 + - brotli-bin=1.0.9=h5eee18b_7 - brotlipy=0.7.0=py38h27cfd23_1003 - ca-certificates=2023.01.10=h06a4308_0 - certifi=2022.12.7=py38h06a4308_0 @@ -24,24 +27,37 @@ dependencies: - click=8.0.4=py38h06a4308_0 - colorama=0.4.6=py38h06a4308_0 - comm=0.1.2=py38h06a4308_0 + - contourpy=1.0.5=py38hdb19cb5_0 - cryptography=39.0.1=py38h9ce1e76_0 + - cycler=0.11.0=pyhd3eb1b0_0 + - dbus=1.13.18=hb2f20db_0 - debugpy=1.5.1=py38h295c915_0 - decorator=5.1.1=pyhd3eb1b0_0 - defusedxml=0.7.1=pyhd3eb1b0_0 - dill=0.3.6=py38h06a4308_0 - entrypoints=0.4=py38h06a4308_0 - executing=0.8.3=pyhd3eb1b0_0 + - expat=2.4.9=h6a678d5_0 - flit-core=3.6.0=pyhd3eb1b0_0 + - fontconfig=2.14.1=h52c9d5c_1 + - fonttools=4.25.0=pyhd3eb1b0_0 + - freetype=2.12.1=h4a9f257_0 + - giflib=5.2.1=h5eee18b_3 + - glib=2.69.1=he621ea3_2 + - gst-plugins-base=1.14.1=h6a678d5_1 + - gstreamer=1.14.1=h5eee18b_1 - icu=58.2=he6710b0_3 - idna=3.4=py38h06a4308_0 - importlib-metadata=4.11.3=py38h06a4308_0 - importlib_resources=5.2.0=pyhd3eb1b0_1 + - intel-openmp=2021.4.0=h06a4308_3561 - ipykernel=6.19.2=py38hb070fc8_0 - ipython=8.10.0=py38h06a4308_0 - ipython_genutils=0.2.0=pyhd3eb1b0_1 - isort=5.9.3=pyhd3eb1b0_0 - jedi=0.18.1=py38h06a4308_1 - jinja2=3.1.2=py38h06a4308_0 + - jpeg=9e=h7f8727e_0 - json5=0.9.6=pyhd3eb1b0_0 - jsonschema=4.17.3=py38h06a4308_0 - jupyter_client=7.4.9=py38h06a4308_0 @@ -51,20 +67,48 @@ dependencies: - jupyterlab_code_formatter=1.5.3=pyhd8ed1ab_0 - jupyterlab_pygments=0.1.2=py_0 - jupyterlab_server=2.19.0=py38h06a4308_0 + - kiwisolver=1.4.4=py38h6a678d5_0 + - krb5=1.19.4=h568e23c_0 - lazy-object-proxy=1.6.0=py38h27cfd23_0 + - lcms2=2.12=h3be6417_0 - ld_impl_linux-64=2.38=h1181459_1 + - lerc=3.0=h295c915_0 + - libbrotlicommon=1.0.9=h5eee18b_7 + - libbrotlidec=1.0.9=h5eee18b_7 + - libbrotlienc=1.0.9=h5eee18b_7 + - libclang=10.0.1=default_hb85057a_2 + - libdeflate=1.17=h5eee18b_0 + - libedit=3.1.20221030=h5eee18b_0 + - libevent=2.1.12=h8f2d780_0 - libffi=3.4.2=h6a678d5_6 - libgcc-ng=11.2.0=h1234567_1 - libgomp=11.2.0=h1234567_1 + - libllvm10=10.0.1=hbcb73fb_5 + - libpng=1.6.37=hbc83047_0 + - libpq=12.9=h16c4e8d_3 - libsodium=1.0.18=h7b6447c_0 - libstdcxx-ng=11.2.0=h1234567_1 + - libtiff=4.5.0=h6a678d5_2 + - libuuid=1.41.5=h5eee18b_0 + - libwebp=1.2.4=h11a3e52_1 + - libwebp-base=1.2.4=h5eee18b_1 + - libxcb=1.15=h7f8727e_0 + - libxkbcommon=1.0.1=hfa300c1_0 - libxml2=2.9.14=h74e7548_0 - libxslt=1.1.35=h4e12654_0 - lxml=4.9.1=py38h1edc446_0 + - lz4-c=1.9.4=h6a678d5_0 - markupsafe=2.1.1=py38h7f8727e_0 + - matplotlib=3.7.0=py38h06a4308_0 + - matplotlib-base=3.7.0=py38h417a72b_0 - matplotlib-inline=0.1.6=py38h06a4308_0 - mccabe=0.7.0=pyhd3eb1b0_0 - mistune=0.8.4=py38h7b6447c_1000 + - mkl=2021.4.0=h06a4308_640 + - mkl-service=2.4.0=py38h7f8727e_0 + - mkl_fft=1.3.1=py38hd3c417c_0 + - mkl_random=1.2.2=py38h51133e4_0 + - munkres=1.1.4=py_0 - mypy_extensions=0.4.3=py38h06a4308_1 - nbclassic=0.5.2=py38h06a4308_0 - nbclient=0.5.13=py38h06a4308_0 @@ -75,16 +119,23 @@ dependencies: - nest-asyncio=1.5.6=py38h06a4308_0 - notebook=6.5.2=py38h06a4308_0 - notebook-shim=0.2.2=py38h06a4308_0 + - nspr=4.33=h295c915_0 + - nss=3.74=h0370c37_0 + - numpy=1.23.5=py38h14f4228_0 + - numpy-base=1.23.5=py38h31eccc5_0 - openssl=1.1.1t=h7f8727e_0 - packaging=22.0=py38h06a4308_0 - pandocfilters=1.5.0=pyhd3eb1b0_0 - parso=0.8.3=pyhd3eb1b0_0 - pathspec=0.10.3=py38h06a4308_0 + - pcre=8.45=h295c915_0 - pexpect=4.8.0=pyhd3eb1b0_3 - pickleshare=0.7.5=pyhd3eb1b0_1003 + - pillow=9.4.0=py38h6a678d5_0 - pip=22.3.1=py38h06a4308_0 - pkgutil-resolve-name=1.3.10=py38h06a4308_0 - platformdirs=2.5.2=py38h06a4308_0 + - ply=3.11=py38_0 - prometheus_client=0.14.1=py38h06a4308_0 - prompt-toolkit=3.0.36=py38h06a4308_0 - psutil=5.9.0=py38h5eee18b_0 @@ -94,6 +145,9 @@ dependencies: - pygments=2.11.2=pyhd3eb1b0_0 - pylint=2.16.2=py38h06a4308_0 - pyopenssl=23.0.0=py38h06a4308_0 + - pyparsing=3.0.9=py38h06a4308_0 + - pyqt=5.15.7=py38h6a678d5_1 + - pyqt5-sip=12.11.0=py38h6a678d5_1 - pyrsistent=0.18.0=py38heee7806_0 - pysocks=1.7.1=py38h06a4308_0 - python=3.8.16=h7a1cb2a_2 @@ -101,10 +155,14 @@ dependencies: - python-fastjsonschema=2.16.2=py38h06a4308_0 - pytz=2022.7=py38h06a4308_0 - pyzmq=23.2.0=py38h6a678d5_0 + - qt-main=5.15.2=h327a75a_7 + - qt-webengine=5.15.9=hd2b0992_4 + - qtwebkit=5.212=h4eab89a_4 - readline=8.2=h5eee18b_0 - requests=2.28.1=py38h06a4308_0 - send2trash=1.8.0=pyhd3eb1b0_1 - setuptools=65.6.3=py38h06a4308_0 + - sip=6.6.2=py38h6a678d5_0 - six=1.16.0=pyhd3eb1b0_1 - sniffio=1.2.0=py38h06a4308_1 - soupsieve=2.3.2.post1=py38h06a4308_0 @@ -113,6 +171,7 @@ dependencies: - terminado=0.17.1=py38h06a4308_0 - tinycss2=1.2.1=py38h06a4308_0 - tk=8.6.12=h1ccaba5_0 + - toml=0.10.2=pyhd3eb1b0_0 - tomli=2.0.1=py38h06a4308_0 - tomlkit=0.11.1=py38h06a4308_0 - tornado=6.2=py38h5eee18b_0 @@ -129,4 +188,5 @@ dependencies: - zeromq=4.3.4=h2531618_0 - zipp=3.11.0=py38h06a4308_0 - zlib=1.2.13=h5eee18b_0 + - zstd=1.5.2=ha4553b6_0 prefix: /home/jeff/anaconda3/envs/spideralgorithm