{ "info": { "author": "Xianshun Chen", "author_email": "xs0040@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: General", "Topic :: Utilities" ], "description": "pyalgs\n======\n\nPackage pyalgs implements algorithms in the \"Algorithms\" book (http://algs4.cs.princeton.edu/home/) and Robert Sedgwick's Algorithms course using Python (Part I and Part II)\n\n.. image:: https://travis-ci.org/chen0040/pyalgs.svg?branch=master\n :target: https://travis-ci.org/chen0040/pyalgs\n\n.. image:: https://coveralls.io/repos/github/chen0040/pyalgs/badge.svg?branch=master\n :target: https://coveralls.io/github/chen0040/pyalgs?branch=master\n\n.. image:: https://readthedocs.org/projects/pyalgs/badge/?version=latest\n :target: http://pyalgs.readthedocs.org/en/latest/?badge=latest\n\n.. image:: https://scrutinizer-ci.com/g/chen0040/pyalgs/badges/quality-score.png?b=master\n :target: https://scrutinizer-ci.com/g/chen0040/pyalgs/?branch=master\n\n\nMore details are provided in the `docs`_ for implementation, complexities and further info.\n\nInstall pyalgs\n==============\n\nRun the following command to install pyalgs using pip\n\n.. code-block:: bash\n\n $ pip install pyalgs\n\nFeatures:\n=========\n\n* Data Structure\n\n - Stack\n\n + Linked List\n + Array\n\n - Queue\n\n + Linked List\n + Array\n\n - Bag\n - HashSet\n - HashMap\n\n + Separate Chaining\n + Linear Probing\n\n - Binary Search Tree\n - Red Black Tree\n - Priority Queue\n\n + MinPQ\n + MaxPQ\n + IndexMinPQ\n\n - Graph\n\n + Simple graph\n + Edge weighted graph\n + Directed graph (digraph)\n + Directed edge weight graph\n\n - Search Tries (Symbol table with string-based keys)\n\n + R-way search tries\n + Ternary search tries\n\n* Algorithms\n\n - Sorting\n\n + Selection Sort\n + Insertion Sort\n + Shell Sort\n + Merge Sort\n + Quick Sort\n + 3-Ways Quick Sort\n + Heap Sort\n\n - Selection\n\n + Binary Search\n\n - Shuffling\n\n + Knuth\n\n - Union Find\n\n + Quick Find\n + Weighted Quick Union with path compression\n\n* Graph Algorithms\n\n - Search\n\n + Depth First Search\n + Breadth First Search\n\n - Connectivity\n\n + Connected Components\n + Strongly Connected Components\n\n - Topological Sorting\n\n + Depth First Reverse Post Order\n\n - Directed Cycle Detection\n\n - Minimum Spanning Tree\n\n + Kruskal\n + Prim (Lazy)\n + Prim (Eager)\n\n - Shortest Path\n\n + Dijkstra\n + Topological Sort (for directed acyclic graph, namely dag)\n + Bellman-Ford (for graph with negative weight as well)\n\n - MaxFlow MinCut\n\n + Ford-Fulkerson\n\n* Strings\n\n - Longest Repeated Substring\n - String Sorting\n\n + LSD (Least Significant Digit first radix sorting)\n + MSD (Most Significant Digit first radix sorting)\n + 3-Ways String Quick Sort\n\n - String Search\n\n + Brute force\n + Rabin Karp\n + Boyer Moore\n + Knuth Morris Pratt\n\nUsage:\n======\n\nData Structure\n--------------\n\nStack\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.commons.stack import Stack\n\n stack = Stack.create()\n stack.push(10)\n stack.push(1)\n\n print [i for i in stack.iterate()]\n\n print stack.is_empty()\n print stack.size()\n\n popped_item = stack.pop()\n print popped_item\n\n\n\nQueue\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.commons.queue import Queue\n\n queue = Queue.create()\n queue.enqueue(10)\n queue.enqueue(20)\n queue.enqueue(30)\n\n print [i for i in queue.iterate()]\n\n print queue.size()\n print queue.is_empty()\n\n deleted_item = queue.dequeue())\n print deleted_item\n\n\n\nBag\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.commons.bag import Bag\n\n bag = Bag.create()\n\n bag.add(10)\n bag.add(20)\n bag.add(30)\n\n print [i for i in bag.iterate()]\n\n print bag.size()\n print bag.is_empty()\n\n\nMinimum Priority Queue\n\n.. code-block:: python\n\n from pyalgs.data_structures.commons.priority_queue import MinPQ\n\n pq = MinPQ.create()\n pq.enqueue(10)\n pq.enqueue(5)\n pq.enqueue(12)\n pq.enqueue(14)\n pq.enqueue(2)\n\n print pq.is_empty()\n print pq.size()\n\n print [i for i in pq.iterate()]\n\n deleted = pq.del_min()\n print(deleted)\n\n\nMaximum Priority Queue\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.commons.priority_queue import MaxPQ\n\n pq = MaxPQ.create()\n pq.enqueue(10)\n pq.enqueue(5)\n pq.enqueue(12)\n pq.enqueue(14)\n pq.enqueue(2)\n\n print pq.is_empty()\n print pq.size()\n\n print [i for i in pq.iterate()]\n\n deleted = pq.del_max()\n print deleted\n\n\nSymbol Table using Binary Search Tree\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.commons.binary_search_tree import BinarySearchTree\n bst = BinarySearchTree.create()\n\n bst.put(\"one\", 1)\n bst.put(\"two\", 2)\n bst.put(\"three\", 3)\n bst.put(\"six\", 6)\n bst.put(\"ten\", 10)\n\n for key in bst.keys():\n print(key)\n\n print bst.get(\"one\"))\n print bst.contains_key(\"two\")\n\n print bst.size()\n print bst.is_empty()\n\n bst.delete(\"one\")\n\n\nSymbol Table using Left Leaning Red Black Tree\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.commons.binary_search_tree import BinarySearchTree\n bst = BinarySearchTree.create_red_black_tree()\n\n bst.put(\"one\", 1)\n bst.put(\"two\", 2)\n bst.put(\"three\", 3)\n bst.put(\"six\", 6)\n bst.put(\"ten\", 10)\n\n print bst.get(\"one\"))\n print bst.contains_key(\"two\")\n\n for key in bst.keys():\n print(key)\n\n print bst.size()\n print bst.is_empty()\n\n bst.delete(\"one\")\n\n\nSymbol Table using Hashed Map\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.commons.hashed_map import HashedMap\n map = HashedMap.create()\n\n map.put(\"one\", 1)\n map.put(\"two\", 2)\n map.put(\"three\", 3)\n map.put(\"six\", 6)\n map.put(\"ten\", 10)\n\n print map.get(\"one\"))\n print map.contains_key(\"two\")\n\n for key in map.keys():\n print(key)\n\n print map.size()\n print map.is_empty()\n\n map.delete(\"one\")\n\n\nSymbol Table using Hashed Set\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.commons.hashed_set import HashedSet\n set = HashedSet.create()\n\n set.add(\"one\")\n set.add(\"two\")\n set.add(\"three\")\n set.add(\"six\")\n set.add(\"ten\")\n\n print set.contains(\"two\")\n\n for key in set.iterate():\n print(key)\n\n print set.size()\n print set.is_empty()\n\n set.delete(\"one\")\n\n\nUndirected Graph\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.graphs.graph import Graph\n def create_graph():\n G = Graph(100)\n\n G.add_edge(1, 2)\n G.add_edge(1, 3)\n\n print([i for i in G.adj(1)])\n print([i for i in G.adj(2)])\n print([i for i in G.adj(3)])\n\n print(G.vertex_count())\n return G\n\n\nDirected Graph\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.graphs.graph import Digraph\n def create_digraph():\n G = Digraph(100)\n\n G.add_edge(1, 2)\n G.add_edge(1, 3)\n\n print([i for i in G.adj(1)])\n print([i for i in G.adj(2)])\n print([i for i in G.adj(3)])\n\n print(G.vertex_count())\n return G\n\n\nEdge Weighted Graph\n\n.. code-block:: python\n\n from pyalgs.data_structures.graphs.graph import EdgeWeightGraph, Edge\n def create_edge_weighted_graph():\n g = EdgeWeightedGraph(8)\n g.add_edge(Edge(0, 7, 0.16))\n g.add_edge(Edge(2, 3, 0.17))\n g.add_edge(Edge(1, 7, 0.19))\n g.add_edge(Edge(0, 2, 0.26))\n g.add_edge(Edge(5, 7, 0.28))\n\n print([edge for edge in G.adj(3)])\n\n print(G.vertex_count())\n print(', '.join([edge for edge in G.edges()]))\n return g\n\n\nDirected Edge Weighted Graph\n\n.. code-block:: python\n\n from pyalgs.data_structures.graphs.graph import DirectedEdgeWeightedGraph, Edge\n def create_edge_weighted_digraph():\n g = DirectedEdgeWeightedGraph(8)\n\n g.add_edge(Edge(0, 1, 5.0))\n g.add_edge(Edge(0, 4, 9.0))\n g.add_edge(Edge(0, 7, 8.0))\n g.add_edge(Edge(1, 2, 12.0))\n return g\n\n\nFlow Network ( for max-flow min-cut problem)\n\n.. code-block:: python\n\n from pyalgs.data_structures.graphs.graph import FlowNetwork, FlowEdge\n def create_flow_network():\n g = FlowNetwork(8)\n g.add_edge(FlowEdge(0, 1, 10))\n g.add_edge(FlowEdge(0, 2, 5))\n g.add_edge(FlowEdge(0, 3, 15))\n g.add_edge(FlowEdge(1, 4, 9))\n g.add_edge(FlowEdge(1, 5, 15))\n g.add_edge(FlowEdge(1, 2, 4))\n g.add_edge(FlowEdge(2, 5, 8))\n g.add_edge(FlowEdge(2, 3, 4))\n g.add_edge(FlowEdge(3, 6, 16))\n g.add_edge(FlowEdge(4, 5, 15))\n g.add_edge(FlowEdge(4, 7, 10))\n g.add_edge(FlowEdge(5, 7, 10))\n g.add_edge(FlowEdge(5, 6, 15))\n g.add_edge(FlowEdge(6, 2, 6))\n g.add_edge(FlowEdge(6, 7, 10))\n\n return g\n\n\nSymbol Table using R-ways Search Tries\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.strings.search_tries import RWaySearchTries\n st = RWaySearchTries()\n\n st.put(\"one\", 1)\n st.put(\"two\", 2)\n st.put(\"three\", 3)\n st.put(\"six\", 6)\n st.put(\"ten\", 10)\n\n for key in st.keys():\n print(key)\n\n print st.get(\"one\"))\n print st.contains_key(\"two\")\n\n print st.size()\n print st.is_empty()\n\n st.delete(\"one\")\n \n for key in st.keys_with_prefix('t'):\n print(key)\n\n\nSymbol Table using Ternary Search Tries\n\n\n.. code-block:: python\n\n from pyalgs.data_structures.strings.search_tries import TernarySearchTries\n st = TernarySearchTries()\n\n st.put(\"one\", 1)\n st.put(\"two\", 2)\n st.put(\"three\", 3)\n st.put(\"six\", 6)\n st.put(\"ten\", 10)\n\n for key in st.keys():\n print(key)\n\n print st.get(\"one\"))\n print st.contains_key(\"two\")\n\n print st.size()\n print st.is_empty()\n\n st.delete(\"one\")\n\n for key in st.keys_with_prefix('t'):\n print(key)\n\n\nAlgorithms\n----------\n\nUnion Find\n\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.union_find import UnionFind\n\n uf = UnionFind.create(10)\n\n uf.union(1, 3)\n uf.union(2, 4)\n uf.union(1, 5)\n\n print(uf.connected(1, 3))\n print(uf.connected(3, 5))\n print(uf.connected(1, 2))\n print(uf.connected(1, 4))\n\n\nSorting\n\n\nThe sorting algorithms sort an array in ascending order\n\nSelection Sort\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.sorting import SelectionSort\n\n a = [4, 2, 1]\n SelectionSort.sort(a)\n print(a)\n\n\nInsertion Sort\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.sorting import InsertionSort\n\n a = [4, 2, 1]\n InsertionSort.sort(a)\n print(a)\n\n\nShell Sort\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.sorting import ShellSort\n\n a = [4, 2, 1, 23, 4, 5, 6, 7, 8, 9, 20, 11, 13, 34, 66]\n ShellSort.sort(a)\n print(a)\n\n\nMerge Sort\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.sorting import MergeSort\n\n a = [4, 2, 1, 23, 4, 5, 6, 7, 8, 9, 20, 11, 13, 34, 66]\n MergeSort.sort(a)\n print(a)\n\n\nQuick Sort\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.sorting import QuickSort\n\n a = [4, 2, 1, 23, 4, 5, 6, 7, 8, 9, 20, 11, 13, 34, 66]\n QuickSort.sort(a)\n print(a)\n\n\n3-Ways Quick Sort\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.sorting import ThreeWayQuickSort\n\n a = [4, 2, 1, 23, 4, 5, 6, 7, 8, 9, 20, 11, 13, 34, 66]\n ThreeWayQuickSort.sort(a)\n print(a)\n\n\nHeap Sort\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.sorting import HeapSort\n\n a = [4, 2, 1, 23, 4, 5, 6, 7, 8, 9, 20, 11, 13, 34, 66]\n HeapSort.sort(a)\n print(a)\n\n\n\nSelection\n\n\nBinary Selection\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.selecting import BinarySelection\n from pyalgs.algorithms.commons.util import is_sorted\n\n\n a = [1, 2, 13, 22, 123]\n assert is_sorted(a)\n print BinarySelection.index_of(a, 13)\n\n\nShuffle\n\n\nKnuth Shuffle\n\n.. code-block:: python\n\n from pyalgs.algorithms.commons.shuffling import KnuthShuffle\n\n a = [1, 2, 13, 22, 123]\n KnuthShuffle.shuffle(a)\n print(a)\n\n\nGraph\n-----\n\nDepth First Search\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.search import DepthFirstSearch\n g = create_graph()\n s = 0\n dfs = DepthFirstSearch(g, s)\n\n for v in range(1, g.vertex_count()):\n if dfs.hasPathTo(v):\n print(str(s) + ' is connected to ' + str(v))\n print('path is ' + ' => '.join([str(i) for i in dfs.pathTo(v)]))\n\n\nBreadth First Search\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.search import BreadthFirstSearch\n g = create_graph()\n s = 0\n dfs = BreadthFirstSearch(g, s)\n\n for v in range(1, g.vertex_count()):\n if dfs.hasPathTo(v):\n print(str(s) + ' is connected to ' + str(v))\n print('path is ' + ' => '.join([str(i) for i in dfs.pathTo(v)]))\n\n\nConnected Components\n\nThis is for undirected graph\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.connectivity import ConnectedComponents\n G = create_graph()\n\n cc = ConnectedComponents(G)\n print('connected component count: ' + str(cc.count()))\n\n\n for v in range(G.vertex_count()):\n print('id[' + str(v) + ']: ' + str(cc.id(v)))\n for v in range(G.vertex_count()):\n r = randint(0, G.vertex_count()-1)\n if cc.connected(v, r):\n print(str(v) + ' is connected to ' + str(r))\n\n\nStrongly Connected Components\n\nThis is for directed graph\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.connectivity import StronglyConnectedComponents\n G = create_graph()\n\n cc = StronglyConnectedComponents(G)\n print('strongly connected component count: ' + str(cc.count()))\n\n\n for v in range(G.vertex_count()):\n print('id[' + str(v) + ']: ' + str(cc.id(v)))\n for v in range(G.vertex_count()):\n r = randint(0, G.vertex_count()-1)\n if cc.connected(v, r):\n print(str(v) + ' is connected to ' + str(r))\n\n\nTopological Sort\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.topological_sort import DepthFirstOrder\n G = create_graph()\n topological_sort = DepthFirstOrder(G)\n print(' => '.join([str(i) for i in topological_sort.postOrder()]))\n\n\nMinimum Spanning Tree (Kruskal)\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.minimum_spanning_trees import KruskalMST\n g = create_edge_weighted_graph()\n mst = KruskalMST(g)\n\n tree = mst.spanning_tree()\n\n for e in tree:\n print(e)\n\nMinimum Spanning Tree (Prim Lazy)\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.minimum_spanning_trees import LazyPrimMST\n g = create_edge_weighted_graph()\n mst = LazyPrimMST(g)\n\n tree = mst.spanning_tree()\n\n for e in tree:\n print(e)\n\n\nMinimum Spanning Tree (Prim Eager)\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.minimum_spanning_trees import EagerPrimMST\n g = create_edge_weighted_graph()\n mst = EagerPrimMST(g)\n\n tree = mst.spanning_tree()\n\n for e in tree:\n print(e)\n\n\nDirected Cycle Detection:\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.directed_cycle import DirectedCycle\n dag = create_dag()\n dc = DirectedCycle(dag)\n assertFalse(dc.hasCycle())\n\n\nShortest Path (Dijkstra)\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.shortest_path import DijkstraShortestPath\n g = create_edge_weighted_digraph()\n s = 0\n dijkstra = DijkstraShortestPath(g, s)\n for v in range(1, g.vertex_count()):\n if dijkstra.hasPathTo(v):\n print(str(s) + ' is connected to ' + str(v))\n print('shortest path is ' + ' .. '.join([str(i) for i in dijkstra.shortestPathTo(v)]))\n print('path length is ' + str(dijkstra.path_length_to(v)))\n\n\nShortest Path (Topological Sort)\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.shortest_path import TopologicalSortShortestPath\n from pyalgs.algorithms.graphs.directed_cycle import DirectedCycle\n g = create_edge_weighted_digraph()\n assert not DirectedCycle(g).hasCycle()\n s = 0\n dijkstra = TopologicalSortShortestPath(g, s)\n for v in range(1, g.vertex_count()):\n if dijkstra.hasPathTo(v):\n print(str(s) + ' is connected to ' + str(v))\n print('shortest path is ' + ' .. '.join([str(i) for i in dijkstra.shortestPathTo(v)]))\n print('path length is ' + str(dijkstra.path_length_to(v)))\n\n\nShortest Path (Bellman-Ford for positive and negative edge graph)\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.shortest_path import BellmanFordShortestPath\n from pyalgs.algorithms.graphs.directed_cycle import DirectedCycle\n g = create_edge_weighted_digraph()\n s = 0\n dijkstra = BellmanFordShortestPath(g, s)\n for v in range(1, g.vertex_count()):\n if dijkstra.hasPathTo(v):\n print(str(s) + ' is connected to ' + str(v))\n print('shortest path is ' + ' .. '.join([str(i) for i in dijkstra.shortestPathTo(v)]))\n print('path length is ' + str(dijkstra.path_length_to(v)))\n\n\nMaxFlow MinCut (Ford-Fulkerson)\n\n.. code-block:: python\n\n from pyalgs.algorithms.graphs.max_flow import FordFulkersonMaxFlow\n network = create_flow_network()\n ff = FordFulkersonMaxFlow(network, 0, 7)\n print('max-flow: '+str(ff.max_flow_value()))\n\n\nStrings\n-------\n\nLongest Repeated Substring\n\n.. code-block:: python\n\n from pyalgs.algorithms.strings.longest_repeated_substring import LongestRepeatedSubstringSearch\n start, len = LongestRepeatedSubstringSearch.lrs('Hello World', 'World Record')\n print('Hello World'[start:(start+len+1)])\n\n\nSort (LSD)\n\n.. code-block:: python\n\n from pyalgs.algorithms.strings.sorting import LSD\n LSD.sort(['good', 'cool', 'done', 'come'])\n\n\nSort (MSD)\n\n.. code-block:: python\n\n from pyalgs.algorithms.strings.sorting import MSD\n words = 'more details are provided in the docs for implementation, complexities and further info'.split(' ')\n print(words)\n MSD.sort(words)\n print(words)\n\n\nSort (3-Ways String Quick Sort)\n\n.. code-block:: python\n\n from pyalgs.algorithms.strings.sorting import String3WayQuickSort\n words = 'more details are provided in the docs for implementation, complexities and further info'.split(' ')\n print(words)\n String3WayQuickSort.sort(words)\n print(words)\n\n\nSubstring Search (Brute force)\n\n.. code-block:: python\n\n from pyalgs.algorithms.strings.substring_search import BruteForceSubstringSearch\n ss = BruteForceSubstringSearch('find')\n print(ss.search_in('I can find it here'))\n print(ss.search_in('It is not here'))\n\n\nSubstring Search (Rabin Karp)\n\n.. code-block:: python\n\n from pyalgs.algorithms.strings.substring_search import RabinKarp\n ss = RabinKarp('find')\n print(ss.search_in('I can find it here'))\n print(ss.search_in('It is not here'))\n\n\nSubstring Search (Boyer Moore)\n\n.. code-block:: python\n\n from pyalgs.algorithms.strings.substring_search import BoyerMoore\n ss = BoyerMoore('find')\n print(ss.search_in('I can find it here'))\n print(ss.search_in('It is not here'))\n\n\nSubstring Search (Knuth Morris Pratt)\n\n.. code-block:: python\n\n from pyalgs.algorithms.strings.substring_search import KnuthMorrisPratt\n ss = KnuthMorrisPratt('find')\n print(ss.search_in('I can find it here'))\n print(ss.search_in('It is not here'))\n\n\n.. _`docs`: http://pyalgs.readthedocs.org/en/latest/\n.. _`documentation`: http://pyalgs.readthedocs.org/en/latest/", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chen0040/pyalgs", "keywords": null, "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "pyalgs", "package_url": "https://pypi.org/project/pyalgs/", "platform": "any", "project_url": "https://pypi.org/project/pyalgs/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/chen0040/pyalgs" }, "release_url": "https://pypi.org/project/pyalgs/0.0.13/", "requires_dist": null, "requires_python": null, "summary": "Python implementation of algorithms on string handling, data structure, graph processing, etc", "version": "0.0.13" }, "last_serial": 2899646, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "b474f786f8f8163b36af6be9791296e0", "sha256": "77a4bd82f6b332450e368a1dce168e8997ce9d9ef18091351e31fd6806ce0227" }, "downloads": -1, "filename": "pyalgs-0.0.1.zip", "has_sig": false, "md5_digest": "b474f786f8f8163b36af6be9791296e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8248, "upload_time": "2017-04-26T09:26:32", "url": "https://files.pythonhosted.org/packages/fd/d4/d73a3563b66bcf3be4c67b7c4a9245bf3880f8e0605e82c1f073cc12ec24/pyalgs-0.0.1.zip" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "d99b6d9627aa1b92d7ae9250d4ee14a3", "sha256": "d8f81e86cf173b64bb96c55a6d4679a2269d1715b6d7aac9094e73b610563155" }, "downloads": -1, "filename": "pyalgs-0.0.10.zip", "has_sig": false, "md5_digest": "d99b6d9627aa1b92d7ae9250d4ee14a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14834, "upload_time": "2017-05-06T01:38:18", "url": "https://files.pythonhosted.org/packages/df/12/d76b66ea71e9060d08c24614c9800b1ba295f8c12539ebaec051f01665a2/pyalgs-0.0.10.zip" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "ec65ac099ce8ad8668d2be512f9aa125", "sha256": "09167fb73b5e22e29b47c1840386b4b4f4fa4a279661c21cac3d5824187dee92" }, "downloads": -1, "filename": "pyalgs-0.0.11.zip", "has_sig": false, "md5_digest": "ec65ac099ce8ad8668d2be512f9aa125", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14830, "upload_time": "2017-05-06T01:44:07", "url": "https://files.pythonhosted.org/packages/f7/6e/051759a536f572e72a6cac7c6cfabaf0a0c6fddfb4bcd1eaba702265a9ad/pyalgs-0.0.11.zip" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "7062382d7e5c5115430a21f6be0ceb38", "sha256": "158e0ddf3d1e0250eed4db138be0b5d0f5b163e3549644684fd3d8d5027b8eee" }, "downloads": -1, "filename": "pyalgs-0.0.12.zip", "has_sig": false, "md5_digest": "7062382d7e5c5115430a21f6be0ceb38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15080, "upload_time": "2017-05-10T12:30:56", "url": "https://files.pythonhosted.org/packages/ac/4b/276500c7e7bc8c03a17a273ec3b29d5c5d0f2abe208b224aa48e6c672459/pyalgs-0.0.12.zip" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "a135fdac388b7eda0fb97f2dd5d55032", "sha256": "6ecc009cf72bcf6c1fe016c5936991e35412ec0c1e7ec482b95bac691c6547f4" }, "downloads": -1, "filename": "pyalgs-0.0.13.zip", "has_sig": false, "md5_digest": "a135fdac388b7eda0fb97f2dd5d55032", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15107, "upload_time": "2017-05-26T05:54:10", "url": "https://files.pythonhosted.org/packages/24/c9/0215381cb095d50935e4adfb89f51a39296d895284320db3b77ea51defd0/pyalgs-0.0.13.zip" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "55cee1d7b4abbc8877117c4ec6ab007a", "sha256": "888ca7e9f7a1761ed9f167968e36b2b6ada24f9e100068a485090093d91aa0b4" }, "downloads": -1, "filename": "pyalgs-0.0.2.zip", "has_sig": false, "md5_digest": "55cee1d7b4abbc8877117c4ec6ab007a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11040, "upload_time": "2017-04-26T15:11:33", "url": "https://files.pythonhosted.org/packages/84/88/8a4aeccb1062efca21aaa3e4179765887f59c32a58fc6947c350628f5548/pyalgs-0.0.2.zip" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "d4e961955c950928f92d61e5280c94eb", "sha256": "580df37eb05b26b46990bb59f181b2cdff973bdabab7604adcafa7d8465298d9" }, "downloads": -1, "filename": "pyalgs-0.0.3.zip", "has_sig": false, "md5_digest": "d4e961955c950928f92d61e5280c94eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11772, "upload_time": "2017-04-27T15:12:43", "url": "https://files.pythonhosted.org/packages/1f/7d/fa209b47f357bfdc98befdd2a0eef05ceada0dbdb9cd0c8c2daddfbf246f/pyalgs-0.0.3.zip" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "19a83f1934e1d46725897eef746c075b", "sha256": "6109e914bca271ffee059fc7bb11cd4dd55798ab37ce4927988862a32b678fe8" }, "downloads": -1, "filename": "pyalgs-0.0.4.zip", "has_sig": false, "md5_digest": "19a83f1934e1d46725897eef746c075b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13004, "upload_time": "2017-04-29T06:00:25", "url": "https://files.pythonhosted.org/packages/af/ef/0114252eaf1f6b8096827dca9f40f7dfd9c563f21a73a49924c7ac37a636/pyalgs-0.0.4.zip" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "3d0b92741667ebf0859cf63ce5d55210", "sha256": "a07c780f19b2efe5fae0b6246399c01e427bb82930a02522e6b2407fa0dbded9" }, "downloads": -1, "filename": "pyalgs-0.0.5.zip", "has_sig": false, "md5_digest": "3d0b92741667ebf0859cf63ce5d55210", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13718, "upload_time": "2017-04-30T04:17:23", "url": "https://files.pythonhosted.org/packages/97/29/e5af40bf0677a93b751a62623257ded939df02815435de09d27be01603a5/pyalgs-0.0.5.zip" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "75316d103019ff303ef4076d90677c10", "sha256": "956cb0a28e380c41b15aa81f72c9eafd4bbc7b5c0d1cf421a61f3f8db7e11659" }, "downloads": -1, "filename": "pyalgs-0.0.6.zip", "has_sig": false, "md5_digest": "75316d103019ff303ef4076d90677c10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13721, "upload_time": "2017-04-30T04:27:22", "url": "https://files.pythonhosted.org/packages/06/9d/4f43f478f4eb8d628fa87f92e5fabcb1e3af66ded9a73b0dd2ceb9aabd0c/pyalgs-0.0.6.zip" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "ed68a6e699062d33dba2c2609d778915", "sha256": "cc30365cfa0c52193c6031258531959451a1458858ecff3d3f8f66613e2e1c10" }, "downloads": -1, "filename": "pyalgs-0.0.7.zip", "has_sig": false, "md5_digest": "ed68a6e699062d33dba2c2609d778915", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14021, "upload_time": "2017-05-01T02:00:56", "url": "https://files.pythonhosted.org/packages/f9/f1/92502d05db37ee4f7dd151b526c04b0ab7968452d5f455e68ae92cef3972/pyalgs-0.0.7.zip" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "422f18889f86fa3c49577d88a7f64a6d", "sha256": "2f56bb5ed3b5ebc62a6d811d4b3fcd7f5da13f5f7c30bcbbff1581de0a008a8e" }, "downloads": -1, "filename": "pyalgs-0.0.8.zip", "has_sig": false, "md5_digest": "422f18889f86fa3c49577d88a7f64a6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14279, "upload_time": "2017-05-03T00:49:12", "url": "https://files.pythonhosted.org/packages/1c/95/293beb347f3c06f9d2db5461bafcf0816dee95726a1139adcc08d5916740/pyalgs-0.0.8.zip" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "30043bafe6b5e6fde42a419cb699b300", "sha256": "a3af8f970028c3b8610a6c91e9b6f0a90b9133b8f7055d7be753cde676a0584c" }, "downloads": -1, "filename": "pyalgs-0.0.9.zip", "has_sig": false, "md5_digest": "30043bafe6b5e6fde42a419cb699b300", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14713, "upload_time": "2017-05-04T00:50:53", "url": "https://files.pythonhosted.org/packages/18/25/7cfe9badbfefa5cdd8a732c3097aad64e46a0e270bfa20da4fd0f299476a/pyalgs-0.0.9.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a135fdac388b7eda0fb97f2dd5d55032", "sha256": "6ecc009cf72bcf6c1fe016c5936991e35412ec0c1e7ec482b95bac691c6547f4" }, "downloads": -1, "filename": "pyalgs-0.0.13.zip", "has_sig": false, "md5_digest": "a135fdac388b7eda0fb97f2dd5d55032", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15107, "upload_time": "2017-05-26T05:54:10", "url": "https://files.pythonhosted.org/packages/24/c9/0215381cb095d50935e4adfb89f51a39296d895284320db3b77ea51defd0/pyalgs-0.0.13.zip" } ] }