diff -Nru sortedcontainers-1.5.9/appveyor.yml sortedcontainers-2.0.4/appveyor.yml --- sortedcontainers-1.5.9/appveyor.yml 1970-01-01 00:00:00.000000000 +0000 +++ sortedcontainers-2.0.4/appveyor.yml 2018-06-07 05:34:49.000000000 +0000 @@ -0,0 +1,22 @@ +environment: + + matrix: + + - PYTHON: "C:\\Python27" + - PYTHON: "C:\\Python34" + - PYTHON: "C:\\Python35" + - PYTHON: "C:\\Python36" + - PYTHON: "C:\\Python27-x64" + - PYTHON: "C:\\Python34-x64" + - PYTHON: "C:\\Python35-x64" + - PYTHON: "C:\\Python36-x64" + +install: + + - "%PYTHON%\\python.exe -m pip install tox" + +build: off + +test_script: + + - "%PYTHON%\\python.exe -m tox -e py" diff -Nru sortedcontainers-1.5.9/debian/changelog sortedcontainers-2.0.4/debian/changelog --- sortedcontainers-1.5.9/debian/changelog 2018-04-22 03:00:27.000000000 +0000 +++ sortedcontainers-2.0.4/debian/changelog 2018-06-08 02:09:30.000000000 +0000 @@ -1,3 +1,18 @@ +sortedcontainers (2.0.4-1) unstable; urgency=medium + + * New upstrem release + * debian/patches/0001-dont-breach-privacy-github-stars-counter-iframe.patch + - patch dropped, no longer required + * debian/copyright + - update upstream copyright years notice + - remove notice for docs/_themes/, directory removed upstream + * debian/patches/0001-privacy-breach.patch + - more privacy breaches to fix + * debian/control + - add pytest to b-d, needed by tests + + -- Sandro Tosi Thu, 07 Jun 2018 22:09:30 -0400 + sortedcontainers (1.5.9-1) unstable; urgency=medium [ Ondřej Nový ] diff -Nru sortedcontainers-1.5.9/debian/control sortedcontainers-2.0.4/debian/control --- sortedcontainers-1.5.9/debian/control 2018-04-22 03:00:27.000000000 +0000 +++ sortedcontainers-2.0.4/debian/control 2018-06-08 02:09:30.000000000 +0000 @@ -3,7 +3,7 @@ Priority: optional Maintainer: Sandro Tosi Uploaders: Debian Python Modules Team -Build-Depends: debhelper (>= 10), python-all, python3-all, dh-python, python-setuptools, python3-setuptools, python-nose, python3-nose, python-sphinx (>= 1.4), texlive-latex-base +Build-Depends: debhelper (>= 10), python-all, python3-all, dh-python, python-setuptools, python3-setuptools, python-nose, python3-nose, python-sphinx (>= 1.4), texlive-latex-base, python-pytest, python3-pytest Standards-Version: 4.1.4 Homepage: http://www.grantjenks.com/docs/sortedcontainers/ Vcs-Git: https://salsa.debian.org/python-team/modules/sortedcontainers.git diff -Nru sortedcontainers-1.5.9/debian/copyright sortedcontainers-2.0.4/debian/copyright --- sortedcontainers-1.5.9/debian/copyright 2018-04-22 03:00:27.000000000 +0000 +++ sortedcontainers-2.0.4/debian/copyright 2018-06-08 02:09:30.000000000 +0000 @@ -3,7 +3,7 @@ Source: https://github.com/grantjenks/sorted_containers Files: * -Copyright: Copyright 2014-2016 Grant Jenks +Copyright: Copyright 2014-2018 Grant Jenks License: Apache-2.0 License: Apache-2.0 @@ -13,41 +13,3 @@ Files: debian/* Copyright: 2015-2018 Sandro Tosi License: Apache-2.0 - -Files: docs/_themes/* -Copyright: Copyright (c) 2014 by Grant Jenks. - Copyright (c) 2010 by Armin Ronacher. -License: - Redistribution and use in source and binary forms of the theme, with or - without modification, are permitted provided that the following conditions - are met: - . - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - . - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - . - * The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - . - We kindly ask you to only use these themes in an unmodified manner just - for Flask and Flask-related products, not for unrelated projects. If you - like the visual style and want to use it for your own projects, please - consider making some larger changes to the themes (such as changing - font faces, sizes, colors or margins). - . - THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. diff -Nru sortedcontainers-1.5.9/debian/patches/0001-dont-breach-privacy-github-stars-counter-iframe.patch sortedcontainers-2.0.4/debian/patches/0001-dont-breach-privacy-github-stars-counter-iframe.patch --- sortedcontainers-1.5.9/debian/patches/0001-dont-breach-privacy-github-stars-counter-iframe.patch 2018-04-22 03:00:27.000000000 +0000 +++ sortedcontainers-2.0.4/debian/patches/0001-dont-breach-privacy-github-stars-counter-iframe.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -From: Sandro Tosi -Date: Sat, 21 Apr 2018 22:56:58 -0400 -Subject: dont-breach-privacy-github-stars-counter-iframe - ---- - docs/_templates/sidebarintro.html | 5 ----- - docs/_templates/sidebarlogo.html | 5 ----- - 2 files changed, 10 deletions(-) - -diff --git a/docs/_templates/sidebarintro.html b/docs/_templates/sidebarintro.html -index 02f667a..33fbb48 100644 ---- a/docs/_templates/sidebarintro.html -+++ b/docs/_templates/sidebarintro.html -@@ -4,11 +4,6 @@ - -

- --

-- --

-- -

- SortedContainers provides sorted container types, written in - pure-Python and fast as C-extensions. -diff --git a/docs/_templates/sidebarlogo.html b/docs/_templates/sidebarlogo.html -index a68279f..4b27034 100644 ---- a/docs/_templates/sidebarlogo.html -+++ b/docs/_templates/sidebarlogo.html -@@ -4,11 +4,6 @@ - -

- --

-- --

-- -

- SortedContainers provides sorted container types, written in - pure-Python and fast as C-extensions. diff -Nru sortedcontainers-1.5.9/debian/patches/0001-privacy-breach.patch sortedcontainers-2.0.4/debian/patches/0001-privacy-breach.patch --- sortedcontainers-1.5.9/debian/patches/0001-privacy-breach.patch 1970-01-01 00:00:00.000000000 +0000 +++ sortedcontainers-2.0.4/debian/patches/0001-privacy-breach.patch 2018-06-08 02:09:30.000000000 +0000 @@ -0,0 +1,43 @@ +From: Sandro Tosi +Date: Thu, 7 Jun 2018 22:00:03 -0400 +Subject: privacy-breach + +--- + README.rst | 6 ------ + docs/conf.py | 4 ---- + 2 files changed, 10 deletions(-) + +diff --git a/README.rst b/README.rst +index 80581d8..5bd6a9a 100644 +--- a/README.rst ++++ b/README.rst +@@ -114,12 +114,6 @@ Features + - Developed on Python 3.6 + - Tested on CPython 2.7, 3.2, 3.3, 3.4, 3.5, 3.6 and PyPy, PyPy3 + +-.. image:: https://api.travis-ci.org/grantjenks/python-sortedcontainers.svg?branch=master +- :target: http://www.grantjenks.com/docs/sortedcontainers/ +- +-.. image:: https://ci.appveyor.com/api/projects/status/github/grantjenks/python-sortedcontainers?branch=master&svg=true +- :target: http://www.grantjenks.com/docs/sortedcontainers/ +- + Quickstart + ---------- + +diff --git a/docs/conf.py b/docs/conf.py +index 0e1d568..86f069f 100644 +--- a/docs/conf.py ++++ b/docs/conf.py +@@ -87,12 +87,8 @@ html_theme_options = { + 'logo': 'gj-logo.png', + 'logo_name': True, + 'logo_text_align': 'center', +- 'analytics_id': 'UA-19364636-2', + 'show_powered_by': False, + 'show_related': True, +- 'github_user': 'grantjenks', +- 'github_repo': 'python-sortedcontainers', +- 'github_type': 'star', + } + + # Add any paths that contain custom static files (such as style sheets) here, diff -Nru sortedcontainers-1.5.9/debian/patches/series sortedcontainers-2.0.4/debian/patches/series --- sortedcontainers-1.5.9/debian/patches/series 2018-04-22 03:00:27.000000000 +0000 +++ sortedcontainers-2.0.4/debian/patches/series 2018-06-08 02:09:30.000000000 +0000 @@ -1 +1 @@ -0001-dont-breach-privacy-github-stars-counter-iframe.patch +0001-privacy-breach.patch diff -Nru sortedcontainers-1.5.9/docs/conf.py sortedcontainers-2.0.4/docs/conf.py --- sortedcontainers-1.5.9/docs/conf.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/conf.py 2018-06-07 05:34:49.000000000 +0000 @@ -1,272 +1,185 @@ # -*- coding: utf-8 -*- # -# sortedcontainers documentation build configuration file, created by -# sphinx-quickstart on Tue Feb 04 10:02:59 2014. +# Configuration file for the Sphinx documentation builder. # -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config -import sys -import os +# -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. + +import os +import sys sys.path.insert(0, os.path.abspath('..')) import sortedcontainers -# -- General configuration ------------------------------------------------ + +# -- Project information ----------------------------------------------------- + +project = 'Sorted Containers' +copyright = sortedcontainers.__copyright__ +author = sortedcontainers.__author__ + +# The short X.Y version +version = sortedcontainers.__version__ +# The full version, including alpha/beta/rc tags +release = sortedcontainers.__version__ + + +# -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' +# +# needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', - 'sphinx.ext.coverage', - 'sphinx.ext.viewcode', + 'sphinx.ext.todo', 'sphinx.ext.imgmath', + 'sphinx.ext.viewcode', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] -# The suffix of source filenames. +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] source_suffix = '.rst' -# The encoding of source files. -#source_encoding = 'utf-8-sig' - # The master toctree document. master_doc = 'index' -# General information about the project. -project = sortedcontainers.__title__ -copyright = u'2015, Grant Jenks' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = sortedcontainers.__version__[:-2] -# The full version, including alpha/beta/rc tags. -release = sortedcontainers.__version__ - # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -# -- Options for HTML output ---------------------------------------------- +# -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'default' +html_theme = 'alabaster' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None +html_theme_options = { + 'logo': 'gj-logo.png', + 'logo_name': True, + 'logo_text_align': 'center', + 'analytics_id': 'UA-19364636-2', + 'show_powered_by': False, + 'show_related': True, + 'github_user': 'grantjenks', + 'github_repo': 'python-sortedcontainers', + 'github_type': 'star', +} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. html_sidebars = { - 'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'], - '**': ['sidebarlogo.html', 'localtoc.html', 'relations.html', - 'sourcelink.html', 'searchbox.html'] + '**': [ + 'about.html', + 'gumroad.html', + 'localtoc.html', + 'relations.html', + 'searchbox.html', + ] } -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None +# -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. -htmlhelp_basename = 'sortedcontainersdoc' +htmlhelp_basename = 'SortedContainersDoc' -# -- Options for LaTeX output --------------------------------------------- +# -- Options for LaTeX output ------------------------------------------------ latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - ('index', 'sortedcontainers.tex', u'sortedcontainers Documentation', - u'Grant Jenks', 'manual'), + (master_doc, 'SortedContainers.tex', 'SortedContainers Documentation', + 'Grant Jenks', 'manual'), ] -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- +# -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'sortedcontainers', u'sortedcontainers Documentation', - [u'Grant Jenks'], 1) + (master_doc, 'sortedcontainers', 'SortedContainers Documentation', + [author], 1) ] -# If true, show URL addresses after external links. -#man_show_urls = False - -# -- Options for Texinfo output ------------------------------------------- +# -- Options for Texinfo output ---------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - ('index', 'sortedcontainers', u'sortedcontainers Documentation', - u'Grant Jenks', 'sortedcontainers', 'Sorted container data types.', - 'Miscellaneous'), + (master_doc, 'SortedContainers', 'SortedContainers Documentation', + author, 'SortedContainers', + 'Python sorted collections library:' + ' sorted list, sorted dict, and sorted set.', + 'Miscellaneous'), ] -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' +# -- Extension configuration ------------------------------------------------- -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False +# -- Options for todo extension ---------------------------------------------- -sys.path.append(os.path.abspath('_themes')) -html_theme_path = ['_themes'] -html_theme = 'gj' +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True diff -Nru sortedcontainers-1.5.9/docs/development.rst sortedcontainers-2.0.4/docs/development.rst --- sortedcontainers-1.5.9/docs/development.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/development.rst 2018-06-07 05:34:49.000000000 +0000 @@ -4,13 +4,14 @@ Collaborators are welcome! #. Check for open issues or open a fresh issue to start a discussion around a - bug. There is a Contributor Friendly tag for issues that should be used by - people who are not very familiar with the codebase yet. -#. Fork `the repository `_ on - GitHub and start making your changes to a new branch. + bug. +#. Fork the `repository`_ on GitHub and start making your changes to a new + branch. #. Write a test which shows that the bug was fixed. #. Send a pull request and bug the maintainer until it gets merged and - published. :) + published :) + +.. _`repository`: https://github.com/grantjenks/python-sortedcontainers Development Lead ---------------- @@ -27,121 +28,136 @@ Get the Code ------------ -SortedContainers is actively developed on GitHub, where the code is -`always available `_. - -You can either clone the public repository:: - - $ git clone git://github.com/grantjenks/sorted_containers.git - -Download the `tarball `_:: - - $ curl -OL https://github.com/grantjenks/sorted_containers/tarball/master +:doc:`Sorted Containers` is actively developed on GitHub, where the code +is `open source`_. The recommended way to get a copy of the source repository +is to clone the repository from GitHub:: -Or, download the `zipball `_:: + $ git clone git://github.com/grantjenks/python-sortedcontainers.git - $ curl -OL https://github.com/grantjenks/sorted_containers/zipball/master +.. _`open source`: https://github.com/grantjenks/python-sortedcontainers Development Dependencies ------------------------ -Install development dependencies with `pip `_:: +Install development dependencies with `pip`_:: $ pip install -r requirements.txt This includes everything for building/running tests, benchmarks and documentation. -Note that installing the Banyan module on Windows requires `patching the source -`_ in a couple places. +Some alternative implementations, such as `banyan`, may have issues when +installing on Windows. You can still develop :doc:`Sorted Containers` +without these packages. They will be omitted from benchmarking. + +.. _`pip`: https://pypi.org/project/pip/ Testing ------- -Testing uses `tox `_. If you don't want to -install all the development requirements, then, after downloading, you can -simply run:: +Testing uses `tox`_. If you don't want to install all the development +requirements, then, after downloading, you can simply run:: $ python setup.py test -The test argument to setup.py will download a minimal testing infrastructure +The test argument to `setup.py` will download a minimal testing infrastructure and run the tests. :: - $ tox - GLOB sdist-make: /repos/sorted_containers/setup.py - py26 inst-nodeps: /repos/sorted_containers/.tox/dist/sortedcontainers-0.8.0.zip - py26 runtests: PYTHONHASHSEED='1205144536' - py26 runtests: commands[0] | nosetests - ... - ---------------------------------------------------------------------- - Ran 150 tests in 7.080s - - OK - py27 inst-nodeps: /repos/sorted_containers/.tox/dist/sortedcontainers-0.8.0.zip - py27 runtests: PYTHONHASHSEED='1205144536' - py27 runtests: commands[0] | nosetests - ... - ---------------------------------------------------------------------- - Ran 150 tests in 6.670s - - OK - py32 inst-nodeps: /repos/sorted_containers/.tox/dist/sortedcontainers-0.8.0.zip - py32 runtests: PYTHONHASHSEED='1205144536' - py32 runtests: commands[0] | nosetests - ... - ---------------------------------------------------------------------- - Ran 150 tests in 10.254s - - OK - py33 inst-nodeps: /repos/sorted_containers/.tox/dist/sortedcontainers-0.8.0.zip - py33 runtests: PYTHONHASHSEED='1205144536' - py33 runtests: commands[0] | nosetests - ... - ---------------------------------------------------------------------- - Ran 150 tests in 10.485s - - OK - py34 inst-nodeps: /repos/sorted_containers/.tox/dist/sortedcontainers-0.8.0.zip - py34 runtests: PYTHONHASHSEED='1205144536' - py34 runtests: commands[0] | nosetests - ... - ---------------------------------------------------------------------- - Ran 150 tests in 11.350s - - OK - ___________________ summary _______________________ - py26: commands succeeded - py27: commands succeeded - py32: commands succeeded - py33: commands succeeded - py34: commands succeeded - congratulations :) + $ python setup.py test + running test + running egg_info + writing sortedcontainers.egg-info/PKG-INFO + writing dependency_links to sortedcontainers.egg-info/dependency_links.txt + writing top-level names to sortedcontainers.egg-info/top_level.txt + reading manifest file 'sortedcontainers.egg-info/SOURCES.txt' + reading manifest template 'MANIFEST.in' + writing manifest file 'sortedcontainers.egg-info/SOURCES.txt' + running build_ext + GLOB sdist-make: /Users/grantj/repos/python-sortedcontainers/setup.py + py36 inst-nodeps: /Users/grantj/repos/python-sortedcontainers/.tox/dist/sortedcontainers-1.5.10.zip + py36 installed: attrs==18.1.0,more-itertools==4.1.0,pluggy==0.6.0,py==1.5.3,pytest==3.5.1,six==1.11.0,sortedcontainers==1.5.10 + py36 runtests: PYTHONHASHSEED='365015869' + py36 runtests: commands[0] | python -m pytest + ================================================= test session starts ================================================= + platform darwin -- Python 3.6.5, pytest-3.5.1, py-1.5.3, pluggy-0.6.0 + rootdir: /Users/grantj/repos/python-sortedcontainers, inifile: tox.ini + collected 357 items + + docs/introduction.rst . [ 0%] + sortedcontainers/__init__.py . [ 0%] + sortedcontainers/sorteddict.py ........... [ 3%] + sortedcontainers/sortedlist.py ..................................... [ 14%] + sortedcontainers/sortedset.py ................. [ 18%] + tests/benchmark_splits_fill.py . [ 19%] + tests/sortedcollection.py . [ 19%] + tests/test_coverage_sorteddict.py ................................................... [ 33%] + tests/test_coverage_sortedkeylist_modulo.py ................................................................... [ 52%] + tests/test_coverage_sortedkeylist_negate.py ....................................................... [ 68%] + tests/test_coverage_sortedlist.py .......................................................... [ 84%] + tests/test_coverage_sortedset.py .................................................. [ 98%] + tests/test_stress_sorteddict.py .. [ 98%] + tests/test_stress_sortedkeylist.py . [ 99%] + tests/test_stress_sortedlist.py . [ 99%] + tests/test_stress_sortedset.py .. [100%] + + ============================================= 357 passed in 10.86 seconds ============================================= + lint inst-nodeps: /Users/grantj/repos/python-sortedcontainers/.tox/dist/sortedcontainers-1.5.10.zip + lint installed: astroid==1.6.4,isort==4.3.4,lazy-object-proxy==1.3.1,mccabe==0.6.1,pylint==1.9.0,six==1.11.0,sortedcontainers==1.5.10,wrapt==1.10.11 + lint runtests: PYTHONHASHSEED='365015869' + lint runtests: commands[0] | pylint sortedcontainers + Using config file /Users/grantj/repos/python-sortedcontainers/.pylintrc + + -------------------------------------------------------------------- + Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) + + _______________________________________________________ summary _______________________________________________________ + py36: commands succeeded + lint: commands succeeded -Coverage testing uses `nose `_: +Coverage testing uses `pytest-cov`_: :: - $ nosetests --with-coverage - ................................................... - Name Stmts Miss Cover Missing - ----------------------------------------------------------- - sortedcontainers 4 0 100% - sortedcontainers.sorteddict 220 10 95% 18, 21, 96, 106, 115, 149, 158, 183, 220, 253 - sortedcontainers.sortedlist 452 1 99% 16 - sortedcontainers.sortedset 163 10 94% 51, 62, 65, 70, 75, 80, 84, 86, 88, 90 - ----------------------------------------------------------- - TOTAL 839 21 97% - ---------------------------------------------------------------------- - Ran 146 tests in 15.447s + $ python -m pytest --cov sortedcontainers --cov-report term-missing --cov-branch + ================================================= test session starts ================================================= + platform darwin -- Python 3.6.5, pytest-3.5.0, py-1.5.3, pluggy-0.6.0 + rootdir: /Users/grantj/repos/python-sortedcontainers, inifile: tox.ini + plugins: cov-2.5.1, hypothesis-3.55.3 + collected 357 items + + docs/introduction.rst . [ 0%] + sortedcontainers/__init__.py . [ 0%] + sortedcontainers/sorteddict.py ........... [ 3%] + sortedcontainers/sortedlist.py ..................................... [ 14%] + sortedcontainers/sortedset.py ................. [ 18%] + tests/benchmark_splits_fill.py . [ 19%] + tests/sortedcollection.py . [ 19%] + tests/test_coverage_sorteddict.py ................................................... [ 33%] + tests/test_coverage_sortedkeylist_modulo.py ................................................................... [ 52%] + tests/test_coverage_sortedkeylist_negate.py ....................................................... [ 68%] + tests/test_coverage_sortedlist.py .......................................................... [ 84%] + tests/test_coverage_sortedset.py .................................................. [ 98%] + tests/test_stress_sorteddict.py .. [ 98%] + tests/test_stress_sortedkeylist.py . [ 99%] + tests/test_stress_sortedlist.py . [ 99%] + tests/test_stress_sortedset.py .. [100%] + + ---------- coverage: platform darwin, python 3.6.5-final-0 ----------- + Name Stmts Miss Branch BrPart Cover Missing + ---------------------------------------------------------------------------- + sortedcontainers/__init__.py 10 0 0 0 100% + sortedcontainers/sorteddict.py 159 0 40 0 100% + sortedcontainers/sortedlist.py 1001 8 420 3 99% 34-39, 44-45, 33->34, 785->787, 1429->1437 + sortedcontainers/sortedset.py 179 0 26 0 100% + ---------------------------------------------------------------------------- + TOTAL 1349 8 486 3 99% - OK +It's normal to see coverage a little less than 100%. Some code is specific to +the Python runtime. -It's normal not to see 100% coverage. Some code is specific to the Python -runtime. - -Stress testing is also based on nose but can be run independently as a +Stress testing is also based on pytest but can be run independently as a module. Stress tests are kept in the tests directory and prefixed with test_stress. Stress tests accept two arguments: an iteration count and random seed value. For example, to run stress on the SortedList data type: @@ -155,7 +171,7 @@ Exiting after 0:00:00.846000 If stress exits normally then it worked successfully. Some stress is run by tox -and nose but the iteration count is limited at 1,000. More rigorous testing +and pytest but the iteration count is limited at 1,000. More rigorous testing requires increasing the iteration count to millions. At that level, it's best to just let it run overnight. Stress testing will stop at the first failure. @@ -163,8 +179,8 @@ ------------------ Running and plotting benchmarks is a two step process. Each is a Python script -in the tests directory. To run the benchmarks for SortedList, plot the results, -and save the resulting graphs, run: +in the tests directory. To run the benchmarks for :class:`SortedList`, plot the +results, and save the resulting graphs, run: :: @@ -172,7 +188,7 @@ $ python -m tests.benchmark_plot tests/results_sortedlist.txt SortedList --save Each script has a handful of useful arguments. Use ``--help`` to display -those. Consult the source for details. The file ``tests/benchmark_plot.py`` +those. Consult the source for details. The file `tests/benchmark_plot.py` contains notes about benchmarking different Python runtimes against each other. If you simply want to run the benchmarks to observe the performance on your @@ -180,30 +196,37 @@ :: - $ curl -OL https://github.com/grantjenks/sorted_containers/zipball/master + $ curl -OL https://github.com/grantjenks/python-sortedcontainers/zipball/master $ unzip master - $ cd grantjenks-sorted_containers-[GITHASH]/ + $ cd grantjenks-python-sortedcontainers-[GITHASH]/ $ export PYTHONPATH=`pwd` $ python -m tests.benchmark_sortedlist $ python -m tests.benchmark_sorteddict $ python -m tests.benchmark_sortedset The benchmarks will warn if some packages are not importable. This limits the -possible comparisons. In all cases, you can install missing packages from PyPI. +possible comparisons. See `requirements.txt` for the package names than can be +installed from PyPI. Tested Runtimes --------------- -SortedContainers actively tests against the following versions of Python: +:doc:`Sorted Containers` actively tests against the following versions +of Python: -* CPython 2.6 * CPython 2.7 * CPython 3.2 * CPython 3.3 * CPython 3.4 * CPython 3.5 -* PyPy v5.1 -* PyPy3 v2.4 - -Life will feel much saner if you use `virtualenv `_ -to manage each of the runtimes. +* CPython 3.6 +* PyPy +* PyPy3 + +Life will feel much saner if you use `venv`_ or `virtualenv`_ and `tox`_ to +manage and test each of the runtimes. + +.. _`tox`: https://pypi.org/project/tox/ +.. _`pytest-cov`: https://pypi.org/project/pytest-cov/ +.. _`venv`: https://docs.python.org/3/library/venv.html +.. _`virtualenv`: https://pypi.org/project/virtualenv/ diff -Nru sortedcontainers-1.5.9/docs/djangocon-2015-lightning-talk.rst sortedcontainers-2.0.4/docs/djangocon-2015-lightning-talk.rst --- sortedcontainers-1.5.9/docs/djangocon-2015-lightning-talk.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/djangocon-2015-lightning-talk.rst 2018-06-07 05:34:49.000000000 +0000 @@ -45,11 +45,12 @@ Red-Black and AVL. All of those are implemented in C or C++. Then I discovered a Skip-list implementation that was slower but pure-Python. -All I can say in five minutes is SortedContainers doesn't use any of these -exactly. It's kind of like a B-tree but only half-heartedly. It relies entirely -on the bisect module. While it's slow to program in Python, the interpreter is -written in C. So if you think of it as programming the interpreter, you're -effectively writing C code. It turns out lists are fast; trees, not so much. +All I can say in five minutes is :doc:`Sorted Containers` doesn't use +any of these exactly. It's kind of like a B-tree but only half-heartedly. It +relies entirely on the bisect module. While it's slow to program in Python, the +interpreter is written in C. So if you think of it as programming the +interpreter, you're effectively writing C code. It turns out lists are fast; +trees, not so much. Listen to what these smart people have to say about it: @@ -70,6 +71,6 @@ never had it before” has worn thin. It is time that Python offered a full range of collection classes out of the box, including sorted ones. -Ladies and gentlemen, the SortedContainers library. Thank you. +Ladies and gentlemen, the :doc:`Sorted Containers` library. Thank you. .. _`Accompanying Slides`: http://bit.ly/socoin5 diff -Nru sortedcontainers-1.5.9/docs/implementation.rst sortedcontainers-2.0.4/docs/implementation.rst --- sortedcontainers-1.5.9/docs/implementation.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/implementation.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,25 +1,25 @@ Implementation Details ====================== -The :doc:`SortedContainers` internal implementation is based on a couple -observations. The first is that Python lists are fast, *really fast*. They have -great characteristics for memory management and random access. The second is -that bisect.insort is fast. This is somewhat counter-intuitive since it -involves shifting a series of items in a list. But modern processors do this -really well. A lot of time has been spent optimizing mem-copy/mem-move-like -operations both in hardware and software. - -But using only one list and bisect.insort would produce sluggish behavior for -lengths exceeding ten thousand. So the implementation of -:doc:`SortedList` uses a list of lists to store elements. In this -way, inserting or deleting is most often performed on a short list. Only rarely -does a new list need to be added or deleted. - -:doc:`SortedList` maintains three internal variables: ``_lists``, -``_maxes``, and ``_index``. The first is simply the list of lists; each member -is a sorted sublist of elements. The second contains the maximum element in -each of the sublists. This is used for fast binary-search. The last maintains a -tree of pair-wise sums of the lengths of the lists. +The :doc:`Sorted Containers` internal implementation is based on a +couple observations. The first is that Python's `list` is fast, *really +fast*. Lists have great characteristics for memory management and random +access. The second is that `bisect.insort` is fast. This is somewhat +counter-intuitive since it involves shifting a series of items in a list. But +modern processors do this really well. A lot of time has been spent optimizing +mem-copy/mem-move-like operations both in hardware and software. + +But using only one list and `bisect.insort` would produce sluggish behavior for +lengths exceeding ten thousand. So the implementation of :doc:`sortedlist` uses +a list of lists to store elements. In this way, inserting or deleting is most +often performed on a short list. Only rarely does a new list need to be added +or deleted. + +:doc:`sortedlist` maintains three internal variables: `_lists`, `_maxes`, and +`_index`. The first is simply the list of lists, each member is a sorted +sublist of elements. The second contains the maximum element in each of the +sublists. This is used for fast binary-search. The last maintains a tree of +pair-wise sums of the lengths of the lists. Lists are kept balanced using the load factor. If a sublist's length exceeds double the load then it is split in two. Likewise at half the load it is @@ -29,10 +29,10 @@ you will probably exhaust the memory of your machine before that point.) Experimentation is also recommended. A :doc:`load factor performance comparison` is also provided. For more in-depth analysis, -read :doc:`Performance at Scale` which benchmarks -:doc:`SortedContainers` with ten billion elements. +read :doc:`performance-scale` which benchmarks :doc:`Sorted Containers` +with ten billion elements. -Finding an element is a two step process. First the ``_maxes`` list, also known +Finding an element is a two step process. First the `_maxes` list, also known as the "maxes" index, is bisected which yields the position of a sorted sublist. Then that sublist is bisected for the location of the element. @@ -55,12 +55,12 @@ realities of today's software and hardware. For a more in-depth analysis, read :doc:`Performance at Scale`. -Indexing uses the ``_index`` list which operates as a tree of pair-wise sums of +Indexing uses the `_index` list which operates as a tree of pair-wise sums of the lengths of the lists. The tree is maintained as a dense binary tree. It's -easiest to explain with an example. Suppose ``_lists`` contains sublists with +easiest to explain with an example. Suppose `_lists` contains sublists with these lengths (in this example, we assume the load factor is 4):: - map(len, _lists) -> [3, 5, 4, 5, 6] + list(map(len, _lists)) -> [3, 5, 4, 5, 6] Given these lengths, the first row in the index is the pair-wise sums:: @@ -79,12 +79,10 @@ With this list, we can efficiently compute the index of an item in a sublist and, vice-versa, find an item given an index. Details of the algorithms to do -so are contained in the docstring for ``SortedList._loc`` and -``SortedList._pos``. - +so are contained in the docstring for `SortedList._loc` and `SortedList._pos`. For example, indexing requires traversing the tree to a leaf node. Each node -has two children which are easily computable. Given an index, ``pos``, the +has two children which are easily computable. Given an index, `pos`, the left-child is at ``pos * 2 + 1`` and the right-child is at ``pos * 2 + 2``. When the index is less than the left-child, traversal moves to the left @@ -125,7 +123,7 @@ Maintaining the position index in this way has several advantages: * It's easy to traverse to children/parent. The children of a position in the - ``_index`` are at ``(pos * 2) + 1`` and ``(pos * 2) + 2``. The parent is at + `_index` are at ``(pos * 2) + 1`` and ``(pos * 2) + 2``. The parent is at ``(pos - 1) // 2``. We can even identify left/right-children easily. Each left-child is at an odd index and each right-child is at an even index. @@ -136,7 +134,7 @@ all be done within C-routines in the Python interpreter. * It's space efficient. The whole index is no more than twice the size of the - length of the ``_lists`` and contains only integers. + length of the `_lists` and contains only integers. * It's easy to update. Adding or removing an item involves incrementing or decrementing only ``log2(len(_index))`` items in the index. The only caveat @@ -148,5 +146,5 @@ not know. Until shown otherwise, I would like to refer to it as the "Jenks" index. -Each sorted container has a function named ``_check`` for verifying +Each sorted container has a function named `_check` for verifying consistency. This function details the data-type invariants. diff -Nru sortedcontainers-1.5.9/docs/index.rst sortedcontainers-2.0.4/docs/index.rst --- sortedcontainers-1.5.9/docs/index.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/index.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,121 +1,7 @@ -SortedContainers -================ - -`SortedContainers`_ is an Apache2 licensed sorted collections library, written -in pure-Python, and fast as C-extensions. - -Python's standard library is great until you need a sorted collections -type. Many will attest that you can get really far without one, but the moment -you **really need** a sorted list, dict, or set, you're faced with a dozen -different implementations, most using C-extensions without great documentation -and benchmarking. - -In Python, we can do better. And we can do it in pure-Python! - -:: - - >>> sl = sortedcontainers.SortedList(range(int(1e7))) - >>> 1234567 in sl - True - >>> sl[7654321] - 7654321 - >>> sl.add(1234567) - >>> sl.count(1234567) - 2 - >>> sl *= 3 - >>> len(sl) - 30000003 - -*Note:* The snippet above requires at least a half gigabyte of memory. In -64-bit versions of CPython an integer requires about 24 bytes. SortedList will -add about 8 bytes per object stored in the container. That's pretty hard to -beat as it's the cost of a pointer to each object. It's also 66% less overhead -than a typical binary tree implementation (e.g. red-black tree, avl tree, aa -tree, splay tree, treap, etc.) for which every node must also store two -pointers to children nodes. - -`SortedContainers`_ takes all of the work out of Python sorted collections -- -making your deployment and use of Python easy. There's no need to install a C -compiler or pre-build and distribute custom extensions. Performance is a -feature and testing has 100% coverage with unit tests and hours of stress. - -Testimonials ------------- - -**Alex Martelli**, `Wikipedia`_ - -Good stuff! ... I like the :doc:`simple, effective implementation -` idea of splitting the sorted containers into smaller -"fragments" to avoid the O(N) insertion costs. - -.. _`Wikipedia`: http://en.wikipedia.org/wiki/Alex_Martelli - -**Jeff Knupp**, `Review of SortedContainers`_ - -That last part, "fast as C-extensions," was difficult to believe. I would need -some sort of :doc:`performance comparison ` to be convinced this -is true. The author includes this in the docs. It is. - -.. _`JeffKnupp.com`: http://jeffknupp.com/ -.. _`Review of SortedContainers`: http://reviews.jeffknupp.com/reviews/sortedcontainers/3/ - -**Kevin Samuel**, `Formations Python`_ - -I'm quite amazed, not just by the code quality (it's incredibly -readable and has more comment than code, wow), but the actual -amount of work you put at stuff that is *not* code: -documentation, benchmarking, implementation explanations. Even -the git log is clean and the unit tests run out of the box on -Python 2 and 3. - -.. _`Formations Python`: http://formationspython.com/ - -**Mark Summerfield**, a short plea for `Python Sorted Collections`_ - -Python's "batteries included" standard library seems to have a battery -missing. And the argument that "we never had it before" has worn thin. It is -time that Python offered a full range of collection classes out of the box, -including sorted ones. - -.. _`Python Sorted Collections`: http://www.qtrac.eu/pysorted.html - -Features --------- - -- Pure-Python -- Fully documented -- Benchmark comparison (alternatives, runtimes, load-factors) -- 100% test coverage -- Hours of stress testing -- Performance matters (often faster than C implementations) -- Compatible API (nearly identical to popular blist and rbtree modules) -- Feature-rich (e.g. get the five largest keys in a sorted dict: d.iloc[-5:]) -- Pragmatic design (e.g. SortedSet is a Python set with a SortedList index) -- Developed on Python 2.7 -- Tested on CPython 2.7, 3.2, 3.3, 3.4, 3.5, 3.6 and PyPy, PyPy3 - -Quickstart ----------- - -Installing `SortedContainers`_ is simple with -`pip `_:: - - $ pip install sortedcontainers - -You can access documentation in the interpreter with Python's built-in help -function: - - >>> from sortedcontainers import SortedList, SortedSet, SortedDict - >>> help(SortedList) - -User Guide ----------- - -For those wanting more details, this part of the documentation describes -introduction, implementation, performance, and development. +.. include:: ../README.rst .. toctree:: - :maxdepth: 1 + :hidden: introduction performance @@ -126,72 +12,9 @@ performance-scale development history - -API Documentation ------------------ - -If you are looking for information on a specific function, class or method, -this part of the documentation is for you. - -.. toctree:: - :maxdepth: 1 - sortedlist - sortedlistwithkey sorteddict sortedset - -Talks ------ - -.. toctree:: - :maxdepth: 1 - pycon-2016-talk sf-python-2015-lightning-talk djangocon-2015-lightning-talk - -Useful Links ------------- - -- `SortedContainers Documentation`_ -- `SortedContainers at PyPI`_ -- `SortedContainers at Github`_ -- `SortedContainers Issue Tracker`_ - -.. _`SortedContainers Documentation`: http://www.grantjenks.com/docs/sortedcontainers/ -.. _`SortedContainers at PyPI`: https://pypi.python.org/pypi/sortedcontainers -.. _`SortedContainers at Github`: https://github.com/grantjenks/sorted_containers -.. _`SortedContainers Issue Tracker`: https://github.com/grantjenks/sorted_containers/issues - -Indices and Utilities ---------------------- - -* :ref:`genindex` -* :ref:`search` - -.. _`apache2`: - -Apache2 License ---------------- - -A large number of open source projects you find today are `GPL Licensed`_. -A project that is released as GPL cannot be used in any commercial product -without the product itself also being offered as open source. - -The MIT, BSD, ISC, and Apache2 licenses are great alternatives to the GPL -that allow your open-source software to be used freely in proprietary, -closed-source software. - -`SortedContainers`_ is released under terms of the `Apache2 License`_. - -.. _`GPL Licensed`: http://www.opensource.org/licenses/gpl-license.php -.. _`Apache2 License`: http://opensource.org/licenses/Apache-2.0 - - -SortedContainers License ------------------------- - -.. include:: ../LICENSE - -.. _`SortedContainers`: http://www.grantjenks.com/docs/sortedcontainers/ diff -Nru sortedcontainers-1.5.9/docs/introduction.rst sortedcontainers-2.0.4/docs/introduction.rst --- sortedcontainers-1.5.9/docs/introduction.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/introduction.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,320 +1,796 @@ -SortedContainers Introduction -============================= +Sorted Containers Introduction +============================== -Installation ------------- +.. currentmodule:: sortedcontainers -This part of the documentation covers the installation of -:doc:`SortedContainers`. The first step to using any software package -is getting it properly installed. +.. contents:: + :local: -Distribute & Pip -................ -Installing :doc:`SortedContainers` is simple with `pip -`_:: +Installation +------------ - $ pip install sortedcontainers +The first step to using any software library is getting it properly installed. +There are several ways to install :doc:`Sorted Containers`. -or, with `easy_install `_:: +The recommended way to install :doc:`Sorted Containers` is using the +`pip`_ command:: - $ easy_install sortedcontainers + $ python3 -m pip install sortedcontainers -But you should prefer pip when available. +You may also choose instead to use the newer `pipenv`_ command:: -Get the Code -............ + $ pipenv install sortedcontainers -:doc:`SortedContainers` is actively developed on GitHub, where the code -is `always available `_. +These commands will install the latest version of :doc:`Sorted +Containers` from the `Python Package Index`_. -You can either clone the public repository:: +:doc:`Sorted Containers` is actively developed on GitHub, where the code +is `open source`_. You may choose to install directly from the source +repository. First, you will need a copy of the sources. The recommended way to +get a copy of the source repository is to clone the repository from GitHub:: - $ git clone git://github.com/grantjenks/sorted_containers.git + $ git clone git://github.com/grantjenks/python-sortedcontainers.git -Download the `tarball `_:: +You may also choose instead to download the `Sorted Containers tarball`_ or +download the `Sorted Containers zipball`_. - $ curl -OL https://github.com/grantjenks/sorted_containers/tarball/master +Once you have a copy of the sources, you can embed it in your Python package, +or install it into your site-packages using the command:: -Or, download the `zipball `_:: + $ python3 setup.py install - $ curl -OL https://github.com/grantjenks/sorted_containers/zipball/master +:doc:`Sorted Containers` is available in Debian distributions as +`python3-sortedcontainers` and `python-sortedcontainers`. -Once you have a copy of the source, you can embed it in your Python package, -or install it into your site-packages easily:: +:doc:`Sorted Containers` is looking for a CentOS/RPM package +maintainer. If you can help, please open an issue in the `Sorted Containers +Issue Tracker`_. - $ python setup.py install +.. _`pip`: https://pypi.org/project/pip/ +.. _`pipenv`: https://pypi.org/project/pipenv/ +.. _`Python Package Index`: https://pypi.org/project/sortedcontainers/ +.. _`open source`: https://github.com/grantjenks/python-sortedcontainers +.. _`Sorted Containers tarball`: https://github.com/grantjenks/python-sortedcontainers/tarball/master +.. _`Sorted Containers zipball`: https://github.com/grantjenks/python-sortedcontainers/zipball/master +.. _`Sorted Containers Issue Tracker`: https://github.com/grantjenks/python-sortedcontainers/issues -:doc:`SortedContainers` is also available in Debian distributions as -`python-sortedcontainers` and `python3-sortedcontainers`. -SortedList ----------- +Sorted List +----------- -SortedList is a sequence data type that always maintains its values in -ascending sort order. As with Python's built-in list data type, SortedList -supports duplicate elements and fast random-access indexing. +At the core of :doc:`Sorted Containers` is the mutable sequence data +type :class:`SortedList`. The :class:`SortedList` maintains its values in +ascending sort order. As with Python's built-in list data type, +:class:`SortedList` supports duplicate elements and fast random-access +indexing. >>> from sortedcontainers import SortedList - >>> l = SortedList() + >>> sl = SortedList() -Elements may be added to a SortedList using either :ref:`add ` -or :ref:`update `. When doing so, the list remains sorted. - - >>> l.update([0, 4, 1, 3, 2]) - >>> l - SortedList([0, 1, 2, 3, 4]) - >>> l.index(3) - 3 - >>> l.add(5) - >>> l[-1] +Values may be added to a :class:`SortedList` using either +:func:`SortedList.update` or :func:`SortedList.add`. When doing so, the list +remains sorted. + + >>> sl.update([5, 1, 3, 4, 2]) + >>> sl + SortedList([1, 2, 3, 4, 5]) + >>> sl.add(0) + >>> sl + SortedList([0, 1, 2, 3, 4, 5]) + +Several methods may be used to remove elements by value or by index. The +methods :func:`SortedList.discard` and :func:`SortedList.remove` remove +elements by value. And the methods :func:`SortedList.pop` and +:func:`SortedList.__delitem__` remove elements by index. All values may be +removed using :func:`SortedList.clear`. + + >>> sl.remove(0) + >>> sl.discard(1) + >>> sl + SortedList([2, 3, 4, 5]) + >>> sl.pop() 5 - -Elements may also be inserted into a SortedList using :ref:`append -`, :ref:`__setitem__ `, :ref:`insert -`, or :ref:`extend `. These functions -follow the programmer's directive to insert the element(s) at a specific -location. Inserting an element out of order in this way will cause a -ValueError. - - >>> l[:] = [0, 1, 2, 3, 4] - >>> l.append(5) - >>> l.insert(0, 0) - >>> l.extend(range(6, 10)) - >>> print(','.join(map(str, l))) - 0,0,1,2,3,4,5,6,7,8,9 - >>> l.insert(10, 5) - ValueError - -Removing elements from a SortedList is done with :ref:`discard -`, :ref:`remove `, :ref:`__delitem__ -`, or :ref:`pop `. These functions work -identically to their list counterparts. - - >>> l[:] = range(10) - >>> del l[-9:-3:3] - >>> l.discard(0) - >>> l.remove(5) - >>> l.pop() - 9 - >>> len(l) + >>> del sl[1] + >>> sl + SortedList([2, 4]) + >>> sl.clear() + +Because :class:`SortedList` is sorted, it supports efficient lookups by value +or by index. When accessing values by index, the :class:`SortedList` can be +used as an `order statistic tree`_. Rather than performing a linear scan, +values can be found in logarithmic time by repeatedly bisecting the internal +tree structure. Methods for looking up values are +:func:`SortedList.__contains__`, :func:`SortedList.count`, +:func:`SortedList.index`, :func:`SortedList.bisect_left`, +:func:`SortedList.bisect_right`, and :func:`SortedList.__getitem__`. + + >>> sl = SortedList('abbcccddddeeeee') + >>> 'f' in sl + False + >>> sl.count('e') 5 + >>> sl.index('c') + 3 + >>> sl[3] + 'c' + >>> sl.bisect_left('d') + 6 + >>> sl.bisect_right('d') + 10 + >>> sl[6:10] + ['d', 'd', 'd', 'd'] -Because the SortedList maintains its elements in sorted order, several -functions can be computed efficiently using binary-search. Those functions are -:ref:`index `, :ref:`count `, :ref:`bisect -`, :ref:`bisect_left `, and -:ref:`bisect_right `. - - >>> l.clear() - >>> l.update(range(1000000)) - >>> l.index(123456) - 123456 - >>> l.count(654321) - 1 - >>> l.bisect(123456.7) - 123457 - -SortedList does not support in-place :ref:`reverse ` -because values are always maintained in ascending sort order. To reverse a -SortedList you may either request a :ref:`reversed ` -iterator or use negative indexing. - - >>> l[:] = range(5) - >>> l.reverse() - NotImplementedError: .reverse() not defined - >>> list(reversed(l)) - [4, 3, 2, 1, 0] - >>> l[-3:] - [2, 3, 4] - -SortedList also works efficiently with other sequence data -types. :ref:`Addition `, :ref:`multiplication -`, and :ref:`comparison ` works as with -other sequences. - - >>> l[:] = range(10) - >>> l += range(10) - >>> l *= 2 - >>> l >= [0, 0, 0, 0] - True - >>> del l[::4] - >>> del l[::3] - >>> del l[::2] - >>> l == range(10) - True - -SortedList adds two more functions to the list API: :ref:`islice -` and :ref:`irange `. Each returns an -iterator and slices the SortedList: `islice` according to traditional Python -slicing rules, `start` to `stop`, inclusive and exclusive respectively; and -`irange` from the `minimum` to `maximum`, both inclusive by default. Each -method also accepts a `reverse` argument so that items are yielded from the -iterator in reverse. - - >>> l[:] = range(10) - >>> tuple(l.islice(3, 6, reverse=True)) - (5, 4, 3) - >>> tuple(l.irange(2, 7, inclusive=(True, True))) - (2, 3, 4, 5, 6, 7) - -For more details, refer to the :doc:`SortedList API documentation -`. - -SortedListWithKey ------------------ - -The :doc:`SortedContainers` project also maintains a specialized -SortedList-like type that accepts a key-parameter as found with Python's -built-in *sorted* function. A SortedListWithKey provides the same -functionality as a SortedList but maintains the order of contained values based -on the applied key-function. This simplifies the pattern of boxing/un-boxing -which would otherwise be required. +Several methods can be used to iterate values in a :class:`SortedList`. There +are the typical sequence iterators: :func:`SortedList.__iter__` and +:func:`SortedList.__reversed__`. There are also methods for iterating by value +or by index using :func:`SortedList.irange` and +:func:`SortedList.islice`. These methods produce iterators that are faster than +repeatedly indexing the :class:`SortedList`. + + >>> sl = SortedList('acegi') + >>> list(iter(sl)) + ['a', 'c', 'e', 'g', 'i'] + >>> list(reversed(sl)) + ['i', 'g', 'e', 'c', 'a'] + >>> list(sl.irange('b', 'h')) + ['c', 'e', 'g'] + >>> list(sl.islice(1, 4)) + ['c', 'e', 'g'] + +A :class:`SortedList` also supports the typical sequence operators +:func:`SortedList.__add__` and :func:`SortedList.__mul__` as well as their +in-place counterparts. + + >>> sl = SortedList('abc') + >>> sl + sl + SortedList(['a', 'a', 'b', 'b', 'c', 'c']) + >>> sl * 3 + SortedList(['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c']) + >>> sl += 'de' + >>> sl + SortedList(['a', 'b', 'c', 'd', 'e']) + >>> sl *= 2 + >>> sl + SortedList(['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd', 'e', 'e']) + +Although :class:`SortedList` implements most of the mutable sequence methods, +there are five which are not implemented. Each of these methods assigns a value +at an index which is not supported by :class:`SortedList`. + + >>> sl = SortedList('abcde') + >>> sl[2] = 'c' + Traceback (most recent call last): + ... + NotImplementedError: use ``del sl[index]`` and ``sl.add(value)`` instead + >>> sl.reverse() + Traceback (most recent call last): + ... + NotImplementedError: use ``reversed(sl)`` instead + >>> sl.append('f') + Traceback (most recent call last): + ... + NotImplementedError: use ``sl.add(value)`` instead + >>> sl.extend(['f', 'g', 'h']) + Traceback (most recent call last): + ... + NotImplementedError: use ``sl.update(values)`` instead + >>> sl.insert(5, 'f') + Traceback (most recent call last): + ... + NotImplementedError: use ``sl.add(value)`` instead + +Comparison with :class:`SortedList` uses lexicographical ordering as with other +sequence types. + +Refer to the :doc:`Sorted List documentation` for additional +parameters, more examples, and descriptions of runtime complexity. + +.. _`order statistic tree`: https://en.wikipedia.org/wiki/Order_statistic_tree + + +Sorted-key List +--------------- + +The :doc:`Sorted Containers` project also maintains a specialized +sorted-list-like type that accepts a key-parameter as found in Python's +built-in `sorted` function. :class:`SortedKeyList` provides the same +functionality as :class:`SortedList` but maintains the order of contained +values based on the applied key-function. This simplifies the pattern of boxing +and un-boxing which would otherwise be required. - >>> from sortedcontainers import SortedListWithKey - >>> l = SortedListWithKey(key=lambda val: -val) + >>> from operator import neg + >>> from sortedcontainers import SortedKeyList + >>> skl = SortedKeyList(key=neg) The key function extracts a comparison key for ordering items in the list. In -our example above we apply the negation operator. Doing so would maintain a -list of integers in reverse. +our example above we apply the negation operator. In the example above, a +sorted list of integers would be ordered in descending sort order. -You can also construct a SortedListWithKey using the SortedList type by passing -a key-function to the constructor. +You can also construct a :class:`SortedKeyList` using the :class:`SortedList` +type by passing a key-function to the initializer. >>> from sortedcontainers import SortedList - >>> from operator import neg - >>> values = SortedList(range(4), key=neg) - >>> repr(values) - SortedListWithKey([3, 2, 1, 0], key=, load=1000) - >>> type(values) - + >>> values = SortedList([1, 2, 3, 4, 5], key=neg) + >>> values + SortedKeyList([5, 4, 3, 2, 1], key=) >>> isinstance(values, SortedList) True + >>> issubclass(SortedKeyList, SortedList) + True + >>> values.key + -For more details, refer to the :doc:`SortedListWithKey API documentation -`. +:class:`SortedKeyList` adds three additional methods to the :class:`SortedList` +type. They are :func:`SortedKeyList.bisect_key_left`, +:func:`SortedKeyList.bisect_key_right`, and :func:`SortedKeyList.irange_key`. +Each of these methods accepts the key rather than the value for its +:class:`SortedList` counterpart. + + >>> skl = SortedKeyList([1, 2, 3, 4, 5], key=neg) + >>> skl + SortedKeyList([5, 4, 3, 2, 1], key=) + >>> skl.bisect_key_left(-4.5) + 1 + >>> skl.bisect_key_right(-1.5) + 4 + >>> list(skl.irange_key(-4.5, -1.5)) + [4, 3, 2] + +Refer to the :doc:`Sorted List documentation` for additional +parameters, more examples, and descriptions of runtime complexity. + + +Caveats +------- + +:doc:`Sorted Containers` data types have three requirements: + +1. The comparison value or key must have a `total ordering`_. + +2. The comparison value or key must not change while the value is stored in the + sorted container. + +3. If the key-function parameter is used, then equal values must have equal + keys. + +If any of these three requirements are violated then the warranty of +:doc:`Sorted Containers` is void and it will not behave correctly. While +it may be possible to design useful data types that do not have these +requirements, these are the caveats of :doc:`Sorted Containers` and they +match those of :doc:`alternative implementations`. Each of these +requirements allow for optimizations and together they are an attempt to find +the right tradeoff between functionality and performance. + +Let's look at some examples of what works and what doesn't. In Python, all +objects inherit from ``object`` which provides a default implementation of +equality. In pseudocode, the object type looks something like: + + >>> class Object: + ... def __eq__(self, other): + ... return id(self) == id(other) + +The default implementation defines equality in terms of identity. Note that +`Object` does not define comparison methods like less-than or +greater-than. While Python objects are comparable by default in Python 2, the +feature was removed in Python 3. Instances of `object` can *not* be stored in a +:class:`SortedList`. + +We can extend this example by creating our own `Record` data type with `name` +and `rank` attributes. + + >>> class Record(object): + ... def __init__(self, name, rank): + ... self.name = name + ... self.rank = rank + ... def __eq__(self, other): + ... return self.name == other.name + +The `Record` type defines equality in terms of its `name` attribute which may +be thought of as a record identifier. Each `Record` also has a `rank` which +would be useful for ranking records in sorted order. The `Record` type does not +define comparison operators and so can *not* be stored in a +:class:`SortedList`. + + >>> alice1 = Record('alice', 1) + >>> bob2 = Record('bob', 2) + >>> carol3 = Record('carol', 3) + +Since the `rank` attribute is intended for ordering records, the key-function +presents a tempting but invalid use for ordering records:: + + >>> get_rank = lambda record: record.rank + >>> sl = SortedList([alice1, bob2, carol3], key=get_rank) + +Although the sorted list now appears to work, the requirements have been +invalidated. Specifically #3, since it is now possible for equal values to have +inequal keys:: -SortedDict ----------- + >>> bob4 = Record('bob', 4) + >>> bob2 == bob4 # Equal values. + True + >>> get_rank(bob2) == get_rank(bob4) + False + >>> # ^-- Equal values should have equal keys. + >>> bob4 in sl # <-- Here's the problem. BAD! + False + +In the example above, `bob4` can not be found in `sl` because although `bob2` +and `bob4` are equal, the corresponding keys are not equal. The mistake is a +bit easier to see without the key-function. The key-function defined +comparisons between records like so:: + + >>> class Record(object): + ... def __init__(self, name, rank): + ... self.name = name + ... self.rank = rank + ... def __eq__(self, other): + ... return self.name == other.name + ... def __lt__(self, other): + ... return self.rank < other.rank + +Written as above, equality between objects is more clearly seen as unrelated to +ordering between objects. This is the most common mistake made when using +:doc:`Sorted Containers`. The `Record` type now also violates +requirement #1 because equal instances can also be strictly less than each +other:: + + >>> bob2 = Record('bob', 2) + >>> bob4 = Record('bob', 4) + >>> bob2 == bob4 + True + >>> bob2 < bob4 # <-- Here's the problem. BAD! + True + +In the above example, `bob2` and `bob4` are equal to each other while `bob2` is +also strictly less than `bob4`. The `Record` type therefore does not have a +`total ordering`_. In pseudocode the three requirements for a `total ordering`_ +are: + +I. If ``a <= b and b <= a`` then ``a == b``. + +II. And if ``a <= b and b <= c`` then ``a <= c``. + +III. And ``a <= b or b <= a``. + +Intuitively, a `total ordering`_ is best understood through integer and string +types. Each of these common types defines a `total ordering`_ and can be used +for comparisons in :doc:`Sorted Containers`. Of the built-in types in +Python, these have a `total ordering`_: + +1. Integers + +2. Strings and bytes. + +3. All foating-point numbers except ``float('nan')``. + +4. Sequences like `list` and `tuple` of values with a total ordering. + +There are also some built-in Python types and values which lack a total +ordering: + +1. Sets and frozensets (not a total ordering). + +2. ``float('nan')`` (not a total ordering). + +3. Mapping types (not comparable, changed in Python 3). + +The best way to fix the `Record` type is to define equality and comparison in +terms of the same fields. + + >>> class Record(object): + ... def __init__(self, name, rank): + ... self.name = name + ... self.rank = rank + ... def _cmp_key(self): + ... return (self.rank, self.name) + ... def __eq__(self, other): + ... return self._cmp_key() == other._cmp_key() + ... def __lt__(self, other): + ... return self._cmp_key() < other._cmp_key() -A SortedDict is a container of key-value pairs in which an order is imposed on -the keys according to their ordered relation to each other. As with Python's -built-in ``dict`` data type, SortedDict supports fast insertion, deletion, and -lookup by key. Iterating a SortedDict yields the keys in sorted order. The API -strives to be as similar to the built-in ``dict`` type as possible. +The example above uses a comparison-key method named `_cmp_key` and the +lexicographical ordering semantics of tuples to define equality and comparison +in terms of the `rank` and `name` fields. It would also be possible to omit the +`Record.__lt__` method and instead use a key-function which called +`record._cmp_key()`. But the key-function will take more memory and be slower +as it uses a :class:`SortedKeyList` which stores a reference to the key for +every value. + +The `Record` example above is complicated by equality defined as those objects +with equal names. When using equality inherited from `object`, that is, defined +in terms of instance identity, the situation is simplified. For example: + + >>> class Record(object): + ... def __init__(self, name, rank): + ... self.name = name + ... self.rank = rank + ... def __lt__(self, other): + ... return self.rank < other.rank + +The `Record` type now can be stored in :class:`SortedList` because equality +based on instance identity guarantees the `rank` attributes are equal so long +as its value has a `total ordering`_. + + >>> alice1 = Record('alice', 1) + >>> bob2 = Record('bob', 2) + >>> carol3 = Record('carol', 3) + >>> bob4 = Record('bob', 4) + >>> bob2 != bob4 # <-- Different instances, so unequal. GOOD! + True + >>> sl = SortedList([alice1, bob2, carol3, bob4]) + >>> bob2 in sl + True + >>> bob4 in sl + True + +The above example displays that all three requirements are followed: + +1. The comparison key, `rank`, is an integer, which has a `total ordering`_. + +2. The comparison key does not change while the value is stored in the sorted + container. + +3. Equal `Record` instances have equal `rank` attributes based on instance + identity. + +These examples can be summarized in two pieces of advice: + +1. If the data type defines its own equality, that is ``__eq__``, then make + sure the comparison methods or key-function define a `total ordering`_ and + equal values have equal comparison keys. + +2. If the data type does not define equality then it inherits equality from + `object` and uses instance identity. Compare objects using comparison + methods like ``__lt__`` or the key-function. The compared values must have a + `total ordering`_. + +Another invalid use case of :class:`SortedKeyList` occurs when the key-function +returns a different comparison key for a given value while the value is stored +in the sorted container. + + >>> from random import random + >>> key_func = lambda value: random() + >>> sl = SortedList([1, 2, 3, 4, 5], key=key_func) + >>> # ^-- Corrupt sorted list. + >>> 3 in sl + False + >>> key_func(1) == key_func(1) # <-- Here's the problem. BAD! + False + +The example above violates two requirements of sorted lists: equal values must +have equal keys and the key function must return the same key for the given +value while the value is stored in the sorted container. The `random` +key-function does not reliably return the same key for a given value. The order +of values in a sorted container can be made arbitrary and reliable by changing +the key-function like so: + + >>> from random import seed + >>> def key_func(value): + ... "Key-function for arbitrary but reliable order." + ... seed(value) + ... return random() + +Another way the problem above manifests itself is when the comparison key of an +object is mutated while the object is stored in the :class:`SortedList`. Using +the `Record` definition from above: + + >>> class Record(object): + ... def __init__(self, name, rank): + ... self.name = name + ... self.rank = rank + ... def __lt__(self, other): + ... return self.rank < other.rank + >>> alice1 = Record('alice', 1) + >>> bob2 = Record('bob', 2) + >>> carol3 = Record('carol', 3) + >>> sl = SortedList([alice1, bob2, carol3]) + >>> bob2 in sl + True + +Python objects are typically mutable so while the above example works and is +correct, there's nothing preventing a modification to the `rank` of a `Record`. +If the `rank` is modified while the `Record` instance is stored in the +:class:`SortedList`, then the container is corrupted. + + >>> bob2.rank = 20 # <-- Here's the problem. BAD! + >>> bob2 in sl + False + +The `Record` instance `bob2` can no longer be found in the :class:`SortedList` +because modifying the `rank` changed its sort order position without updating +its position in `sl`. To modify the sorted order position, :func:`remove +` the value, update it, and then :func:`add +` the value back again. + +Similar limitations also apply to Python's `dict` data type which can be +corrupted by modifying the hash of a key while the item is stored in the +`dict`. The hashing protocol also requires that equal keys have equal hashes. + +One final caveat: indexing a sorted list is fast but not as fast as indexing +Python's built-in list data type. The runtime complexity for indexing a sorted +list is `O(log(n))` while it is `O(1)` for Python's built-in list data type. +Indexing a sorted list requires building and maintaining a positional index +which is not built if not necessary. The index is fast and light on memory +overhead but avoid positional indexing if able. Indexing at the front or back, +indexes like `0` and `-1`, is optimized and will not require the positional +index. + +.. _`total ordering`: https://en.wikipedia.org/wiki/Total_order + + +Sorted Dict +----------- + +Built atop Python's built-in `dict` data type and :class:`SortedList` is the +mutable mapping data type :class:`SortedDict`. Sorted dict keys are maintained +in sorted order. The design of :class:`SortedDict` is simple: sorted dict +inherits from `dict` to store items and maintains a sorted list of +keys. :class:`SortedDict` keys must be hashable and comparable. The hash and +total ordering of keys must not change while they are stored in the +:class:`SortedDict`. >>> from sortedcontainers import SortedDict - >>> d = SortedDict() - >>> d.update(alice=518, bob=285, carol=925, dave=376, ellen=874) - >>> print(''.join(key[0] for key in d)) - abcde - >>> d['frank'] = 102 - >>> d['bob'] = 341 - >>> del d['frank'] - >>> 'ellen' in d + >>> sd = SortedDict() + +Items may be added to a :class:`SortedDict` using +:func:`SortedDict.__setitem__`, :func:`SortedDict.update` or +:func:`SortedDict.setdefault`. When doing so, the keys remain sorted. + + >>> sd['e'] = 5 + >>> sd['b'] = 2 + >>> sd + SortedDict({'b': 2, 'e': 5}) + >>> sd.update({'d': 4, 'c': 3}) + >>> sd + SortedDict({'b': 2, 'c': 3, 'd': 4, 'e': 5}) + >>> sd.setdefault('a', 1) + 1 + >>> sd + SortedDict({'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}) + +Several methods may be used to remove items by key or by index. The methods +:func:`SortedDict.__delitem__` and :func:`SortedDict.pop` remove items by +key. And the method :func:`SortedDict.popitem` removes items by index. + + >>> del sd['d'] + >>> sd.pop('c') + 3 + >>> sd.popitem(index=-1) + ('e', 5) + >>> sd + SortedDict({'a': 1, 'b': 2}) + +Because :class:`SortedDict` uses both `dict` and :class:`SortedList`, there are +many methods for looking up keys from each type. The mapping interface supports +:func:`SortedDict.__getitem__`, :func:`SortedDict.__contains__`, +:func:`SortedDict.get`, and :func:`SortedDict.peekitem`. + + >>> sd['b'] + 2 + >>> 'c' in sd + False + >>> sd.get('z') is None True - >>> d.get('frank', 0) - 0 - >>> d.pop() - 'ellen' + >>> sd.peekitem(index=-1) + ('b', 2) -SortedDict also supports key, value, and item iteration/views according to the -Python version. (Python 2.7 and higher supports views while Python 2.6 supports -only iteration.) View operations like :ref:`and `, -:ref:`or `, :ref:`sub `, and -:ref:`xor ` return a SortedSet container. - - >>> d.clear() - >>> d.update(list(enumerate('0123456789'))) - >>> keys = d.keys() - >>> len(keys) - 10 - >>> d[-1] = '-1' - >>> len(keys) - 11 - >>> s = SortedDict([(1, '1'), (2, '2'), (3, '3'), (10, '10')]) - >>> s.keys() & keys - SortedSet([1, 2, 3]) - -In addition to the normal dictionary operations, SortedDict supports fast -:ref:`indexing with iloc` and :ref:`key index -lookup`. Using indexing, you can quickly lookup the nth key -in iteration. These utilities are not common in other implementations but can -be extremely useful. Indexing also supports slice notation. +The sequence interface supports the same lookup methods as those provided by +:class:`SortedList`. - >>> d = SortedDict(b=2, d=4, c=3, e=5, a=1) - >>> d.iloc[0] - 'a' - >>> d.iloc[-1] - 'e' - >>> d.iloc[-3:] - ['c', 'd', 'e'] - >>> d.index('c') + >>> sd.bisect_right('b') 2 + >>> sd.index('a') + 0 + >>> list(sd.irange('a', 'z')) + ['a', 'b'] -SortedDict's contructor supports two additional positional arguments. These -must occur before any sequences, mappings or keyword arguments used to -initialize the SortedDict. The first positional argument is an optional -callable `key` used to extract a comparison key from the SortedDict's keys. The -second positional argument is an optional integer representing the load-factor. +The keys, items, and values views also support both set semantics and sequence +semantics with optimized methods for lookups by index. -For example, to contruct a mapping with integer keys in descending order and a -load-factor of 100: + >>> keys = sd.keys() + >>> keys[0] + 'a' + >>> items = sd.items() + >>> items[-1] + ('b', 2) + >>> values = sd.values() + >>> values[:] + [1, 2] + +The :class:`SortedDict` initializer supports one additional position argument. +The positional argument must come before any sequences, mappings, or keyword +arguments used to initialize the items in a :class:`SortedDict`. The first +positional argument is an optional callable key-function used to extract a +comparison key from the keys of the :class:`SortedDict`. For example, to +construct a :class:`SortedDict` with integer keys in descending order: + + >>> sd = SortedDict(neg, enumerate('abc', start=1)) + >>> sd + SortedDict(, {3: 'c', 2: 'b', 1: 'a'}) + >>> keys = sd.keys() + >>> list(keys) + [3, 2, 1] + +Because :class:`SortedDict` inherits from `dict`, the `__missing__` method can +be used to give missing keys a default value. Customizing the `__missing__` +method creates a kind of `defaultdict` like that in the `collections` module. + + >>> class DefaultSortedDict(SortedDict): + ... def __missing__(self, key): + ... return 0 + >>> dsd = DefaultSortedDict() + >>> dsd['z'] + 0 - >>> from operator import neg - >>> d = SortedDict(neg, 100, enumerate(range(4))) - >>> d - SortedDict(, 100, {3: 3, 2: 2, 1: 1, 0: 0}) +Refer to the :doc:`Sorted Dict documentation` for additional +parameters, more examples, and descriptions of runtime complexity. -For more details, refer to the :doc:`SortedDict API documentation -`. -SortedSet ---------- +Sorted Set +---------- -A :doc:`SortedSet` is a collection of distinct objects in which an -order is imposed on the members according to their sorted relation to each -other. The API is similar to the :doc:`SortedList` and built-in -``set`` type. Iterating a SortedSet yields the items in sorted order. +Standing on the shoulder's of Python's built-in `set` data type and +:class:`SortedList` is the mutable set data type :class:`SortedSet`. Sorted set +values are maintained in sorted order. The design of :class:`SortedSet` is +simple: sorted set uses Python's built-in `set` for set-operations and +maintains a sorted list of values. Values stored in a :class:`SortedSet` must +be hashable and comparable. The hash and total ordering of values must not +change while they are stored in the :class:`SortedSet`. >>> from sortedcontainers import SortedSet - >>> s = SortedSet([3, 1, 0, 2]) - >>> list(s) - [0, 1, 2, 3] - -Like the built-in set container type, SortedSet supports -:ref:`difference`, -:ref:`intersection`, -:ref:`symmetric_difference`, and -:ref:`union` operations along with their ``*_update`` -counterparts. - - >>> s.clear() - >>> s.add(-1) - >>> s.update(xrange(10)) - >>> 5 in s - True - >>> s - [1, 2, 3] - SortedSet([-1, 0, 4, 5, 6, 7, 8, 9]) - >>> s & [-3, -2, -1, 0] - SortedSet([-1, 0]) - >>> s > [1, 2, 3] - True - -Adding and removing elements works the same as with the SortedList container -although positional updates are not permitted. Unlike the built-in ``set`` -type, SortedSet has full indexing support for -:ref:`set[index]` and :ref:`del -set[index]` operations. - - >>> s.clear() - >>> s.update(xrange(100)) - >>> s[5] + >>> ss = SortedSet() + +:class:`SortedSet` implements optimized versions of the core mutable set +methods: :func:`SortedSet.__contains__`, :func:`SortedSet.add`, +:func:`SortedSet.update`, :func:`SortedSet.discard`, and the more strict +:func:`SortedSet.remove`. + + >>> ss.add('c') + >>> ss.add('a') + >>> ss.add('b') + >>> ss + SortedSet(['a', 'b', 'c']) + >>> 'c' in ss + True + >>> ss.discard('a') + >>> ss.remove('b') + >>> _ = ss.update('def') + >>> ss + SortedSet(['c', 'd', 'e', 'f']) + +:class:`SortedSet` also behaves like a sequence with +:func:`SortedSet.__getitem__` and :func:`SortedSet.__reversed__` methods. And +includes the mutable sequence methods :func:`SortedSet.__delitem__` and +:func:`SortedSet.pop`. + + >>> ss[0] + 'c' + >>> list(reversed(ss)) + ['f', 'e', 'd', 'c'] + >>> del ss[0] + >>> ss.pop(index=-1) + 'f' + >>> ss + SortedSet(['d', 'e']) + +Set-operation methods like :func:`SortedSet.difference`, +:func:`SortedSet.intersection`, :func:`SortedSet.symmetric_difference`, and +:func:`SortedSet.union`, as well as their in-place counterparts and operators +are all supported. + + >>> abcd = SortedSet('abcd') + >>> cdef = SortedSet('cdef') + >>> abcd.difference(cdef) + SortedSet(['a', 'b']) + >>> abcd.intersection(cdef) + SortedSet(['c', 'd']) + >>> abcd.symmetric_difference(cdef) + SortedSet(['a', 'b', 'e', 'f']) + >>> abcd.union(cdef) + SortedSet(['a', 'b', 'c', 'd', 'e', 'f']) + >>> abcd | cdef + SortedSet(['a', 'b', 'c', 'd', 'e', 'f']) + >>> abcd |= cdef + >>> abcd + SortedSet(['a', 'b', 'c', 'd', 'e', 'f']) + +Several :class:`SortedList` methods are also exposed on :class:`SortedSet` +objects like :func:`SortedList.bisect`, :func:`SortedList.index`, +:func:`SortedList.irange`, and :func:`SortedList.islice` just as with +:class:`SortedDict`. + + >>> ss = SortedSet('abcdef') + >>> ss.bisect('d') + 4 + >>> ss.index('f') 5 - >>> s[2:10:2] - SortedSet([2, 4, 6, 8]) - >>> del s[3:15:3] - >>> len(s) - 96 + >>> list(ss.irange('b', 'e')) + ['b', 'c', 'd', 'e'] + >>> list(ss.islice(-3)) + ['d', 'e', 'f'] + +Like :class:`SortedList` an additional `key` parameter can be used to +initialize the :class:`SortedSet` with a callable which is used to extract a +comparison key. + + >>> ss = SortedSet([1, 2, 3], key=neg) + >>> ss + SortedSet([3, 2, 1], key=) + +Sorted set comparisons use subset and superset relations. Two sorted sets are +equal if and only if every element of each sorted set is contained in the other +(each is a subset of the other). A sorted set is less than another sorted set +if and only if the first sorted set is a proper subset of the second sorted set +(is a subset, but is not equal). A sorted set is greater than another sorted +set if and only if the first sorted set is a proper superset of the second +sorted set (is a superset, but is not equal). The comparison semantics of +sorted sets do not define a total ordering. + +Refer to the :doc:`Sorted Set documentation` for additional +parameters, more examples, and descriptions of runtime complexity. + + +Migrating +--------- -For more details, refer to the :doc:`SortedSet API documentation`. +The :doc:`performance comparison` page documents several +alternative implementations of the sorted types described. Some of those +projects have deprecated themselves and now recommend :doc:`Sorted +Containers` instead. When migrating from other projects, there are a +couple of things to keep in mind. + +:doc:`Sorted Containers` went through a major version change between +version one and version two. The goal of the change was to adopt Python 3 +semantics wherever possible: + +1. Several :class:`SortedList` methods now raise :exc:`NotImplementedError`: + :func:`SortedList.__setitem__`, :func:`SortedList.append`, and + :func:`SortedList.extend`. Use :func:`SortedList.add` or + :func:`SortedList.update` instead. + +2. :class:`SortedDict` has adopted the Python 3 semantics of `dict` views as + the default. The :func:`SortedDict.keys`, :func:`SortedDict.items`, and + :func:`SortedDict.values` methods now return views with support for + optimized indexing. The view objects also implement set and sequence + protocol methods. Prefer using the :class:`SortedDict` methods directly for + better performance. + +3. Some type and parameter names were changed. `SortedListWithKey` was renamed + to `SortedKeyList` but an alias remains for compatibility. Several methods + which accepted a `val` parameter now accept `value` for better readability. + +The :doc:`history` documents all the changes made in every version in the +history of the project. The :ref:`Version 2` release notes detail all the +changes made. + +The `blist`_ project remains the most similar as its API was the original +inspiration for :doc:`Sorted Containers`. The main difference has always +been the :func:`SortedList.pop` method. The `blist`_ project pops the first +element by default while :doc:`Sorted Containers` pops the last element +and matches the API of Python's built-in `list` data type. The sorted dict data +type in `blist`_ also continues to use the old Python 2 semantics for `dict` +views. + +The `bintrees`_ project now recommends using :doc:`Sorted Containers` +instead and has stopped development. The API differs significantly but the +supported functionality is the same. The `Tree` object in `bintrees`_ is most +similar to :class:`SortedDict`. All of the mapping methods and set methods are +available using either :class:`SortedDict` or :class:`SortedKeysView`. The +slicing methods and previous/successor iterator methods correspond to +:func:`SortedDict.irange` and the heap methods correspond to indexing with +views like :func:`SortedKeysView.__getitem__`. + +The `banyan`_ project has data types similar to :class:`SortedDict` and +:class:`SortedSet`. Most methods have a direct counterpart in :doc:`Sorted +Containers`. But the frozen sorted dict and frozen sorted set data types +have no direct comparison. The functionality of hashing can be implemented by +inheriting and defining the `__hash__` method. Do so with care, because the +instance is still mutable. The `banyan`_ project also supports tree +augmentation which can be useful in implementing interval trees or segment +trees. There is no support for tree argumentation in :doc:`Sorted +Containers`. + +.. _`blist`: https://pypi.org/project/blist/ +.. _`bintrees`: https://pypi.org/project/bintrees/ +.. _`banyan`: https://pypi.org/project/Banyan/ diff -Nru sortedcontainers-1.5.9/docs/make.bat sortedcontainers-2.0.4/docs/make.bat --- sortedcontainers-1.5.9/docs/make.bat 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/make.bat 2018-06-07 05:34:49.000000000 +0000 @@ -1,242 +1,36 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\sortedcontainers.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\sortedcontainers.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build +set SPHINXPROJ=SortedContainers + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff -Nru sortedcontainers-1.5.9/docs/Makefile sortedcontainers-2.0.4/docs/Makefile --- sortedcontainers-1.5.9/docs/Makefile 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/Makefile 2018-06-07 05:34:49.000000000 +0000 @@ -1,177 +1,20 @@ -# Makefile for Sphinx documentation +# Minimal makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build -PAPER = +SPHINXPROJ = SortedContainers +SOURCEDIR = . BUILDDIR = _build -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - +# Put it first so that "make" without argument is like "make help". help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/sortedcontainers.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/sortedcontainers.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/sortedcontainers" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/sortedcontainers" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." +.PHONY: help Makefile -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff -Nru sortedcontainers-1.5.9/docs/performance-load.rst sortedcontainers-2.0.4/docs/performance-load.rst --- sortedcontainers-1.5.9/docs/performance-load.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/performance-load.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,26 +1,26 @@ Load Factor Performance Comparison ================================== -:doc:`SortedContainers` uses a segmented-list data structure similar to +:doc:`Sorted Containers` uses a segmented-list data structure similar to a B-tree limited to two levels of nodes. As part of the implementation, a load factor is used to determine how many values should be stored in each node. This page compares three load factors on containers with as many as ten of million elements. No single load factor is universally superior. The best load factor for your -purposes will depend on your usage pattern. Originally, -:doc:`SortedContainers` used a load factor of 100 but that changed in -release 0.8.5 mainly due to the SortedList.delitem_ benchmark which is most -dramatically impacted. Most benchmarks perform slightly better with a load -factor of 100 but each is competitive with alternate loads. For an in-depth -analysis of the load factor read :doc:`Performance at +purposes will depend on your usage pattern. Originally, :doc:`Sorted +Containers` used a load factor of 100 but that changed in release 0.8.5 +to 1,000 due to the :ref:`SortedList.__delitem__` benchmark +which was dramatically impacted. Most benchmarks perform slightly better with a +load factor of 100 but each is competitive with alternate loads. For an +in-depth analysis of the load factor read :doc:`Performance at Scale`. Performance of competing implementations are benchmarked against the CPython -2.7 runtime. An :doc:`implementation performance comparison` is +3.6 runtime. An :doc:`implementation performance comparison` is also included with data from popular sorted collections packages. -Because :doc:`SortedContainers` is pure-Python, its performance also +Because :doc:`Sorted Containers` is pure-Python, its performance also depends directly on the Python runtime. A :doc:`runtime performance comparison` is also included with data from popular Python runtimes. @@ -30,37 +30,38 @@ performance comparison` contains examples with comparisons to other implementations, load factors, and runtimes. -SortedList ----------- +.. currentmodule:: sortedcontainers + +Sorted List +----------- -Graphs comparing :doc:`SortedList` performance. +Graphs comparing :doc:`sortedlist` performance. __init__ ........ -Initializing with a list of random numbers. +Initializing with a list of random numbers using :func:`SortedList.__init__`. .. image:: _static/SortedList_load-init.png add ... -Randomly adding values using :ref:`SortedList.add`. +Randomly adding values using :func:`SortedList.add`. .. image:: _static/SortedList_load-add.png contains ........ -Randomly testing membership using -:ref:`SortedList.__contains__`. +Randomly testing membership using :func:`SortedList.__contains__`. .. image:: _static/SortedList_load-contains.png count ..... -Counting objects at random using :ref:`SortedList.count`. +Counting objects at random using :func:`SortedList.count`. .. image:: _static/SortedList_load-count.png @@ -69,72 +70,69 @@ .. _SortedList.delitem: -Deleting objects at random using -:ref:`SortedList.__delitem__`. +Deleting objects at random using :func:`SortedList.__delitem__`. .. image:: _static/SortedList_load-delitem.png __getitem__ ........... -Retrieving ojbects by index using -:ref:`SortedList.__getitem__`. +Retrieving ojbects by index using :func:`SortedList.__getitem__`. .. image:: _static/SortedList_load-getitem.png index ..... -Finding the index of an object using :ref:`SortedList.index`. +Finding the index of an object using :func:`SortedList.index`. .. image:: _static/SortedList_load-index.png iter .... -Iterating a SortedList using :ref:`SortedList.__iter__`. +Iterating a SortedList using :func:`SortedList.__iter__`. .. image:: _static/SortedList_load-iter.png pop ... -Removing the last object using :ref:`SortedList.pop`. +Removing the last object using :func:`SortedList.pop`. .. image:: _static/SortedList_load-pop.png remove ...... -Remove an object at random using :ref:`SortedList.remove`. +Remove an object at random using :func:`SortedList.remove`. .. image:: _static/SortedList_load-remove.png update_large ............ -Updating a SortedList with a large iterable using -:ref:`SortedList.update`. +Updating a SortedList with a large iterable using :func:`SortedList.update`. .. image:: _static/SortedList_load-update_large.png update_small ............ -Updating a SortedList with a small iterable using -:ref:`SortedList.update`. +Updating a SortedList with a small iterable using :func:`SortedList.update`. .. image:: _static/SortedList_load-update_small.png -SortedDict ----------- +Sorted Dict +----------- -Graphs comparing :doc:`SortedDict` performance. +Graphs comparing :doc:`sorteddict` performance. __init__ ........ -Initializing with a list of pairs of random numbers. +Initializing with a list of pairs of random numbers using +:func:`SortedDict.__init__`. .. image:: _static/SortedDict_load-init.png @@ -142,39 +140,35 @@ ............ Given a key at random, test whether the key is in the dictionary using -:ref:`SortedDict.__contains__`. +:func:`SortedDict.__contains__`. .. image:: _static/SortedDict_load-contains.png __getitem__ ........... -Given a key at random, retrieve the value using -:ref:`SortedDict.__getitem__`. +Given a key at random, retrieve the value using :func:`SortedDict.__getitem__`. .. image:: _static/SortedDict_load-getitem.png __setitem__ ........... -Given a key at random, set the value using -:ref:`SortedDict.__setitem__`. +Given a key at random, set the value using :func:`SortedDict.__setitem__`. .. image:: _static/SortedDict_load-setitem.png __delitem__ ........... -Given a key at random, delete the value using -:ref:`SortedDict.__delitem__`. +Given a key at random, delete the value using :func:`SortedDict.__delitem__`. .. image:: _static/SortedDict_load-delitem.png iter .... -Iterate the keys of a SortedDict using -:ref:`SortedDict.__iter__`. +Iterate the keys of a SortedDict using :func:`SortedDict.__iter__`. .. image:: _static/SortedDict_load-iter.png @@ -182,294 +176,277 @@ ................ Given an existing key at random, set the value using -:ref:`SortedDict.__setitem__`. +:func:`SortedDict.__setitem__`. .. image:: _static/SortedDict_load-setitem_existing.png -SortedSet ---------- +Sorted Set +---------- -Graphs comparing :doc:`SortedSet` performance. +Graphs comparing :doc:`sortedset` performance. __init__ ........ -Initializing with a list of random numbers. +Initializing with a list of random numbers using :func:`SortedSet.__init__`. .. image:: _static/SortedSet_load-init.png add ... -Randomly add values using :ref:`SortedSet.add`. +Randomly add values using :func:`SortedSet.add`. .. image:: _static/SortedSet_load-add.png contains ........ -Randomly test membership using -:ref:`SortedSet.__contains__`. +Randomly test membership using :func:`SortedSet.__contains__`. .. image:: _static/SortedSet_load-contains.png difference_large ................ -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet_load-difference_large.png difference_medium ................. -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet_load-difference_medium.png difference_small ................ -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet_load-difference_small.png difference_tiny ............... -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet_load-difference_tiny.png difference_update_large ....................... -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet_load-difference_update_large.png difference_update_medium ........................ -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet_load-difference_update_medium.png difference_update_small ....................... -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet_load-difference_update_small.png difference_update_tiny ...................... -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet_load-difference_update_tiny.png intersection_large .................. -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet_load-intersection_large.png intersection_medium ................... -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet_load-intersection_medium.png intersection_small .................. -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet_load-intersection_small.png intersection_tiny ................. -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet_load-intersection_tiny.png intersection_update_large ......................... -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet_load-intersection_update_large.png intersection_update_medium .......................... -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet_load-intersection_update_medium.png intersection_update_small ......................... -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet_load-intersection_update_small.png intersection_update_tiny ........................ -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet_load-intersection_update_tiny.png iter .... -Iterating a set using :ref:`iter(SortedSet)`. +Iterating a set using :func:`iter(SortedSet)`. .. image:: _static/SortedSet_load-iter.png pop ... -Remove the last item in a set using :ref:`SortedSet.pop`. +Remove the last item in a set using :func:`SortedSet.pop`. .. image:: _static/SortedSet_load-pop.png remove ...... -Remove an item at random using :ref:`SortedSet.remove`. +Remove an item at random using :func:`SortedSet.remove`. .. image:: _static/SortedSet_load-remove.png union_large ........... -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet_load-union_large.png union_medium ............ -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet_load-union_medium.png union_small ........... -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet_load-union_small.png union_tiny .......... -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet_load-union_tiny.png update_large ............ -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet_load-update_large.png update_medium ............. -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet_load-update_medium.png update_small ............ -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet_load-update_small.png update_tiny ........... -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet_load-update_tiny.png symmetric_difference_large .......................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet_load-symmetric_difference_large.png symmetric_difference_medium ........................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet_load-symmetric_difference_medium.png symmetric_difference_small .......................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet_load-symmetric_difference_small.png symmetric_difference_tiny ......................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet_load-symmetric_difference_tiny.png symm_diff_update_large ...................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet_load-symmetric_difference_update_large.png symm_diff_update_medium ....................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet_load-symmetric_difference_update_medium.png symm_diff_update_small ...................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet_load-symmetric_difference_update_small.png symm_diff_update_tiny ..................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet_load-symmetric_difference_update_tiny.png diff -Nru sortedcontainers-1.5.9/docs/performance.rst sortedcontainers-2.0.4/docs/performance.rst --- sortedcontainers-1.5.9/docs/performance.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/performance.rst 2018-06-07 05:34:49.000000000 +0000 @@ -4,106 +4,115 @@ Measuring performance is a difficult task. All the benchmarks on this page are synthetic in the sense that they test one function repeatedly. Measurements in live systems are much harder to produce reliably. So take the following data -with a grain of salt. That being said, a stated feature of -:doc:`SortedContainers` is performance so we would be remiss not to -produce this page with comparisons. +with a grain of salt. That being said, a stated feature of :doc:`Sorted +Containers` is performance so we would be remiss not to produce this +page with comparisons. The source for all benchmarks can be found under the "tests" directory in the -files prefixed "benchmark." Measurements are made from the min, max, and mean -of 5 repetitions. In the graphs below, the line follows the mean and at each -point, the min/max displays the bounds. Note that the axes are log-log so -properly reading two different lines would describe one metric as "X times" -faster rather than "X seconds" faster. In all graphs, lower is -better. Measurements are made by powers of ten: 100 through 1,000,000. - -Measurements up to 10,000,000,000 elements have been successfully tested and -benchmarks. Read :doc:`Performance at Scale` for -details. Only a couple implementations (including SortedContainers) are capable -of handling so many elements. The major limiting factor at that size is +files prefixed "benchmark." Measurements are made from the min, max, and median +of 5 repetitions. In the graphs below, the line follows the median at each +point. Note that the axes are log-log so properly reading two different lines +would describe one metric as "X times" faster rather than "X seconds" +faster. In all graphs, lower is better. Measurements are made by powers of ten: +100 through 10,000,000. + +Measurements up to ten billion elements have been successfully tested and +benchmarked. Read :doc:`performance-scale` for details. Only a couple +implementations (including :doc:`Sorted Containers`) are capable of +handling so many elements. The major limiting factor at that size is memory. Consider the simple case of storing CPython's integers in a -SortedList. Each integer object requires ~24 bytes so one hundred million -elements will require about three gigabytes of memory. If the implemenation -adds significant overhead then most systems will run out of memory. For all -datasets which may be kept in memory, :doc:`SortedContainers` is an -excellent choice. +:doc:`sortedlist`. Each integer object requires ~24 bytes so one hundred +million elements will require about three gigabytes of memory. If the +implementation adds significant overhead then most systems will run out of +memory. For all datasets which may be kept in memory, :doc:`Sorted +Containers` is an excellent choice. -A good effort has been made to find competing implementations. Six in total +A good effort has been made to find competing implementations. Seven in total were found with various list, set, and dict implementations. -rbtree - Provides a fast, C-implementation for dict and set data types. - `rbtree on PyPI `_ - -blist - Provides list, dict, and set containers based on the blist data-type. - Implemented in Python and C. - `blist on PyPI `_ - -treap - Uses Cython for improved performance and provides a dict container. - `treap on PyPI `_ - -bintrees - Provides several tree-based implementations for dict and set containers. - Fastest were AVL and Red-Black trees. Extends the conventional API to - provide set operations for the dict type. Implemented in C. - `bintrees on PyPI `_ - -banyan - Provides a fast, C-implementation for dict and set data types. Offers some - features also found in sortedcontainers like accessing the n-th item in a - set or dict. - `banyan on PyPI `_ - -skiplistcollections - Pure-Python implementation based on skip-lists providing a limited API - for dict and set types. - `skiplistcollections on PyPI `_ - -sortedcollection - Pure-Python implementation of sorted list based solely on a list. - Feature-poor and inefficient for writes but included because it is written - by Raymond Hettinger and linked from the official Python docs. - `sortedcollection on ActiveState `_ - -Several competing implementations were omitted because they were not easily -installable or failed to build. - -ruamel.ordereddict.sorteddict - C-implementation that only supports Python 2. Performance was measured in - correspondence with the module author. Performance was generally very good - except for ``__delitem__``. At scale, deleting entries became exceedingly - slow. - `ruamel.ordereddict on PyPI `_ - -rbtree from NewCenturyComputers - Pure-Python tree-based implementation. Not sure when this was last updated. - Unlikely to be fast. - `rbtree from NewCenturyComputers `_ - -python-avl-tree from Github user pgrafov - Pure-Python tree-based implementation. Last updated in 2010. Unlikely - to be fast. - `python-avl-tree from Github user pgrafov `_ - -pyavl - C-implementation for AVL tree-based dict and set containers. Claims to be - fast. Lacking documentation and failed to build. - `pyavl on PyPI `_ +1. *blist* -- Provides list, dict, and set containers based on the blist + data-type. Uses a `B-Tree`_ data structure. Implemented in Python and C. BSD + License. Last updated March, 2014. `blist on PyPI`_ + +2. *bintrees* -- Provides several tree-based implementations for dict and set + containers. Fastest were AVL-Tree and Red-Black-Tree data + structures.. Extends the conventional API to provide set operations for the + dict type. Now deprecated in favor of :doc:`Sorted Containers` + Implemented in C. MIT License. Last updated April, 2017. `bintrees on + PyPI`_ + +3. *sortedmap* -- Provides a fast, C++ implemenation for dict data types. Uses + the C++ standard library `std::map` data structure which is usually a + red-black tree. Last updated February, 2016. `sortedmap on PyPI`_ + +4. *banyan* -- Provides a fast, C++ implementation for dict and set data + types. Offers some features also found in sortedcontainers like accessing + the n-th item in a set or dict. Uses sources from the `tree implementation`_ + in GNU libstdc++. GPLv3 License. Last updated April, 2013. `banyan on PyPI`_ + +5. *treap* -- Uses Cython for improved performance and provides a dict + container. Apache V2 License. Last updated June, 2017. `treap on PyPI`_ + +6. *skiplistcollections* -- Pure-Python implementation based on skip-lists + providing a limited API for dict and set types. MIT License. Last updated + January, 2014. `skiplistcollections on PyPI`_ + +7. *sortedcollection* -- Pure-Python implementation of sorted list based solely + on a list. Feature-poor and inefficient for writes but included because it + is written by Raymond Hettinger and linked from the official Python + docs. MIT License. Last updated April, 2011. `sortedcollection recipe`_ + +Several alternative implementations were omitted for reasons documented below: + +A. *rbtree* -- C-implementation that only supports Python 2. Provides a fast, + C-implementation for dict and set data types. GPLv3 License. Last updated + March, 2012. `rbtree on PyPI`_ + +B. *ruamel.ordereddict.sorteddict* -- C-implementation that only supports + Python 2. Performance was measured in correspondence with the module + author. Performance was generally very good except for ``__delitem__``. At + scale, deleting entries became exceedingly slow. MIT License. Last updated + July, 2017. `ruamel.ordereddict on PyPI`_ + +C. *pyskiplist* -- Pure-Python skip-list based implementation supporting a + sorted-list-like interface. Now deprecated in favor of :doc:`Sorted + Containers`. MIT License. Last updated July, 2015. `pyskiplist on + PyPI`_ + +D. *sorteddict* -- Pure-Python lazily-computed sorted dict implementation. Now + deprecated in favor of :doc:`Sorted Containers`. GPLv3 License. Last + updated September, 2007. `sorteddict on PyPI`_ + +E. *rbtree from NewCenturyComputers* -- Pure-Python tree-based + implementation. Not sure when this was last updated. Unlikely to be + fast. Unknown license. Unknown last update. `rbtree from + NewCenturyComputers`_ + +F. *python-avl-tree from GitHub user pgrafov* -- Pure-Python tree-based + implementation. Unlikely to be fast. MIT License. Last updated + October, 2010. `python-avl-tree from GitHub user pgrafov`_ + +G. *pyavl* -- C-implementation for AVL tree-based dict and set + containers. Claims to be fast. Lacking documentation and failed to + build. Public Domain License. Last updated December, 2008. `pyavl on PyPI`_ + +H. *skiplist* -- C-implementation of sorted list based on skip-list data + structure. Only supports Python 2. Zlib/libpng License. Last updated + Septemeber, 2013. `skiplist from Bitbucket user mojaves`_ -The most similar module to :doc:`SortedContainers` is +The most similar module to :doc:`Sorted Containers` is skiplistcollections given that each is implemented in Python. But as is -displayed below, :doc:`SortedContainers` is several times faster and -provides a richer API. Often the pure-Python implementation in SortedContainers -is faster even than the C-implementation counterparts. Where it lacks, -performance is generally on the same magnitude. +displayed below, Sorted Containers is several times faster and provides a +richer API. Often the pure-Python implementation in Sorted Containers is faster +even than the C-implementation counterparts. Where it lacks, performance is +generally on the same magnitude. -Because :doc:`SortedContainers` is implemented in pure-Python, its +Because :doc:`Sorted Containers` is implemented in pure-Python, its performance depends directly on the Python runtime. A :doc:`runtime performance comparison` is also included with data from popular runtimes. -:doc:`SortedContainers` uses a segmented-list data structure similar to +:doc:`Sorted Containers` uses a segmented-list data structure similar to a B-tree limited to two levels of nodes. As part of the implementation, a load factor is used to determine how many values should be stored in each node. This can have a significant impact on performance and a :doc:`load factor @@ -114,117 +123,150 @@ performance comparison` contains examples with comparisons to other implementations, load factors, and runtimes. -A couple final notes about the graphs below. Missing data indicates the -benchmark either took too long or failed. The set operations with tiny, small, -medium, and large variations indicate the size of the container involved in the +Some final notes about the graphs below. Missing data indicates the benchmark +either took too long or failed. The set operations with tiny, small, medium, +and large variations indicate the size of the container involved in the right-hand-side of the operation: tiny is exactly 10 elements; small is 10% of -the size of the left-hand-side; medium is 50%; and large is 100%. The -sortedcontainers module uses a different algorithm based on the size of the +the size of the left-hand-side; medium is 50%; and large is 100%. :doc:`Sorted +Containers` uses a different algorithm based on the size of the right-hand-side of the operation for a dramatic improvement in performance. -SortedList ----------- +The legends of the graphs below correlate the underlying data structure used +the Python project. The correlation is as follows: + +.. currentmodule:: sortedcontainers + +====================== ================================== +Data Structure Project +====================== ================================== +:class:`SortedList` :doc:`Sorted Containers` +:class:`SortedKeyList` :doc:`Sorted Containers` +B-Tree `blist on PyPI`_ +List `sortedcollection recipe`_ +AVL-Tree `bintrees on PyPI`_ +RB-Tree `banyan on PyPI`_ +Skip-List `skiplistcollections on PyPI`_ +std::map `sortedmap on PyPI`_ +Treap `treap on PyPI`_ +====================== ================================== + +.. _`B-Tree`: https://en.wikipedia.org/wiki/B-tree +.. _`blist on PyPI`: https://pypi.org/project/blist/ +.. _`bintrees on PyPI`: https://pypi.org/project/bintrees/ +.. _`sortedmap on PyPI`: https://pypi.org/project/sortedmap/ +.. _`sorteddict on PyPI`: https://pypi.org/project/sorteddict/ +.. _`pyskiplist on PyPI`: https://pypi.org/project/pyskiplist/ +.. _`banyan on PyPI`: https://pypi.org/project/Banyan/ +.. _`treap on PyPI`: https://pypi.org/project/treap/ +.. _`skiplistcollections on PyPI`: https://pypi.org/project/skiplistcollections/ +.. _`sortedcollection recipe`: http://code.activestate.com/recipes/577197-sortedcollection/ +.. _`rbtree on PyPI`: https://pypi.org/project/rbtree/ +.. _`ruamel.ordereddict on PyPI`: https://pypi.org/project/ruamel.ordereddict/ +.. _`rbtree from NewCenturyComputers`: http://newcenturycomputers.net/projects/rbtree.html +.. _`python-avl-tree from GitHub user pgrafov`: https://github.com/pgrafov/python-avl-tree +.. _`pyavl on PyPI`: https://pypi.org/project/pyavl/ +.. _`skiplist from Bitbucket user mojaves`: https://bitbucket.org/mojaves/pyskiplist/ +.. _`tree implementation`: https://gcc.gnu.org/onlinedocs/libstdc%2B%2B/ext/pb_ds/tree_based_containers.html -Graphs comparing :doc:`SortedList` performance. +Sorted List +----------- + +Graphs comparing :doc:`sortedlist` performance. __init__ ........ -Initializing with a list of random numbers. +Initializing with a list of random numbers using :func:`SortedList.__init__`. .. image:: _static/SortedList-init.png add ... -Randomly adding values using :ref:`SortedList.add`. +Randomly adding values using :func:`SortedList.add`. .. image:: _static/SortedList-add.png contains ........ -Randomly testing membership using -:ref:`SortedList.__contains__`. +Randomly testing membership using :func:`SortedList.__contains__`. .. image:: _static/SortedList-contains.png count ..... -Counting objects at random using :ref:`SortedList.count`. +Counting objects at random using :func:`SortedList.count`. .. image:: _static/SortedList-count.png __delitem__ ........... -Deleting objects at random using -:ref:`SortedList.__delitem__`. +Deleting objects at random using :func:`SortedList.__delitem__`. .. image:: _static/SortedList-delitem.png __getitem__ ........... -Retrieving ojbects by index using -:ref:`SortedList.__getitem__`. +Retrieving ojbects by index using :func:`SortedList.__getitem__`. .. image:: _static/SortedList-getitem.png index ..... -Finding the index of an object using :ref:`SortedList.index`. +Finding the index of an object using :func:`SortedList.index`. .. image:: _static/SortedList-index.png iter .... -Iterating a SortedList using :ref:`SortedList.__iter__`. +Iterating a SortedList using :func:`SortedList.__iter__`. .. image:: _static/SortedList-iter.png pop ... -Removing the last object using :ref:`SortedList.pop`. +Removing the last object using :func:`SortedList.pop`. .. image:: _static/SortedList-pop.png remove ...... -Remove an object at random using :ref:`SortedList.remove`. +Remove an object at random using :func:`SortedList.remove`. .. image:: _static/SortedList-remove.png update_large ............ -Updating a SortedList with a large iterable using -:ref:`SortedList.update`. +Updating a SortedList with a large iterable using :func:`SortedList.update`. .. image:: _static/SortedList-update_large.png update_small ............ -Updating a SortedList with a small iterable using -:ref:`SortedList.update`. +Updating a SortedList with a small iterable using :func:`SortedList.update`. .. image:: _static/SortedList-update_small.png -SortedDict ----------- +Sorted Dict +----------- -Graphs comparing :doc:`SortedDict` performance. +Graphs comparing :doc:`sorteddict` performance. __init__ ........ -Initializing with a list of pairs of random numbers. +Initializing with a list of pairs of random numbers using +:func:`SortedDict.__init__`. .. image:: _static/SortedDict-init.png @@ -232,39 +274,35 @@ ............ Given a key at random, test whether the key is in the dictionary using -:ref:`SortedDict.__contains__`. +:func:`SortedDict.__contains__`. .. image:: _static/SortedDict-contains.png __getitem__ ........... -Given a key at random, retrieve the value using -:ref:`SortedDict.__getitem__`. +Given a key at random, retrieve the value using :func:`SortedDict.__getitem__`. .. image:: _static/SortedDict-getitem.png __setitem__ ........... -Given a key at random, set the value using -:ref:`SortedDict.__setitem__`. +Given a key at random, set the value using :func:`SortedDict.__setitem__`. .. image:: _static/SortedDict-setitem.png __delitem__ ........... -Given a key at random, delete the value using -:ref:`SortedDict.__delitem__`. +Given a key at random, delete the value using :func:`SortedDict.__delitem__`. .. image:: _static/SortedDict-delitem.png iter .... -Iterate the keys of a SortedDict using -:ref:`SortedDict.__iter__`. +Iterate the keys of a SortedDict using :func:`SortedDict.__iter__`. .. image:: _static/SortedDict-iter.png @@ -272,294 +310,277 @@ ................ Given an existing key at random, set the value using -:ref:`SortedDict.__setitem__`. +:func:`SortedDict.__setitem__`. .. image:: _static/SortedDict-setitem_existing.png -SortedSet ---------- +Sorted Set +---------- -Graphs comparing :doc:`SortedSet` performance. +Graphs comparing :doc:`sortedset` performance. __init__ ........ -Initializing with a list of random numbers. +Initializing with a list of random numbers using :func:`SortedSet.__init__`. .. image:: _static/SortedSet-init.png add ... -Randomly add values using :ref:`SortedSet.add`. +Randomly add values using :func:`SortedSet.add`. .. image:: _static/SortedSet-add.png contains ........ -Randomly test membership using -:ref:`SortedSet.__contains__`. +Randomly test membership using :func:`SortedSet.__contains__`. .. image:: _static/SortedSet-contains.png difference_large ................ -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet-difference_large.png difference_medium ................. -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet-difference_medium.png difference_small ................ -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet-difference_small.png difference_tiny ............... -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet-difference_tiny.png difference_update_large ....................... -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet-difference_update_large.png difference_update_medium ........................ -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet-difference_update_medium.png difference_update_small ....................... -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet-difference_update_small.png difference_update_tiny ...................... -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet-difference_update_tiny.png intersection_large .................. -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet-intersection_large.png intersection_medium ................... -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet-intersection_medium.png intersection_small .................. -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet-intersection_small.png intersection_tiny ................. -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet-intersection_tiny.png intersection_update_large ......................... -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet-intersection_update_large.png intersection_update_medium .......................... -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet-intersection_update_medium.png intersection_update_small ......................... -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet-intersection_update_small.png intersection_update_tiny ........................ -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet-intersection_update_tiny.png iter .... -Iterating a set using :ref:`iter(SortedSet)`. +Iterating a set using :func:`SortedSet.__iter__`. .. image:: _static/SortedSet-iter.png pop ... -Remove the last item in a set using :ref:`SortedSet.pop`. +Remove the last item in a set using :func:`SortedSet.pop`. .. image:: _static/SortedSet-pop.png remove ...... -Remove an item at random using :ref:`SortedSet.remove`. +Remove an item at random using :func:`SortedSet.remove`. .. image:: _static/SortedSet-remove.png union_large ........... -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet-union_large.png union_medium ............ -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet-union_medium.png union_small ........... -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet-union_small.png union_tiny .......... -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet-union_tiny.png update_large ............ -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet-update_large.png update_medium ............. -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet-update_medium.png update_small ............ -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet-update_small.png update_tiny ........... -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet-update_tiny.png symmetric_difference_large .......................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet-symmetric_difference_large.png symmetric_difference_medium ........................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet-symmetric_difference_medium.png symmetric_difference_small .......................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet-symmetric_difference_small.png symmetric_difference_tiny ......................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet-symmetric_difference_tiny.png symm_diff_update_large ...................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet-symmetric_difference_update_large.png symm_diff_update_medium ....................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet-symmetric_difference_update_medium.png symm_diff_update_small ...................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet-symmetric_difference_update_small.png symm_diff_update_tiny ..................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet-symmetric_difference_update_tiny.png diff -Nru sortedcontainers-1.5.9/docs/performance-runtime.rst sortedcontainers-2.0.4/docs/performance-runtime.rst --- sortedcontainers-1.5.9/docs/performance-runtime.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/performance-runtime.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,27 +1,23 @@ Runtime Performance Comparison ============================== -Because :doc:`SortedContainers` is implemented in pure-Python, its -performance depends directly on the Python -runtime. :doc:`SortedContainers` was primarily developed, tested and -benchmarked on CPython 2.7, specifically build: - -:: - - Python 2.7.11 (default, Mar 1 2016, 18:40:10) - [GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin - -Not all runtimes are created equal. The graphs below compare -:doc:`SortedContainers` running on the CPython 2.7, CPython 3.5 and PyPy -5.1 runtimes. The PyPy 5.1 runtime displays much more variability due to its +Because :doc:`Sorted Containers` is implemented in pure-Python, its +performance depends directly on the Python runtime. :doc:`Sorted +Containers` is primarily developed, tested and benchmarked on CPython +3.6. + +Not all runtimes are created equal. The graphs below compare :doc:`Sorted +Containers` running on the CPython 3.6, CPython 2.7, and PyPy +runtimes. As of Python 3.6 the CPython 3.6 runtime is now faster than the +CPython 2.7 runtime. The PyPy runtime displays much more variability due to its JIT-ed nature. Once the just-in-time compiler optimizes the code, performance is often two to ten times faster. Performance of competing implementations are benchmarked against the CPython -2.7 runtime. An :doc:`implementation performance comparison` is +3.6 runtime. An :doc:`implementation performance comparison` is also included with data from popular sorted container packages. -:doc:`SortedContainers` uses a segmented-list data structure similar to +:doc:`Sorted Containers` uses a segmented-list data structure similar to a B-tree limited to two levels of nodes. As part of the implementation, a load factor is used to determine how many values should be stored in each node. This can have a significant impact on performance and a :doc:`load factor @@ -32,109 +28,107 @@ performance comparison` contains examples with comparisons to other implementations, load factors, and runtimes. -SortedList ----------- +.. currentmodule:: sortedcontainers + +Sorted List +----------- -Graphs comparing :doc:`SortedList` performance. +Graphs comparing :doc:`sortedlist` performance. __init__ ........ -Initializing with a list of random numbers. +Initializing with a list of random numbers using :func:`SortedList.__init__`. .. image:: _static/SortedList_runtime-init.png add ... -Randomly adding values using :ref:`SortedList.add`. +Randomly adding values using :func:`SortedList.add`. .. image:: _static/SortedList_runtime-add.png contains ........ -Randomly testing membership using -:ref:`SortedList.__contains__`. +Randomly testing membership using :func:`SortedList.__contains__`. .. image:: _static/SortedList_runtime-contains.png count ..... -Counting objects at random using :ref:`SortedList.count`. +Counting objects at random using :func:`SortedList.count`. .. image:: _static/SortedList_runtime-count.png __delitem__ ........... -Deleting objects at random using -:ref:`SortedList.__delitem__`. +Deleting objects at random using :func:`SortedList.__delitem__`. .. image:: _static/SortedList_runtime-delitem.png __getitem__ ........... -Retrieving ojbects by index using -:ref:`SortedList.__getitem__`. +Retrieving ojbects by index using :func:`SortedList.__getitem__`. .. image:: _static/SortedList_runtime-getitem.png index ..... -Finding the index of an object using :ref:`SortedList.index`. +Finding the index of an object using :func:`SortedList.index`. .. image:: _static/SortedList_runtime-index.png iter .... -Iterating a SortedList using :ref:`SortedList.__iter__`. +Iterating a SortedList using :func:`SortedList.__iter__`. .. image:: _static/SortedList_runtime-iter.png pop ... -Removing the last object using :ref:`SortedList.pop`. +Removing the last object using :func:`SortedList.pop`. .. image:: _static/SortedList_runtime-pop.png remove ...... -Remove an object at random using :ref:`SortedList.remove`. +Remove an object at random using :func:`SortedList.remove`. .. image:: _static/SortedList_runtime-remove.png update_large ............ -Updating a SortedList with a large iterable using -:ref:`SortedList.update`. +Updating a SortedList with a large iterable using :func:`SortedList.update`. .. image:: _static/SortedList_runtime-update_large.png update_small ............ -Updating a SortedList with a small iterable using -:ref:`SortedList.update`. +Updating a SortedList with a small iterable using :func:`SortedList.update`. .. image:: _static/SortedList_runtime-update_small.png -SortedDict ----------- +Sorted Dict +----------- -Graphs comparing :doc:`SortedDict` performance. +Graphs comparing :doc:`sorteddict` performance. __init__ ........ -Initializing with a list of pairs of random numbers. +Initializing with a list of pairs of random numbers using +:func:`SortedDict.__init__`. .. image:: _static/SortedDict_runtime-init.png @@ -142,39 +136,35 @@ ............ Given a key at random, test whether the key is in the dictionary using -:ref:`SortedDict.__contains__`. +:func:`SortedDict.__contains__`. .. image:: _static/SortedDict_runtime-contains.png __getitem__ ........... -Given a key at random, retrieve the value using -:ref:`SortedDict.__getitem__`. +Given a key at random, retrieve the value using :func:`SortedDict.__getitem__`. .. image:: _static/SortedDict_runtime-getitem.png __setitem__ ........... -Given a key at random, set the value using -:ref:`SortedDict.__setitem__`. +Given a key at random, set the value using :func:`SortedDict.__setitem__`. .. image:: _static/SortedDict_runtime-setitem.png __delitem__ ........... -Given a key at random, delete the value using -:ref:`SortedDict.__delitem__`. +Given a key at random, delete the value using :func:`SortedDict.__delitem__`. .. image:: _static/SortedDict_runtime-delitem.png iter .... -Iterate the keys of a SortedDict using -:ref:`SortedDict.__iter__`. +Iterate the keys of a SortedDict using :func:`SortedDict.__iter__`. .. image:: _static/SortedDict_runtime-iter.png @@ -182,294 +172,277 @@ ................ Given an existing key at random, set the value using -:ref:`SortedDict.__setitem__`. +:func:`SortedDict.__setitem__`. .. image:: _static/SortedDict_runtime-setitem_existing.png -SortedSet ---------- +Sorted Set +---------- -Graphs comparing :doc:`SortedSet` performance. +Graphs comparing :doc:`sortedset` performance. __init__ ........ -Initializing with a list of random numbers. +Initializing with a list of random numbers using :func:`SortedSet.__init__`. .. image:: _static/SortedSet_runtime-init.png add ... -Randomly add values using :ref:`SortedSet.add`. +Randomly add values using :func:`SortedSet.add`. .. image:: _static/SortedSet_runtime-add.png contains ........ -Randomly test membership using -:ref:`SortedSet.__contains__`. +Randomly test membership using :func:`SortedSet.__contains__`. .. image:: _static/SortedSet_runtime-contains.png difference_large ................ -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet_runtime-difference_large.png difference_medium ................. -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet_runtime-difference_medium.png difference_small ................ -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet_runtime-difference_small.png difference_tiny ............... -Set difference using :ref:`SortedSet.difference`. +Set difference using :func:`SortedSet.difference`. .. image:: _static/SortedSet_runtime-difference_tiny.png difference_update_large ....................... -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet_runtime-difference_update_large.png difference_update_medium ........................ -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet_runtime-difference_update_medium.png difference_update_small ....................... -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet_runtime-difference_update_small.png difference_update_tiny ...................... -Set difference using -:ref:`SortedSet.difference_update`. +Set difference using :func:`SortedSet.difference_update`. .. image:: _static/SortedSet_runtime-difference_update_tiny.png intersection_large .................. -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet_runtime-intersection_large.png intersection_medium ................... -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet_runtime-intersection_medium.png intersection_small .................. -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet_runtime-intersection_small.png intersection_tiny ................. -Set intersection using :ref:`SortedSet.intersection`. +Set intersection using :func:`SortedSet.intersection`. .. image:: _static/SortedSet_runtime-intersection_tiny.png intersection_update_large ......................... -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet_runtime-intersection_update_large.png intersection_update_medium .......................... -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet_runtime-intersection_update_medium.png intersection_update_small ......................... -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet_runtime-intersection_update_small.png intersection_update_tiny ........................ -Set intersection using -:ref:`SortedSet.intersection_update`. +Set intersection using :func:`SortedSet.intersection_update`. .. image:: _static/SortedSet_runtime-intersection_update_tiny.png iter .... -Iterating a set using :ref:`iter(SortedSet)`. +Iterating a set using :func:`iter(SortedSet)`. .. image:: _static/SortedSet_runtime-iter.png pop ... -Remove the last item in a set using :ref:`SortedSet.pop`. +Remove the last item in a set using :func:`SortedSet.pop`. .. image:: _static/SortedSet_runtime-pop.png remove ...... -Remove an item at random using :ref:`SortedSet.remove`. +Remove an item at random using :func:`SortedSet.remove`. .. image:: _static/SortedSet_runtime-remove.png union_large ........... -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet_runtime-union_large.png union_medium ............ -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet_runtime-union_medium.png union_small ........... -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet_runtime-union_small.png union_tiny .......... -Set union using :ref:`SortedSet.union`. +Set union using :func:`SortedSet.union`. .. image:: _static/SortedSet_runtime-union_tiny.png update_large ............ -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet_runtime-update_large.png update_medium ............. -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet_runtime-update_medium.png update_small ............ -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet_runtime-update_small.png update_tiny ........... -Set update using :ref:`SortedSet.update`. +Set update using :func:`SortedSet.update`. .. image:: _static/SortedSet_runtime-update_tiny.png symmetric_difference_large .......................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet_runtime-symmetric_difference_large.png symmetric_difference_medium ........................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet_runtime-symmetric_difference_medium.png symmetric_difference_small .......................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet_runtime-symmetric_difference_small.png symmetric_difference_tiny ......................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference`. .. image:: _static/SortedSet_runtime-symmetric_difference_tiny.png symm_diff_update_large ...................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet_runtime-symmetric_difference_update_large.png symm_diff_update_medium ....................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet_runtime-symmetric_difference_update_medium.png symm_diff_update_small ...................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet_runtime-symmetric_difference_update_small.png symm_diff_update_tiny ..................... -Set symmetric-difference using -:ref:`SortedSet.symmetric_difference_update`. +Set symmetric-difference using :func:`SortedSet.symmetric_difference_update`. .. image:: _static/SortedSet_runtime-symmetric_difference_update_tiny.png diff -Nru sortedcontainers-1.5.9/docs/performance-scale.rst sortedcontainers-2.0.4/docs/performance-scale.rst --- sortedcontainers-1.5.9/docs/performance-scale.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/performance-scale.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,57 +1,58 @@ Performance at Scale ==================== -:doc:`SortedContainers` scales extremely well. This page discusses why -both in theory and in practice. The design of :doc:`SortedContainers` +:doc:`Sorted Containers` scales extremely well. This page discusses why +both in theory and in practice. The design of :doc:`Sorted Containers` permits testing through tens of billions of items and benchmarks present results at this scale. The results of this page would be difficult and expensive to replicate with other implementations. Two methods are most important for analysis. Each stresses editing while -maintaining sorted order. The first is :ref:`SortedList.add` -which identifies the insertion position using binary search. The second is -:ref:`SortedList.__delitem__` which identifies the -deletion position using indexing. Most other methods are either symmetric or a -subset of the runtime complexity of these methods. +maintaining sorted order. The first is :func:`SortedList.add` which identifies +the insertion position using binary search. The second is +:func:`SortedList.__delitem__` which identifies the deletion position using +indexing. Most other methods are either symmetric or a subset of the runtime +complexity of these methods. To fully grasp the content below, its strongly recommended that you read the :doc:`implementation details` -first. :doc:`SortedContainers` maintains a B-tree-like data structure +first. :doc:`Sorted Containers` maintains a B-tree-like data structure limited to two levels of nodes. Theory ------ -To discuss the runtime complexity of :doc:`SortedContainers`, we must +To discuss the runtime complexity of :doc:`Sorted Containers`, we must consider two values: -1. "n" - The size of the sorted list. -2. "m" - The "load" or sublist length. +1. `n` -- the size of the sorted list. +2. `m` -- the "load" or sublist length. -In a :doc:`SortedList` with "n" elements, there will be a top-level -list of pointers to :math:`\frac{n}{m}` sublists each of which are -approximately "m" elements long. There will also be a "maxes" index which is -the max of each sublist. The index will contain :math:`\frac{n}{m}` references. - -Now adding an element using :ref:`SortedList.add` requires -these steps: - -1. Bisect the "maxes" index to find the appropriate - sublist. :math:`O(\log_2{\frac{n}{m}})` -2. Bisect the sublist to find the appropriate insertion - position. :math:`O(\log_2{m})` -3. Insert the element in the sublist. :math:`O(m)` -4. A sublist may be split and inserted into the top-level - list. :math:`O(m+\frac{n}{m})` - -Consider how often step (4) may occur if we begin with a -:doc:`SortedList` of "n" elements and add "n" more elements. The -top-level list length will grow from :math:`\frac{n}{m}` to -:math:`2*\frac{n}{m}` meaning that step (4) was executed :math:`\frac{n}{m}` -times. +In a :doc:`sortedlist` with `n` elements, there will be a top-level list of +pointers to :math:`\frac{n}{m}` sublists each of which are approximately `m` +elements long. There will also be a "maxes" index which is the max of each +sublist. The index will contain :math:`\frac{n}{m}` references. -Altogether, growing a :doc:`SortedList` of "n" elements by "n" more -elements has the time complexity: +Now adding an element using :func:`SortedList.add` requires these steps: + +1. Bisect the "maxes" index to find the appropriate sublist -- + :math:`O(\log_2{\frac{n}{m}})` + +2. Bisect the sublist to find the appropriate insertion position -- + :math:`O(\log_2{m})` + +3. Insert the element in the sublist -- :math:`O(m)` + +4. A sublist may be split and inserted into the top-level list -- + :math:`O(m+\frac{n}{m})` + +Consider how often step #4 may occur if we begin with a :doc:`sortedlist` of +`n` elements and add `n` more elements. The top-level list length will grow +from :math:`\frac{n}{m}` to :math:`2*\frac{n}{m}` meaning that step #4 was +executed :math:`\frac{n}{m}` times. + +Altogether, growing a :doc:`sortedlist` of `n` elements by `n` more elements +has the time complexity: .. math:: @@ -69,14 +70,14 @@ T_{add}(n|m \propto 1) = O(n^2) -The above is why some consider :doc:`SortedContainers` +The above is why some consider :doc:`Sorted Containers` unscalable. Because the load is not chosen dynamically, in theoretical -analysis, it must be treated as a constant with respect to "n" which makes it +analysis, it must be treated as a constant with respect to `n` which makes it proportional to 1. In practice, the default load is 1,000 which is generally closer to the square -root or cube root of "n". Consider where "m" is proportional to the square root -of "n": +root or cube root of `n`. Consider where `m` is proportional to the square root +of `n`: .. math:: @@ -89,10 +90,10 @@ T_{add}(n|m \propto n^\frac{1}{2}) = O(n * n^\frac{1}{2}) -The amortized cost of adding an individual item is then proportional to the -square root of "n". +The amortized cost of adding an individual item is therefore proportional to +the square root of `n`. -Our best bounds will be to use the cube root of "n": +Our best bounds will be to use the cube root of `n`: .. math:: @@ -106,11 +107,11 @@ T_{add}(n|m \propto n^\frac{1}{3}) = O(n * n^\frac{1}{3}) Now the amortized cost of adding an individual item is proportional to the cube -root of "n". +root of `n`. Alternative tree-based implementations have a runtime complexity proportional to :math:`log_2{n}` for adding elements. The logarithm grows much more slowly -than the cube root for large values of "n". However, in practice we never reach +than the cube root for large values of `n`. However, in practice we never reach those large values and the constant factors involved have a significant impact. Consider a billion elements: @@ -122,27 +123,31 @@ The constant factor between those is :math:`1,000 / 33 \approx 33`. So if the operations for tree-based implementations are more than 33 times slower, then -:doc:`SortedContainers` may be faster. Below I'll make an argument for +:doc:`Sorted Containers` may be faster. Below I'll make an argument for why that occurs in practice. -Now deleting an element using -:ref:`SortedList.__delitem__` requires these steps: +Now deleting an element using :func:`SortedList.__delitem__` requires these +steps: + +1. Build the index if not present -- :math:`O(\frac{n}{m})` + +2. Traverse the index to resolve the internal location -- + :math:`O(\log_2{\frac{n}{m}})` + +3. Delete the element in the sublist -- :math:`O(m)` + +4. Update the index -- :math:`O(\log_2{\frac{n}{m}})` -1. Build the index if not present. :math:`O(\frac{n}{m})` -2. Traverse the index to resolve the internal - location. :math:`O(\log_2{\frac{n}{m}})` -3. Delete the element in the sublist. :math:`O(m)` -4. Update the index. :math:`O(\log_2{\frac{n}{m}})` 5. A sublist may be combined with a neighboring sublist if it becomes too - small. When this happens, the index is deleted. :math:`O(m+\frac{n}{m})` + small. When this happens, the index is deleted -- :math:`O(m+\frac{n}{m})` -Consider how often steps (1) and (5) may occur if we begin with a -:doc:`SortedList` of "n" elements and delete all "n" elements. The -top-level list will shrink from :math:`\frac{n}{m}` to :math:`0` meaning that -steps (1) and (5) were executed :math:`\frac{n}{m}` times. +Consider how often steps #1 and #5 may occur if we begin with a +:doc:`sortedlist` of `n` elements and delete all `n` elements. The top-level +list will shrink from :math:`\frac{n}{m}` to zero meaning that steps #1 and #5 +were executed :math:`\frac{n}{m}` times. -Altogether, deleting "n" elements from a :doc:`SortedList` of "n" -elements has the time complexity: +Altogether, deleting `n` elements from a :doc:`sortedlist` of `n` elements has +the time complexity: .. math:: @@ -160,7 +165,7 @@ \log_2{\frac{n}{m}}`. All these terms are minimized with :math:`n = m`. However that maximizes the cost of step (3), :math:`O(n * m)`. -Once again our best bounds will be to use the cube root of "n": +Once again our best bounds will be to use the cube root of `n`: .. math:: @@ -176,11 +181,11 @@ T_{del}(n|m \propto n^\frac{1}{3}) = O(n * n^\frac{1}{3}) When deleting elements by index, the amortized time complexity is proportional -to the cube root of "n". +to the cube root of `n`. Although using :math:`m \propto \sqrt[3]{n}` is the best theoretical time complexity, index lookups, updates, and building are composed of expensive -operations. In practice, the square root of "n" works better when doing a lot +operations. In practice, the square root of `n` works better when doing a lot of numerical indexing. Python Implementations @@ -188,14 +193,13 @@ I've now said that some operations are more expensive than others while still considering each to take :math:`O(1)` time. To understand this, we have to look -at the underlying Python implementation. +at how Python is implemented. -The most popular implementation of Python is `CPython -`_. CPython implements lists as arrays of pointers and -integers as allocated memory objects. This means that shifting elements in -lists is very fast. It's akin to a mem-move operation for which modern -processors are well optimized. The memory access pattern is entirely -sequential. +The most popular implementation of Python is `CPython`_. CPython implements +lists as arrays of pointers and integers as allocated memory objects. This +means that shifting elements in lists is very fast. It's akin to a mem-move +operation for which modern processors are well optimized. The memory access +pattern is entirely sequential. In 64-bit builds of CPython, integers require approximately thirty bytes each. This severely limits the number of integers we can hold in memory. In @@ -205,11 +209,11 @@ allocation which, while still :math:`O(1)`, is quite a bit more costly than a processor-supported integer. -An optimized implementation of Python is `PyPy `_. PyPy -improves on CPython in many ways but one of the most important to our -discussion is the use of "tagged pointers." Tagged pointers are capable of -storing integers within the pointer itself. This greatly reduces memory -consumption so that many integers in PyPy take only eight bytes. +An optimized implementation of Python is `PyPy`_. PyPy improves on CPython in +many ways but one of the most important to our discussion is the use of "tagged +pointers." Tagged pointers are capable of storing integers within the pointer +itself. This greatly reduces memory consumption so that many integers in PyPy +take only eight bytes. Lists of integers in PyPy are therefore packed densely together. When storing integers in a sorted list, both the "maxes" index and positional index are @@ -217,15 +221,18 @@ cache features. The access pattern of both indexes is also optimized for modern -processors. Traversing both the "maxes" index and the sublist uses -bisect which while initially random, narrows locality with each -iteration. Likewise the positional index is a tree, densely stored in a -list. The memory access pattern locality is very good initially and then -becomes random, the exact opposite of bisect. +processors. Traversing both the "maxes" index and the sublist uses bisect which +while initially random, narrows locality with each iteration. Likewise the +positional index is a tree, densely stored in a list. The memory access pattern +locality is very good initially and then becomes random, the exact opposite of +bisect. The benchmarks below use PyPy, without loss of generality, to maximize memory utilization and performance. +.. _`CPython`: https://www.python.org/ +.. _`PyPy`: http://pypy.org/ + Sampling -------- @@ -238,15 +245,15 @@ knowing the total jackpot. Purchasing a thousand tickets may still result in no winnings which would conclude incorrectly an expected value of zero. -A more practical example is the list data type in CPython. Lists grow and -shrink as necessary but the underlying implementation is restricted to static +More practically, consider the list data type in CPython. Lists grow and shrink +as necessary but the underlying implementation is restricted to static allocations. For this reason, lists are often over-allocated so that most appends may occur immediately. Occassionally, the list must be reallocated and possibly copied, which takes linear time. If we sampled performance by initializing lists of various sizes and appending an element, we may never observe a resize operation and so over-estimate performance. -One solution for both Python lists and :doc:`SortedContainers` sorted +One solution for both Python lists and :doc:`Sorted Containers` sorted lists would be to double the size or remove all elements from the initialized list as was done in the Theory section above. Unfortunately, that method is too expensive to be practical. Doing so would require weeks and months of time @@ -257,6 +264,14 @@ directly. The latter uses sampling in representative scenarios to perform a hundredth of the operations needed to double the size or remove all elements. +The problem solved here is similar to that faced by binary tree +implementations, like red-black trees, which do not maintain a binary tree in +perfect balance. In fact, the maximum height of a red-black tree is :math:`2 * +log_2{n + 1}`. While still :math:`O(log_2{n})`, the constant factor can have a +big impact on performance analysis. When using sampling to measure the +performance of red-black trees, trees of various shapes and heights must be +used. The same is done here with :doc:`Sorted Containers`. + Consider a sorted list initialized from an iterable of random values. Those values are sorted using the "sorted" builtin function and the resulting list is chopped into sublists of the given load. The "maxes" index is simply the last @@ -319,7 +334,7 @@ each ripple starts as a sharp-looking normal curve and then flattens out. In modeling each of the above cases, a normal curve is used to represent the -sublist lengths. When adding elements the range of the curve is bounded by +sublist lengths. When adding elements, the range of the curve is bounded by :math:`load` and :math:`load * 2`. While deleting elements the curve is bounded by :math:`\frac{load}{2}` and :math:`load`. The curve wraps-around these limits. Normal distributions have two parameters: :math:`\mu` and @@ -366,11 +381,11 @@ approach one. However, at the sizes discussed below, the ratio is closer to 1.136. This means that as we grow from one million to one billion elements, we expect a net ratio of ~2. By comparison, the cubic root time complexity would -expect a net ratio of ~10. In practice, :doc:`SortedContainers` is often -five to ten times faster at smaller list sizes. So the total effect is for -performance to be equal at large list sizes. Also, tree-based implementations -have difficulty trying to realize the theoretical ratio on modern processors -and so remain slower even at scale. +expect a net ratio of ~10. In practice, :doc:`Sorted Containers` is +often five to ten times faster at smaller list sizes. So the total effect is +for performance to be equal at large list sizes. Also, tree-based +implementations have difficulty trying to realize the theoretical ratio and so +remain slower even at scale. Local Results ............. @@ -391,9 +406,9 @@ The above table displays the performance of adding elements to a sorted list. Notice the particularly good ratio, approximately 1.77, out-performed the -theoretically expected 2.154. This is in large part due to the different -constant times required for various operations of which memory plays a large -role and is discussed below. +theoretically expected 2.154. This is mainly due to the different constant +times required for various operations, of which memory plays a large role and +is discussed below. ====== ======= ============ ============== ============= ========= Method Size Operations Time Ops/Sec Ratio @@ -407,8 +422,7 @@ When deleting elements, the ratio starts by out-performing the theoretically expected 3.162 but increases with size. The limited processor caches at these large sizes play a significant role in the performance. Traversing the -positional index will evict elements of the top-level list and -sublists. +positional index will evict elements of the top-level list and sublists. Virtual Machine Results ....................... @@ -469,9 +483,9 @@ times larger and ten times slower than L3 cache. These ratios are approximate but illustrative of the slowdowns. -Also important to consider is the memory access pattern. These advertised -latencies are averages for random memory access. But there are two other -patterns often seen in practice: sequential and data-dependent. +Also important is the memory access pattern. These advertised latencies are +averages for random memory access. But there are two other patterns often seen +in practice: sequential and data-dependent. Sequential memory access is faster than random due to its predictable nature. The speedup varies but about five times faster is a reasonable @@ -492,8 +506,8 @@ cache. As the list is bisected, nearby indexes will be pulled into the L2 and L1 cache and lookups will accelerate a hundred times. Once the sublist is found, it too will be bisected. The sublist will contain only one thousand -integers and those too will quickly be pulled from memory into L3, L2, and L1 -caches. Once bisected the new value will be inserted and memory will be +integers and those too will be quickly pulled from memory into L3, L2, and L1 +caches. Once bisected, the new value will be inserted and memory will be traversed sequentially to make space. For comparison, consider traversing an AVL-binary tree with one billion @@ -501,12 +515,12 @@ of memory. The binary tree will likely traverse thirty levels, each of which is a data-dependent lookup. Some lookups will have good locality but most will not. Each lookup could be hundreds to thousands of times slower than sequential -accesses. These slow lookups are why :doc:`SortedContainers` can afford +accesses. These slow lookups are why :doc:`Sorted Containers` can afford to shift a thousand sequential elements in memory and have most additions take -less time than binary tree competitors. +less time than binary tree implementations. -Due to the memory cache hierarchy, :doc:`SortedContainers` scales -extremely well. Each element in a SortedList has little overhead which +Due to the memory cache hierarchy, :doc:`Sorted Containers` scales +extremely well. Each element in a :doc:`sortedlist` has little overhead which increases cache utilization. Data is randomly accessed and related data is stored together. These patterns in computing have held for decades which -promises :doc:`SortedContainers` a bright future. +promises :doc:`Sorted Containers` a bright future. diff -Nru sortedcontainers-1.5.9/docs/performance-workload.rst sortedcontainers-2.0.4/docs/performance-workload.rst --- sortedcontainers-1.5.9/docs/performance-workload.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/performance-workload.rst 2018-06-07 05:34:49.000000000 +0000 @@ -10,32 +10,32 @@ These benchmarks attempt to mimic the usage patterns observed in other projects. Those patterns are summarized in the following names: -* *Priority Queue* - Represents a priority queue data structure. In addition to - the normal `add` and `pop` routines that can be efficiently managed with the - `heapq` module in the standard library, projects required the ability to test - for list ownership of values and occasional removal. A common use case also - involved iterating the entire priority queue. The recipe described in the - Python docs is insufficient as a priority queue for these projects in two +* *Priority Queue* -- Represents a priority queue data structure. In addition + to the normal `add` and `pop` routines that can be efficiently managed with + the `heapq` module in the standard library, projects required the ability to + test for list ownership of values and occasional removal. A common use case + also involved iterating the entire priority queue. The recipe described in + the Python docs is insufficient as a priority queue for these projects in two ways: not every inserted value corresponds to a unique key and sorted iteration is not supported in linear time. -* *Multiset* - Represents a multiset data structure. While the +* *Multiset* -- Represents a multiset data structure. While the `collections.Counter` data type is commonly suggested for implementing a multiset in Python, some projects required the ability to efficiently lookup the greatest or least item in the set. -* *Ranking* - Represents those projects that repeatedly looked up the index of +* *Ranking* -- Represents those projects that repeatedly looked up the index of items in the sorted list. Sometimes this occurred as part of prioritizing elements and reporting their rank. Imagine trying to identify an element's position in a work queue. -* *Neighbor* - This pattern was observed in several implementations of +* *Neighbor* -- This pattern was observed in several implementations of machine-learning algorithms (e.g. K-nearest-neighbor search). An iterative process was applied to a set of values in which they were repeatedly bisected and occasionally iterated. The bisect process attempts to find the nearest values to a given one. -* *Intervals* - Perhaps the most complex usage pattern, these projects +* *Intervals* -- Perhaps the most complex usage pattern, these projects maintained a list of intervals and were often querying a sorted list to determine those which overlapped. In addition to bisecting the list to identify nearest intervals, range queries were used to determine @@ -54,10 +54,27 @@ operation is also estimated because no projects had performance benchmarks that were easily evaluated. -SortedList ----------- +The legends of the graphs below correlate the underlying data structure used to +the Python project. The correlation is as follows: -Graphs comparing :doc:`SortedList` performance. +.. currentmodule:: sortedcontainers + +====================== ================================== +Data Structure Project +====================== ================================== +:class:`SortedList` :doc:`Sorted Containers` +:class:`SortedKeyList` :doc:`Sorted Containers` +B-Tree `blist on PyPI`_ +List `sortedcollection recipe`_ +====================== ================================== + +.. _`blist on PyPI`: https://pypi.org/project/blist/ +.. _`sortedcollection recipe`: http://code.activestate.com/recipes/577197-sortedcollection/ + +Sorted List +----------- + +Graphs comparing :doc:`sortedlist` performance. Priority Queue .............. @@ -65,11 +82,11 @@ Simulates a *Priority Queue* workload as described above. The mix of operations and their frequencies: -* 40% :ref:`add` -* 40% :ref:`pop` -* 10% :ref:`discard` -* 9% :ref:`contains` -* 1% :ref:`iter` (limited to first 100 elements) +* 40% :func:`SortedList.add` +* 40% :func:`SortedList.pop` +* 10% :func:`SortedList.discard` +* 9% :func:`SortedList.__contains__` +* 1% :func:`SortedList.__iter__` (limited to first 100 elements) .. image:: _static/SortedList-priorityqueue.png @@ -83,10 +100,10 @@ Simulates a *Multiset* workload as described above. The mix of operations and their frequencies: -* 75% :ref:`contains` -* 10% :ref:`add` -* 10% :ref:`remove` -* 5% :ref:`getitem` +* 75% :func:`SortedList.__contains__` +* 10% :func:`SortedList.add` +* 10% :func:`SortedList.remove` +* 5% :func:`SortedList.__getitem__` .. image:: _static/SortedList-multiset.png @@ -100,10 +117,10 @@ Simulates a *Ranking* workload as described above. The mix of operations and their frequencies: -* 40% :ref:`getitem` -* 40% :ref:`index` -* 10% :ref:`add` -* 10% :ref:`remove` +* 40% :func:`SortedList.__getitem__` +* 40% :func:`SortedList.index` +* 10% :func:`SortedList.add` +* 10% :func:`SortedList.remove` .. image:: _static/SortedList-ranking.png @@ -117,10 +134,10 @@ Simulates a *Neighbor* workload as described above. The mix of operations and their frequencies: -* 75% :ref:`bisect` -* 10% :ref:`add` -* 10% :ref:`remove` -* 5% :ref:`iter` (limited to first 100 elements) +* 75% :func:`SortedList.bisect` +* 10% :func:`SortedList.add` +* 10% :func:`SortedList.remove` +* 5% :func:`SortedList.__iter__` (limited to first 100 elements) .. image:: _static/SortedList-neighbor.png @@ -134,12 +151,12 @@ Simulates an *Intervals* workload as described above. The mix of operations and their frequencies: -* 30% :ref:`bisect` -* 20% :ref:`getitem` -* 20% :ref:`delitem` -* 10% :ref:`get-slice` (range query) -* 10% :ref:`add` -* 10% :ref:`discard` +* 30% :func:`SortedList.bisect` +* 20% :func:`SortedList.__getitem__` +* 20% :func:`SortedList.__delitem__` +* 10% :func:`SortedList.__getitem__` (range query) +* 10% :func:`SortedList.add` +* 10% :func:`SortedList.discard` .. image:: _static/SortedList-intervals.png @@ -150,13 +167,13 @@ Other Performance Comparisons ----------------------------- -SortedContainers uses a segmented-list data structure similar to a B-tree -limited to two levels of nodes. As part of the implementation, a load factor is -used to determine how many values should be stored in each node. This can have -a significant impact on performance and a :doc:`load factor performance -comparison` is also provided. +:doc:`Sorted Containers` uses a segmented-list data structure similar to +a B-tree limited to two levels of nodes. As part of the implementation, a load +factor is used to determine how many values should be stored in each node. This +can have a significant impact on performance and a :doc:`load factor +performance comparison` is also provided. -Because sortedcontainers is pure-Python, its performance also depends directly -on the Python runtime. A :doc:`runtime performance +Because :doc:`Sorted Containers` is pure-Python, its performance also +depends directly on the Python runtime. A :doc:`runtime performance comparison` is also included with data from popular Python runtimes. diff -Nru sortedcontainers-1.5.9/docs/pycon-2016-talk.rst sortedcontainers-2.0.4/docs/pycon-2016-talk.rst --- sortedcontainers-1.5.9/docs/pycon-2016-talk.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/pycon-2016-talk.rst 2018-06-07 05:34:49.000000000 +0000 @@ -99,7 +99,7 @@ I couldn’t find the right answer so I built it. The missing battery: `Sorted Containers`_. -Here it is. This is the project home page. `SortedContainers`_ is a `Python +Here it is. This is the project home page. `Sorted Containers`_ is a `Python sorted collections`_ library with `sorted list`_, `sorted dictionary`_, and `sorted set`_ implementations. It’s pure-Python but it’s as fast as C-extensions. It’s Python 2 and Python 3 compatible. It’s fully-featured. And @@ -109,24 +109,24 @@ performance graphs in total. Let’s look at a few of them together. Here’s the performance of adding a random value to a sorted list. I’m comparing -`SortedContainers`_ with other competing implementations. +`Sorted Containers`_ with other competing implementations. Notice the axes are log-log. So if performance differs by major tick marks then one is actually ten times faster than the other. -We see here that `SortedContainers`_ is in fact about ten times faster than +We see here that `Sorted Containers`_ is in fact about ten times faster than blist when it comes to adding random values to a sorted list. Notice also Raymond’s recipe is just a list and that displays order n-squared runtime complexity. That’s why it curves upwards. -Of all the sorted collections libraries, `SortedContainers`_ is also fastest at -initialization. We’ll look at why soon. +Of all the sorted collections libraries, `Sorted Containers`_ is also fastest +at initialization. We’ll look at why soon. -`SortedContainers`_ is not always fastest. But notice here the performance +`Sorted Containers`_ is not always fastest. But notice here the performance improves with scale. You can see it there in blue. It starts in the middle of the pack and has a lesser slope than competitors. -In short, `SortedContainers`_ is kind of like a `B-tree`_ implementation. That +In short, `Sorted Containers`_ is kind of like a `B-tree`_ implementation. That means you can configure the the fan-out of nodes in the tree. We call that the load parameter and there are extensive performance graphs of three different `load parameters`_. @@ -147,7 +147,7 @@ In addition to comparisons and load-factors, I also `benchmark runtimes`_. Here’s CPython 2.7, CPython 3.5 and `PyPy`_ version 5. You can see where the the just-in-time compiler, the jit-compiler, kicks in. That’ll make -`SortedContainers`_ another ten times faster. +`Sorted Containers`_ another ten times faster. Finally, I made a survey in 2015 on `Github`_ as to how people were using sorted collections. I noticed patterns like priority queues, mutli-sets, @@ -157,7 +157,7 @@ elements, 40% popping elements, 10% discarding elements, and has a couple other methods. -`SortedContainers`_ is two to ten times faster in all of these scenarios. +`Sorted Containers`_ is two to ten times faster in all of these scenarios. We also have a lot of features. The API is nearly a drop-in replacement for the “blist” and “rbtree” modules. But the quirks have been fixed so the “pop” @@ -200,8 +200,8 @@ out of the box on Python 2 and 3. If you’re new to sorted collections, I hope I’ve piqued your interest. Think -about the achievement here. `SortedContainers`_ is pure-Python but as fast as -C-implementations. Let’s look under the hood of `SortedContainers`_ at what +about the achievement here. `Sorted Containers`_ is pure-Python but as fast as +C-implementations. Let’s look under the hood of `Sorted Containers`_ at what makes it so fast. It really comes down to bisect for the heavy lifting. Bisect is a module in the @@ -307,7 +307,7 @@ This is also why the slope of the performance curve for sorted list was less than that for binary tree implementations. At scale, binary trees do more -data-dependent DRAM lookups than `SortedContainers`_. +data-dependent DRAM lookups than `Sorted Containers`_. I said that initializing a sorted container is fast. Let’s look at why. Here’s the initializer for a `SortedList`_. Notice it simply calls the sorted builtin @@ -345,7 +345,7 @@ gigabytes of memory which is already exceeding the limits of most machines. We’ve also seen that memory is expensive. Allocations are costly. In the common -case, `SortedContainers`_ allocates no more memory when adding elements. +case, `Sorted Containers`_ allocates no more memory when adding elements. If you’re doubtful about performance at scale, then I encourage you to read the project docs. There’s a page called `Performance at Scale`_ and it talks @@ -369,7 +369,7 @@ interpreter; memory is tiered; cheat, if you can; and measure, measure, measure. -A couple closing thoughts. Everything related to `SortedContainers`_ is under +A couple closing thoughts. Everything related to `Sorted Containers`_ is under an open-source `Apache2 license`_. Contributors are very welcome. We’ve started to create a little community around sorted collections. @@ -380,7 +380,7 @@ scenarios. I’ll end with a quote from `Mark Summerfield`_. Mark and a couple other authors -have actually deprecated their modules in favor of `SortedContainers`_. Mark +have actually deprecated their modules in favor of `Sorted Containers`_. Mark says: “Python’s ‘batteries included’ standard library seems to have a battery missing. And the argument that ‘we never had it before’ has worn thin. It is time that Python offered a full range of collection classes out of the box, @@ -397,21 +397,21 @@ .. _`collections.OrderedDict`: https://docs.python.org/3/library/collections.html#collections.OrderedDict .. _`Sqlite in-memory indexes`: https://www.sqlite.org/lang_createindex.html .. _`pandas.DataFrame indexes`: http://pandas.pydata.org/pandas-docs/stable/indexing.html -.. _`Redis sorted sets`: http://redis.io/commands#sorted_set +.. _`Redis sorted sets`: https://redis.io/topics/data-types .. _`MutableSequence`: https://docs.python.org/3/library/collections.abc.html#collections-abstract-base-classes -.. _`PyPI`: https://pypi.python.org/pypi +.. _`PyPI`: https://pypi.org/ .. _`Dan Stromberg`: http://stromberg.dnsalias.org/~dstromberg/datastructures/ .. _`B-tree`: https://en.wikipedia.org/wiki/B-tree .. _`PyPy`: http://pypy.org/ .. _`Github`: https://github.com/ .. _`Blist`: http://stutzbachenterprises.com/blist/ .. _`SortedCollection`: http://code.activestate.com/recipes/577197-sortedcollection/ -.. _`bintrees`: https://pypi.python.org/pypi/bintrees/ -.. _`SortedContainers`: http://www.grantjenks.com/docs/sortedcontainers/ +.. _`bintrees`: https://pypi.org/project/bintrees/ +.. _`Sorted Containers`: http://www.grantjenks.com/docs/sortedcontainers/ .. _`Banyan`: https://pythonhosted.org/Banyan/ -.. _`skiplistcollections`: https://pypi.python.org/pypi/skiplistcollections/ +.. _`skiplistcollections`: https://pypi.org/project/skiplistcollections/ .. _`Google`: https://www.google.com/ -.. _`rbtree`: https://pypi.python.org/pypi/rbtree/ +.. _`rbtree`: https://pypi.org/project/rbtree/ .. _`Sorted Containers`: http://www.grantjenks.com/docs/sortedcontainers/ .. _`sorted list`: http://www.grantjenks.com/docs/sortedcontainers/sortedlist.html .. _`sorted dictionary`: http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html @@ -433,7 +433,7 @@ .. _`.NET`: https://www.microsoft.com/net .. _`Python`: https://www.python.org/ .. _`PHP`: http://php.net/ -.. _`Javascript`: http://www.ecmascript.org/ +.. _`Javascript`: https://en.wikipedia.org/wiki/ECMAScript .. _`MutableMapping`: https://docs.python.org/3/library/collections.abc.html#collections-abstract-base-classes .. _`MutableSet`: https://docs.python.org/3/library/collections.abc.html#collections-abstract-base-classes .. _`load parameters`: http://www.grantjenks.com/docs/sortedcontainers/performance-load.html diff -Nru sortedcontainers-1.5.9/docs/sf-python-2015-lightning-talk.rst sortedcontainers-2.0.4/docs/sf-python-2015-lightning-talk.rst --- sortedcontainers-1.5.9/docs/sf-python-2015-lightning-talk.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/sf-python-2015-lightning-talk.rst 2018-06-07 05:34:49.000000000 +0000 @@ -74,8 +74,8 @@ short answer is two fold: I use bisect a lot and I cheat a little. But never fear, none of the graphs hide lazy-computations. -I think Sorted Containers is great. But listen to what other smart people say -about it: +I think :doc:`Sorted Containers` is great. But listen to what other +smart people say about it: Alex Martelli says: Good stuff! ... I like the simple, effective implementation idea of splitting the sorted containers into smaller “fragments” to avoid the @@ -93,7 +93,7 @@ So, the next time you write a priority queue, or work with time-series data, or setup an in-memory Sqlite database or send Redis a ZADD command, think of -Sorted Containers. +:doc:`Sorted Containers`. In Python, we can do better. Happy Holidays. diff -Nru sortedcontainers-1.5.9/docs/sorteddict.rst sortedcontainers-2.0.4/docs/sorteddict.rst --- sortedcontainers-1.5.9/docs/sorteddict.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/sorteddict.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,594 +1,78 @@ -SortedDict -========== - -:doc:`SortedContainers` is an Apache2 licensed Python sorted collections -library, written in pure-Python, and fast as C-extensions. SortedDict API -documentation is detailed below. The :doc:`introduction` is the -best way to get started. - -.. currentmodule:: sortedcontainers - -.. class:: SortedDict(*args, **kwargs) - - A :class:`SortedDict` provides the same methods as a :class:`dict`. - Additionally, a :class:`SortedDict` efficiently maintains its keys in sorted - order. Consequently, the :ref:`keys ` method will return - the keys in sorted order, the :ref:`popitem ` method will - remove the item with the highest key, etc. - - An optional *key* argument defines a callable that, like the `key` argument - to Python's `sorted` function, extracts a comparison key from each dict - key. If no function is specified, the default compares the dict keys - directly. The `key` argument must be provided as a positional argument and - must come before all other arguments. - - An optional *load* argument defines the load factor of the internal list used - to maintain sort order. If present, this argument must come before an - iterable. The default load factor of '1000' works well for lists from tens to - tens of millions of elements. Good practice is to use a value that is the - square or cube root of the list size. With billions of elements, the best - load factor depends on your usage. It's best to leave the load factor at the - default until you start benchmarking. See :doc:`implementation details - ` for more information. - - An optional *iterable* provides an initial series of items to populate the - :class:`SortedDict`. Each item in the series must itself contain two items. - The first is used as a key in the new dictionary, and the second as the key's - value. If a given key is seen more than once, the last value associated with - it is retained in the new dictionary. - - If keyword arguments are given, the keywords themselves with their associated - values are added as items to the dictionary. If a key is specified both in - the positional argument and as a keyword argument, the value associated with - the keyword is retained in the dictionary. For example, these all return a - dictionary equal to ``{"one": 2, "two": 3}``: - - * ``SortedDict(one=2, two=3)`` - * ``SortedDict({'one': 2, 'two': 3})`` - * ``SortedDict(zip(('one', 'two'), (2, 3)))`` - * ``SortedDict([['two', 3], ['one', 2]])`` - - The first example only works for keys that are valid Python identifiers; the - others work with any valid keys. - - :class:`SortedDict` inherits from the built-in `dict` type. - - .. _SortedDict.__contains__: - .. method:: x in d - - Return True if and only if *x* is a key in the dictionary. - - :rtype: :class:`bool` - - .. _SortedDict.__delitem__: - .. method:: del d[key] - - Remove ``d[key]`` from *d*. Raises a :exc:`KeyError` if *key* - is not in the dictionary. - - .. _SortedDict.__getitem__: - .. method:: d[key] - - Return the item of *d* with key *key*. Raises a :exc:`KeyError` - if *key* is not in the dictionary. - - :rtype: value - - .. method:: D == D2, D != D2 - - Test two dictionaries for equality (or inequality). Mappings compare - equal if and only if they have the same length, if all of the keys of *D* - may be found in *D2*, and all of the corresponding values compare equal. - - :rtype: :class:`bool` - - .. _SortedDict.__iter__: - .. method:: iter(d) - - Return an iterator over the sorted keys of the dictionary. - - Iterating the Mapping while adding or deleting keys may raise a - `RuntimeError` or fail to iterate over all entries. - - :rtype: iterator - - .. _SortedDict.__reversed__: - .. method:: reversed(d) - - Return a reversed iterator over the sorted keys of the dictionary. - - Iterating the Mapping while adding or deleting keys may raise a - `RuntimeError` or fail to iterate over all entries. - - :rtype: iterator - - .. method:: len(d) - - Return the number of (key, value) pairs in the dictionary. - - :rtype: :class:`int` - - .. _SortedDict.__setitem__: - .. method:: d[key] = value - - Set `d[key]` to *value*. - - .. method:: d.clear() - - Remove all elements from the sorted dictionary. - - .. method:: d.copy() - - Create a shallow copy of the dictionary. - - :rtype: :class:`SortedDict` - - .. method:: d.fromkeys(seq, value=None) - - Create a new dictionary with keys from *seq* and values set to - *value*. - - :meth:`fromkeys` is a class method that returns a new - dictionary. *value* defaults to ``None``. - - :rtype: :class:`SortedDict` - - .. method:: d.get(key, default=None) - - Return the value for *key* if *key* is in the dictionary, else - *default*. If *default* is not given, it defaults to ``None``, - so that this method never raises a :exc:`KeyError`. - - :rtype: value - - .. method:: d.items() - - In Python 2, returns a list of the dictionary's items (``(key, - value)`` pairs). - - In Python 3, returns a new :class:`ItemsView` of the dictionary's - items. In addition to the methods provided by the built-in `view - `_, - the :class:`ItemsView` is indexable (e.g., ``d.items()[5]``). - - :rtype: :class:`list` or :class:`ItemsView` - - .. _SortedDict.keys: - .. method:: d.keys() - - In Python 2, return a :class:`SortedSet` of the dictionary's keys. - - In Python 3, return a new :class:`KeysView` of the dictionary's - keys. In addition to the methods provided by the built-in `view - `_, - the :class:`KeysView` is indexable (e.g., ``d.keys()[5]``). - - :rtype: :class:`SortedSet` or :class:`KeysView` - - .. method:: d.pop(key[, default]) - - If *key* is in the dictionary, remove it and return its value, - else return *default*. If *default* is not given and *key* is not in - the dictionary, a :exc:`KeyError` is raised. - - :rtype: value - - .. _SortedDict.popitem: - .. method:: d.popitem(last=True) - - Remove and return a ``(key, value)`` pair from the dictionary. If - ``last=True`` (default) then remove the *greatest* key from the - dictionary. Else, remove the *least* key from the dictionary. - - If the dictionary is empty, calling :meth:`popitem` raises a - :exc:`KeyError`. - - :rtype: (key, value) tuple - - .. method:: d.peekitem(index=-1) - - Return ``(key, value)`` item pair at index. - - Unlike :ref:`popitem`, the sorted dictionary is not - modified. Index defaults to -1, the *last/greatest* key in the - dictionary. Specify ``index=0`` to lookup the *first/least* key in the - dictionary. - - If index is out of range, raise :exc:`IndexError`. - - :rtype: (key, value) tuple - - .. method:: d.setdefault(key, default=None) - - If *key* is in the dictionary, return its value. If not, - insert *key* with a value of *default* and return - *default*. *default* defaults to ``None``. - - .. method:: d.update(other, ...) - - Update the dictionary with the key/value pairs from *other*, - overwriting existing keys. - - :meth:`update` accepts either another dictionary object or an - iterable of key/value pairs (as a tuple or other iterable of - length two). If keyword arguments are specified, the dictionary - is then updated with those key/value pairs: ``d.update(red=1, - blue=2)``. - - .. method:: d.values() - - In Python 2, return a list of the dictionary's values. - - In Python 3, return a new :class:`ValuesView` of the dictionary's - values. In addition to the methods provided by the built-in `view - `_, - the :class:`ValuesView` is indexable (e.g., ``d.values()[5]``). - - :rtype: :class:`list` or :class:`ValuesView` - - .. _SortedDict.index: - .. method:: d.index(key, [start, [stop]]) - - Return the smallest *k* such that :math:`d.iloc[k] == key` and - :math:`i <= k < j`. Raises :exc:`ValueError` if *key* is not - present. *stop* defaults to the end of the set. *start* - defaults to the beginning. Negative indexes are supported, as - for slice indices. - - :rtype: :class:`int` - - .. _SortedDict.bisect_left: - .. method:: d.bisect_left(key) - - Similar to the ``bisect`` module in the standard library, this returns an - appropriate index to insert *key* in SortedDict. If *key* is already - present in SortedDict, the insertion point will be before (to the left of) - any existing entries. - - :rtype: :class:`int` - - .. _SortedDict.bisect: - .. method:: d.bisect(key) - - Same as :ref:`bisect_right `. - - :rtype: :class:`int` - - .. _SortedDict.bisect_right: - .. method:: d.bisect_right(key) - - Same as :ref:`bisect_left `, but if *key* is - already present in SortedDict, the insertion index will be after (to the - right of) any existing entries. - - :rtype: :class:`int` - - .. _SortedDict.bisect_key_left: - .. method:: d.bisect_key_left(key) - - Similar to the ``bisect`` module in the standard library, this returns an - appropriate index to insert a value with a given *key*. If values with - *key* are already present, the insertion point will be before (to the - left of) any existing entries. This method is present only if the sorted - dict was constructed with a key function. In this context, *key* refers - to the result of the key function applied to the dictionary key. - - :rtype: :class:`int` - - .. method:: d.bisect_key(key) - - Same as :ref:`bisect_key_right `. - - :rtype: :class:`int` - - .. _SortedDict.bisect_key_right: - .. method:: d.bisect_key_right(key) - - Same as :ref:`bisect_key_left `, but - if *key* is already present, the insertion point will be after (to the - right of) any existing entries. - - :rtype: :class:`int` - - .. _SortedDict.iloc: - .. method:: d.iloc[pos] - - Very efficiently return the key at index *pos* in iteration. Supports - negative indices and slice notation. Raises :exc:`IndexError` on invalid - *pos*. - - :rtype: key or :class:`list` - - .. method:: del d.iloc[index] - - Remove the ``d[d.iloc[index]]`` from *d*. Supports negative indices and - slice notation. Raises :exc:`IndexError` on invalid *index*. - - .. method:: d.islice(start=None, stop=None, reverse=False) - - Returns an iterator that slices keys from `start` to `stop` index, - inclusive and exclusive respectively. - - When `reverse` is `True`, values are yielded from the iterator in - reverse order. +.. automodule:: sortedcontainers.sorteddict - Both `start` and `stop` default to `None` which is automatically - inclusive of the beginning and end. - :rtype: iterator - - .. method:: d.irange(minimum=None, maximum=None, inclusive=(True, True), reverse=False) - - Create an iterator of keys between `minimum` and `maximum`. - - `inclusive` is a pair of booleans that indicates whether the minimum - and maximum ought to be included in the range, respectively. The - default is (True, True) such that the range is inclusive of both - minimum and maximum. - - Both `minimum` and `maximum` default to `None` which is automatically - inclusive of the start and end of the list, respectively. - - When `reverse` is `True` the values are yielded from the iterator in - reverse order; `reverse` defaults to `False`. - - When initialized with a key-function, an `irange_key` method is also - provided with :ref:`similar semantics`. - - :rtype: iterator - -.. class:: KeysView - - A KeysView object is a dynamic view of the dictionary's keys, which - means that when the dictionary's keys change, the view reflects - those changes. - - :class:`KeysView` implements the KeysView, Set, and Sequence Abstract - Base Class types. - - .. method:: len(keysview) - - Return the number of entries in the dictionary. - - :rtype: :class:`int` - - .. method:: iter(keysview) - - Return an iterator over the keys in the dictionary. Keys are - iterated over in their sorted order. - - Iterating views while adding or deleting entries in the dictionary - may raise a :exc:`RuntimeError` or fail to iterate over all - entries. - - :rtype: iterator - - .. method:: reversed(keysview) - - Return a reversed iterator over the keys in the dictionary. - - Iterating views while adding or deleting entries in the dictionary - may raise a :exc:`RuntimeError` or fail to iterate over all - entries. - - :rtype: iterator - - .. method:: x in keysview - - Return ``True`` iff *x* is one of the underlying dictionary's - keys. - - :rtype: :class:`bool` - - .. method:: keysview[i] - - Return the key at position *i*. - - :rtype: value - - .. _KeysView.and: - .. method:: keysview & other - - Return the intersection of the keys and the other object as - a new set. - - :rtype: :class:`SortedSet` - - .. _KeysView.or: - .. method:: keysview | other - - Return the union of the keys and the other object as a new set. - - :rtype: :class:`SortedSet` - - .. _KeysView.sub: - .. describe:: keysview - other - - Return the difference between the keys and the other object (all - keys that aren't in *other*) as a new set. - - :rtype: :class:`SortedSet` - - .. _KeysView.xor: - .. describe:: keysview ^ other - - Return the symmetric difference (all elements either in the keys - or *other*, but not in both) of the keys and the other object as - a new set. - - :rtype: :class:`SortedSet` - - .. method:: keysview.count(key) - - Return the number of occurrences of *key* in the set. - - :rtype: :class:`int` - - .. method:: keysview.index(key, [start, [stop]]) - - Return the smallest *k* such that :math:`keysview[k] == x` and - :math:`i <= k < j`. Raises :exc:`KeyError` if *key* is not - present. *stop* defaults to the end of the set. *start* - defaults to the beginning. Negative indexes are supported, as - for slice indices. - - :rtype: :class:`int` - -.. class:: ValuesView - - A ValuesView object is a dynamic view of the dictionary's values, - which means that when the dictionary's values change, the view - reflects those changes. - - :class:`ValuesView` implements the ValuesView and Sequence Abstract - Base Class types. - - .. method:: len(valuesview) - - Return the number of entries in the dictionary. - - :rtype: :class:`int` - - .. method:: iter(valuesview) - - Return an iterator over the values in the dictionary. Values are - iterated over in sorted order of the keys. - - Iterating views while adding or deleting entries in the dictionary - may raise a :exc:`RuntimeError` or fail to iterate over all - entries. - - :rtype: iterator - - .. method:: reversed(valuesview) - - Return a reversed iterator over the values in the dictionary. Values - are iterated over in reversed sorted order of the keys. - - Iterating views while adding or deleting entries in the dictionary - may raise a :exc:`RuntimeError` or fail to iterate over all - entries. - - :rtype: iterator - - .. method:: x in valuesview - - Return ``True`` iff *x* is one of the underlying dictionary's - values. - - :rtype: :class:`bool` - - .. method:: valuesview[i] - - Return the value at position *i*. - - :rtype: value - - .. method:: valuesview.count(value) - - Return the number of occurrences of *value* in the set. - - :rtype: :class:`int` - - .. method:: valuesview.index(value) - - Return the smallest *k* such that :math:`valuesview[k] == x`. Raises - :exc:`ValueError` if *value* is not present. - - :rtype: :class:`int` - -.. class:: ItemsView - - An ItemsView object is a dynamic view of the dictionary's ``(key, - value)`` pairs, which means that when the dictionary changes, the - view reflects those changes. - - :class:`ItemsView` implements the ItemsView, Set, and Sequence - Abstract Base Class types. - - .. method:: len(itemsview) - - Return the number of entries in the dictionary. - - :rtype: :class:`int` - - .. method:: iter(itemsview) - - Return an iterator over the items in the dictionary. Items are - iterated over in sorted order of the keys. - - Iterating views while adding or deleting entries in the dictionary - may raise a :exc:`RuntimeError` or fail to iterate over all - entries. - - :rtype: iterator - - .. method:: reversed(itemsview) - - Return a reversed iterator over the items in the dictionary. - - Iterating views while adding or deleting entries in the dictionary - may raise a :exc:`RuntimeError` or fail to iterate over all - entries. - - :rtype: iterator - - .. method:: x in itemsview - - Return ``True`` iff *x* is one of the underlying dictionary's - items. - - :rtype: :class:`bool` - - .. method:: itemsview[i] - - Return the ``(key, value)`` pair at position *i*. - - :rtype: item - - .. method:: itemsview & other - - Return the intersection of the items and the other object as - a new set. - - :rtype: :class:`SortedSet` - - .. method:: itemsview | other - - Return the union of the items and the other object as a new set. - - :rtype: :class:`SortedSet` - - .. describe:: itemsview - other - - Return the difference between the items and the other object (all - items that aren't in *other*) as a new set. - - :rtype: :class:`SortedSet` - - .. describe:: itemsview ^ other - - Return the symmetric difference (all elements either in the items - or *other*, but not in both) of the items and the other object as - a new set. - - :rtype: :class:`SortedSet` - - .. method:: itemsview.count(item) +SortedDict +.......... - Return the number of occurrences of *item* in the set. +.. autoclass:: sortedcontainers.SortedDict + :show-inheritance: - :rtype: :class:`int` + .. automethod:: __init__ + .. autoattribute:: key + .. automethod:: __getitem__ + .. automethod:: __setitem__ + .. automethod:: __delitem__ + .. automethod:: __iter__ + .. automethod:: __len__ + .. automethod:: setdefault + .. automethod:: update + .. automethod:: clear + .. automethod:: pop + .. automethod:: popitem + .. automethod:: __contains__ + .. automethod:: get + .. automethod:: peekitem + .. automethod:: keys + .. automethod:: items + .. automethod:: values + .. automethod:: copy + .. automethod:: fromkeys + .. automethod:: __reversed__ + .. automethod:: __eq__ + .. automethod:: __ne__ + .. automethod:: __repr__ + .. automethod:: _check + + Sorted list methods (applies to keys): + + * :func:`SortedList.bisect_left` + * :func:`SortedList.bisect_right` + * :func:`SortedList.count` + * :func:`SortedList.index` + * :func:`SortedList.irange` + * :func:`SortedList.islice` + * :func:`SortedList._reset` + + Additional sorted list methods, if key-function used: + + * :func:`SortedKeyList.bisect_key_left` + * :func:`SortedKeyList.bisect_key_right` + * :func:`SortedKeyList.irange_key` + + +SortedKeysView +.............. + +.. autoclass:: sortedcontainers.SortedKeysView + :show-inheritance: + + .. automethod:: __getitem__ + .. automethod:: __delitem__ + + +SortedItemsView +............... + +.. autoclass:: sortedcontainers.SortedItemsView + :show-inheritance: + + .. automethod:: __getitem__ - .. method:: itemsview.index(item, [start, [stop]]) - Return the smallest *k* such that :math:`itemsview[k] == x` and - :math:`i <= k < j`. Raises :exc:`KeyError` if *item* is not - present. *stop* defaults to the end of the set. *start* - defaults to the beginning. Negative indexes are supported, as - for slice indices. +SortedValuesView +................ - :rtype: :class:`int` +.. autoclass:: sortedcontainers.SortedValuesView + :show-inheritance: -.. _Set: http://docs.python.org/release/3.1/library/collections.html#abcs-abstract-base-classes -.. _Sequence: http://docs.python.org/release/3.1/library/collections.html#abcs-abstract-base-classes + .. automethod:: __getitem__ diff -Nru sortedcontainers-1.5.9/docs/sortedlist.rst sortedcontainers-2.0.4/docs/sortedlist.rst --- sortedcontainers-1.5.9/docs/sortedlist.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/sortedlist.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,292 +1,63 @@ -SortedList -========== - -:doc:`SortedContainers` is an Apache2 licensed Python sorted collections -library, written in pure-Python, and fast as C-extensions. SortedList API -documentation is detailed below. The :doc:`introduction` is the -best way to get started. - -.. currentmodule:: sortedcontainers - -.. class:: SortedList(iterable=None, key=None, load=1000) - - A :class:`SortedList` provides most of the same methods as a :class:`list`, - but keeps the items in sorted order. To add an element to the SortedList, - use :ref:`add `. To add several elements, use :ref:`update - `. To remove an element, use :ref:`discard - `, :ref:`remove `, or :ref:`del L[i] - `. - - An optional *iterable* provides an initial series of items to - populate the :class:`SortedList`. - - An optional *key* argument will return an instance of subtype - :class:`SortedListWithKey`. - - An optional *load* specifies the load-factor of the list. The default load - factor of '1000' works well for lists from tens to tens of millions of - elements. Good practice is to use a value that is the square or cube root of - the list size. With billions of elements, the best load factor depends on - your usage. It's best to leave the load factor at the default until you - start benchmarking. See :doc:`implementation details ` for - more information. - - :class:`SortedList` implements the MutableSequence Abstract Base Class type. - - .. _SortedList.__contains__: - .. method:: x in L - - Return True if and only if *x* is an element in the list. - - :rtype: :class:`bool` - - .. _SortedList.__delitem__: - .. method:: del L[i] - - Remove the element located at index *i* from the list. - - .. method:: del L[i:j] - - Remove the elements from *i* to *j* from the list. Also note that *step* - is supported in slice syntax. - - .. _SortedList.__eq__: - .. method:: L == L2, L != L2, L < L2, L <= L2, L > L2, L >= L2 - - Compare two lists. For full details see `Comparisons - `_ in - the Python language reference. - - :rtype: :class:`bool` - - .. _SortedList.__getitem__: - .. method:: L[i] - - Return the element at position *i*. - - :rtype: item - - .. method:: L[i:j] - - Return a new :class:`list` containing the elements from *i* to *j*. Also - note that *step* is supported in slice syntax. - - :rtype: :class:`list` - - .. method:: L *= k - - Increase the length of the list by a factor of *k*, by inserting - *k-1* additional shallow copies of each item in the list. - - .. _SortedList.__iter__: - .. method:: iter(L) - - Return an iterator over the Sequence. - - Iterating the Sequence while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. - - :rtype: iterator - - .. method:: len(L) - - Return the number of elements in the list. - - :rtype: :class:`int` - - .. _SortedList.__mul__: - .. method:: L * k or k * L - - Return a new sorted list containing *k* shallow copies of each - item in L. - - :rtype: :class:`SortedList` - - .. _SortedList.__add__: - .. method:: L + k - - Return a new sorted list containing all the elements in *L* and - *k*. Elements in *k* do not need to be properly ordered with respect to - *L*. - - :rtype: :class:`SortedList` - - .. _SortedList.__iadd__: - .. method:: L += k - - Update *L* to include all values in *k*. Elements in *k* do not - need to be properly ordered with respect to *L*. - - .. _SortedList.reversed: - .. method:: reversed(L) - - Return an iterator to traverse the Sequence in reverse. - - Iterating the Sequence while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. - - :rtype: iterator - - .. _SortedList.reverse: - .. method:: L.reverse() - - Raise NotImplementedError - - SortedList maintains values in ascending sort order. Values may not be - reversed in-place. - - Use ``reversed(sorted_list)`` for a reverse iterator over values in - descending sort order. +.. automodule:: sortedcontainers.sortedlist - Implemented to override MutableSequence.reverse which provides an - erroneous default implementation. - .. _SortedList.__setitem__: - .. method:: L[i] = x - - Replace the item at position *i* of *L* with *x*. Supports slice - notation. Raises a :exc:`ValueError` if the sort order would be - violated. When used with a slice and iterable, the :exc:`ValueError` is - raised before the list is mutated if the sort order would be violated by - the operation. - - .. method:: L[i:j] = iterable - - Replace the items at positions *i* through *j* with the contents of - *iterable*. Also note that *step* is supported in slice syntax. - - .. _SortedList.add: - .. method:: L.add(value) - - Add the element *value* to the list. - - .. _SortedList.bisect_left: - .. method:: L.bisect_left(value) - - Similar to the ``bisect`` module in the standard library, this - returns an appropriate index to insert *value* in *L*. If *value* is - already present in *L*, the insertion point will be before (to the - left of) any existing entries. - - :rtype: :class:`int` - - .. _SortedList.bisect: - .. method:: L.bisect(value) - - Same as :ref:`bisect_right `. - - :rtype: :class:`int` - - .. _SortedList.bisect_right: - .. method:: L.bisect_right(value) - - Same as :ref:`bisect_left `, but if - *value* is already present in *L*, the insertion point will be after - (to the right of) any existing entries. - - :rtype: :class:`int` - - .. _SortedList.count: - .. method:: L.count(value) - - Return the number of occurrences of *value* in the list. - - :rtype: :class:`int` - - .. _SortedList.copy: - .. method:: L.copy() - - Return a shallow copy of the sorted list. - - :rtype: :class:`SortedList` - - .. _SortedList.discard: - .. method:: L.discard(value) - - Remove the first occurrence of *value*. If *value* is not a - member, does nothing. - - .. _SortedList.index: - .. method:: L.index(value, [start, [stop]]) - - Return the smallest *k* such that :math:`L[k] == x` and - :math:`i <= k < j`. Raises ValueError if *value* is not - present. *stop* defaults to the end of the list. *start* - defaults to the beginning. Negative indexes are supported, as - for slice indices. - - :rtype: :class:`int` - - .. _SortedList.pop: - .. method:: L.pop([index]) - - Remove and return item at index (default last). Raises :exc:`IndexError` - if list is empty or index is out of range. Negative indexes are - supported, as for slice indices. - - :rtype: item - - .. _SortedList.remove: - .. method:: L.remove(value) - - Remove first occurrence of *value*. Raises :exc:`ValueError` if - *value* is not present. - - .. _SortedList.update: - .. method:: L.update(iterable) - - Grow the list by inserting all elements from the *iterable*. - - .. method:: L.clear() - - Remove all the elements from the list. - - .. _SortedList.append: - .. method:: L.append(value) - - Append the element *value* to the list. Raises a :exc:`ValueError` if the - *value* would violate the sort order. - - .. _SortedList.extend: - .. method:: L.extend(iterable) - - Extend the list by appending all elements from the *iterable*. Raises a - :exc:`ValueError` if the sort order would be violated. - - .. _SortedList.insert: - .. method:: L.insert(index, value) - - Insert the element *value* into the list at *index*. Raises a - :exc:`ValueError` if the *value* at *index* would violate the sort order. - - .. _SortedList.islice: - .. method:: L.islice(start=None, stop=None, reverse=False) - - Returns an iterator that slices `self` from `start` to `stop` index, - inclusive and exclusive respectively. - - When `reverse` is `True`, values are yielded from the iterator in - reverse order. - - Both `start` and `stop` default to `None` which is automatically - inclusive of the beginning and end. - - :rtype: iterator - - .. _SortedList.irange: - .. method:: L.irange(minimum=None, maximum=None, inclusive=(True, True), reverse=False) - - Create an iterator of values between `minimum` and `maximum`. - - `inclusive` is a pair of booleans that indicates whether the minimum - and maximum ought to be included in the range, respectively. The - default is (True, True) such that the range is inclusive of both - minimum and maximum. +SortedList +.......... - Both `minimum` and `maximum` default to `None` which is automatically - inclusive of the start and end of the list, respectively. +.. autoclass:: sortedcontainers.SortedList + :show-inheritance: - When `reverse` is `True` the values are yielded from the iterator in - reverse order; `reverse` defaults to `False`. + .. automethod:: __new__ + .. automethod:: __init__ + .. automethod:: add + .. automethod:: update + .. automethod:: clear + .. automethod:: discard + .. automethod:: remove + .. automethod:: pop + .. automethod:: bisect_left + .. automethod:: bisect_right + .. automethod:: count + .. automethod:: index + .. automethod:: irange + .. automethod:: islice + .. automethod:: __iter__ + .. automethod:: __reversed__ + .. automethod:: __contains__ + .. automethod:: __getitem__ + .. automethod:: __delitem__ + .. automethod:: __add__ + .. automethod:: __iadd__ + .. automethod:: __mul__ + .. automethod:: __imul__ + .. automethod:: __eq__ + .. automethod:: __ne__ + .. automethod:: __lt__ + .. automethod:: __le__ + .. automethod:: __gt__ + .. automethod:: __ge__ + .. automethod:: copy + .. automethod:: __len__ + .. automethod:: __repr__ + .. automethod:: _check + .. automethod:: _reset + .. automethod:: append + .. automethod:: extend + .. automethod:: insert + .. automethod:: reverse + .. automethod:: __setitem__ + + +SortedKeyList +............. + +.. autoclass:: sortedcontainers.SortedKeyList + :show-inheritance: + + .. automethod:: __init__ + .. autoattribute:: key + .. automethod:: bisect_key_left + .. automethod:: bisect_key_right + .. automethod:: irange_key - :rtype: iterator +.. autoclass:: sortedcontainers.SortedListWithKey diff -Nru sortedcontainers-1.5.9/docs/sortedlistwithkey.rst sortedcontainers-2.0.4/docs/sortedlistwithkey.rst --- sortedcontainers-1.5.9/docs/sortedlistwithkey.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/sortedlistwithkey.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,337 +0,0 @@ -SortedListWithKey -================= - -:doc:`SortedContainers` is an Apache2 licensed Python sorted collections -library, written in pure-Python, and fast as C-extensions. SortedListWithKey -API documentation is detailed below. The :doc:`introduction` is -the best way to get started. - -.. currentmodule:: sortedcontainers - -.. class:: SortedListWithKey(iterable=None, key=identity, load=1000) - - A :class:`SortedListWithKey` provides most of the same methods as a - :class:`list`, but keeps the items in sorted order. To add an element to the - SortedListWithKey, use :ref:`add `. To add several - elements, use :ref:`update `. To remove an - element, use :ref:`discard `, :ref:`remove - `, or :ref:`del L[i] - `. - - An optional *iterable* provides an initial series of items to - populate the :class:`SortedListWithKey`. - - An optional *key* argument defines a callable that, like the `key` - argument to Python's `sorted` function, extracts a comparison key from - each element. The default is the identity function. - - An optional *load* specifies the load-factor of the list. The default load - factor of '1000' works well for lists from tens to tens of millions of - elements. Good practice is to use a value that is the square or cube root of - the list size. With billions of elements, the best load factor depends on - your usage. It's best to leave the load factor at the default until you - start benchmarking. See :doc:`implementation details ` for - more information. - - :class:`SortedListWithKey` implements the MutableSequence Abstract Base Class type. - - .. _SortedListWithKey.__contains__: - .. method:: x in L - - Return True if and only if *x* is an element in the list. - - :rtype: :class:`bool` - - .. _SortedListWithKey.__delitem__: - .. method:: del L[i] - - Remove the element located at index *i* from the list. - - .. method:: del L[i:j] - - Remove the elements from *i* to *j* from the list. Also note that *step* - is supported in slice syntax. - - .. _SortedListWithKey.__eq__: - .. method:: L == L2, L != L2, L < L2, L <= L2, L > L2, L >= L2 - - Compare two lists. For full details see `Comparisons - `_ in - the Python language reference. - - :rtype: :class:`bool` - - .. _SortedListWithKey.__getitem__: - .. method:: L[i] - - Return the element at position *i*. - - :rtype: item - - .. method:: L[i:j] - - Return a new :class:`list` containing the elements from *i* to *j*. Also - note that *step* is supported in slice syntax. - - :rtype: :class:`list` - - .. method:: L *= k - - Increase the length of the list by a factor of *k*, by inserting - *k-1* additional shallow copies of each item in the list. - - .. _SortedListWithKey.__iter__: - .. method:: iter(L) - - Return an iterator over the Sequence. - - Iterating the Sequence while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. - - :rtype: iterator - - .. method:: len(L) - - Return the number of elements in the list. - - :rtype: :class:`int` - - .. _SortedListWithKey.__mul__: - .. method:: L * k or k * L - - Return a new sorted list containing *k* shallow copies of each - item in *L*. - - :rtype: :class:`SortedListWithKey` - - .. _SortedListWithKey.__imul__: - .. method:: L *= k - - Update *L* to include *k* shallow copies of each item in *L*. - - :rtype: :class:`SortedListWithKey` - - .. _SortedListWithKey.__add__: - .. method:: L + k - - Return a new sorted list containing all the elements in *L* and - *k*. Elements in *k* do not need to be properly ordered with respect to - *L*. - - :rtype: :class:`SortedListWithKey` - - .. _SortedListWithKey.__iadd__: - .. method:: L += k - - Update *L* to include all values in *k*. Elements in *k* do not - need to be properly ordered with respect to *L*. - - .. method:: reversed(L) - - Return an iterator to traverse the Sequence in reverse. - - Iterating the Sequence while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. - - :rtype: iterator - - .. method:: L.reverse() - - Raise NotImplementedError - - SortedList maintains values in ascending sort order. Values may not be - reversed in-place. - - Use ``reversed(sorted_list)`` for a reverse iterator over values in - descending sort order. - - Implemented to override MutableSequence.reverse which provides an - erroneous default implementation. - - .. _SortedListWithKey.__setitem__: - .. method:: L[i] = x - - Replace the item at position *i* of *L* with *x*. Supports slice - notation. Raises a :exc:`ValueError` if the sort order would be violated. - - .. method:: L[i:j] = iterable - - Replace the items at positions *i* through *j* with the contents of - *iterable*. Also note that *step* is supported in slice syntax. - - .. _SortedListWithKey.add: - .. method:: L.add(value) - - Add the element *value* to the list. - - .. _SortedListWithKey.bisect_left: - .. method:: L.bisect_left(value) - - Similar to the ``bisect`` module in the standard library, this - returns an appropriate index to insert *value* in *L*. If *value* is - already present in *L*, the insertion point will be before (to the - left of) any existing entries. - - :rtype: :class:`int` - - .. _SortedListWithKey.bisect: - .. method:: L.bisect(value) - - Same as :ref:`bisect_right `. - - :rtype: :class:`int` - - .. _SortedListWithKey.bisect_right: - .. method:: L.bisect_right(value) - - Same as :ref:`bisect_left `, but if - *value* is already present in *L*, the insertion point will be after - (to the right of) any existing entries. - - :rtype: :class:`int` - - .. _SortedListWithKey.bisect_key_left: - .. method:: L.bisect_key_left(key) - - Similar to the ``bisect`` module in the standard library, this returns an - appropriate index to insert a value with a given *key*. If values with - *key* are already present, the insertion point will be before (to the - left of) any existing entries. - - :rtype: :class:`int` - - .. method:: L.bisect_key(key) - - Same as :ref:`bisect_key_right `. - - :rtype: :class:`int` - - .. _SortedListWithKey.bisect_key_right: - .. method:: L.bisect_key_right(key) - - Same as :ref:`bisect_key_left `, but - if *key* is already present, the insertion point will be after (to the - right of) any existing entries. - - :rtype: :class:`int` - - .. _SortedListWithKey.count: - .. method:: L.count(value) - - Return the number of occurrences of *value* in the list. - - :rtype: :class:`int` - - .. _SortedListWithKey.copy: - .. method:: L.copy() - - Return a shallow copy of the sorted list with key. - - :rtype: :class:`SortedListWithKey` - - .. _SortedListWithKey.discard: - .. method:: L.discard(value) - - Remove the first occurrence of *value*. If *value* is not a - member, does nothing. - - .. _SortedListWithKey.index: - .. method:: L.index(value, [start, [stop]]) - - Return the smallest *k* such that :math:`L[k] == x` and - :math:`i <= k < j`. Raises ValueError if *value* is not - present. *stop* defaults to the end of the list. *start* - defaults to the beginning. Negative indexes are supported, as - for slice indices. - - :rtype: :class:`int` - - .. _SortedListWithKey.pop: - .. method:: L.pop([index]) - - Remove and return item at index (default last). Raises :exc:`IndexError` - if list is empty or index is out of range. Negative indexes are - supported, as for slice indices. - - :rtype: item - - .. _SortedListWithKey.remove: - .. method:: L.remove(value) - - Remove first occurrence of *value*. Raises :exc:`ValueError` if - *value* is not present. - - .. _SortedListWithKey.update: - .. method:: L.update(iterable) - - Grow the list by inserting all elements from the *iterable*. - - .. method:: L.clear() - - Remove all the elements from the list. - - .. _SortedListWithKey.append: - .. method:: L.append(value) - - Append the element *value* to the list. Raises a :exc:`ValueError` if the - *value* would violate the sort order. - - .. _SortedListWithKey.extend: - .. method:: L.extend(iterable) - - Extend the list by appending all elements from the *iterable*. Raises a - :exc:`ValueError` if the sort order would be violated. - - .. _SortedListWithKey.insert: - .. method:: L.insert(index, value) - - Insert the element *value* into the list at *index*. Raises a - :exc:`ValueError` if the *value* at *index* would violate the sort order. - - .. method:: L.islice(start=None, stop=None, reverse=False) - - Returns an iterator that slices `self` from `start` to `stop` index, - inclusive and exclusive respectively. - - When `reverse` is `True`, values are yielded from the iterator in - reverse order. - - Both `start` and `stop` default to `None` which is automatically - inclusive of the beginning and end. - - :rtype: iterator - - .. method:: L.irange(minimum=None, maximum=None, inclusive=(True, True), reverse=False) - - Create an iterator of values between `minimum` and `maximum`. - - `inclusive` is a pair of booleans that indicates whether the minimum - and maximum ought to be included in the range, respectively. The - default is (True, True) such that the range is inclusive of both - minimum and maximum. - - Both `minimum` and `maximum` default to `None` which is automatically - inclusive of the start and end of the list, respectively. - - When `reverse` is `True` the values are yielded from the iterator in - reverse order; `reverse` defaults to `False`. - - :rtype: iterator - - .. _SortedListWithKey.irange_key: - .. method:: L.irange_key(min_key=None, max_key=None, inclusive=(True, True), reverse=False) - - Create an iterator of values between `min_key` and `max_key`. - - `inclusive` is a pair of booleans that indicates whether the minimum - and maximum ought to be included in the range, respectively. The - default is (True, True) such that the range is inclusive of both - minimum and maximum. - - Both `min_key` and `max_key` default to `None` which is automatically - inclusive of the start and end of the list, respectively. - - When `reverse` is `True` the values are yielded from the iterator in - reverse order; `reverse` defaults to `False`. - - :rtype: iterator diff -Nru sortedcontainers-1.5.9/docs/sortedset.rst sortedcontainers-2.0.4/docs/sortedset.rst --- sortedcontainers-1.5.9/docs/sortedset.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/sortedset.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,329 +1,34 @@ -SortedSet -========= - -:doc:`SortedContainers` is an Apache2 licensed Python sorted collections -library, written in pure-Python, and fast as C-extensions. SortedSet API -documentation is detailed below. The :doc:`introduction` is the -best way to get started. - -.. currentmodule:: sortedcontainers - -.. class:: SortedSet(iterable=None, load=1000, _set=None): - - A :class:`SortedSet` provides the same methods as a :class:`set`. - Additionally, a :class:`SortedSet` maintains its items in sorted - order, allowing the :class:`SortedSet` to be indexed. - - An optional *iterable* provides an initial series of items to - populate the :class:`SortedSet`. - - An optional *key* argument defines a callable that, like the `key` argument - to Python's `sorted` function, extracts a comparison key from each set - item. If no function is specified, the default compares the set items - directly. - - An optional *load* specifies the load-factor of the set. The default load - factor of '1000' works well for sets from tens to tens of millions of - elements. Good practice is to use a value that is the square or cube root of - the set size. With billions of elements, the best load factor depends on - your usage. It's best to leave the load factor at the default until you - start benchmarking. See :doc:`implementation details ` for - more information. - - Unlike a :class:`set`, a :class:`SortedSet` requires items be hashable and - comparable. :class:`SortedSet` implements the MutableSet and Sequence - Abstract Base Class types. - - .. _SortedSet.__contains__: - .. method:: x in S - - Return True if and only if *x* is an element in the set. - - :rtype: :class:`bool` - - .. _SortedSet.__delitem__: - .. method:: del S[i] - - Remove the element located at index *i* from the set. - - .. method:: del S[i:j] - - Remove the elements from *i* to *j* from the set. - - .. method:: S < S2 - - Test whether the set is a proper subset of *S2*, that is, ``S <= S2 - and S != other``. - - :rtype: :class:`bool` - - .. method:: S > S2 - - Test whether the set is a proper superset of *S2*, that is, ``S - >= S2 and S != S2``. - - :rtype: :class:`bool` - - .. _SortedSet.__getitem__: - .. method:: S[i] - - Return the element at position *i*. - - :rtype: item - - .. _SortedSet.__setitem__: - .. method:: S[i] = v - - Remove the element located at index *i* from the set and insert element - *v*. Supports slice notation. Raises a :exc:`ValueError` if the sort order - would be violated. - - .. method:: S[i:j] - - Return a new SortedSet containing the elements from *i* to *j*. - - :rtype: :class:`SortedSet` - - .. _SortedSet.__iter__: - .. method:: iter(S) - - Return an iterator over the Set. Elements are iterated in their sorted - order. - - Iterating the Set while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. - - :rtype: iterator - - .. method:: len(S) - - Return the number of elements in the set. - - :rtype: :class:`int` - - .. method:: reversed(S) - - Return an iterator over the Set. Elements are iterated in their reverse - sorted order. - - Iterating the Set while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. - - :rtype: iterator - - .. _SortedSet.add: - .. method:: S.add(value) - - Add the element *value* to the set. - - .. _sortedlist.bisect_left: - .. method:: L.bisect_left(value) - - Similar to the ``bisect`` module in the standard library, this - returns an appropriate index to insert *value* in *L*. If *value* is - already present in *L*, the insertion point will be before (to the - left of) any existing entries. - - :rtype: :class:`int` - - .. method:: L.bisect(value) - - Same as :ref:`bisect_right `. - - :rtype: :class:`int` - - .. method:: L.bisect_right(value) - - Same as :ref:`bisect_left `, but if - *value* is already present in *L*, the insertion point will be after - (to the right of) any existing entries. - - :rtype: :class:`int` - - .. _SortedSet.bisect_key_left: - .. method:: d.bisect_key_left(key) - - Similar to the ``bisect`` module in the standard library, this returns an - appropriate index to insert a value with a given *key*. If values with - *key* are already present, the insertion point will be before (to the - left of) any existing entries. This method is present only if the sorted - set was constructed with a key function. - - :rtype: :class:`int` - - .. method:: d.bisect_key(key) - - Same as :ref:`bisect_key_right `. - - :rtype: :class:`int` - - .. _SortedSet.bisect_key_right: - .. method:: d.bisect_key_right(key) +.. automodule:: sortedcontainers.sortedset - Same as :ref:`bisect_key_left `, but - if *key* is already present, the insertion point will be after (to the - right of) any existing entries. - :rtype: :class:`int` - - .. method:: S.clear() - - Remove all elements from the set. - - .. method:: S.copy() - - Create a shallow copy of the set. - - :rtype: :class:`SortedSet` - - .. method:: S.count(value) - - Return the number of occurrences of *value* in the set. - - :rtype: :class:`int` - - .. _SortedSet.difference: - .. method:: S.difference(S2, ...) - S - S2 - ... - - Return a new set with elements in the set that are not in the others. - - :rtype: :class:`SortedSet` - - .. _SortedSet.difference_update: - .. method:: S.difference_update(S2, ...) - S -= S2 | ... - - Update the set, removing elements found in keeping only elements - found in any of the others. - - .. _SortedSet.discard: - .. method:: S.discard(value) - - Remove the first occurrence of *value*. If *value* is not a - member, does nothing. - - .. method:: S.index(value, [start, [stop]]) - - Return the smallest *k* such that :math:`S[k] == x` and - :math:`i <= k < j`. Raises ValueError if *value* is not - present. *stop* defaults to the end of the set. *start* - defaults to the beginning. Negative indexes are supported, as - for slice indices. - - :rtype: :class:`int` - - .. _SortedSet.intersection: - .. method:: S.intersection(S2, ...) - S & S2 & ... - - Return a new set with elements common to the set and all others. - - :rtype: :class:`SortedSet` - - .. _SortedSet.intersection_update: - .. method:: S.intersection_update(S2, ...) - S &= S2 & ... - - Update the set, keeping only elements found in it and all - others. - - .. method:: S.isdisjoint(S2) - - Return True if the set has no elements in common with *S2*. - Sets are disjoint if and only if their intersection is the empty - set. - - :rtype: :class:`bool` - - .. method:: S.issubset(S2) - S <= S2 - - Test whether every element in the set is in *S2* - - :rtype: :class:`bool` - - .. method:: S.issuperset(S2) - S >= S2 - - Test whether every element in *S2* is in the set. - - :rtype: :class:`bool` - - .. _SortedSet.symmetric_difference: - .. method:: S.symmetric_difference(S2) - S ^ S2 - - Return a new set with elements in either set but not both. - - :rtype: :class:`SortedSet` - - .. _SortedSet.symmetric_difference_update: - .. method:: S.symmetric_difference_update(S2) - S ^= S2 - - Update the set, keeping only elements found in either set, but - not in both. - - .. _SortedSet.pop: - .. method:: S.pop([index]) - - Remove and return item at index (default last). Raises - IndexError if set is empty or index is out of range. Negative - indexes are supported, as for slice indices. - - :rtype: item - - .. _SortedSet.remove: - .. method:: S.remove(value) - - Remove first occurrence of *value*. Raises ValueError if - *value* is not present. - - .. _SortedSet.union: - .. method:: S.union(S2, ...) - S | S2 | ... - - Return a new SortedSet with elements from the set and all - others. - - :rtype: :class:`SortedSet` - - .. _SortedSet.update: - .. method:: S.update(S2, ...) - S |= S2 | ... - - Update the set, adding elements from all others. - - .. method:: S.islice(start=None, stop=None, reverse=False) - - Returns an iterator that slices `self` from `start` to `stop` index, - inclusive and exclusive respectively. - - When `reverse` is `True`, values are yielded from the iterator in - reverse order. - - Both `start` and `stop` default to `None` which is automatically - inclusive of the beginning and end. - - :rtype: iterator - - .. method:: S.irange(minimum=None, maximum=None, inclusive=(True, True), reverse=False) - - Create an iterator of values between `minimum` and `maximum`. - - `inclusive` is a pair of booleans that indicates whether the minimum - and maximum ought to be included in the range, respectively. The - default is (True, True) such that the range is inclusive of both - minimum and maximum. - - Both `minimum` and `maximum` default to `None` which is automatically - inclusive of the start and end of the list, respectively. - - When `reverse` is `True` the values are yielded from the iterator in - reverse order; `reverse` defaults to `False`. +SortedSet +......... - When initialized with a key-function, an `irange_key` method is also - provided with :ref:`similar semantics`. +.. autoclass:: sortedcontainers.SortedSet + :show-inheritance: - :rtype: iterator + .. automethod:: __init__ + .. autoattribute:: key + .. automethod:: __contains__ + .. automethod:: __iter__ + .. automethod:: __len__ + .. automethod:: add + .. automethod:: discard + .. automethod:: __getitem__ + .. automethod:: __delitem__ + .. automethod:: __reversed__ + .. automethod:: clear + .. automethod:: pop + .. automethod:: remove + .. automethod:: difference + .. automethod:: difference_update + .. automethod:: intersection + .. automethod:: intersection_update + .. automethod:: symmetric_difference + .. automethod:: symmetric_difference_update + .. automethod:: union + .. automethod:: update + .. automethod:: copy + .. automethod:: count + .. automethod:: __repr__ + .. automethod:: _check Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict-contains.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict-contains.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict-delitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict-delitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict-getitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict-getitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict-init.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict-init.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict-iter.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict-iter.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_load-contains.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_load-contains.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_load-delitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_load-delitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_load-getitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_load-getitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_load-init.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_load-init.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_load-iter.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_load-iter.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_load-setitem_existing.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_load-setitem_existing.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_load-setitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_load-setitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_runtime-contains.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_runtime-contains.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_runtime-delitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_runtime-delitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_runtime-getitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_runtime-getitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_runtime-init.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_runtime-init.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_runtime-iter.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_runtime-iter.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_runtime-setitem_existing.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_runtime-setitem_existing.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict_runtime-setitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict_runtime-setitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict-setitem_existing.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict-setitem_existing.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedDict-setitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedDict-setitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-add.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-add.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-bisect.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-bisect.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-contains.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-contains.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-count.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-count.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-delitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-delitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-getitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-getitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-index.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-index.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-init.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-init.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-intervals.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-intervals.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-iter.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-iter.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-add.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-add.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-bisect.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-bisect.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-contains.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-contains.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-count.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-count.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-delitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-delitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-getitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-getitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-index.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-index.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-init.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-init.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-intervals.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-intervals.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-iter.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-iter.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-multiset.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-multiset.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-neighbor.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-neighbor.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-pop.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-pop.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-priorityqueue.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-priorityqueue.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-ranking.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-ranking.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-remove.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-remove.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_load-update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_load-update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-multiset.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-multiset.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-neighbor.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-neighbor.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-pop.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-pop.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-priorityqueue.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-priorityqueue.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-ranking.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-ranking.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-remove.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-remove.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-add.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-add.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-bisect.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-bisect.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-contains.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-contains.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-count.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-count.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-delitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-delitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-getitem.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-getitem.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-index.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-index.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-init.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-init.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-intervals.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-intervals.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-iter.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-iter.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-multiset.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-multiset.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-neighbor.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-neighbor.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-pop.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-pop.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-priorityqueue.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-priorityqueue.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-ranking.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-ranking.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-remove.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-remove.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList_runtime-update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList_runtime-update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedList-update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedList-update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-add.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-add.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-contains.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-contains.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-difference_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-difference_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-difference_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-difference_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-difference_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-difference_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-difference_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-difference_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-difference_update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-difference_update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-difference_update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-difference_update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-difference_update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-difference_update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-difference_update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-difference_update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-init.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-init.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-intersection_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-intersection_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-intersection_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-intersection_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-intersection_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-intersection_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-intersection_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-intersection_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-intersection_update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-intersection_update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-intersection_update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-intersection_update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-intersection_update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-intersection_update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-intersection_update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-intersection_update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-iter.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-iter.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-add.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-add.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-contains.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-contains.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-difference_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-difference_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-difference_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-difference_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-difference_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-difference_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-difference_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-difference_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-difference_update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-difference_update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-difference_update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-difference_update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-difference_update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-difference_update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-difference_update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-difference_update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-init.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-init.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-intersection_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-intersection_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-intersection_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-intersection_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-intersection_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-intersection_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-intersection_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-intersection_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-intersection_update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-intersection_update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-intersection_update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-intersection_update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-intersection_update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-intersection_update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-intersection_update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-intersection_update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-iter.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-iter.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-pop.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-pop.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-remove.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-remove.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-symmetric_difference_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-symmetric_difference_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-symmetric_difference_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-symmetric_difference_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-symmetric_difference_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-symmetric_difference_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-symmetric_difference_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-symmetric_difference_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-symmetric_difference_update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-symmetric_difference_update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-symmetric_difference_update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-symmetric_difference_update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-symmetric_difference_update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-symmetric_difference_update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-symmetric_difference_update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-symmetric_difference_update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-union_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-union_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-union_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-union_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-union_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-union_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-union_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-union_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_load-update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_load-update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-pop.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-pop.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-remove.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-remove.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-add.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-add.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-contains.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-contains.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-difference_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-difference_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-difference_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-difference_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-difference_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-difference_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-difference_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-difference_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-difference_update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-difference_update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-difference_update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-difference_update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-difference_update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-difference_update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-difference_update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-difference_update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-init.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-init.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-intersection_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-intersection_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-intersection_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-intersection_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-intersection_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-intersection_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-intersection_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-intersection_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-intersection_update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-intersection_update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-intersection_update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-intersection_update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-intersection_update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-intersection_update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-intersection_update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-intersection_update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-iter.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-iter.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-pop.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-pop.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-remove.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-remove.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-symmetric_difference_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-symmetric_difference_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-symmetric_difference_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-symmetric_difference_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-symmetric_difference_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-symmetric_difference_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-symmetric_difference_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-symmetric_difference_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-symmetric_difference_update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-symmetric_difference_update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-symmetric_difference_update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-symmetric_difference_update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-symmetric_difference_update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-symmetric_difference_update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-symmetric_difference_update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-symmetric_difference_update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-union_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-union_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-union_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-union_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-union_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-union_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-union_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-union_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet_runtime-update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet_runtime-update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-symmetric_difference_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-symmetric_difference_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-symmetric_difference_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-symmetric_difference_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-symmetric_difference_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-symmetric_difference_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-symmetric_difference_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-symmetric_difference_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-symmetric_difference_update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-symmetric_difference_update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-symmetric_difference_update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-symmetric_difference_update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-symmetric_difference_update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-symmetric_difference_update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-symmetric_difference_update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-symmetric_difference_update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-union_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-union_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-union_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-union_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-union_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-union_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-union_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-union_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-update_large.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-update_large.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-update_medium.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-update_medium.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-update_small.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-update_small.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/SortedSet-update_tiny.png and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/SortedSet-update_tiny.png differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/sublist-lengths-add.mp4 and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/sublist-lengths-add.mp4 differ Binary files /tmp/tmpyQvnCE/z4fkdmEZtu/sortedcontainers-1.5.9/docs/_static/sublist-lengths-delitem.mp4 and /tmp/tmpyQvnCE/FYbTC9PaNo/sortedcontainers-2.0.4/docs/_static/sublist-lengths-delitem.mp4 differ diff -Nru sortedcontainers-1.5.9/docs/_templates/gumroad.html sortedcontainers-2.0.4/docs/_templates/gumroad.html --- sortedcontainers-1.5.9/docs/_templates/gumroad.html 1970-01-01 00:00:00.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_templates/gumroad.html 2018-06-07 05:34:49.000000000 +0000 @@ -0,0 +1,10 @@ +

Give Support

+

+ If you or your organization uses Python Sorted Containers, consider financial + support: +

+

+ + Give to Python Sorted Containers + +

diff -Nru sortedcontainers-1.5.9/docs/_templates/sidebarintro.html sortedcontainers-2.0.4/docs/_templates/sidebarintro.html --- sortedcontainers-1.5.9/docs/_templates/sidebarintro.html 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_templates/sidebarintro.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ - - -

- -

- -

- SortedContainers provides sorted container types, written in - pure-Python and fast as C-extensions. -

- -

Give Support

-

If you or your organization uses SortedContainers, consider financial support:

-

- Give to Sorted Containers -

- -

Useful Links

- diff -Nru sortedcontainers-1.5.9/docs/_templates/sidebarlogo.html sortedcontainers-2.0.4/docs/_templates/sidebarlogo.html --- sortedcontainers-1.5.9/docs/_templates/sidebarlogo.html 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_templates/sidebarlogo.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ - - -

- -

- -

- SortedContainers provides sorted container types, written in - pure-Python and fast as C-extensions. -

- -

Give Support

-

If you or your organization uses SortedContainers, consider financial support:

-

- Give to Sorted Containers -

diff -Nru sortedcontainers-1.5.9/docs/_themes/.gitignore sortedcontainers-2.0.4/docs/_themes/.gitignore --- sortedcontainers-1.5.9/docs/_themes/.gitignore 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/.gitignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -*.pyc -*.pyo -.DS_Store diff -Nru sortedcontainers-1.5.9/docs/_themes/gj/layout.html sortedcontainers-2.0.4/docs/_themes/gj/layout.html --- sortedcontainers-1.5.9/docs/_themes/gj/layout.html 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/gj/layout.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -{%- extends "basic/layout.html" %} -{%- block extrahead %} - {{ super() }} - {% if theme_touch_icon %} - - {% endif %} - -{% endblock %} -{%- block relbar2 %}{% endblock %} -{% block header %} - {{ super() }} - {% if pagename == 'index' %} -
- {% endif %} -{% endblock %} -{%- block footer %} - - - {% if pagename == 'index' %} -
- {% endif %} -{%- endblock %} diff -Nru sortedcontainers-1.5.9/docs/_themes/gj/relations.html sortedcontainers-2.0.4/docs/_themes/gj/relations.html --- sortedcontainers-1.5.9/docs/_themes/gj/relations.html 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/gj/relations.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -

Related Topics

- diff -Nru sortedcontainers-1.5.9/docs/_themes/gj/static/gjy.css_t sortedcontainers-2.0.4/docs/_themes/gj/static/gjy.css_t --- sortedcontainers-1.5.9/docs/_themes/gj/static/gjy.css_t 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/gj/static/gjy.css_t 1970-01-01 00:00:00.000000000 +0000 @@ -1,577 +0,0 @@ -/* - * gjy.css_t - * ~~~~~~~~~~~~ - * - * :copyright: Copyright 2014 by Grant Jenks. - * :license: GJ Design License, see LICENSE for details. - */ - -{% set page_width = '940px' %} -{% set sidebar_width = '220px' %} - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Georgia', serif; - font-size: 17px; - background-color: white; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - width: {{ page_width }}; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 {{ sidebar_width }}; -} - -div.sphinxsidebar { - width: {{ sidebar_width }}; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #ffffff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -img.floatinggj { - padding: 0 0 10px 10px; - float: right; -} - -div.footer { - width: {{ page_width }}; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -div.related { - display: none; -} - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebar { - font-size: 14px; - line-height: 1.5; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0 0 20px 0; - margin: 0; - text-align: center; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, serif; - color: #444; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar input { - border: 1px solid #ccc; - font-family: 'Georgia', serif; - font-size: 1em; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -{% if theme_index_logo %} -div.indexwrapper h1 { - text-indent: -999999px; - background: url({{ theme_index_logo }}) no-repeat center center; - height: {{ theme_index_logo_height }}; -} -{% endif %} -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #ddd; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #eaeaea; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - background: #fafafa; - margin: 20px -30px; - padding: 10px 30px; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - -div.admonition tt.xref, div.admonition a tt { - border-bottom: 1px solid #fafafa; -} - -dd div.admonition { - margin-left: -60px; - padding-left: 60px; -} - -div.admonition p.admonition-title { - font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: white; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt { - font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.9em; -} - -img.screenshot { -} - -tt.descname, tt.descclassname { - font-size: 0.95em; -} - -tt.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #eee; - background: #fdfdfd; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.footnote td.label { - width: 0px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #eee; - padding: 7px 30px; - margin: 15px -30px; - line-height: 1.3em; -} - -dl pre, blockquote pre, li pre { - margin-left: -60px; - padding-left: 60px; -} - -dl dl pre { - margin-left: -90px; - padding-left: 90px; -} - -tt { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid white; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt { - background: #EEE; -} - - -@media screen and (max-width: 870px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - - - -} - - - -@media screen and (max-width: 875px) { - - body { - margin: 0; - padding: 20px 30px; - } - - div.documentwrapper { - float: none; - background: white; - } - - div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: white; - } - - div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, - div.sphinxsidebar h3 a { - color: white; - } - - div.sphinxsidebar a { - color: #aaa; - } - - div.sphinxsidebar p.logo { - display: none; - } - - div.document { - width: 100%; - margin: 0; - } - - div.related { - display: block; - margin: 0; - padding: 10px 0 20px 0; - } - - div.related ul, - div.related ul li { - margin: 0; - padding: 0; - } - - div.footer { - display: none; - } - - div.bodywrapper { - margin: 0; - } - - div.body { - min-height: 0; - padding: 0; - } - - .rtd_doc_footer { - display: none; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .footer { - width: auto; - } - - .github { - display: none; - } -} - - -/* scrollbars */ - -::-webkit-scrollbar { - width: 6px; - height: 6px; -} - -::-webkit-scrollbar-button:start:decrement, -::-webkit-scrollbar-button:end:increment { - display: block; - height: 10px; -} - -::-webkit-scrollbar-button:vertical:increment { - background-color: #fff; -} - -::-webkit-scrollbar-track-piece { - background-color: #eee; - -webkit-border-radius: 3px; -} - -::-webkit-scrollbar-thumb:vertical { - height: 50px; - background-color: #ccc; - -webkit-border-radius: 3px; -} - -::-webkit-scrollbar-thumb:horizontal { - width: 50px; - background-color: #ccc; - -webkit-border-radius: 3px; -} - -/* misc. */ - -.revsys-inline { - display: none!important; -} \ No newline at end of file diff -Nru sortedcontainers-1.5.9/docs/_themes/gj/theme.conf sortedcontainers-2.0.4/docs/_themes/gj/theme.conf --- sortedcontainers-1.5.9/docs/_themes/gj/theme.conf 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/gj/theme.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -[theme] -inherit = basic -stylesheet = gjy.css -pygments_style = gj_theme_support.GjyStyle - -[options] -index_logo = -index_logo_height = 120px -touch_icon = diff -Nru sortedcontainers-1.5.9/docs/_themes/gj_small/layout.html sortedcontainers-2.0.4/docs/_themes/gj_small/layout.html --- sortedcontainers-1.5.9/docs/_themes/gj_small/layout.html 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/gj_small/layout.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -{% extends "basic/layout.html" %} -{% block header %} - {{ super() }} - {% if pagename == 'index' %} -
- {% endif %} -{% endblock %} -{% block footer %} - {% if pagename == 'index' %} -
- {% endif %} -{% endblock %} -{# do not display relbars #} -{% block relbar1 %}{% endblock %} -{% block relbar2 %} - {% if theme_github_fork %} - Fork me on GitHub - {% endif %} -{% endblock %} -{% block sidebar1 %}{% endblock %} -{% block sidebar2 %}{% endblock %} diff -Nru sortedcontainers-1.5.9/docs/_themes/gj_small/static/gjy.css_t sortedcontainers-2.0.4/docs/_themes/gj_small/static/gjy.css_t --- sortedcontainers-1.5.9/docs/_themes/gj_small/static/gjy.css_t 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/gj_small/static/gjy.css_t 1970-01-01 00:00:00.000000000 +0000 @@ -1,287 +0,0 @@ -/* - * gjy.css_t - * ~~~~~~~~~~~~ - * - * Sphinx stylesheet -- gjy theme based on nature theme. - * - * :copyright: Copyright 2014 by Grant Jenks. - * :license: GJ Design License, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Georgia', serif; - font-size: 17px; - color: #000; - background: white; - margin: 0; - padding: 0; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 40px auto 0 auto; - width: 700px; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #ffffff; - color: #3E4349; - padding: 0 30px 30px 30px; -} - -img.floatinggj { - padding: 0 0 10px 10px; - float: right; -} - -div.footer { - text-align: right; - color: #888; - padding: 10px; - font-size: 14px; - width: 650px; - margin: 0 auto 40px auto; -} - -div.footer a { - color: #888; - text-decoration: underline; -} - -div.related { - line-height: 32px; - color: #888; -} - -div.related ul { - padding: 0 0 0 10px; -} - -div.related a { - color: #444; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body { - padding-bottom: 40px; /* saved for footer */ -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -{% if theme_index_logo %} -div.indexwrapper h1 { - text-indent: -999999px; - background: url({{ theme_index_logo }}) no-repeat center center; - height: {{ theme_index_logo_height }}; -} -{% endif %} - -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: white; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #eaeaea; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - background: #fafafa; - margin: 20px -30px; - padding: 10px 30px; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - -div.admonition p.admonition-title { - font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight{ - background-color: white; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt { - font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.85em; -} - -img.screenshot { -} - -tt.descname, tt.descclassname { - font-size: 0.95em; -} - -tt.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #eee; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.footnote td { - padding: 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -pre { - padding: 0; - margin: 15px -30px; - padding: 8px; - line-height: 1.3em; - padding: 7px 30px; - background: #eee; - border-radius: 2px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; -} - -dl pre { - margin-left: -60px; - padding-left: 60px; -} - -tt { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, a tt { - background-color: #FBFBFB; -} - -a:hover tt { - background: #EEE; -} diff -Nru sortedcontainers-1.5.9/docs/_themes/gj_small/theme.conf sortedcontainers-2.0.4/docs/_themes/gj_small/theme.conf --- sortedcontainers-1.5.9/docs/_themes/gj_small/theme.conf 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/gj_small/theme.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -[theme] -inherit = basic -stylesheet = gjy.css -nosidebar = true -pygments_style = gj_theme_support.GjyStyle - -[options] -index_logo = '' -index_logo_height = 120px -github_fork = '' diff -Nru sortedcontainers-1.5.9/docs/_themes/gj_theme_support.py sortedcontainers-2.0.4/docs/_themes/gj_theme_support.py --- sortedcontainers-1.5.9/docs/_themes/gj_theme_support.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/gj_theme_support.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -# gjy extensions. gjy pygments style based on tango style -from pygments.style import Style -from pygments.token import Keyword, Name, Comment, String, Error, \ - Number, Operator, Generic, Whitespace, Punctuation, Other, Literal - - -class GjyStyle(Style): - background_color = "#f8f8f8" - default_style = "" - - styles = { - # No corresponding class for the following: - #Text: "", # class: '' - Whitespace: "underline #f8f8f8", # class: 'w' - Error: "#a40000 border:#ef2929", # class: 'err' - Other: "#000000", # class 'x' - - Comment: "italic #8f5902", # class: 'c' - Comment.Preproc: "noitalic", # class: 'cp' - - Keyword: "bold #004461", # class: 'k' - Keyword.Constant: "bold #004461", # class: 'kc' - Keyword.Declaration: "bold #004461", # class: 'kd' - Keyword.Namespace: "bold #004461", # class: 'kn' - Keyword.Pseudo: "bold #004461", # class: 'kp' - Keyword.Reserved: "bold #004461", # class: 'kr' - Keyword.Type: "bold #004461", # class: 'kt' - - Operator: "#582800", # class: 'o' - Operator.Word: "bold #004461", # class: 'ow' - like keywords - - Punctuation: "bold #000000", # class: 'p' - - # because special names such as Name.Class, Name.Function, etc. - # are not recognized as such later in the parsing, we choose them - # to look the same as ordinary variables. - Name: "#000000", # class: 'n' - Name.Attribute: "#c4a000", # class: 'na' - to be revised - Name.Builtin: "#004461", # class: 'nb' - Name.Builtin.Pseudo: "#3465a4", # class: 'bp' - Name.Class: "#000000", # class: 'nc' - to be revised - Name.Constant: "#000000", # class: 'no' - to be revised - Name.Decorator: "#888", # class: 'nd' - to be revised - Name.Entity: "#ce5c00", # class: 'ni' - Name.Exception: "bold #cc0000", # class: 'ne' - Name.Function: "#000000", # class: 'nf' - Name.Property: "#000000", # class: 'py' - Name.Label: "#f57900", # class: 'nl' - Name.Namespace: "#000000", # class: 'nn' - to be revised - Name.Other: "#000000", # class: 'nx' - Name.Tag: "bold #004461", # class: 'nt' - like a keyword - Name.Variable: "#000000", # class: 'nv' - to be revised - Name.Variable.Class: "#000000", # class: 'vc' - to be revised - Name.Variable.Global: "#000000", # class: 'vg' - to be revised - Name.Variable.Instance: "#000000", # class: 'vi' - to be revised - - Number: "#990000", # class: 'm' - - Literal: "#000000", # class: 'l' - Literal.Date: "#000000", # class: 'ld' - - String: "#4e9a06", # class: 's' - String.Backtick: "#4e9a06", # class: 'sb' - String.Char: "#4e9a06", # class: 'sc' - String.Doc: "italic #8f5902", # class: 'sd' - like a comment - String.Double: "#4e9a06", # class: 's2' - String.Escape: "#4e9a06", # class: 'se' - String.Heredoc: "#4e9a06", # class: 'sh' - String.Interpol: "#4e9a06", # class: 'si' - String.Other: "#4e9a06", # class: 'sx' - String.Regex: "#4e9a06", # class: 'sr' - String.Single: "#4e9a06", # class: 's1' - String.Symbol: "#4e9a06", # class: 'ss' - - Generic: "#000000", # class: 'g' - Generic.Deleted: "#a40000", # class: 'gd' - Generic.Emph: "italic #000000", # class: 'ge' - Generic.Error: "#ef2929", # class: 'gr' - Generic.Heading: "bold #000080", # class: 'gh' - Generic.Inserted: "#00A000", # class: 'gi' - Generic.Output: "#888", # class: 'go' - Generic.Prompt: "#745334", # class: 'gp' - Generic.Strong: "bold #000000", # class: 'gs' - Generic.Subheading: "bold #800080", # class: 'gu' - Generic.Traceback: "bold #a40000", # class: 'gt' - } diff -Nru sortedcontainers-1.5.9/docs/_themes/LICENSE sortedcontainers-2.0.4/docs/_themes/LICENSE --- sortedcontainers-1.5.9/docs/_themes/LICENSE 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/LICENSE 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -Modifications: - -Copyright (c) 2014 by Grant Jenks. - - -Original Project: - -Copyright (c) 2010 by Armin Ronacher. - - -Some rights reserved. - -Redistribution and use in source and binary forms of the theme, with or -without modification, are permitted provided that the following conditions -are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -We kindly ask you to only use these themes in an unmodified manner just -for Flask and Flask-related products, not for unrelated projects. If you -like the visual style and want to use it for your own projects, please -consider making some larger changes to the themes (such as changing -font faces, sizes, colors or margins). - -THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff -Nru sortedcontainers-1.5.9/docs/_themes/README sortedcontainers-2.0.4/docs/_themes/README --- sortedcontainers-1.5.9/docs/_themes/README 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/docs/_themes/README 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -GJ Sphinx Styles -=================== - -This repository contains sphinx styles for GrantJenks.com related -projects. To use this style in your Sphinx documentation, follow -this guide: - -1. put this folder as _themes into your docs folder. Alternatively - you can also use git submodules to check out the contents there. -2. add this to your conf.py: - - sys.path.append(os.path.abspath('_themes')) - html_theme_path = ['_themes'] - html_theme = 'gj' - -The following themes exist: - -- 'gj' - the standard gj documentation theme for large - projects -- 'gj_small' - small one-page theme. Intended to be used by - very small addon libraries for gj. - -The following options exist for the gj_small theme: - - [options] - index_logo = '' filename of a picture in _static - to be used as replacement for the - h1 in the index.rst file. - index_logo_height = 120px height of the index logo - github_fork = '' repository name on github for the - "fork me" badge diff -Nru sortedcontainers-1.5.9/.gitignore sortedcontainers-2.0.4/.gitignore --- sortedcontainers-1.5.9/.gitignore 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/.gitignore 2018-06-07 05:34:49.000000000 +0000 @@ -4,13 +4,16 @@ # virutalenv directories /env*/ -# coverage files +# test files/directories .coverage - -# setup sdist, test and upload directories +.pytest_cache/ /.tox/ + +# setup and upload directories /build/ /dist/ /sortedcontainers.egg-info/ +/docs/_build/ -.DS_Store \ No newline at end of file +# macOS metadata +.DS_Store diff -Nru sortedcontainers-1.5.9/HISTORY.rst sortedcontainers-2.0.4/HISTORY.rst --- sortedcontainers-1.5.9/HISTORY.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/HISTORY.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,6 +1,191 @@ Sorted Containers Release History ================================= +.. contents:: + :depth: 1 + :local: + +.. currentmodule:: sortedcontainers + +2.0.4 (2018-06-06) +------------------ + +**Bugfixes** + +* `SortedDict` methods `iterkeys`, `iteritems`, `itervalues`, `viewkeys`, + `viewitems`, and `viewvalues` are not implemented for Python 2. Attribute + lookup now raises :exc:`AttributeError`. + +2.0.3 (2018-05-31) +------------------ + +**API Changes** + +* Accessing `SortedDict.iloc` will emit `DeprecationWarning`. + +**Bugfixes** + +* `SortedSet.__rsub__` erroneously reversed its arguments. The method has been + removed in favor of the inherited `Set.__rsub__` which has a correct + implementation. +* :class:`SortedKeysView` and :class:`SortedValuesView` set-operations now + return :class:`SortedSet` objects to better match the semantics of version 1. + +**Miscellaneous** + +* The source distribution no longer contains the `docs` and `tests` + directories. If you need these, then please download an archive from + Github. Version control is tagged with the version released to PyPI. + +2.0.2 (2018-05-21) +------------------ + +**API Changes** + +* Add `SortedDict.iloc` for improved backwards compatibility with version 1. + +2.0.1 (2018-05-18) +------------------ + +**Miscellaneous** + +* Rename Github repo from `grantjenks/sorted_containers` to + `grantjenks/python-sortedcontainers`. +* Fix broken links in documentation. + +.. _v2: + +2.0.0 (2018-05-18) +------------------ + +Version 2 represents a significant update to the source base. The code has been +refactored and modernized to embrace Python 3 semantics while also using +`autodoc` in Sphinx for more maintainable documentation. The core design and +algorithms are all the same. Sorted Containers still supports and is tested on +Python 2 but primary development is now on Python 3.6. + +Version 2 is developed on the `master` branch in the source repository and +Version 1 of Sorted Containers will be maintained on branch `v1`. + +Version 3 of Sorted Containers will be released sometime after January 1, 2020 +and will drop support for Python 2. + +At a high-level, changes can be categorized in three ways: + +1. :class:`SortedList` methods `__setitem__`, `append`, `extend`, and `insert` + all now raise :exc:`NotImplementedError`. Use `add` or `update` + instead. Though it's possible to implement these methods, they were + confusing, inefficient and wrongly used by some users. Sorted list + implementations that need the functionality are encouraged to do so through + subclassing. Branch `v1` contains a reference implementation. +2. :class:`SortedDict` now uses Python 3 semantics for dict views. The + `iterkeys`, `iteritems`, `itervalues`, `viewkeys`, `viewitems`, and + `viewvalues` methods have all been removed. Use the `keys`, `items`, or + `values` methods which now return sorted dict views. :class:`SortedKeysView` + has also replaced `SortedDict.iloc` as a better interface for indexing. +3. Method parameter names have changed to be more consistent with Python's + built-in data types: `val` has changed to `value`, `idx` has changed to + `index`, and `that` has changed to `other`. + +**API Changes** + +* :class:`SortedListWithKey` is deprecated. Use :class:`SortedKeyList` instead. + The name `SortedListWithKey` remains as an alias for `SortedKeyList`. The + alias will be removed in Version 3. +* `sortedcontainers.sortedlist.LOAD` has moved to + `SortedList.DEFAULT_LOAD_FACTOR` so that derived classes can customize the + value. +* `SortedList._half` and `SortedList._dual` have been removed. Use + `SortedList._load` instead. +* :func:`SortedList.add` parameter `val` renamed to `value`. +* :func:`SortedList.__contains__` parameter `val` renamed to `value`. +* :func:`SortedList.discard` parameter `val` renamed to `value`. +* :func:`SortedList.remove` parameter `val` renamed to `value`. +* :func:`SortedList.__delitem__` parameter `idx` renamed to `index`. +* :func:`SortedList.__getitem__` parameter `idx` renamed to `index`. +* :func:`SortedList.__setitem__` now raises :exc:`NotImplementedError`. Use + :func:`SortedList.__delitem__` and :func:`SortedList.add` instead. +* :func:`SortedList.bisect_left` parameter `val` renamed to `value`. +* :func:`SortedList.bisect_right` parameter `val` renamed to `value`. +* :func:`SortedList.bisect` parameter `val` renamed to `value`. +* :func:`SortedList.count` parameter `val` renamed to `value`. +* :func:`SortedList.append` now raises :exc:`NotImplementedError`. Use + :func:`SortedList.add` instead. +* :func:`SortedList.extend` now raises :exc:`NotImplementedError`. Use + :func:`SortedList.update` instead. +* :func:`SortedList.insert` now raises :exc:`NotImplementedError`. Use + :func:`SortedList.add` instead. +* :func:`SortedList.pop` parameter `idx` renamed to `index`. +* :func:`SortedList.index` parameter `val` renamed to `value`. +* :func:`SortedList.__add__` parameter `that` renamed to `other`. +* :func:`SortedList.__iadd__` parameter `that` renamed to `other`. +* :func:`SortedList.__mul__` parameter `that` renamed to `num`. +* :func:`SortedList.__imul__` parameter `that` renamed to `num`. +* `SortedList._make_cmp` renamed to `SortedList.__make_cmp`. +* :func:`SortedKeyList.add` parameter `val` renamed to `value`. +* :func:`SortedKeyList.__contains__` parameter `val` renamed to `value`. +* :func:`SortedKeyList.discard` parameter `val` renamed to `value`. +* :func:`SortedKeyList.remove` parameter `val` renamed to `value`. +* :func:`SortedKeyList.bisect_left` parameter `val` renamed to `value`. +* :func:`SortedKeyList.bisect_right` parameter `val` renamed to `value`. +* :func:`SortedKeyList.bisect` parameter `val` renamed to `value`. +* :func:`SortedKeyList.count` parameter `val` renamed to `value`. +* :func:`SortedKeyList.append` now raises :exc:`NotImplementedError`. Use + :func:`SortedKeyList.add` instead. +* :func:`SortedKeyList.extend` now raises :exc:`NotImplementedError`. Use + :func:`SortedKeyList.update` instead. +* :func:`SortedKeyList.insert` now raises :exc:`NotImplementedError`. Use + :func:`SortedKeyList.add` instead. +* :func:`SortedKeyList.index` parameter `val` renamed to `value`. +* :func:`SortedKeyList.__add__` parameter `that` renamed to `other`. +* :func:`SortedKeyList.__radd__` added. +* :func:`SortedKeyList.__iadd__` parameter `that` renamed to `other`. +* :func:`SortedKeyList.__mul__` parameter `that` renamed to `num`. +* :func:`SortedKeyList.__rmul__` added. +* :func:`SortedKeyList.__imul__` parameter `that` renamed to `num`. +* Removed `SortedDict.iloc`. Use :func:`SortedDict.keys` and + :class:`SortedKeysView` instead. +* :func:`SortedDict.fromkeys` parameter `seq` renamed to `iterable`. +* :func:`SortedDict.keys` now returns :class:`SortedKeysView`. +* :func:`SortedDict.items` now returns :class:`SortedItemsView`. +* :func:`SortedDict.values` now returns :class:`SortedValuesView`. +* Removed `SortedDict.viewkeys`. Use :func:`SortedDict.keys` instead. +* Removed `SortedDict.viewitems`. Use :func:`SortedDict.items` instead. +* Removed `SortedDict.viewvalues`. Use :func:`SortedDict.values` instead. +* `SortedDict.iterkeys` removed. Use :func:`SortedDict.keys` instead. +* `SortedDict.iteritems` removed. Use :func:`SortedDict.items` instead. +* `SortedDict.itervalues` removed. Use :func:`SortedDict.values` instead. +* `SortedDict.popitem` now accepts an optional `index` argument. Default + ``-1``. +* `sorteddict.KeysView` renamed to :class:`SortedKeysView`. +* `sorteddict.ItemsView` renamed to :class:`SortedItemsView`. +* `sorteddict.ValuesView` renamed to :class:`SortedValuesView`. +* Sorted dict views rely on collections abstract base classes: dict views and + sequence. The :func:`SortedKeysView.__getitem__`, + :func:`SortedItemsView.__getitem__`, and :func:`SortedValuesView.__getitem__` + methods are implemented and optimized. All other mixin methods use the + default implementation provided by the base class. Prefer :class:`SortedDict` + methods to view methods when possible. +* `SortedSet._make_cmp` renamed to `SortedSet.__make_cmp`. +* :func:`SortedSet.symmetric_difference` parameter `that` renamed to `other`. +* :func:`SortedSet.symmetric_difference_update` parameter `that` renamed to + `other`. + +**Miscellaneous** + +* Sphinx `autodoc` now used for API documentation. +* All benchmarks now run on CPython 3.6 unless otherwise noted. +* Testing now uses `pytest` rather than `nose`. +* AppVeyor CI testing added. +* Updated versions of alternative implementations. + +1.5.10 (2018-04-21) +------------------- + +**Miscellaneous** + +* Improved performance of irange(...) and islice(...) methods. + 1.5.9 (2017-12-08) ------------------ diff -Nru sortedcontainers-1.5.9/LICENSE sortedcontainers-2.0.4/LICENSE --- sortedcontainers-1.5.9/LICENSE 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/LICENSE 2018-06-07 05:34:49.000000000 +0000 @@ -1,4 +1,4 @@ -Copyright 2014-2016 Grant Jenks +Copyright 2014-2018 Grant Jenks Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff -Nru sortedcontainers-1.5.9/.pylintrc sortedcontainers-2.0.4/.pylintrc --- sortedcontainers-1.5.9/.pylintrc 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/.pylintrc 2018-06-07 05:34:49.000000000 +0000 @@ -30,6 +30,10 @@ # Specify a configuration file. #rcfile= +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages +suggestion-mode=yes + # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. unsafe-load-any-extension=no @@ -50,13 +54,94 @@ # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use"--disable=all --enable=classes # --disable=W" -disable=print-statement,parameter-unpacking,unpacking-in-except,old-raise-syntax,backtick,long-suffix,old-ne-operator,old-octal-literal,import-star-module-level,raw-checker-failed,bad-inline-option,locally-disabled,locally-enabled,file-ignored,suppressed-message,useless-suppression,deprecated-pragma,apply-builtin,basestring-builtin,buffer-builtin,cmp-builtin,coerce-builtin,execfile-builtin,file-builtin,long-builtin,raw_input-builtin,reduce-builtin,standarderror-builtin,unicode-builtin,xrange-builtin,coerce-method,delslice-method,getslice-method,setslice-method,no-absolute-import,old-division,dict-iter-method,dict-view-method,next-method-called,metaclass-assignment,indexing-exception,raising-string,reload-builtin,oct-method,hex-method,nonzero-method,cmp-method,input-builtin,round-builtin,intern-builtin,unichr-builtin,map-builtin-not-iterating,zip-builtin-not-iterating,range-builtin-not-iterating,filter-builtin-not-iterating,using-cmp-argument,eq-without-hash,div-method,idiv-method,rdiv-method,exception-message-attribute,invalid-str-codec,sys-max-int,bad-python3-import,deprecated-string-function,deprecated-str-translate-call,super-init-not-called +disable=print-statement, + parameter-unpacking, + unpacking-in-except, + old-raise-syntax, + backtick, + long-suffix, + old-ne-operator, + old-octal-literal, + import-star-module-level, + non-ascii-bytes-literal, + raw-checker-failed, + bad-inline-option, + locally-disabled, + locally-enabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + apply-builtin, + basestring-builtin, + buffer-builtin, + cmp-builtin, + coerce-builtin, + execfile-builtin, + file-builtin, + long-builtin, + raw_input-builtin, + reduce-builtin, + standarderror-builtin, + unicode-builtin, + xrange-builtin, + coerce-method, + delslice-method, + getslice-method, + setslice-method, + no-absolute-import, + old-division, + dict-iter-method, + dict-view-method, + next-method-called, + metaclass-assignment, + indexing-exception, + raising-string, + reload-builtin, + oct-method, + hex-method, + nonzero-method, + cmp-method, + input-builtin, + round-builtin, + intern-builtin, + unichr-builtin, + map-builtin-not-iterating, + zip-builtin-not-iterating, + range-builtin-not-iterating, + filter-builtin-not-iterating, + using-cmp-argument, + eq-without-hash, + div-method, + idiv-method, + rdiv-method, + exception-message-attribute, + invalid-str-codec, + sys-max-int, + bad-python3-import, + deprecated-string-function, + deprecated-str-translate-call, + deprecated-itertools-function, + deprecated-types-field, + next-method-defined, + dict-items-not-iterating, + dict-keys-not-iterating, + dict-values-not-iterating, + inconsistent-return-statements, + no-name-in-module, + invalid-name, + abstract-method, + protected-access, + redefined-argument-from-local, + no-staticmethod-decorator, + super-init-not-called, + ungrouped-imports # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where # it should appear only once). See also the "--disable" option for examples. -enable= +enable=c-extension-no-member [REPORTS] @@ -89,129 +174,11 @@ # Maximum number of nested blocks for function / method body max-nested-blocks=5 - -[BASIC] - -# Naming hint for argument names -argument-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct argument names -argument-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Naming hint for attribute names -attr-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct attribute names -attr-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# Naming hint for class attribute names -class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ - -# Regular expression matching correct class attribute names -class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ - -# Naming hint for class names -class-name-hint=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression matching correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Naming hint for constant names -const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Regular expression matching correct constant names -const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming hint for function names -function-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct function names -function-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,ex,Run,_ - -# Include a hint for the correct naming format with invalid-name -include-naming-hint=no - -# Naming hint for inline iteration names -inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$ - -# Regular expression matching correct inline iteration names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Naming hint for method names -method-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct method names -method-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Naming hint for module names -module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression matching correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -property-classes=abc.abstractproperty - -# Naming hint for variable names -variable-name-hint=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - -# Regular expression matching correct variable names -variable-rgx=(([a-z][a-z0-9_]{2,30})|(_[a-z0-9_]*))$ - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module -max-module-lines=3000 - -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check=trailing-comma,dict-separator - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=optparse.Values,sys.exit [LOGGING] @@ -221,29 +188,11 @@ logging-modules=logging -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - [SPELLING] +# Limits count of emitted suggestions for spelling mistakes +max-spelling-suggestions=4 + # Spelling dictionary name. Available dictionaries: none. To make it working # install python-enchant package. spelling-dict= @@ -259,6 +208,14 @@ spelling-store-unknown-words=no +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + + [TYPECHECK] # List of decorators that produce context managers, such as @@ -269,7 +226,10 @@ # List of members which are set dynamically and missed by pylint inference # system, and so shouldn't trigger E1101 when accessed. Python regular # expressions are accepted. -generated-members= +generated-members=bisect_key_left, + bisect_key_right, + bisect_key, + irange_key # Tells whether missing members accessed in mixin class should be ignored. A # mixin class is detected if its name ends with "mixin" (case insensitive). @@ -318,7 +278,8 @@ # List of strings which can identify a callback function by name. A callback # name must start or end with one of those strings. -callbacks=cb_,_cb +callbacks=cb_, + _cb # A regular expression matching the name of dummy variables (i.e. expectedly # not used). @@ -333,56 +294,166 @@ # List of qualified module names which can have objects that can redefine # builtins. -redefining-builtins-modules=six.moves,future.builtins +redefining-builtins-modules=six.moves,past.builtins,future.builtins -[CLASSES] +[FORMAT] -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict,_fields,_replace,_source,_make +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=mcs +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' +# Maximum number of characters on a single line. +max-line-length=80 -[DESIGN] +# Maximum number of lines in a module +max-module-lines=1000 -# Maximum number of arguments for function / method -max-args=6 +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma, + dict-separator -# Maximum number of attributes for a class (see R0902). -max-attributes=30 +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no -# Maximum number of boolean expressions in a if statement -max-bool-expr=5 +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no -# Maximum number of branch for function / method body -max-branches=25 -# Maximum number of locals for function / method body -max-locals=30 +[SIMILARITIES] -# Maximum number of parents for a class (see R0901). -max-parents=7 +# Ignore comments when computing similarities. +ignore-comments=yes -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 +# Ignore docstrings when computing similarities. +ignore-docstrings=yes -# Maximum number of return / yield for function / method body -max-returns=10 +# Ignore imports when computing similarities. +ignore-imports=no -# Maximum number of statements in function / method body -max-statements=70 +# Minimum lines number of a similarity. +min-similarity-lines=6 -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 + +[BASIC] + +# Naming style matching correct argument names +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style +#argument-rgx= + +# Naming style matching correct attribute names +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Naming style matching correct class attribute names +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style +#class-attribute-rgx= + +# Naming style matching correct class names +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming-style +#class-rgx= + +# Naming style matching correct constant names +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma +good-names=i, + j, + k, + ex, + Run, + _ + +# Include a hint for the correct naming format with invalid-name +include-naming-hint=no + +# Naming style matching correct inline iteration names +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style +#inlinevar-rgx= + +# Naming style matching correct method names +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style +#method-rgx= + +# Naming style matching correct module names +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +property-classes=abc.abstractproperty + +# Naming style matching correct variable names +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style +#variable-rgx= [IMPORTS] @@ -396,7 +467,7 @@ analyse-fallback-blocks=no # Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,TERMIOS,Bastion,rexec +deprecated-modules=optparse,tkinter.tix # Create a graph of external dependencies in the given file (report RP0402 must # not be disabled) @@ -418,6 +489,61 @@ known-third-party=enchant +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# Maximum number of arguments for function / method +max-args=6 + +# Maximum number of attributes for a class (see R0902). +max-attributes=30 + +# Maximum number of boolean expressions in a if statement +max-bool-expr=5 + +# Maximum number of branch for function / method body +max-branches=25 + +# Maximum number of locals for function / method body +max-locals=30 + +# Maximum number of parents for a class (see R0901). +max-parents=10 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body +max-returns=10 + +# Maximum number of statements in function / method body +max-statements=70 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + [EXCEPTIONS] # Exceptions that will emit a warning when being caught. Defaults to diff -Nru sortedcontainers-1.5.9/README.rst sortedcontainers-2.0.4/README.rst --- sortedcontainers-1.5.9/README.rst 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/README.rst 2018-06-07 05:34:49.000000000 +0000 @@ -1,78 +1,80 @@ -Python SortedContainers -======================= +Python Sorted Containers +======================== -.. image:: https://api.travis-ci.org/grantjenks/sorted_containers.svg - :target: http://www.grantjenks.com/docs/sortedcontainers/ - -`SortedContainers`_ is an Apache2 licensed `sorted collections library`_, +`Sorted Containers`_ is an Apache2 licensed `sorted collections library`_, written in pure-Python, and fast as C-extensions. Python's standard library is great until you need a sorted collections type. Many will attest that you can get really far without one, but the moment -you **really need** a sorted list, dict, or set, you're faced with a dozen -different implementations, most using C-extensions without great documentation -and benchmarking. +you **really need** a sorted list, sorted dict, or sorted set, you're faced +with a dozen different implementations, most using C-extensions without great +documentation and benchmarking. In Python, we can do better. And we can do it in pure-Python! .. code-block:: python - >>> sl = sortedcontainers.SortedList(xrange(10000000)) - >>> 1234567 in sl - True - >>> sl[7654321] - 7654321 - >>> sl.add(1234567) - >>> sl.count(1234567) + >>> from sortedcontainers import SortedList + >>> sl = SortedList(['e', 'a', 'c', 'd', 'b']) + >>> sl + SortedList(['a', 'b', 'c', 'd', 'e']) + >>> sl *= 10_000_000 + >>> sl.count('c') + 10000000 + >>> sl[-3:] + ['e', 'e', 'e'] + >>> from sortedcontainers import SortedDict + >>> sd = SortedDict({'c': 3, 'a': 1, 'b': 2}) + >>> sd + SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> sd.popitem(index=-1) + ('c', 3) + >>> from sortedcontainers import SortedSet + >>> ss = SortedSet('abracadabra') + >>> ss + SortedSet(['a', 'b', 'c', 'd', 'r']) + >>> ss.bisect_left('c') 2 - >>> sl *= 3 - >>> len(sl) - 30000003 - -**Note:** don't try this without at least a half gigabyte of memory. In Python -an integer requires about 24 bytes. SortedList will add about 8 bytes per -object stored in the container. That's pretty hard to beat as it's the cost of -a pointer to each object. It's also 66% less overhead than a typical binary -tree implementation (e.g. red-black tree, avl tree, aa tree, splay tree, treap, -etc.) for which every node must also store two pointers to children nodes. -`SortedContainers`_ takes all of the work out of Python sorted collections - +All of the operations shown above run in faster than linear time. The above +demo also takes nearly a gigabyte of memory to run. When the sorted list is +multiplied by ten million, it stores ten million references to each of "a" +through "e". Each reference requires eight bytes in the sorted +container. That's pretty hard to beat as it's the cost of a pointer to each +object. It's also 66% less overhead than a typical binary tree implementation +(e.g. Red-Black Tree, AVL-Tree, AA-Tree, Splay-Tree, Treap, etc.) for which +every node must also store two pointers to children nodes. + +`Sorted Containers`_ takes all of the work out of Python sorted collections - making your deployment and use of Python easy. There's no need to install a C compiler or pre-build and distribute custom extensions. Performance is a feature and testing has 100% coverage with unit tests and hours of stress. -.. _`SortedContainers`: http://www.grantjenks.com/docs/sortedcontainers/ +.. _`Sorted Containers`: http://www.grantjenks.com/docs/sortedcontainers/ .. _`sorted collections library`: http://www.grantjenks.com/docs/sortedcontainers/ Testimonials ------------ -**Alex Martelli**, `Wikipedia`_ +**Alex Martelli**, `Fellow of the Python Software Foundation`_ -Good stuff! ... I like the `simple, effective implementation`_ idea of splitting -the sorted containers into smaller "fragments" to avoid the O(N) insertion costs. - -.. _`Wikipedia`: http://en.wikipedia.org/wiki/Alex_Martelli -.. _`simple, effective implementation`: http://www.grantjenks.com/docs/sortedcontainers/implementation.html +"Good stuff! ... I like the `simple, effective implementation`_ idea of +splitting the sorted containers into smaller "fragments" to avoid the O(N) +insertion costs." -**Jeff Knupp**, `Review of SortedContainers`_ +**Jeff Knupp**, `author of Writing Idiomatic Python and Python Trainer`_ -That last part, "fast as C-extensions," was difficult to believe. I would need +"That last part, "fast as C-extensions," was difficult to believe. I would need some sort of `Performance Comparison`_ to be convinced this is true. The author -includes this in the docs. It is. +includes this in the docs. It is." -.. _`Review of SortedContainers`: http://reviews.jeffknupp.com/reviews/sortedcontainers/3/ +**Kevin Samuel**, `Python and Django Trainer`_ -**Kevin Samuel**, `Formations Python`_ - -I'm quite amazed, not just by the code quality (it's incredibly -readable and has more comment than code, wow), but the actual -amount of work you put at stuff that is *not* code: -documentation, benchmarking, implementation explanations. Even -the git log is clean and the unit tests run out of the box on -Python 2 and 3. - -.. _`Formations Python`: http://formationspython.com/ +I'm quite amazed, not just by the code quality (it's incredibly readable and +has more comment than code, wow), but the actual amount of work you put at +stuff that is *not* code: documentation, benchmarking, implementation +explanations. Even the git log is clean and the unit tests run out of the box +on Python 2 and 3. **Mark Summerfield**, a short plea for `Python Sorted Collections`_ @@ -81,7 +83,21 @@ time that Python offered a full range of collection classes out of the box, including sorted ones. +`Sorted Containers`_ is used in popular open source projects such as: +`Zipline`_, an algorithmic trading library from Quantopian; `Angr`_, a binary +analysis platform from UC Santa Barbara; `Trio`_, an async I/O library; and +`Dask Distributed`_, a distributed computation library supported by Continuum +Analytics. + +.. _`Fellow of the Python Software Foundation`: https://en.wikipedia.org/wiki/Alex_Martelli +.. _`simple, effective implementation`: http://www.grantjenks.com/docs/sortedcontainers/implementation.html +.. _`author of Writing Idiomatic Python and Python Trainer`: https://jeffknupp.com/ +.. _`Python and Django Trainer`: https://www.elephorm.com/formateur/kevin-samuel .. _`Python Sorted Collections`: http://www.qtrac.eu/pysorted.html +.. _`Zipline`: https://github.com/quantopian/zipline +.. _`Angr`: https://github.com/angr/angr +.. _`Trio`: https://github.com/python-trio/trio +.. _`Dask Distributed`: https://github.com/dask/distributed Features -------- @@ -92,33 +108,43 @@ - 100% test coverage - Hours of stress testing - Performance matters (often faster than C implementations) -- Compatible API (nearly identical to popular blist and rbtree modules) -- Feature-rich (e.g. get the five largest keys in a sorted dict: d.iloc[-5:]) +- Compatible API (nearly identical to older blist and bintrees modules) +- Feature-rich (e.g. get the five largest keys in a sorted dict: d.keys()[-5:]) - Pragmatic design (e.g. SortedSet is a Python set with a SortedList index) -- Developed on Python 2.7 +- Developed on Python 3.6 - Tested on CPython 2.7, 3.2, 3.3, 3.4, 3.5, 3.6 and PyPy, PyPy3 +.. image:: https://api.travis-ci.org/grantjenks/python-sortedcontainers.svg?branch=master + :target: http://www.grantjenks.com/docs/sortedcontainers/ + +.. image:: https://ci.appveyor.com/api/projects/status/github/grantjenks/python-sortedcontainers?branch=master&svg=true + :target: http://www.grantjenks.com/docs/sortedcontainers/ + Quickstart ---------- -Installing `SortedContainers`_ is simple with -`pip `_:: +Installing `Sorted Containers`_ is simple with `pip +`_:: $ pip install sortedcontainers -You can access documentation in the interpreter with Python's built-in help -function: +You can access documentation in the interpreter with Python's built-in `help` +function. The `help` works on modules, classes and methods in `Sorted +Containers`_. .. code-block:: python - >>> from sortedcontainers import SortedList, SortedSet, SortedDict - >>> help(SortedList) + >>> import sortedcontainers + >>> help(sortedcontainers) + >>> from sortedcontainers import SortedDict + >>> help(SortedDict) + >>> help(SortedDict.popitem) Documentation ------------- Complete documentation including performance comparisons is available at -http://www.grantjenks.com/docs/sortedcontainers/ . +http://www.grantjenks.com/docs/sortedcontainers/ User Guide .......... @@ -149,18 +175,16 @@ API Documentation ................. -If you are looking for information on a specific function, class or method, this -part of the documentation is for you. +If you are looking for information on a specific function, class or method, +this part of the documentation is for you. -- `SortedList`_ -- `SortedListWithKey`_ -- `SortedDict`_ -- `SortedSet`_ - -.. _`SortedList`: http://www.grantjenks.com/docs/sortedcontainers/sortedlist.html -.. _`SortedListWithKey`: http://www.grantjenks.com/docs/sortedcontainers/sortedlistwithkey.html -.. _`SortedDict`: http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html -.. _`SortedSet`: http://www.grantjenks.com/docs/sortedcontainers/sortedset.html +- `Sorted List`_ +- `Sorted Dict`_ +- `Sorted Set`_ + +.. _`Sorted List`: http://www.grantjenks.com/docs/sortedcontainers/sortedlist.html +.. _`Sorted Dict`: http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html +.. _`Sorted Set`: http://www.grantjenks.com/docs/sortedcontainers/sortedset.html Talks ----- @@ -173,38 +197,23 @@ .. _`SF Python Holiday Party 2015 Lightning Talk`: http://www.grantjenks.com/docs/sortedcontainers/sf-python-2015-lightning-talk.html .. _`DjangoCon 2015 Lightning Talk`: http://www.grantjenks.com/docs/sortedcontainers/djangocon-2015-lightning-talk.html -Contribute ----------- - -Collaborators are welcome! - -#. Check for open issues or open a fresh issue to start a discussion around a - bug. There is a Contributor Friendly tag for issues that should be used by - people who are not very familiar with the codebase yet. -#. Fork the `SortedContainers repository - `_ on GitHub and start - making your changes to a new branch. -#. Write a test which shows that the bug was fixed. -#. Send a pull request and bug the maintainer until it gets merged and - published. - Useful Links ------------ -- `SortedContainers Documentation`_ -- `SortedContainers at PyPI`_ -- `SortedContainers at Github`_ -- `SortedContainers Issue Tracker`_ - -.. _`SortedContainers Documentation`: http://www.grantjenks.com/docs/sortedcontainers/ -.. _`SortedContainers at PyPI`: https://pypi.python.org/pypi/sortedcontainers -.. _`SortedContainers at Github`: https://github.com/grantjenks/sorted_containers -.. _`SortedContainers Issue Tracker`: https://github.com/grantjenks/sorted_containers/issues +- `Sorted Containers Documentation`_ +- `Sorted Containers at PyPI`_ +- `Sorted Containers at Github`_ +- `Sorted Containers Issue Tracker`_ + +.. _`Sorted Containers Documentation`: http://www.grantjenks.com/docs/sortedcontainers/ +.. _`Sorted Containers at PyPI`: https://pypi.org/project/sortedcontainers/ +.. _`Sorted Containers at Github`: https://github.com/grantjenks/python-sortedcontainers +.. _`Sorted Containers Issue Tracker`: https://github.com/grantjenks/python-sortedcontainers/issues -SortedContainers License ------------------------- +Sorted Containers License +------------------------- -Copyright 2014-2016 Grant Jenks +Copyright 2014-2018 Grant Jenks Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff -Nru sortedcontainers-1.5.9/requirements.txt sortedcontainers-2.0.4/requirements.txt --- sortedcontainers-1.5.9/requirements.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/requirements.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,73 +1,18 @@ -alabaster==0.7.8 -appnope==0.1.0 -astroid==1.5.3 -Babel==2.3.4 -backports.functools-lru-cache==1.4 -backports.shutil-get-terminal-size==1.0.0 -backports.ssl-match-hostname==3.4.0.2 -Banyan==0.1.5 -bintrees==2.0.4 -blist==1.3.6 -certifi==14.5.14 -cffi==1.9.1 -colorama==0.3.7 -configparser==3.5.0 -coverage==3.7.1 -cryptography==1.6 -cycler==0.10.0 -Cython==0.19.2 -decorator==4.1.2 -dict.sorted==1.0.0 -docutils==0.12 -enum34==1.1.6 -gj==0.3.3 -gnureadline==6.3.3 -idna==2.1 -imagesize==0.7.1 -ipaddress==1.0.17 -ipython==5.5.0 -ipython-genutils==0.2.0 -isort==4.2.15 -Jinja2==2.8 -lazy-object-proxy==1.3.1 -logilab-common==0.63.1 -MarkupSafe==0.23 -matplotlib==1.5.1 -mccabe==0.6.1 -nose==1.3.3 -numpy==1.11.0 -ordereddict==1.1 -paramiko==2.0.2 -path.py==8.1.2 -pathlib2==2.3.0 -pexpect==4.3.0 -pickleshare==0.7.4 -pluggy==0.3.1 -prompt-toolkit==1.0.15 -ptyprocess==0.5.2 -py==1.4.31 -pyasn1==0.1.9 -pycparser==2.17 -Pygments==2.2.0 -pylint==1.7.4 -pyparsing==2.1.1 -pyreadline==2.0 -pytest==2.9.1 -python-dateutil==2.5.3 -pytz==2016.4 -rbtree==0.9.0 -scandir==1.6 -simplegeneric==0.8.1 -singledispatch==3.4.0.3 -six==1.11.0 -skiplistcollections==0.0.6 -snowballstemmer==1.2.1 -sortedcollection==0.1.11 -Sphinx==1.4.1 -tornado==4.0 -tox==2.3.1 -traitlets==4.3.2 -treap==1.38 -virtualenv==15.1.0 -wcwidth==0.1.7 -wrapt==1.10.11 +bintrees +blist +coverage +cython +doc8 +gj +matplotlib +pyannote-banyan +pylint +pytest +pytest-cov +scipy +skiplistcollections +sphinx +tox +treap +twine +wheel diff -Nru sortedcontainers-1.5.9/setup.py sortedcontainers-2.0.4/setup.py --- sortedcontainers-1.5.9/setup.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/setup.py 2018-06-07 05:34:49.000000000 +0000 @@ -1,4 +1,4 @@ -from setuptools import setup, find_packages +from setuptools import setup from setuptools.command.test import test as TestCommand import sortedcontainers import sys @@ -21,13 +21,13 @@ setup( name=sortedcontainers.__title__, version=sortedcontainers.__version__, - description='Python Sorted Container Types: SortedList, SortedDict, and SortedSet', + description='Sorted Containers -- Sorted List, Sorted Dict, Sorted Set', long_description=readme, author='Grant Jenks', author_email='contact@grantjenks.com', url='http://www.grantjenks.com/docs/sortedcontainers/', license='Apache 2.0', - packages=find_packages(exclude=('tests', 'docs')), + packages=['sortedcontainers'], tests_require=['tox'], cmdclass={'test': Tox}, install_requires=[], @@ -38,7 +38,6 @@ 'Natural Language :: English', 'Programming Language :: Python', 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.2', diff -Nru sortedcontainers-1.5.9/sortedcontainers/__init__.py sortedcontainers-2.0.4/sortedcontainers/__init__.py --- sortedcontainers-1.5.9/sortedcontainers/__init__.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/sortedcontainers/__init__.py 2018-06-07 05:34:49.000000000 +0000 @@ -1,9 +1,8 @@ -"""Sorted Container Types: SortedList, SortedDict, SortedSet +"""Sorted Containers -- Sorted List, Sorted Dict, Sorted Set -SortedContainers is an Apache2 licensed containers library, written in +Sorted Containers is an Apache2 licensed containers library, written in pure-Python, and fast as C-extensions. - Python's standard library is great until you need a sorted collections type. Many will attest that you can get really far without one, but the moment you **really need** a sorted list, dict, or set, you're faced with a dozen @@ -14,39 +13,62 @@ :: - >>> from sortedcontainers import SortedList, SortedDict, SortedSet - >>> sl = SortedList(xrange(10000000)) - >>> 1234567 in sl - True - >>> sl[7654321] - 7654321 - >>> sl.add(1234567) - >>> sl.count(1234567) + >>> from sortedcontainers import SortedList + >>> sl = SortedList(['e', 'a', 'c', 'd', 'b']) + >>> sl + SortedList(['a', 'b', 'c', 'd', 'e']) + >>> sl *= 1000000 + >>> sl.count('c') + 1000000 + >>> sl[-3:] + ['e', 'e', 'e'] + >>> from sortedcontainers import SortedDict + >>> sd = SortedDict({'c': 3, 'a': 1, 'b': 2}) + >>> sd + SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> sd.popitem(index=-1) + ('c', 3) + >>> from sortedcontainers import SortedSet + >>> ss = SortedSet('abracadabra') + >>> ss + SortedSet(['a', 'b', 'c', 'd', 'r']) + >>> ss.bisect_left('c') 2 - >>> sl *= 3 - >>> len(sl) - 30000003 - -SortedContainers takes all of the work out of Python sorted types - making your -deployment and use of Python easy. There's no need to install a C compiler or -pre-build and distribute custom extensions. Performance is a feature and + +Sorted Containers takes all of the work out of Python sorted types - making +your deployment and use of Python easy. There's no need to install a C compiler +or pre-build and distribute custom extensions. Performance is a feature and testing has 100% coverage with unit tests and hours of stress. -:copyright: (c) 2016 by Grant Jenks. +:copyright: (c) 2014-2018 by Grant Jenks. :license: Apache 2.0, see LICENSE for more details. """ -from .sortedlist import SortedList, SortedListWithKey +from .sortedlist import SortedList, SortedKeyList, SortedListWithKey from .sortedset import SortedSet -from .sorteddict import SortedDict - -__all__ = ['SortedList', 'SortedSet', 'SortedDict', 'SortedListWithKey'] +from .sorteddict import ( + SortedDict, + SortedKeysView, + SortedItemsView, + SortedValuesView, +) + +__all__ = [ + 'SortedList', + 'SortedKeyList', + 'SortedListWithKey', + 'SortedDict', + 'SortedKeysView', + 'SortedItemsView', + 'SortedValuesView', + 'SortedSet', +] __title__ = 'sortedcontainers' -__version__ = '1.5.9' -__build__ = 0x010509 +__version__ = '2.0.4' +__build__ = 0x020004 __author__ = 'Grant Jenks' __license__ = 'Apache 2.0' -__copyright__ = 'Copyright 2016 Grant Jenks' +__copyright__ = '2014-2018, Grant Jenks' diff -Nru sortedcontainers-1.5.9/sortedcontainers/sorteddict.py sortedcontainers-2.0.4/sortedcontainers/sorteddict.py --- sortedcontainers-1.5.9/sortedcontainers/sorteddict.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/sortedcontainers/sorteddict.py 2018-06-07 05:34:49.000000000 +0000 @@ -1,342 +1,540 @@ -"""Sorted dictionary implementation. +"""Sorted Dict +============== + +:doc:`Sorted Containers` is an Apache2 licensed Python sorted +collections library, written in pure-Python, and fast as C-extensions. The +:doc:`introduction` is the best way to get started. + +Sorted dict implementations: + +.. currentmodule:: sortedcontainers + +* :class:`SortedDict` +* :class:`SortedKeysView` +* :class:`SortedItemsView` +* :class:`SortedValuesView` """ -from collections import Set, Sequence -from collections import KeysView as AbstractKeysView -from collections import ValuesView as AbstractValuesView -from collections import ItemsView as AbstractItemsView -from sys import hexversion +import sys +import warnings +from collections import ItemsView, KeysView, ValuesView, Sequence -from .sortedlist import SortedList, recursive_repr, SortedListWithKey +from .sortedlist import SortedList, recursive_repr from .sortedset import SortedSet -NONE = object() +class SortedDict(dict): + """Sorted dict is a sorted mutable mapping. -class _IlocWrapper(object): - "Positional indexing support for sorted dictionary objects." - # pylint: disable=protected-access, too-few-public-methods - def __init__(self, _dict): - self._dict = _dict - def __len__(self): - return len(self._dict) - def __getitem__(self, index): - """ - Very efficiently return the key at index *index* in iteration. Supports - negative indices and slice notation. Raises IndexError on invalid - *index*. - """ - return self._dict._list[index] - def __delitem__(self, index): - """ - Remove the ``sdict[sdict.iloc[index]]`` from *sdict*. Supports negative - indices and slice notation. Raises IndexError on invalid *index*. - """ - _dict = self._dict - _list = _dict._list - _delitem = _dict._delitem + Sorted dict keys are maintained in sorted order. The design of sorted dict + is simple: sorted dict inherits from dict to store items and maintains a + sorted list of keys. - if isinstance(index, slice): - keys = _list[index] - del _list[index] - for key in keys: - _delitem(key) - else: - key = _list[index] - del _list[index] - _delitem(key) + Sorted dict keys must be hashable and comparable. The hash and total + ordering of keys must not change while they are stored in the sorted dict. + Mutable mapping methods: -class SortedDict(dict): - """SortedDict provides the same methods as a dict. Additionally, SortedDict - efficiently maintains its keys in sorted order. Consequently, the keys - method will return the keys in sorted order, the popitem method will remove - the item with the highest key, etc. + * :func:`SortedDict.__getitem__` (inherited from dict) + * :func:`SortedDict.__setitem__` + * :func:`SortedDict.__delitem__` + * :func:`SortedDict.__iter__` + * :func:`SortedDict.__len__` (inherited from dict) + + Methods for adding items: + + * :func:`SortedDict.setdefault` + * :func:`SortedDict.update` + + Methods for removing items: + + * :func:`SortedDict.clear` + * :func:`SortedDict.pop` + * :func:`SortedDict.popitem` + + Methods for looking up items: + + * :func:`SortedDict.__contains__` (inherited from dict) + * :func:`SortedDict.get` (inherited from dict) + * :func:`SortedDict.peekitem` + + Methods for views: + + * :func:`SortedDict.keys` + * :func:`SortedDict.items` + * :func:`SortedDict.values` + + Methods for miscellany: + + * :func:`SortedDict.copy` + * :func:`SortedDict.fromkeys` + * :func:`SortedDict.__reversed__` + * :func:`SortedDict.__eq__` (inherited from dict) + * :func:`SortedDict.__ne__` (inherited from dict) + * :func:`SortedDict.__repr__` + * :func:`SortedDict._check` + + Sorted list methods available (applies to keys): + + * :func:`SortedList.bisect_left` + * :func:`SortedList.bisect_right` + * :func:`SortedList.count` + * :func:`SortedList.index` + * :func:`SortedList.irange` + * :func:`SortedList.islice` + * :func:`SortedList._reset` + + Additional sorted list methods available, if key-function used: + + * :func:`SortedKeyList.bisect_key_left` + * :func:`SortedKeyList.bisect_key_right` + * :func:`SortedKeyList.irange_key` + + Sorted dicts may only be compared for equality and inequality. """ def __init__(self, *args, **kwargs): - """SortedDict provides the same methods as a dict. Additionally, SortedDict - efficiently maintains its keys in sorted order. Consequently, the keys - method will return the keys in sorted order, the popitem method will - remove the item with the highest key, etc. - - An optional *key* argument defines a callable that, like the `key` - argument to Python's `sorted` function, extracts a comparison key from - each dict key. If no function is specified, the default compares the - dict keys directly. The `key` argument must be provided as a positional - argument and must come before all other arguments. - - An optional *iterable* argument provides an initial series of items to - populate the SortedDict. Each item in the series must itself contain - two items. The first is used as a key in the new dictionary, and the - second as the key's value. If a given key is seen more than once, the - last value associated with it is retained in the new dictionary. - - If keyword arguments are given, the keywords themselves with their - associated values are added as items to the dictionary. If a key is - specified both in the positional argument and as a keyword argument, the - value associated with the keyword is retained in the dictionary. For - example, these all return a dictionary equal to ``{"one": 2, "two": - 3}``: - - * ``SortedDict(one=2, two=3)`` - * ``SortedDict({'one': 2, 'two': 3})`` - * ``SortedDict(zip(('one', 'two'), (2, 3)))`` - * ``SortedDict([['two', 3], ['one', 2]])`` + """Initialize sorted dict instance. - The first example only works for keys that are valid Python - identifiers; the others work with any valid keys. + Optional key-function argument defines a callable that, like the `key` + argument to the built-in `sorted` function, extracts a comparison key + from each dictionary key. If no function is specified, the default + compares the dictionary keys directly. The key-function argument must + be provided as a positional argument and must come before all other + arguments. + + Optional iterable argument provides an initial sequence of pairs to + initialize the sorted dict. Each pair in the sequence defines the key + and corresponding value. If a key is seen more than once, the last + value associated with it is stored in the new sorted dict. + + Optional mapping argument provides an initial mapping of items to + initialize the sorted dict. + + If keyword arguments are given, the keywords themselves, with their + associated values, are added as items to the dictionary. If a key is + specified both in the positional argument and as a keyword argument, + the value associated with the keyword is stored in the + sorted dict. + + Sorted dict keys must be hashable, per the requirement for Python's + dictionaries. Keys (or the result of the key-function) must also be + comparable, per the requirement for sorted lists. + + >>> d = {'alpha': 1, 'beta': 2} + >>> SortedDict([('alpha', 1), ('beta', 2)]) == d + True + >>> SortedDict({'alpha': 1, 'beta': 2}) == d + True + >>> SortedDict(alpha=1, beta=2) == d + True """ - # pylint: disable=super-init-not-called if args and (args[0] is None or callable(args[0])): - self._key = args[0] + _key = self._key = args[0] args = args[1:] else: - self._key = None + _key = self._key = None - if self._key is None: - self._list = SortedList() - else: - self._list = SortedListWithKey(key=self._key) + self._list = SortedList(key=_key) - # Cache function pointers to dict methods. + # Calls to super() are expensive so cache references to dict methods on + # sorted dict instances. _dict = super(SortedDict, self) - self._dict = _dict - self._clear = _dict.clear - self._delitem = _dict.__delitem__ - self._iter = _dict.__iter__ - self._pop = _dict.pop - self._setdefault = _dict.setdefault - self._setitem = _dict.__setitem__ + self._dict_clear = _dict.clear + self._dict_delitem = _dict.__delitem__ + self._dict_iter = _dict.__iter__ + self._dict_pop = _dict.pop + self._dict_setitem = _dict.__setitem__ self._dict_update = _dict.update - # Cache function pointers to SortedList methods. + # Reaching through ``self._list`` repeatedly adds unnecessary overhead + # so cache references to sorted list methods. _list = self._list self._list_add = _list.add - self.bisect_left = _list.bisect_left - self.bisect = _list.bisect_right - self.bisect_right = _list.bisect_right self._list_clear = _list.clear - self.index = _list.index + self._list_iter = _list.__iter__ + self._list_reversed = _list.__reversed__ self._list_pop = _list.pop self._list_remove = _list.remove self._list_update = _list.update + + # Expose some sorted list methods publicly. + + self.bisect_left = _list.bisect_left + self.bisect = _list.bisect_right + self.bisect_right = _list.bisect_right + self.index = _list.index self.irange = _list.irange self.islice = _list.islice - self._reset = _list._reset # pylint: disable=protected-access + self._reset = _list._reset - if self._key is not None: + if _key is not None: self.bisect_key_left = _list.bisect_key_left self.bisect_key_right = _list.bisect_key_right self.bisect_key = _list.bisect_key self.irange_key = _list.irange_key - self.iloc = _IlocWrapper(self) - self._update(*args, **kwargs) + @property def key(self): - """Key function used to extract comparison key for sorting.""" + """Function used to extract comparison key from keys. + + Sorted dict compares keys directly when the key function is none. + + """ return self._key + + @property + def iloc(self): + """Cached reference of sorted keys view. + + Deprecated in version 2 of Sorted Containers. Use + :func:`SortedDict.keys` instead. + + """ + # pylint: disable=attribute-defined-outside-init + try: + return self._iloc + except AttributeError: + warnings.warn( + 'sorted_dict.iloc is deprecated.' + ' Use SortedDict.keys() instead.', + DeprecationWarning, + stacklevel=2, + ) + _iloc = self._iloc = SortedKeysView(self) + return _iloc + + def clear(self): - """Remove all elements from the dictionary.""" - self._clear() + + """Remove all items from sorted dict. + + Runtime complexity: `O(n)` + + """ + self._dict_clear() self._list_clear() + def __delitem__(self, key): + """Remove item from sorted dict identified by `key`. + + ``sd.__delitem__(key)`` <==> ``del sd[key]`` + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sd = SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> del sd['b'] + >>> sd + SortedDict({'a': 1, 'c': 3}) + >>> del sd['z'] + Traceback (most recent call last): + ... + KeyError: 'z' + + :param key: `key` for item lookup + :raises KeyError: if key not found + """ - Remove ``d[key]`` from *d*. Raises a KeyError if *key* is not in the - dictionary. - """ - self._delitem(key) + self._dict_delitem(key) self._list_remove(key) + def __iter__(self): - """ - Return an iterator over the sorted keys of the dictionary. + """Return an iterator over the keys of the sorted dict. + + ``sd.__iter__()`` <==> ``iter(sd)`` + + Iterating the sorted dict while adding or deleting items may raise a + :exc:`RuntimeError` or fail to iterate over all keys. - Iterating the Mapping while adding or deleting keys may raise a - `RuntimeError` or fail to iterate over all entries. """ - return iter(self._list) + return self._list_iter() + def __reversed__(self): - """ - Return a reversed iterator over the sorted keys of the dictionary. + """Return a reverse iterator over the keys of the sorted dict. + + ``sd.__reversed__()`` <==> ``reversed(sd)`` + + Iterating the sorted dict while adding or deleting items may raise a + :exc:`RuntimeError` or fail to iterate over all keys. - Iterating the Mapping while adding or deleting keys may raise a - `RuntimeError` or fail to iterate over all entries. """ - return reversed(self._list) + return self._list_reversed() + def __setitem__(self, key, value): - """Set `d[key]` to *value*.""" + """Store item in sorted dict with `key` and corresponding `value`. + + ``sd.__setitem__(key, value)`` <==> ``sd[key] = value`` + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sd = SortedDict() + >>> sd['c'] = 3 + >>> sd['a'] = 1 + >>> sd['b'] = 2 + >>> sd + SortedDict({'a': 1, 'b': 2, 'c': 3}) + + :param key: key for item + :param value: value for item + + """ if key not in self: self._list_add(key) - self._setitem(key, value) + self._dict_setitem(key, value) + + _setitem = __setitem__ + def copy(self): - """Return a shallow copy of the sorted dictionary.""" - return self.__class__(self._key, self._iteritems()) + """Return a shallow copy of the sorted dict. + + Runtime complexity: `O(n)` + + :return: new sorted dict + + """ + return self.__class__(self._key, self.items()) __copy__ = copy + @classmethod - def fromkeys(cls, seq, value=None): - """ - Create a new dictionary with keys from *seq* and values set to *value*. - """ - return cls((key, value) for key in seq) + def fromkeys(cls, iterable, value=None): + """Return a new sorted dict initailized from `iterable` and `value`. - if hexversion < 0x03000000: - def items(self): - """ - Return a list of the dictionary's items (``(key, value)`` pairs). - """ - return list(self._iteritems()) - else: - def items(self): - """ - Return a new ItemsView of the dictionary's items. In addition to - the methods provided by the built-in `view` the ItemsView is - indexable (e.g. ``d.items()[5]``). - """ - return ItemsView(self) + Items in the sorted dict have keys from `iterable` and values equal to + `value`. - def iteritems(self): - """ - Return an iterator over the items (``(key, value)`` pairs). + Runtime complexity: `O(n*log(n))` + + :return: new sorted dict - Iterating the Mapping while adding or deleting keys may raise a - `RuntimeError` or fail to iterate over all entries. """ - return iter((key, self[key]) for key in self._list) + return cls((key, value) for key in iterable) - _iteritems = iteritems - if hexversion < 0x03000000: - def keys(self): - """Return a SortedSet of the dictionary's keys.""" - return SortedSet(self._list, key=self._key) - else: - def keys(self): - """ - Return a new KeysView of the dictionary's keys. In addition to the - methods provided by the built-in `view` the KeysView is indexable - (e.g. ``d.keys()[5]``). - """ - return KeysView(self) - - def iterkeys(self): - """ - Return an iterator over the sorted keys of the Mapping. - - Iterating the Mapping while adding or deleting keys may raise a - `RuntimeError` or fail to iterate over all entries. - """ - return iter(self._list) - - if hexversion < 0x03000000: - def values(self): - """Return a list of the dictionary's values.""" - return list(self._itervalues()) - else: - def values(self): - """ - Return a new :class:`ValuesView` of the dictionary's values. - In addition to the methods provided by the built-in `view` the - ValuesView is indexable (e.g., ``d.values()[5]``). - """ - return ValuesView(self) + def keys(self): + """Return new sorted keys view of the sorted dict's keys. + + See :class:`SortedKeysView` for details. + + :return: new sorted keys view - def itervalues(self): """ - Return an iterator over the values of the Mapping. + return SortedKeysView(self) + + + def items(self): + """Return new sorted items view of the sorted dict's items. + + See :class:`SortedItemsView` for details. + + :return: new sorted items view - Iterating the Mapping while adding or deleting keys may raise a - `RuntimeError` or fail to iterate over all entries. """ - return iter(self[key] for key in self._list) + return SortedItemsView(self) + + + def values(self): + """Return new sorted values view of the sorted dict's values. + + See :class:`SortedValuesView` for details. - _itervalues = itervalues + :return: new sorted values view - def pop(self, key, default=NONE): """ - If *key* is in the dictionary, remove it and return its value, - else return *default*. If *default* is not given and *key* is not in - the dictionary, a KeyError is raised. + return SortedValuesView(self) + + + if sys.hexversion < 0x03000000: + def __make_raise_attributeerror(original, alternate): + # pylint: disable=no-self-argument + message = ( + 'SortedDict.{original}() is not implemented.' + ' Use SortedDict.{alternate}() instead.' + ).format(original=original, alternate=alternate) + def method(self): + # pylint: disable=missing-docstring,unused-argument + raise AttributeError(message) + method.__name__ = original + method.__doc__ = message + return property(method) + + iteritems = __make_raise_attributeerror('iteritems', 'items') + iterkeys = __make_raise_attributeerror('iterkeys', 'keys') + itervalues = __make_raise_attributeerror('itervalues', 'values') + viewitems = __make_raise_attributeerror('viewitems', 'items') + viewkeys = __make_raise_attributeerror('viewkeys', 'keys') + viewvalues = __make_raise_attributeerror('viewvalues', 'values') + + + class _NotGiven(object): + # pylint: disable=too-few-public-methods + def __repr__(self): + return '' + + __not_given = _NotGiven() + + def pop(self, key, default=__not_given): + """Remove and return value for item identified by `key`. + + If the `key` is not found then return `default` if given. If `default` + is not given then raise :exc:`KeyError`. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sd = SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> sd.pop('c') + 3 + >>> sd.pop('z', 26) + 26 + >>> sd.pop('y') + Traceback (most recent call last): + ... + KeyError: 'y' + + :param key: `key` for item + :param default: `default` value if key not found (optional) + :return: value for item + :raises KeyError: if `key` not found and `default` not given + """ if key in self: self._list_remove(key) - return self._pop(key) + return self._dict_pop(key) else: - if default is NONE: + if default is self.__not_given: raise KeyError(key) else: return default - def popitem(self, last=True): - """ - Remove and return a ``(key, value)`` pair from the dictionary. If - last=True (default) then remove the *greatest* `key` from the - diciontary. Else, remove the *least* key from the dictionary. - If the dictionary is empty, calling `popitem` raises a - KeyError`. + def popitem(self, index=-1): + """Remove and return ``(key, value)`` pair at `index` from sorted dict. + + Optional argument `index` defaults to -1, the last item in the sorted + dict. Specify ``index=0`` for the first item in the sorted dict. + + If the sorted dict is empty, raises :exc:`KeyError`. + + If the `index` is out of range, raises :exc:`IndexError`. + + Runtime complexity: `O(log(n))` + + >>> sd = SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> sd.popitem() + ('c', 3) + >>> sd.popitem(0) + ('a', 1) + >>> sd.popitem(100) + Traceback (most recent call last): + ... + IndexError: list index out of range + + :param int index: `index` of item (default -1) + :return: key and value pair + :raises KeyError: if sorted dict is empty + :raises IndexError: if `index` out of range + """ if not self: raise KeyError('popitem(): dictionary is empty') - key = self._list_pop(-1 if last else 0) - value = self._pop(key) - + key = self._list_pop(index) + value = self._dict_pop(key) return (key, value) + def peekitem(self, index=-1): - """Return (key, value) item pair at index. + """Return ``(key, value)`` pair at `index` in sorted dict. + + Optional argument `index` defaults to -1, the last item in the sorted + dict. Specify ``index=0`` for the first item in the sorted dict. - Unlike ``popitem``, the sorted dictionary is not modified. Index - defaults to -1, the last/greatest key in the dictionary. Specify - ``index=0`` to lookup the first/least key in the dictiony. + Unlike :func:`SortedDict.popitem`, the sorted dict is not modified. - If index is out of range, raise IndexError. + If the `index` is out of range, raises :exc:`IndexError`. + + Runtime complexity: `O(log(n))` + + >>> sd = SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> sd.peekitem() + ('c', 3) + >>> sd.peekitem(0) + ('a', 1) + >>> sd.peekitem(100) + Traceback (most recent call last): + ... + IndexError: list index out of range + + :param int index: index of item (default -1) + :return: key and value pair + :raises IndexError: if `index` out of range """ key = self._list[index] return key, self[key] + def setdefault(self, key, default=None): - """ - If *key* is in the dictionary, return its value. If not, insert *key* - with a value of *default* and return *default*. *default* defaults to - ``None``. + """Return value for item identified by `key` in sorted dict. + + If `key` is in the sorted dict then return its value. If `key` is not + in the sorted dict then insert `key` with value `default` and return + `default`. + + Optional argument `default` defaults to none. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sd = SortedDict() + >>> sd.setdefault('a', 1) + 1 + >>> sd.setdefault('a', 10) + 1 + >>> sd + SortedDict({'a': 1}) + + :param key: key for item + :param default: value for item (default None) + :return: value for item identified by `key` + """ if key in self: return self[key] - - self._setitem(key, default) + self._dict_setitem(key, default) self._list_add(key) return default + def update(self, *args, **kwargs): - """ - Update the dictionary with the key/value pairs from *other*, overwriting - existing keys. + """Update sorted dict with items from `args` and `kwargs`. + + Overwrites existing items. + + Optional arguments `args` and `kwargs` may be a mapping, an iterable of + pairs or keyword arguments. See :func:`SortedDict.__init__` for + details. + + :param args: mapping or iterable of pairs + :param kwargs: keyword arguments mapping - *update* accepts either another dictionary object or an iterable of - key/value pairs (as a tuple or other iterable of length two). If - keyword arguments are specified, the dictionary is then updated with - those key/value pairs: ``d.update(red=1, blue=2)``. """ if not self: self._dict_update(*args, **kwargs) - self._list_update(self._iter()) + self._list_update(self._dict_iter()) return if not kwargs and len(args) == 1 and isinstance(args[0], dict): @@ -347,395 +545,244 @@ if (10 * len(pairs)) > len(self): self._dict_update(pairs) self._list_clear() - self._list_update(self._iter()) + self._list_update(self._dict_iter()) else: for key in pairs: - self[key] = pairs[key] + self._setitem(key, pairs[key]) _update = update - if hexversion >= 0x02070000: - def viewkeys(self): - "Return ``KeysView`` of dictionary keys." - return KeysView(self) - - def viewvalues(self): - "Return ``ValuesView`` of dictionary values." - return ValuesView(self) - - def viewitems(self): - "Return ``ItemsView`` of dictionary (key, value) item pairs." - return ItemsView(self) def __reduce__(self): - return (self.__class__, (self._key, list(self._iteritems()))) + """Support for pickle. + + The tricks played with caching references in + :func:`SortedDict.__init__` confuse pickle so customize the reducer. + + """ + return (self.__class__, (self._key, list(self.items()))) - @recursive_repr + + @recursive_repr() def __repr__(self): + """Return string representation of sorted dict. + + ``sd.__repr__()`` <==> ``repr(sd)`` + + :return: string representation + + """ _key = self._key - name = type(self).__name__ - key = '' if _key is None else '{0!r}, '.format(_key) - func = '{0!r}: {1!r}'.format - items = ', '.join(func(key, self[key]) for key in self._list) - return '{0}({1}{{{2}}})'.format(name, key, items) + type_name = type(self).__name__ + key_arg = '' if _key is None else '{0!r}, '.format(_key) + item_format = '{0!r}: {1!r}'.format + items = ', '.join(item_format(key, self[key]) for key in self._list) + return '{0}({1}{{{2}}})'.format(type_name, key_arg, items) + def _check(self): - # pylint: disable=protected-access - self._list._check() - assert len(self) == len(self._list) - assert all(key in self for key in self._list) + """Check invariants of sorted dict. + Runtime complexity: `O(n)` -class KeysView(AbstractKeysView, Set, Sequence): - """ - A KeysView object is a dynamic view of the dictionary's keys, which - means that when the dictionary's keys change, the view reflects - those changes. + """ + _list = self._list + _list._check() + assert len(self) == len(_list) + assert all(key in self for key in _list) + + +def _view_delitem(self, index): + """Remove item at `index` from sorted dict. + + ``view.__delitem__(index)`` <==> ``del view[index]`` + + Supports slicing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sd = SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> view = sd.keys() + >>> del view[0] + >>> sd + SortedDict({'b': 2, 'c': 3}) + >>> del view[-1] + >>> sd + SortedDict({'b': 2}) + >>> del view[:] + >>> sd + SortedDict({}) + + :param index: integer or slice for indexing + :raises IndexError: if index out of range - The KeysView class implements the Set and Sequence Abstract Base Classes. """ - # pylint: disable=too-many-ancestors - if hexversion < 0x03000000: - def __init__(self, sorted_dict): - """ - Initialize a KeysView from a SortedDict container as *sorted_dict*. - """ - # pylint: disable=super-init-not-called, protected-access - self._list = sorted_dict._list - self._view = sorted_dict._dict.viewkeys() + _mapping = self._mapping + _list = _mapping._list + _dict_delitem = _mapping._dict_delitem + if isinstance(index, slice): + keys = _list[index] + del _list[index] + for key in keys: + _dict_delitem(key) else: - def __init__(self, sorted_dict): - """ - Initialize a KeysView from a SortedDict container as *sorted_dict*. - """ - # pylint: disable=super-init-not-called, protected-access - self._list = sorted_dict._list - self._view = sorted_dict._dict.keys() - def __len__(self): - """Return the number of entries in the dictionary.""" - return len(self._view) - def __contains__(self, key): - """ - Return True if and only if *key* is one of the underlying dictionary's - keys. - """ - return key in self._view - def __iter__(self): - """ - Return an iterable over the keys in the dictionary. Keys are iterated - over in their sorted order. + key = _list.pop(index) + _dict_delitem(key) + + +class SortedKeysView(KeysView, Sequence): + """Sorted keys view is a dynamic view of the sorted dict's keys. + + When the sorted dict's keys change, the view reflects those changes. + + The keys view implements the set and sequence abstract base classes. + + """ + __slots__ = () + + + @classmethod + def _from_iterable(cls, it): + return SortedSet(it) + - Iterating views while adding or deleting entries in the dictionary may - raise a `RuntimeError` or fail to iterate over all entries. - """ - return iter(self._list) def __getitem__(self, index): - """Return the key at position *index*.""" - return self._list[index] - def __reversed__(self): - """ - Return a reversed iterable over the keys in the dictionary. Keys are - iterated over in their reverse sort order. + """Lookup key at `index` in sorted keys views. + + ``skv.__getitem__(index)`` <==> ``skv[index]`` + + Supports slicing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sd = SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> skv = sd.keys() + >>> skv[0] + 'a' + >>> skv[-1] + 'c' + >>> skv[:] + ['a', 'b', 'c'] + >>> skv[100] + Traceback (most recent call last): + ... + IndexError: list index out of range + + :param index: integer or slice for indexing + :return: key or list of keys + :raises IndexError: if index out of range - Iterating views while adding or deleting entries in the dictionary may - raise a RuntimeError or fail to iterate over all entries. - """ - return reversed(self._list) - def index(self, value, start=None, stop=None): """ - Return the smallest *k* such that `keysview[k] == value` and `start <= k - < end`. Raises `KeyError` if *value* is not present. *stop* defaults - to the end of the set. *start* defaults to the beginning. Negative - indexes are supported, as for slice indices. - """ - # pylint: disable=arguments-differ - return self._list.index(value, start, stop) - def count(self, value): - """Return the number of occurrences of *value* in the set.""" - return 1 if value in self._view else 0 - def __eq__(self, that): - """Test set-like equality with *that*.""" - return self._view == that - def __ne__(self, that): - """Test set-like inequality with *that*.""" - return self._view != that - def __lt__(self, that): - """Test whether self is a proper subset of *that*.""" - return self._view < that - def __gt__(self, that): - """Test whether self is a proper superset of *that*.""" - return self._view > that - def __le__(self, that): - """Test whether self is contained within *that*.""" - return self._view <= that - def __ge__(self, that): - """Test whether *that* is contained within self.""" - return self._view >= that - def __and__(self, that): - """Return a SortedSet of the intersection of self and *that*.""" - return SortedSet(self._view & that) - def __or__(self, that): - """Return a SortedSet of the union of self and *that*.""" - return SortedSet(self._view | that) - def __sub__(self, that): - """Return a SortedSet of the difference of self and *that*.""" - return SortedSet(self._view - that) - def __xor__(self, that): - """Return a SortedSet of the symmetric difference of self and *that*.""" - return SortedSet(self._view ^ that) - if hexversion < 0x03000000: - def isdisjoint(self, that): - """Return True if and only if *that* is disjoint with self.""" - # pylint: disable=arguments-differ - return not any(key in self._list for key in that) - else: - def isdisjoint(self, that): - """Return True if and only if *that* is disjoint with self.""" - # pylint: disable=arguments-differ - return self._view.isdisjoint(that) - @recursive_repr - def __repr__(self): - return 'SortedDict_keys({0!r})'.format(list(self)) + return self._mapping._list[index] -class ValuesView(AbstractValuesView, Sequence): - """ - A ValuesView object is a dynamic view of the dictionary's values, which - means that when the dictionary's values change, the view reflects those - changes. + __delitem__ = _view_delitem + + +class SortedItemsView(ItemsView, Sequence): + """Sorted items view is a dynamic view of the sorted dict's items. + + When the sorted dict's items change, the view reflects those changes. + + The items view implements the set and sequence abstract base classes. - The ValuesView class implements the Sequence Abstract Base Class. """ - # pylint: disable=too-many-ancestors - if hexversion < 0x03000000: - def __init__(self, sorted_dict): - """ - Initialize a ValuesView from a SortedDict container as - *sorted_dict*. - """ - # pylint: disable=super-init-not-called, protected-access - self._dict = sorted_dict - self._list = sorted_dict._list - self._view = sorted_dict._dict.viewvalues() - else: - def __init__(self, sorted_dict): - """ - Initialize a ValuesView from a SortedDict container as - *sorted_dict*. - """ - # pylint: disable=super-init-not-called, protected-access - self._dict = sorted_dict - self._list = sorted_dict._list - self._view = sorted_dict._dict.values() - def __len__(self): - """Return the number of entries in the dictionary.""" - return len(self._dict) - def __contains__(self, value): - """ - Return True if and only if *value* is in the underlying Mapping's - values. - """ - return value in self._view - def __iter__(self): - """ - Return an iterator over the values in the dictionary. Values are - iterated over in sorted order of the keys. + __slots__ = () + + + @classmethod + def _from_iterable(cls, it): + return SortedSet(it) + - Iterating views while adding or deleting entries in the dictionary may - raise a `RuntimeError` or fail to iterate over all entries. - """ - _dict = self._dict - return iter(_dict[key] for key in self._list) def __getitem__(self, index): - """ - Efficiently return value at *index* in iteration. + """Lookup item at `index` in sorted items view. + + ``siv.__getitem__(index)`` <==> ``siv[index]`` + + Supports slicing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sd = SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> siv = sd.items() + >>> siv[0] + ('a', 1) + >>> siv[-1] + ('c', 3) + >>> siv[:] + [('a', 1), ('b', 2), ('c', 3)] + >>> siv[100] + Traceback (most recent call last): + ... + IndexError: list index out of range + + :param index: integer or slice for indexing + :return: item or list of items + :raises IndexError: if index out of range - Supports slice notation and negative indexes. """ - _dict, _list = self._dict, self._list + _mapping = self._mapping + _mapping_list = _mapping._list + if isinstance(index, slice): - return [_dict[key] for key in _list[index]] - return _dict[_list[index]] - def __reversed__(self): - """ - Return a reverse iterator over the values in the dictionary. Values are - iterated over in reverse sort order of the keys. + keys = _mapping_list[index] + return [(key, _mapping[key]) for key in keys] - Iterating views while adding or deleting entries in the dictionary may - raise a `RuntimeError` or fail to iterate over all entries. - """ - _dict = self._dict - return iter(_dict[key] for key in reversed(self._list)) - def index(self, value): - """ - Return index of *value* in self. - - Raises ValueError if *value* is not found. - """ - # pylint: disable=arguments-differ - for idx, val in enumerate(self): - if value == val: - return idx - raise ValueError('{0!r} is not in dict'.format(value)) - if hexversion < 0x03000000: - def count(self, value): - """Return the number of occurrences of *value* in self.""" - return sum(1 for val in self._dict.itervalues() if val == value) - else: - def count(self, value): - """Return the number of occurrences of *value* in self.""" - return sum(1 for val in self._dict.values() if val == value) - def __lt__(self, that): - raise TypeError - def __gt__(self, that): - raise TypeError - def __le__(self, that): - raise TypeError - def __ge__(self, that): - raise TypeError - def __and__(self, that): - raise TypeError - def __or__(self, that): - raise TypeError - def __sub__(self, that): - raise TypeError - def __xor__(self, that): - raise TypeError - @recursive_repr - def __repr__(self): - return 'SortedDict_values({0!r})'.format(list(self)) + key = _mapping_list[index] + return key, _mapping[key] -class ItemsView(AbstractItemsView, Set, Sequence): - """ - An ItemsView object is a dynamic view of the dictionary's ``(key, - value)`` pairs, which means that when the dictionary changes, the - view reflects those changes. - - The ItemsView class implements the Set and Sequence Abstract Base Classes. - However, the set-like operations (``&``, ``|``, ``-``, ``^``) will only - operate correctly if all of the dictionary's values are hashable. + __delitem__ = _view_delitem + + +class SortedValuesView(ValuesView, Sequence): + """Sorted values view is a dynamic view of the sorted dict's values. + + When the sorted dict's values change, the view reflects those changes. + + The values view implements the sequence abstract base class. + """ - # pylint: disable=too-many-ancestors - if hexversion < 0x03000000: - def __init__(self, sorted_dict): - """ - Initialize an ItemsView from a SortedDict container as - *sorted_dict*. - """ - # pylint: disable=super-init-not-called, protected-access - self._dict = sorted_dict - self._list = sorted_dict._list - self._view = sorted_dict._dict.viewitems() - else: - def __init__(self, sorted_dict): - """ - Initialize an ItemsView from a SortedDict container as - *sorted_dict*. - """ - # pylint: disable=super-init-not-called, protected-access - self._dict = sorted_dict - self._list = sorted_dict._list - self._view = sorted_dict._dict.items() - def __len__(self): - """Return the number of entries in the dictionary.""" - return len(self._view) - def __contains__(self, key): - """ - Return True if and only if *key* is one of the underlying dictionary's - items. - """ - return key in self._view - def __iter__(self): - """ - Return an iterable over the items in the dictionary. Items are iterated - over in their sorted order. + __slots__ = () + - Iterating views while adding or deleting entries in the dictionary may - raise a `RuntimeError` or fail to iterate over all entries. - """ - _dict = self._dict - return iter((key, _dict[key]) for key in self._list) def __getitem__(self, index): - """Return the item as position *index*.""" - _dict, _list = self._dict, self._list - if isinstance(index, slice): - return [(key, _dict[key]) for key in _list[index]] - key = _list[index] - return (key, _dict[key]) - def __reversed__(self): - """ - Return a reversed iterable over the items in the dictionary. Items are - iterated over in their reverse sort order. + """Lookup value at `index` in sorted values view. + + ``siv.__getitem__(index)`` <==> ``siv[index]`` + + Supports slicing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sd = SortedDict({'a': 1, 'b': 2, 'c': 3}) + >>> svv = sd.values() + >>> svv[0] + 1 + >>> svv[-1] + 3 + >>> svv[:] + [1, 2, 3] + >>> svv[100] + Traceback (most recent call last): + ... + IndexError: list index out of range + + :param index: integer or slice for indexing + :return: value or list of values + :raises IndexError: if index out of range - Iterating views while adding or deleting entries in the dictionary may - raise a RuntimeError or fail to iterate over all entries. """ - _dict = self._dict - return iter((key, _dict[key]) for key in reversed(self._list)) - def index(self, key, start=None, stop=None): - """ - Return the smallest *k* such that `itemssview[k] == key` and `start <= k - < end`. Raises `KeyError` if *key* is not present. *stop* defaults - to the end of the set. *start* defaults to the beginning. Negative - indexes are supported, as for slice indices. - """ - # pylint: disable=arguments-differ - temp, value = key - pos = self._list.index(temp, start, stop) - if value == self._dict[temp]: - return pos - else: - raise ValueError('{0!r} is not in dict'.format(key)) - def count(self, item): - """Return the number of occurrences of *item* in the set.""" - # pylint: disable=arguments-differ - key, value = item - return 1 if key in self._dict and self._dict[key] == value else 0 - def __eq__(self, that): - """Test set-like equality with *that*.""" - return self._view == that - def __ne__(self, that): - """Test set-like inequality with *that*.""" - return self._view != that - def __lt__(self, that): - """Test whether self is a proper subset of *that*.""" - return self._view < that - def __gt__(self, that): - """Test whether self is a proper superset of *that*.""" - return self._view > that - def __le__(self, that): - """Test whether self is contained within *that*.""" - return self._view <= that - def __ge__(self, that): - """Test whether *that* is contained within self.""" - return self._view >= that - def __and__(self, that): - """Return a SortedSet of the intersection of self and *that*.""" - return SortedSet(self._view & that) - def __or__(self, that): - """Return a SortedSet of the union of self and *that*.""" - return SortedSet(self._view | that) - def __sub__(self, that): - """Return a SortedSet of the difference of self and *that*.""" - return SortedSet(self._view - that) - def __xor__(self, that): - """Return a SortedSet of the symmetric difference of self and *that*.""" - return SortedSet(self._view ^ that) - if hexversion < 0x03000000: - def isdisjoint(self, that): - """Return True if and only if *that* is disjoint with self.""" - # pylint: disable=arguments-differ - _dict = self._dict - for key, value in that: - if key in _dict and _dict[key] == value: - return False - return True - else: - def isdisjoint(self, that): - """Return True if and only if *that* is disjoint with self.""" - # pylint: disable=arguments-differ - return self._view.isdisjoint(that) - @recursive_repr - def __repr__(self): - return 'SortedDict_items({0!r})'.format(list(self)) + _mapping = self._mapping + _mapping_list = _mapping._list + + if isinstance(index, slice): + keys = _mapping_list[index] + return [_mapping[key] for key in keys] + + key = _mapping_list[index] + return _mapping[key] + + + __delitem__ = _view_delitem diff -Nru sortedcontainers-1.5.9/sortedcontainers/sortedlist.py sortedcontainers-2.0.4/sortedcontainers/sortedlist.py --- sortedcontainers-1.5.9/sortedcontainers/sortedlist.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/sortedcontainers/sortedlist.py 2018-06-07 05:34:49.000000000 +0000 @@ -1,22 +1,38 @@ -"""Sorted list implementation. +"""Sorted List +============== -""" -# pylint: disable=redefined-builtin, ungrouped-imports +:doc:`Sorted Containers` is an Apache2 licensed Python sorted +collections library, written in pure-Python, and fast as C-extensions. The +:doc:`introduction` is the best way to get started. + +Sorted list implementations: + +.. currentmodule:: sortedcontainers + +* :class:`SortedList` +* :class:`SortedKeyList` +""" +# pylint: disable=too-many-lines from __future__ import print_function from bisect import bisect_left, bisect_right, insort from collections import Sequence, MutableSequence -from functools import wraps from itertools import chain, repeat, starmap -from math import log as log_e -import operator as op -from operator import iadd, add +from math import log +from operator import add, eq, ne, gt, ge, lt, le, iadd +from textwrap import dedent + +############################################################################### +# BEGIN Python 2/3 Shims +############################################################################### + +from functools import wraps from sys import hexversion if hexversion < 0x03000000: - from itertools import izip as zip # pylint: disable=no-name-in-module - from itertools import imap as map # pylint: disable=no-name-in-module + from itertools import imap as map # pylint: disable=redefined-builtin + from itertools import izip as zip # pylint: disable=redefined-builtin try: from thread import get_ident except ImportError: @@ -26,145 +42,258 @@ try: from _thread import get_ident except ImportError: - from _dummy_thread import get_ident # pylint: disable=import-error + from _dummy_thread import get_ident -LOAD = 1000 -def recursive_repr(func): - """Decorator to prevent infinite repr recursion.""" - repr_running = set() +def recursive_repr(fillvalue='...'): + "Decorator to make a repr function return fillvalue for a recursive call." + # pylint: disable=missing-docstring + # Copied from reprlib in Python 3 + # https://hg.python.org/cpython/file/3.6/Lib/reprlib.py + + def decorating_function(user_function): + repr_running = set() + + @wraps(user_function) + def wrapper(self): + key = id(self), get_ident() + if key in repr_running: + return fillvalue + repr_running.add(key) + try: + result = user_function(self) + finally: + repr_running.discard(key) + return result + + return wrapper + + return decorating_function + +############################################################################### +# END Python 2/3 Shims +############################################################################### - @wraps(func) - def wrapper(self): - "Return ellipsis on recursive re-entry to function." - key = id(self), get_ident() - if key in repr_running: - return '...' +class SortedList(MutableSequence): + """Sorted list is a sorted mutable sequence. - repr_running.add(key) + Sorted list values are maintained in sorted order. - try: - return func(self) - finally: - repr_running.discard(key) + Sorted list values must be comparable. The total ordering of values must + not change while they are stored in the sorted list. - return wrapper + Methods for adding values: + + * :func:`SortedList.add` + * :func:`SortedList.update` + * :func:`SortedList.__add__` + * :func:`SortedList.__iadd__` + * :func:`SortedList.__mul__` + * :func:`SortedList.__imul__` + + Methods for removing values: + + * :func:`SortedList.clear` + * :func:`SortedList.discard` + * :func:`SortedList.remove` + * :func:`SortedList.pop` + * :func:`SortedList.__delitem__` + + Methods for looking up values: + + * :func:`SortedList.bisect_left` + * :func:`SortedList.bisect_right` + * :func:`SortedList.count` + * :func:`SortedList.index` + * :func:`SortedList.__contains__` + * :func:`SortedList.__getitem__` + + Methods for iterating values: + + * :func:`SortedList.irange` + * :func:`SortedList.islice` + * :func:`SortedList.__iter__` + * :func:`SortedList.__reversed__` + + Methods for miscellany: + + * :func:`SortedList.copy` + * :func:`SortedList.__len__` + * :func:`SortedList.__repr__` + * :func:`SortedList._check` + * :func:`SortedList._reset` + + Sorted lists use lexicographical ordering semantics when compared to other + sequences. + + Some methods of mutable sequences are not supported and will raise + not-implemented error. -class SortedList(MutableSequence): - """ - SortedList provides most of the same methods as a list but keeps the items - in sorted order. """ - # pylint: disable=too-many-ancestors - def __init__(self, iterable=None): - """ - SortedList provides most of the same methods as a list but keeps the - items in sorted order. + DEFAULT_LOAD_FACTOR = 1000 + + + def __init__(self, iterable=None, key=None): + """Initialize sorted list instance. + + Optional `iterable` argument provides an initial iterable of values to + initialize the sorted list. + + Runtime complexity: `O(n*log(n))` + + >>> sl = SortedList() + >>> sl + SortedList([]) + >>> sl = SortedList([3, 1, 2, 5, 4]) + >>> sl + SortedList([1, 2, 3, 4, 5]) + + :param iterable: initial values (optional) - An optional *iterable* provides an initial series of items to populate - the SortedList. """ + assert key is None self._len = 0 + self._load = self.DEFAULT_LOAD_FACTOR self._lists = [] self._maxes = [] self._index = [] - self._load = LOAD - self._half = LOAD >> 1 - self._dual = LOAD << 1 self._offset = 0 if iterable is not None: self._update(iterable) + def __new__(cls, iterable=None, key=None): - """ - SortedList provides most of the same methods as a list but keeps the - items in sorted order. + """Create new sorted list or sorted-key list instance. - An optional *iterable* provides an initial series of items to populate - the SortedList. + Optional `key`-function argument will return an instance of subtype + :class:`SortedKeyList`. + + >>> sl = SortedList() + >>> isinstance(sl, SortedList) + True + >>> sl = SortedList(key=lambda x: -x) + >>> isinstance(sl, SortedList) + True + >>> isinstance(sl, SortedKeyList) + True + + :param iterable: initial values (optional) + :param key: function used to extract comparison key (optional) + :return: sorted list or sorted-key list instance - An optional *key* argument will return an instance of subtype - SortedListWithKey. """ # pylint: disable=unused-argument if key is None: return object.__new__(cls) else: if cls is SortedList: - return object.__new__(SortedListWithKey) + return object.__new__(SortedKeyList) else: - raise TypeError('inherit SortedListWithKey for key argument') + raise TypeError('inherit SortedKeyList for key argument') + @property def key(self): - """Key function used to extract comparison key for sorting.""" + """Function used to extract comparison key from values. + + Sorted list compares values directly so the key function is none. + + """ return None + def _reset(self, load): - """ - Reset sorted list load. + """Reset sorted list load factor. + + The `load` specifies the load-factor of the list. The default load + factor of 1000 works well for lists from tens to tens-of-millions of + values. Good practice is to use a value that is the cube root of the + list size. With billions of elements, the best load factor depends on + your usage. It's best to leave the load factor at the default until you + start benchmarking. + + See :doc:`implementation` and :doc:`performance-scale` for more + information. + + Runtime complexity: `O(n)` + + :param int load: load-factor for sorted list sublists - The *load* specifies the load-factor of the list. The default load - factor of '1000' works well for lists from tens to tens of millions of - elements. Good practice is to use a value that is the cube root of the - list size. With billions of elements, the best load factor depends on - your usage. It's best to leave the load factor at the default until - you start benchmarking. """ values = reduce(iadd, self._lists, []) self._clear() self._load = load - self._half = load >> 1 - self._dual = load << 1 self._update(values) + def clear(self): - """Remove all the elements from the list.""" + """Remove all values from sorted list. + + Runtime complexity: `O(n)` + + """ self._len = 0 del self._lists[:] del self._maxes[:] del self._index[:] + self._offset = 0 _clear = clear - def add(self, val): - """Add the element *val* to the list.""" + + def add(self, value): + """Add `value` to sorted list. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sl = SortedList() + >>> sl.add(3) + >>> sl.add(1) + >>> sl.add(2) + >>> sl + SortedList([1, 2, 3]) + + :param value: value to add to sorted list + + """ _lists = self._lists _maxes = self._maxes if _maxes: - pos = bisect_right(_maxes, val) + pos = bisect_right(_maxes, value) if pos == len(_maxes): pos -= 1 - _lists[pos].append(val) - _maxes[pos] = val + _lists[pos].append(value) + _maxes[pos] = value else: - insort(_lists[pos], val) + insort(_lists[pos], value) self._expand(pos) else: - _lists.append([val]) - _maxes.append(val) + _lists.append([value]) + _maxes.append(value) self._len += 1 + def _expand(self, pos): - """Splits sublists that are more than double the load level. + """Split sublists with length greater than double the load-factor. Updates the index when the sublist length is less than double the load level. This requires incrementing the nodes in a traversal from the - leaf node to the root. For an example traversal see self._loc. + leaf node to the root. For an example traversal see + ``SortedList._loc``. """ + _load = self._load _lists = self._lists _index = self._index - if len(_lists[pos]) > self._dual: + if len(_lists[pos]) > (_load << 1): _maxes = self._maxes - _load = self._load _lists_pos = _lists[pos] half = _lists_pos[_load:] @@ -183,8 +312,20 @@ child = (child - 1) >> 1 _index[0] += 1 + def update(self, iterable): - """Update the list by adding all elements from *iterable*.""" + """Update sorted list by adding all values from `iterable`. + + Runtime complexity: `O(k*log(n))` -- approximate. + + >>> sl = SortedList() + >>> sl.update([3, 1, 2]) + >>> sl + SortedList([1, 2, 3]) + + :param iterable: iterable of values to add + + """ _lists = self._lists _maxes = self._maxes values = sorted(iterable) @@ -209,78 +350,123 @@ _update = update - def __contains__(self, val): - """Return True if and only if *val* is an element in the list.""" + + def __contains__(self, value): + """Return true if `value` is an element of the sorted list. + + ``sl.__contains__(value)`` <==> ``value in sl`` + + Runtime complexity: `O(log(n))` + + >>> sl = SortedList([1, 2, 3, 4, 5]) + >>> 3 in sl + True + + :param value: search for value in sorted list + :return: true if `value` in sorted list + + """ _maxes = self._maxes if not _maxes: return False - pos = bisect_left(_maxes, val) + pos = bisect_left(_maxes, value) if pos == len(_maxes): return False _lists = self._lists - idx = bisect_left(_lists[pos], val) + idx = bisect_left(_lists[pos], value) - return _lists[pos][idx] == val + return _lists[pos][idx] == value - def discard(self, val): - """ - Remove the first occurrence of *val*. - If *val* is not a member, does nothing. + def discard(self, value): + """Remove `value` from sorted list if it is a member. + + If `value` is not a member, do nothing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sl = SortedList([1, 2, 3, 4, 5]) + >>> sl.discard(5) + >>> sl.discard(0) + >>> sl == [1, 2, 3, 4] + True + + :param value: `value` to discard from sorted list + """ _maxes = self._maxes if not _maxes: return - pos = bisect_left(_maxes, val) + pos = bisect_left(_maxes, value) if pos == len(_maxes): return _lists = self._lists - idx = bisect_left(_lists[pos], val) + idx = bisect_left(_lists[pos], value) - if _lists[pos][idx] == val: + if _lists[pos][idx] == value: self._delete(pos, idx) - def remove(self, val): - """ - Remove first occurrence of *val*. - Raises ValueError if *val* is not present. + def remove(self, value): + """Remove `value` from sorted list; `value` must be a member. + + If `value` is not a member, raise ValueError. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sl = SortedList([1, 2, 3, 4, 5]) + >>> sl.remove(5) + >>> sl == [1, 2, 3, 4] + True + >>> sl.remove(0) + Traceback (most recent call last): + ... + ValueError: 0 not in list + + :param value: `value` to remove from sorted list + :raises ValueError: if `value` is not in sorted list + """ - # pylint: disable=arguments-differ _maxes = self._maxes if not _maxes: - raise ValueError('{0!r} not in list'.format(val)) + raise ValueError('{0!r} not in list'.format(value)) - pos = bisect_left(_maxes, val) + pos = bisect_left(_maxes, value) if pos == len(_maxes): - raise ValueError('{0!r} not in list'.format(val)) + raise ValueError('{0!r} not in list'.format(value)) _lists = self._lists - idx = bisect_left(_lists[pos], val) + idx = bisect_left(_lists[pos], value) - if _lists[pos][idx] == val: + if _lists[pos][idx] == value: self._delete(pos, idx) else: - raise ValueError('{0!r} not in list'.format(val)) + raise ValueError('{0!r} not in list'.format(value)) + def _delete(self, pos, idx): - """Delete the item at the given (pos, idx). + """Delete value at the given `(pos, idx)`. Combines lists that are less than half the load level. Updates the index when the sublist length is more than half the load - level. This requires decrementing the nodes in a traversal from the leaf - node to the root. For an example traversal see self._loc. + level. This requires decrementing the nodes in a traversal from the + leaf node to the root. For an example traversal see + ``SortedList._loc``. + + :param int pos: lists index + :param int idx: sublist index + """ _lists = self._lists _maxes = self._maxes @@ -293,8 +479,7 @@ len_lists_pos = len(_lists_pos) - if len_lists_pos > self._half: - + if len_lists_pos > (self._load >> 1): _maxes[pos] = _lists_pos[-1] if _index: @@ -303,9 +488,7 @@ _index[child] -= 1 child = (child - 1) >> 1 _index[0] -= 1 - elif len(_lists) > 1: - if not pos: pos += 1 @@ -318,26 +501,24 @@ del _index[:] self._expand(prev) - elif len_lists_pos: - _maxes[pos] = _lists_pos[-1] - else: - del _lists[pos] del _maxes[pos] del _index[:] + def _loc(self, pos, idx): - """Convert an index pair (alpha, beta) into a single index that corresponds to - the position of the value in the sorted list. + """Convert an index pair (lists index, sublist index) into a single + index number that corresponds to the position of the value in the + sorted list. - Most queries require the index be built. Details of the index are - described in self._build_index. + Many queries require the index be built. Details of the index are + described in ``SortedList._build_index``. Indexing requires traversing the tree from a leaf node to the root. The - parent of each node is easily computable at (pos - 1) // 2. + parent of each node is easily computable at ``(pos - 1) // 2``. Left-child nodes are always at odd indices and right-child nodes are always at even indices. @@ -347,19 +528,19 @@ The final index is the sum from traversal and the index in the sublist. - For example, using the index from self._build_index: + For example, using the index from ``SortedList._build_index``:: - _index = 14 5 9 3 2 4 5 - _offset = 3 + _index = 14 5 9 3 2 4 5 + _offset = 3 - Tree: + Tree:: 14 5 9 3 2 4 5 - Converting index pair (2, 3) into a single index involves iterating like - so: + Converting an index pair (2, 3) into a single index involves iterating + like so: 1. Starting at the leaf node: offset + alpha = 3 + 2 = 5. We identify the node as a left-child node. At such nodes, we simply traverse to @@ -371,7 +552,12 @@ 3. Iteration ends at the root. - Computing the index is the sum of the total and beta: 5 + 3 = 8. + The index is then the sum of the total and sublist index: 5 + 3 = 8. + + :param int pos: lists index + :param int idx: sublist index + :return: index in sorted list + """ if not pos: return idx @@ -403,16 +589,18 @@ return total + idx + def _pos(self, idx): - """Convert an index into a pair (alpha, beta) that can be used to access - the corresponding _lists[alpha][beta] position. + """Convert an index into an index pair (lists index, sublist index) + that can be used to access the corresponding lists position. - Most queries require the index be built. Details of the index are - described in self._build_index. + Many queries require the index be built. Details of the index are + described in ``SortedList._build_index``. - Indexing requires traversing the tree to a leaf node. Each node has - two children which are easily computable. Given an index, pos, the - left-child is at pos * 2 + 1 and the right-child is at pos * 2 + 2. + Indexing requires traversing the tree to a leaf node. Each node has two + children which are easily computable. Given an index, pos, the + left-child is at ``pos * 2 + 1`` and the right-child is at ``pos * 2 + + 2``. When the index is less than the left-child, traversal moves to the left sub-tree. Otherwise, the index is decremented by the left-child @@ -422,12 +610,12 @@ position of the child node as compared with the offset and the remaining index. - For example, using the index from self._build_index: + For example, using the index from ``SortedList._build_index``:: - _index = 14 5 9 3 2 4 5 - _offset = 3 + _index = 14 5 9 3 2 4 5 + _offset = 3 - Tree: + Tree:: 14 5 9 @@ -452,6 +640,10 @@ The final index pair from our example is (2, 3) which corresponds to index 8 in the sorted list. + + :param int idx: index in sorted list + :return: (lists index, sublist index) pair + """ if idx < 0: last_len = len(self._lists[-1]) @@ -491,39 +683,42 @@ return (pos - self._offset, idx) + def _build_index(self): - """Build an index for indexing the sorted list. + """Build a positional index for indexing the sorted list. Indexes are represented as binary trees in a dense array notation similar to a binary heap. - For example, given a _lists representation storing integers: + For example, given a lists representation storing integers:: - [0]: 1 2 3 - [1]: 4 5 - [2]: 6 7 8 9 - [3]: 10 11 12 13 14 + 0: [1, 2, 3] + 1: [4, 5] + 2: [6, 7, 8, 9] + 3: [10, 11, 12, 13, 14] The first transformation maps the sub-lists by their length. The - first row of the index is the length of the sub-lists. + first row of the index is the length of the sub-lists:: - [0]: 3 2 4 5 + 0: [3, 2, 4, 5] - Each row after that is the sum of consecutive pairs of the previous row: + Each row after that is the sum of consecutive pairs of the previous + row:: - [1]: 5 9 - [2]: 14 + 1: [5, 9] + 2: [14] - Finally, the index is built by concatenating these lists together: + Finally, the index is built by concatenating these lists together:: - _index = 14 5 9 3 2 4 5 + _index = [14, 5, 9, 3, 2, 4, 5] - An offset storing the start of the first row is also stored: + An offset storing the start of the first row is also stored:: - _offset = 3 + _offset = 3 When built, the index can be used for efficient indexing into the list. - See the comment and notes on self._pos for details. + See the comment and notes on ``SortedList._pos`` for details. + """ row0 = list(map(len, self._lists)) @@ -544,7 +739,7 @@ self._offset = 1 return - size = 2 ** (int(log_e(len(row1) - 1, 2)) + 1) + size = 2 ** (int(log(len(row1) - 1, 2)) + 1) row1.extend(repeat(0, size - len(row1))) tree = [row0, row1] @@ -557,10 +752,30 @@ reduce(iadd, reversed(tree), self._index) self._offset = size * 2 - 1 - def __delitem__(self, idx): - """Remove the element at *idx*. Supports slicing.""" - if isinstance(idx, slice): - start, stop, step = idx.indices(self._len) + + def __delitem__(self, index): + """Remove value at `index` from sorted list. + + ``sl.__delitem__(index)`` <==> ``del sl[index]`` + + Supports slicing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sl = SortedList('abcde') + >>> del sl[2] + >>> sl + SortedList(['a', 'b', 'd', 'e']) + >>> del sl[:2] + >>> sl + SortedList(['d', 'e']) + + :param index: integer or slice for indexing + :raises IndexError: if index out of range + + """ + if isinstance(index, slice): + start, stop, step = index.indices(self._len) if step == 1 and start < stop: if start == 0 and stop == self._len: @@ -586,17 +801,36 @@ pos, idx = _pos(index) _delete(pos, idx) else: - pos, idx = self._pos(idx) + pos, idx = self._pos(index) self._delete(pos, idx) - _delitem = __delitem__ - def __getitem__(self, idx): - """Return the element at *idx*. Supports slicing.""" + def __getitem__(self, index): + """Lookup value at `index` in sorted list. + + ``sl.__getitem__(index)`` <==> ``sl[index]`` + + Supports slicing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sl = SortedList('abcde') + >>> sl[1] + 'b' + >>> sl[-1] + 'e' + >>> sl[2:5] + ['c', 'd', 'e'] + + :param index: integer or slice for indexing + :return: value or list of values + :raises IndexError: if index out of range + + """ _lists = self._lists - if isinstance(idx, slice): - start, stop, step = idx.indices(self._len) + if isinstance(index, slice): + start, stop, step = index.indices(self._len) if step == 1 and start < stop: if start == 0 and stop == self._len: @@ -633,221 +867,104 @@ return list(self._getitem(index) for index in indices) else: if self._len: - if idx == 0: + if index == 0: return _lists[0][0] - elif idx == -1: + elif index == -1: return _lists[-1][-1] else: raise IndexError('list index out of range') - if 0 <= idx < len(_lists[0]): - return _lists[0][idx] + if 0 <= index < len(_lists[0]): + return _lists[0][index] len_last = len(_lists[-1]) - if -len_last < idx < 0: - return _lists[-1][len_last + idx] + if -len_last < index < 0: + return _lists[-1][len_last + index] - pos, idx = self._pos(idx) + pos, idx = self._pos(index) return _lists[pos][idx] _getitem = __getitem__ - def _check_order(self, idx, val): - _len = self._len - _lists = self._lists - - pos, loc = self._pos(idx) - - if idx < 0: - idx += _len - - # Check that the inserted value is not less than the - # previous value. - - if idx > 0: - idx_prev = loc - 1 - pos_prev = pos - - if idx_prev < 0: - pos_prev -= 1 - idx_prev = len(_lists[pos_prev]) - 1 - - if _lists[pos_prev][idx_prev] > val: - msg = '{0!r} not in sort order at index {1}'.format(val, idx) - raise ValueError(msg) - - # Check that the inserted value is not greater than - # the previous value. - - if idx < (_len - 1): - idx_next = loc + 1 - pos_next = pos - - if idx_next == len(_lists[pos_next]): - pos_next += 1 - idx_next = 0 - - if _lists[pos_next][idx_next] < val: - msg = '{0!r} not in sort order at index {1}'.format(val, idx) - raise ValueError(msg) def __setitem__(self, index, value): - """Replace item at position *index* with *value*. - - Supports slice notation. Raises :exc:`ValueError` if the sort order - would be violated. When used with a slice and iterable, the - :exc:`ValueError` is raised before the list is mutated if the sort - order would be violated by the operation. - - """ - _lists = self._lists - _maxes = self._maxes - _check_order = self._check_order - _pos = self._pos - - if isinstance(index, slice): - _len = self._len - start, stop, step = index.indices(_len) - indices = range(start, stop, step) - - # Copy value to avoid aliasing issues with self and cases where an - # iterator is given. - - values = tuple(value) - - if step != 1: - if len(values) != len(indices): - raise ValueError( - 'attempt to assign sequence of size %s' - ' to extended slice of size %s' - % (len(values), len(indices))) - - # Keep a log of values that are set so that we can - # roll back changes if ordering is violated. - - log = [] - _append = log.append - - for idx, val in zip(indices, values): - pos, loc = _pos(idx) - _append((idx, _lists[pos][loc], val)) - _lists[pos][loc] = val - if len(_lists[pos]) == (loc + 1): - _maxes[pos] = val - - try: - # Validate ordering of new values. - - for idx, _, newval in log: - _check_order(idx, newval) - - except ValueError: - - # Roll back changes from log. - - for idx, oldval, _ in log: - pos, loc = _pos(idx) - _lists[pos][loc] = oldval - if len(_lists[pos]) == (loc + 1): - _maxes[pos] = oldval - - raise - else: - if start == 0 and stop == _len: - self._clear() - return self._update(values) - - if stop < start: - # When calculating indices, stop may be less than start. - # For example: ...[5:3:1] results in slice(5, 3, 1) which - # is a valid but not useful stop index. - stop = start - - if values: - - # Check that given values are ordered properly. - - alphas = iter(values) - betas = iter(values) - next(betas) - pairs = zip(alphas, betas) - - if not all(alpha <= beta for alpha, beta in pairs): - raise ValueError('given values not in sort order') - - # Check ordering in context of sorted list. + """Raise not-implemented error. - if start and self._getitem(start - 1) > values[0]: - message = '{0!r} not in sort order at index {1}'.format( - values[0], start) - raise ValueError(message) + ``sl.__setitem__(index, value)`` <==> ``sl[index] = value`` - if stop != _len and self._getitem(stop) < values[-1]: - message = '{0!r} not in sort order at index {1}'.format( - values[-1], stop) - raise ValueError(message) + :raises NotImplementedError: use ``del sl[index]`` and + ``sl.add(value)`` instead - # Delete the existing values. + """ + message = 'use ``del sl[index]`` and ``sl.add(value)`` instead' + raise NotImplementedError(message) - self._delitem(index) - # Insert the new values. + def __iter__(self): + """Return an iterator over the sorted list. - _insert = self.insert - for idx, val in enumerate(values): - _insert(start + idx, val) - else: - pos, loc = _pos(index) - _check_order(index, value) - _lists[pos][loc] = value - if len(_lists[pos]) == (loc + 1): - _maxes[pos] = value + ``sl.__iter__()`` <==> ``iter(sl)`` - def __iter__(self): - """ - Return an iterator over the Sequence. + Iterating the sorted list while adding or deleting values may raise a + :exc:`RuntimeError` or fail to iterate over all values. - Iterating the Sequence while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. """ return chain.from_iterable(self._lists) + def __reversed__(self): - """ - Return an iterator to traverse the Sequence in reverse. + """Return a reverse iterator over the sorted list. + + ``sl.__reversed__()`` <==> ``reversed(sl)`` + + Iterating the sorted list while adding or deleting values may raise a + :exc:`RuntimeError` or fail to iterate over all values. - Iterating the Sequence while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. """ return chain.from_iterable(map(reversed, reversed(self._lists))) + def reverse(self): - """Raise NotImplementedError + """Raise not-implemented error. - SortedList maintains values in ascending sort order. Values may not be + Sorted list maintains values in ascending sort order. Values may not be reversed in-place. - Use ``reversed(sorted_list)`` for a reverse iterator over values in - descending sort order. + Use ``reversed(sl)`` for an iterator over values in descending sort + order. - Implemented to override MutableSequence.reverse which provides an + Implemented to override `MutableSequence.reverse` which provides an erroneous default implementation. + :raises NotImplementedError: use ``reversed(sl)`` instead + """ - raise NotImplementedError('.reverse() not defined') + raise NotImplementedError('use ``reversed(sl)`` instead') - def islice(self, start=None, stop=None, reverse=False): - """ - Returns an iterator that slices `self` from `start` to `stop` index, - inclusive and exclusive respectively. + def islice(self, start=None, stop=None, reverse=False): + """Return an iterator that slices sorted list from `start` to `stop`. - When `reverse` is `True`, values are yielded from the iterator in - reverse order. + The `start` and `stop` index are treated inclusive and exclusive, + respectively. Both `start` and `stop` default to `None` which is automatically - inclusive of the beginning and end. + inclusive of the beginning and end of the sorted list. + + When `reverse` is `True` the values are yielded from the iterator in + reverse order; `reverse` defaults to `False`. + + >>> sl = SortedList('abcdefghij') + >>> it = sl.islice(2, 6) + >>> list(it) + ['c', 'd', 'e', 'f'] + + :param int start: start index (inclusive) + :param int stop: stop index (exclusive) + :param bool reverse: yield values in reverse order + :return: iterator + """ _len = self._len @@ -871,60 +988,97 @@ return self._islice(min_pos, min_idx, max_pos, max_idx, reverse) + def _islice(self, min_pos, min_idx, max_pos, max_idx, reverse): - """ - Returns an iterator that slices `self` using two index pairs, - `(min_pos, min_idx)` and `(max_pos, max_idx)`; the first inclusive - and the latter exclusive. See `_pos` for details on how an index - is converted to an index pair. + """Return an iterator that slices sorted list using two index pairs. + + The index pairs are (min_pos, min_idx) and (max_pos, max_idx), the + first inclusive and the latter exclusive. See `_pos` for details on how + an index is converted to an index pair. When `reverse` is `True`, values are yielded from the iterator in reverse order. + """ _lists = self._lists if min_pos > max_pos: return iter(()) - elif min_pos == max_pos and not reverse: - return iter(_lists[min_pos][min_idx:max_idx]) - elif min_pos == max_pos and reverse: - return reversed(_lists[min_pos][min_idx:max_idx]) - elif min_pos + 1 == max_pos and not reverse: - return chain(_lists[min_pos][min_idx:], _lists[max_pos][:max_idx]) - elif min_pos + 1 == max_pos and reverse: + + if min_pos == max_pos: + if reverse: + indices = reversed(range(min_idx, max_idx)) + return map(_lists[min_pos].__getitem__, indices) + + indices = range(min_idx, max_idx) + return map(_lists[min_pos].__getitem__, indices) + + next_pos = min_pos + 1 + + if next_pos == max_pos: + if reverse: + min_indices = range(min_idx, len(_lists[min_pos])) + max_indices = range(max_idx) + return chain( + map(_lists[max_pos].__getitem__, reversed(max_indices)), + map(_lists[min_pos].__getitem__, reversed(min_indices)), + ) + + min_indices = range(min_idx, len(_lists[min_pos])) + max_indices = range(max_idx) return chain( - reversed(_lists[max_pos][:max_idx]), - reversed(_lists[min_pos][min_idx:]), + map(_lists[min_pos].__getitem__, min_indices), + map(_lists[max_pos].__getitem__, max_indices), ) - elif not reverse: + + if reverse: + min_indices = range(min_idx, len(_lists[min_pos])) + sublist_indices = range(next_pos, max_pos) + sublists = map(_lists.__getitem__, reversed(sublist_indices)) + max_indices = range(max_idx) return chain( - _lists[min_pos][min_idx:], - chain.from_iterable(_lists[(min_pos + 1):max_pos]), - _lists[max_pos][:max_idx], + map(_lists[max_pos].__getitem__, reversed(max_indices)), + chain.from_iterable(map(reversed, sublists)), + map(_lists[min_pos].__getitem__, reversed(min_indices)), ) - temp = map(reversed, reversed(_lists[(min_pos + 1):max_pos])) + min_indices = range(min_idx, len(_lists[min_pos])) + sublist_indices = range(next_pos, max_pos) + sublists = map(_lists.__getitem__, sublist_indices) + max_indices = range(max_idx) return chain( - reversed(_lists[max_pos][:max_idx]), - chain.from_iterable(temp), - reversed(_lists[min_pos][min_idx:]), + map(_lists[min_pos].__getitem__, min_indices), + chain.from_iterable(sublists), + map(_lists[max_pos].__getitem__, max_indices), ) + def irange(self, minimum=None, maximum=None, inclusive=(True, True), reverse=False): - """ - Create an iterator of values between `minimum` and `maximum`. - - `inclusive` is a pair of booleans that indicates whether the minimum - and maximum ought to be included in the range, respectively. The - default is (True, True) such that the range is inclusive of both - minimum and maximum. + """Create an iterator of values between `minimum` and `maximum`. Both `minimum` and `maximum` default to `None` which is automatically - inclusive of the start and end of the list, respectively. + inclusive of the beginning and end of the sorted list. + + The argument `inclusive` is a pair of booleans that indicates whether + the minimum and maximum ought to be included in the range, + respectively. The default is ``(True, True)`` such that the range is + inclusive of both minimum and maximum. When `reverse` is `True` the values are yielded from the iterator in reverse order; `reverse` defaults to `False`. + + >>> sl = SortedList('abcdefghij') + >>> it = sl.irange('c', 'f') + >>> list(it) + ['c', 'd', 'e', 'f'] + + :param minimum: minimum value to start iterating + :param maximum: maximum value to stop iterating + :param inclusive: pair of booleans + :param bool reverse: yield values in reverse order + :return: iterator + """ _maxes = self._maxes @@ -981,286 +1135,263 @@ return self._islice(min_pos, min_idx, max_pos, max_idx, reverse) + def __len__(self): - """Return the number of elements in the list.""" - return self._len + """Return the size of the sorted list. + + ``sl.__len__()`` <==> ``len(sl)`` + + :return: size of sorted list - def bisect_left(self, val): """ - Similar to the *bisect* module in the standard library, this returns an - appropriate index to insert *val*. If *val* is already present, the - insertion point will be before (to the left of) any existing entries. + return self._len + + + def bisect_left(self, value): + """Return an index to insert `value` in the sorted list. + + If the `value` is already present, the insertion point will be before + (to the left of) any existing values. + + Similar to the `bisect` module in the standard library. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sl = SortedList([10, 11, 12, 13, 14]) + >>> sl.bisect_left(12) + 2 + + :param value: insertion index of value in sorted list + :return: index + """ _maxes = self._maxes if not _maxes: return 0 - pos = bisect_left(_maxes, val) + pos = bisect_left(_maxes, value) if pos == len(_maxes): return self._len - idx = bisect_left(self._lists[pos], val) - + idx = bisect_left(self._lists[pos], value) return self._loc(pos, idx) - def bisect_right(self, val): - """ - Same as *bisect_left*, but if *val* is already present, the insertion - point will be after (to the right of) any existing entries. + + def bisect_right(self, value): + """Return an index to insert `value` in the sorted list. + + Similar to `bisect_left`, but if `value` is already present, the + insertion point with be after (to the right of) any existing values. + + Similar to the `bisect` module in the standard library. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sl = SortedList([10, 11, 12, 13, 14]) + >>> sl.bisect_right(12) + 3 + + :param value: insertion index of value in sorted list + :return: index + """ _maxes = self._maxes if not _maxes: return 0 - pos = bisect_right(_maxes, val) + pos = bisect_right(_maxes, value) if pos == len(_maxes): return self._len - idx = bisect_right(self._lists[pos], val) - + idx = bisect_right(self._lists[pos], value) return self._loc(pos, idx) bisect = bisect_right _bisect_right = bisect_right - def count(self, val): - """Return the number of occurrences of *val* in the list.""" - # pylint: disable=arguments-differ + + def count(self, value): + """Return number of occurrences of `value` in the sorted list. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sl = SortedList([1, 2, 2, 3, 3, 3, 4, 4, 4, 4]) + >>> sl.count(3) + 3 + + :param value: value to count in sorted list + :return: count + + """ _maxes = self._maxes if not _maxes: return 0 - pos_left = bisect_left(_maxes, val) + pos_left = bisect_left(_maxes, value) if pos_left == len(_maxes): return 0 _lists = self._lists - idx_left = bisect_left(_lists[pos_left], val) - pos_right = bisect_right(_maxes, val) + idx_left = bisect_left(_lists[pos_left], value) + pos_right = bisect_right(_maxes, value) if pos_right == len(_maxes): return self._len - self._loc(pos_left, idx_left) - idx_right = bisect_right(_lists[pos_right], val) + idx_right = bisect_right(_lists[pos_right], value) if pos_left == pos_right: return idx_right - idx_left right = self._loc(pos_right, idx_right) left = self._loc(pos_left, idx_left) - return right - left + def copy(self): - """Return a shallow copy of the sorted list.""" + """Return a shallow copy of the sorted list. + + Runtime complexity: `O(n)` + + :return: new sorted list + + """ return self.__class__(self) __copy__ = copy - def append(self, val): - """ - Append the element *val* to the list. Raises a ValueError if the *val* - would violate the sort order. - """ - # pylint: disable=arguments-differ - _lists = self._lists - _maxes = self._maxes - if not _maxes: - _maxes.append(val) - _lists.append([val]) - self._len = 1 - return + def append(self, value): + """Raise not-implemented error. - pos = len(_lists) - 1 + Implemented to override `MutableSequence.append` which provides an + erroneous default implementation. - if val < _lists[pos][-1]: - msg = '{0!r} not in sort order at index {1}'.format(val, self._len) - raise ValueError(msg) + :raises NotImplementedError: use ``sl.add(value)`` instead + + """ + raise NotImplementedError('use ``sl.add(value)`` instead') - _maxes[pos] = val - _lists[pos].append(val) - self._len += 1 - self._expand(pos) def extend(self, values): + """Raise not-implemented error. + + Implemented to override `MutableSequence.extend` which provides an + erroneous default implementation. + + :raises NotImplementedError: use ``sl.update(values)`` instead + """ - Extend the list by appending all elements from the *values*. Raises a - ValueError if the sort order would be violated. - """ - _lists = self._lists - _maxes = self._maxes - _load = self._load + raise NotImplementedError('use ``sl.update(values)`` instead') - if not isinstance(values, list): - values = list(values) - if not values: - return + def insert(self, index, value): + """Raise not-implemented error. - if any(values[pos - 1] > values[pos] - for pos in range(1, len(values))): - raise ValueError('given sequence not in sort order') + :raises NotImplementedError: use ``sl.add(value)`` instead - offset = 0 + """ + raise NotImplementedError('use ``sl.add(value)`` instead') - if _maxes: - if values[0] < _lists[-1][-1]: - msg = '{0!r} not in sort order at index {1}'.format(values[0], self._len) - raise ValueError(msg) - - if len(_lists[-1]) < self._half: - _lists[-1].extend(values[:_load]) - _maxes[-1] = _lists[-1][-1] - offset = _load - - len_lists = len(_lists) - - for idx in range(offset, len(values), _load): - _lists.append(values[idx:(idx + _load)]) - _maxes.append(_lists[-1][-1]) - _index = self._index + def pop(self, index=-1): + """Remove and return value at `index` in sorted list. - if len_lists == len(_lists): - len_index = len(_index) - if len_index > 0: - len_values = len(values) - child = len_index - 1 - while child: - _index[child] += len_values - child = (child - 1) >> 1 - _index[0] += len_values - else: - del _index[:] + Raise :exc:`IndexError` if the sorted list is empty or index is out of + range. - self._len += len(values) + Negative indices are supported. - def insert(self, idx, val): - """ - Insert the element *val* into the list at *idx*. Raises a ValueError if - the *val* at *idx* would violate the sort order. - """ - # pylint: disable=arguments-differ - _len = self._len - _lists = self._lists - _maxes = self._maxes - - if idx < 0: - idx += _len - if idx < 0: - idx = 0 - if idx > _len: - idx = _len + Runtime complexity: `O(log(n))` -- approximate. - if not _maxes: - # The idx must be zero by the inequalities above. - _maxes.append(val) - _lists.append([val]) - self._len = 1 - return + >>> sl = SortedList('abcde') + >>> sl.pop() + 'e' + >>> sl.pop(2) + 'c' + >>> sl + SortedList(['a', 'b', 'd']) - if not idx: - if val > _lists[0][0]: - msg = '{0!r} not in sort order at index {1}'.format(val, 0) - raise ValueError(msg) - else: - _lists[0].insert(0, val) - self._expand(0) - self._len += 1 - return + :param int index: index of value (default -1) + :return: value + :raises IndexError: if index is out of range - if idx == _len: - pos = len(_lists) - 1 - if _lists[pos][-1] > val: - msg = '{0!r} not in sort order at index {1}'.format(val, _len) - raise ValueError(msg) - else: - _lists[pos].append(val) - _maxes[pos] = _lists[pos][-1] - self._expand(pos) - self._len += 1 - return - - pos, idx = self._pos(idx) - idx_before = idx - 1 - if idx_before < 0: - pos_before = pos - 1 - idx_before = len(_lists[pos_before]) - 1 - else: - pos_before = pos - - before = _lists[pos_before][idx_before] - if before <= val <= _lists[pos][idx]: - _lists[pos].insert(idx, val) - self._expand(pos) - self._len += 1 - else: - msg = '{0!r} not in sort order at index {1}'.format(val, idx) - raise ValueError(msg) - - def pop(self, idx=-1): """ - Remove and return item at *idx* (default last). Raises IndexError if - list is empty or index is out of range. Negative indices are supported, - as for slice indices. - """ - # pylint: disable=arguments-differ if not self._len: raise IndexError('pop index out of range') _lists = self._lists - if idx == 0: + if index == 0: val = _lists[0][0] self._delete(0, 0) return val - if idx == -1: + if index == -1: pos = len(_lists) - 1 loc = len(_lists[pos]) - 1 val = _lists[pos][loc] self._delete(pos, loc) return val - if 0 <= idx < len(_lists[0]): - val = _lists[0][idx] - self._delete(0, idx) + if 0 <= index < len(_lists[0]): + val = _lists[0][index] + self._delete(0, index) return val len_last = len(_lists[-1]) - if -len_last < idx < 0: + if -len_last < index < 0: pos = len(_lists) - 1 - loc = len_last + idx + loc = len_last + index val = _lists[pos][loc] self._delete(pos, loc) return val - pos, idx = self._pos(idx) + pos, idx = self._pos(index) val = _lists[pos][idx] self._delete(pos, idx) - return val - def index(self, val, start=None, stop=None): - """ - Return the smallest *k* such that L[k] == val and i <= k < j`. Raises - ValueError if *val* is not present. *stop* defaults to the end of the - list. *start* defaults to the beginning. Negative indices are supported, - as for slice indices. + + def index(self, value, start=None, stop=None): + """Return first index of value in sorted list. + + Raise ValueError if `value` is not present. + + Index must be between `start` and `stop` for the `value` to be + considered present. The default value, None, for `start` and `stop` + indicate the beginning and end of the sorted list. + + Negative indices are supported. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> sl = SortedList('abcde') + >>> sl.index('d') + 3 + >>> sl.index('z') + Traceback (most recent call last): + ... + ValueError: 'z' is not in list + + :param value: value in sorted list + :param int start: start index (default None, start of sorted list) + :param int stop: stop index (default None, end of sorted list) + :return: index of value + :raises ValueError: if value is not present + """ - # pylint: disable=arguments-differ _len = self._len if not _len: - raise ValueError('{0!r} is not in list'.format(val)) + raise ValueError('{0!r} is not in list'.format(value)) if start is None: start = 0 @@ -1277,19 +1408,19 @@ stop = _len if stop <= start: - raise ValueError('{0!r} is not in list'.format(val)) + raise ValueError('{0!r} is not in list'.format(value)) _maxes = self._maxes - pos_left = bisect_left(_maxes, val) + pos_left = bisect_left(_maxes, value) if pos_left == len(_maxes): - raise ValueError('{0!r} is not in list'.format(val)) + raise ValueError('{0!r} is not in list'.format(value)) _lists = self._lists - idx_left = bisect_left(_lists[pos_left], val) + idx_left = bisect_left(_lists[pos_left], value) - if _lists[pos_left][idx_left] != val: - raise ValueError('{0!r} is not in list'.format(val)) + if _lists[pos_left][idx_left] != value: + raise ValueError('{0!r} is not in list'.format(value)) stop -= 1 left = self._loc(pos_left, idx_left) @@ -1298,153 +1429,215 @@ if left <= stop: return left else: - right = self._bisect_right(val) - 1 + right = self._bisect_right(value) - 1 if start <= right: return start - raise ValueError('{0!r} is not in list'.format(val)) + raise ValueError('{0!r} is not in list'.format(value)) + + + def __add__(self, other): + """Return new sorted list containing all values in both sequences. + + ``sl.__add__(other)`` <==> ``sl + other`` + + Values in `other` do not need to be in sorted order. + + Runtime complexity: `O(n*log(n))` + + >>> sl1 = SortedList('bat') + >>> sl2 = SortedList('cat') + >>> sl1 + sl2 + SortedList(['a', 'a', 'b', 'c', 't', 't']) + + :param other: other iterable + :return: new sorted list - def __add__(self, that): - """ - Return a new sorted list containing all the elements in *self* and - *that*. Elements in *that* do not need to be properly ordered with - respect to *self*. """ values = reduce(iadd, self._lists, []) - values.extend(that) + values.extend(other) return self.__class__(values) - def __iadd__(self, that): - """ - Update *self* to include all values in *that*. Elements in *that* do not - need to be properly ordered with respect to *self*. + __radd__ = __add__ + + + def __iadd__(self, other): + """Update sorted list with values from `other`. + + ``sl.__iadd__(other)`` <==> ``sl += other`` + + Values in `other` do not need to be in sorted order. + + Runtime complexity: `O(k*log(n))` -- approximate. + + >>> sl = SortedList('bat') + >>> sl += 'cat' + >>> sl + SortedList(['a', 'a', 'b', 'c', 't', 't']) + + :param other: other iterable + :return: existing sorted list + """ - self._update(that) + self._update(other) return self - def __mul__(self, that): - """ - Return a new sorted list containing *that* shallow copies of each item - in SortedList. + + def __mul__(self, num): + """Return new sorted list with `num` shallow copies of values. + + ``sl.__mul__(num)`` <==> ``sl * num`` + + Runtime complexity: `O(n*log(n))` + + >>> sl = SortedList('abc') + >>> sl * 3 + SortedList(['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c']) + + :param int num: count of shallow copies + :return: new sorted list + """ - values = reduce(iadd, self._lists, []) * that + values = reduce(iadd, self._lists, []) * num return self.__class__(values) - def __imul__(self, that): - """ - Increase the length of the list by appending *that* shallow copies of - each item. + __rmul__ = __mul__ + + + def __imul__(self, num): + """Update the sorted list with `num` shallow copies of values. + + ``sl.__imul__(num)`` <==> ``sl *= num`` + + Runtime complexity: `O(n*log(n))` + + >>> sl = SortedList('abc') + >>> sl *= 3 + >>> sl + SortedList(['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c']) + + :param int num: count of shallow copies + :return: existing sorted list + """ - values = reduce(iadd, self._lists, []) * that + values = reduce(iadd, self._lists, []) * num self._clear() self._update(values) return self - def _make_cmp(self, seq_op, doc): + + def __make_cmp(seq_op, symbol, doc): "Make comparator method." - def comparer(self, that): + def comparer(self, other): "Compare method for sorted list and sequence." - # pylint: disable=protected-access - if not isinstance(that, Sequence): + if not isinstance(other, Sequence): return NotImplemented self_len = self._len - len_that = len(that) + len_other = len(other) - if self_len != len_that: - if seq_op is op.eq: + if self_len != len_other: + if seq_op is eq: return False - if seq_op is op.ne: + if seq_op is ne: return True - for alpha, beta in zip(self, that): + for alpha, beta in zip(self, other): if alpha != beta: return seq_op(alpha, beta) - return seq_op(self_len, len_that) + return seq_op(self_len, len_other) + + seq_op_name = seq_op.__name__ + comparer.__name__ = '__{0}__'.format(seq_op_name) + doc_str = """Return true if and only if sorted list is {0} `other`. + + ``sl.__{1}__(other)`` <==> ``sl {2} other`` + + Comparisons use lexicographical order as with sequences. - comparer.__name__ = '__{0}__'.format(seq_op.__name__) - doc_str = 'Return `True` if and only if Sequence is {0} `that`.' - comparer.__doc__ = doc_str.format(doc) + Runtime complexity: `O(n)` + :param other: `other` sequence + :return: true if sorted list is {0} `other` + + """ + comparer.__doc__ = dedent(doc_str.format(doc, seq_op_name, symbol)) return comparer - __eq__ = _make_cmp(None, op.eq, 'equal to') - __ne__ = _make_cmp(None, op.ne, 'not equal to') - __lt__ = _make_cmp(None, op.lt, 'less than') - __gt__ = _make_cmp(None, op.gt, 'greater than') - __le__ = _make_cmp(None, op.le, 'less than or equal to') - __ge__ = _make_cmp(None, op.ge, 'greater than or equal to') - @recursive_repr + __eq__ = __make_cmp(eq, '==', 'equal to') + __ne__ = __make_cmp(ne, '!=', 'not equal to') + __lt__ = __make_cmp(lt, '<', 'less than') + __gt__ = __make_cmp(gt, '>', 'greater than') + __le__ = __make_cmp(le, '<=', 'less than or equal to') + __ge__ = __make_cmp(ge, '>=', 'greater than or equal to') + __make_cmp = staticmethod(__make_cmp) + + + @recursive_repr() def __repr__(self): - """Return string representation of sequence.""" - return '{0}({1!r})'.format(type(self).__name__, list(self)) + """Return string representation of sorted list. - def _check(self): - try: - # Check load parameters. + ``sl.__repr__()`` <==> ``repr(sl)`` - assert self._load >= 4 - assert self._half == (self._load >> 1) - assert self._dual == (self._load << 1) + :return: string representation - # Check empty sorted list case. + """ + return '{0}({1!r})'.format(type(self).__name__, list(self)) - if self._maxes == []: - assert self._lists == [] - return - assert self._maxes and self._lists + def _check(self): + """Check invariants of sorted list. + + Runtime complexity: `O(n)` + + """ + try: + assert self._load >= 4 + assert len(self._maxes) == len(self._lists) + assert self._len == sum(len(sublist) for sublist in self._lists) # Check all sublists are sorted. - assert all(sublist[pos - 1] <= sublist[pos] - for sublist in self._lists - for pos in range(1, len(sublist))) + for sublist in self._lists: + for pos in range(1, len(sublist)): + assert sublist[pos - 1] <= sublist[pos] # Check beginning/end of sublists are sorted. for pos in range(1, len(self._lists)): assert self._lists[pos - 1][-1] <= self._lists[pos][0] - # Check length of _maxes and _lists match. - - assert len(self._maxes) == len(self._lists) - - # Check _maxes is a map of _lists. + # Check _maxes index is the last value of each sublist. - assert all(self._maxes[pos] == self._lists[pos][-1] - for pos in range(len(self._maxes))) + for pos in range(len(self._maxes)): + assert self._maxes[pos] == self._lists[pos][-1] - # Check load level is less than _dual. + # Check sublist lengths are less than double load-factor. - assert all(len(sublist) <= self._dual for sublist in self._lists) + double = self._load << 1 + assert all(len(sublist) <= double for sublist in self._lists) - # Check load level is greater than _half for all + # Check sublist lengths are greater than half load-factor for all # but the last sublist. - assert all(len(self._lists[pos]) >= self._half - for pos in range(0, len(self._lists) - 1)) - - # Check length. - - assert self._len == sum(len(sublist) for sublist in self._lists) - - # Check index. + half = self._load >> 1 + for pos in range(0, len(self._lists) - 1): + assert len(self._lists[pos]) >= half if self._index: - assert len(self._index) == self._offset + len(self._lists) assert self._len == self._index[0] + assert len(self._index) == self._offset + len(self._lists) + + # Check index leaf nodes equal length of sublists. - def test_offset_pos(pos): - "Test positional indexing offset." - from_index = self._index[self._offset + pos] - return from_index == len(self._lists[pos]) + for pos in range(len(self._lists)): + leaf = self._index[self._offset + pos] + assert leaf == len(self._lists[pos]) - assert all(test_offset_pos(pos) - for pos in range(len(self._lists))) + # Check index branch nodes are the sum of their children. for pos in range(self._offset): child = (pos << 1) + 1 @@ -1454,16 +1647,13 @@ assert self._index[pos] == self._index[child] else: child_sum = self._index[child] + self._index[child + 1] - assert self._index[pos] == child_sum - + assert child_sum == self._index[pos] except: import sys import traceback - traceback.print_exc(file=sys.stdout) - print('len', self._len) - print('load', self._load, self._half, self._dual) + print('load', self._load) print('offset', self._offset) print('len_index', len(self._index)) print('index', self._index) @@ -1471,55 +1661,92 @@ print('maxes', self._maxes) print('len_lists', len(self._lists)) print('lists', self._lists) - raise + def identity(value): "Identity function." return value -class SortedListWithKey(SortedList): - """ - SortedListWithKey provides most of the same methods as a list but keeps - the items in sorted order. + +class SortedKeyList(SortedList): + """Sorted-key list is a subtype of sorted list. + + The sorted-key list maintains values in comparison order based on the + result of a key function applied to every value. + + All the same methods that are available in :class:`SortedList` are also + available in :class:`SortedKeyList`. + + Additional methods provided: + + * :attr:`SortedKeyList.key` + * :func:`SortedKeyList.bisect_key_left` + * :func:`SortedKeyList.bisect_key_right` + * :func:`SortedKeyList.irange_key` + + Some examples below use: + + >>> from operator import neg + >>> neg + + >>> neg(1) + -1 + """ - # pylint: disable=too-many-ancestors,abstract-method def __init__(self, iterable=None, key=identity): - """SortedListWithKey provides most of the same methods as list but keeps the - items in sorted order. + """Initialize sorted-key list instance. - An optional *iterable* provides an initial series of items to populate - the SortedListWithKey. + Optional `iterable` argument provides an initial iterable of values to + initialize the sorted-key list. - An optional *key* argument defines a callable that, like the `key` + Optional `key` argument defines a callable that, like the `key` argument to Python's `sorted` function, extracts a comparison key from - each element. The default is the identity function. + each value. The default is the identity function. + + Runtime complexity: `O(n*log(n))` + + >>> from operator import neg + >>> skl = SortedKeyList(key=neg) + >>> skl + SortedKeyList([], key=) + >>> skl = SortedKeyList([3, 1, 2], key=neg) + >>> skl + SortedKeyList([3, 2, 1], key=) + + :param iterable: initial values (optional) + :param key: function used to extract comparison key (optional) + """ - # pylint: disable=super-init-not-called + self._key = key self._len = 0 + self._load = self.DEFAULT_LOAD_FACTOR self._lists = [] self._keys = [] self._maxes = [] self._index = [] - self._key = key - self._load = LOAD - self._half = LOAD >> 1 - self._dual = LOAD << 1 self._offset = 0 if iterable is not None: self._update(iterable) + def __new__(cls, iterable=None, key=identity): return object.__new__(cls) + @property def key(self): - """Key function used to extract comparison key for sorting.""" + "Function used to extract comparison key from values." return self._key + def clear(self): - """Remove all the elements from the list.""" + """Remove all values from sorted-key list. + + Runtime complexity: `O(n)` + + """ self._len = 0 del self._lists[:] del self._keys[:] @@ -1528,48 +1755,65 @@ _clear = clear - def add(self, val): - """Add the element *val* to the list.""" + + def add(self, value): + """Add `value` to sorted-key list. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedKeyList(key=neg) + >>> skl.add(3) + >>> skl.add(1) + >>> skl.add(2) + >>> skl + SortedKeyList([3, 2, 1], key=) + + :param value: value to add to sorted-key list + + """ _lists = self._lists _keys = self._keys _maxes = self._maxes - key = self._key(val) + key = self._key(value) if _maxes: pos = bisect_right(_maxes, key) if pos == len(_maxes): pos -= 1 - _lists[pos].append(val) + _lists[pos].append(value) _keys[pos].append(key) _maxes[pos] = key else: idx = bisect_right(_keys[pos], key) - _lists[pos].insert(idx, val) + _lists[pos].insert(idx, value) _keys[pos].insert(idx, key) self._expand(pos) else: - _lists.append([val]) + _lists.append([value]) _keys.append([key]) _maxes.append(key) self._len += 1 + def _expand(self, pos): - """Splits sublists that are more than double the load level. + """Split sublists with length greater than double the load-factor. Updates the index when the sublist length is less than double the load level. This requires incrementing the nodes in a traversal from the - leaf node to the root. For an example traversal see self._loc. + leaf node to the root. For an example traversal see + ``SortedList._loc``. """ _lists = self._lists _keys = self._keys _index = self._index - if len(_keys[pos]) > self._dual: + if len(_keys[pos]) > (self._load << 1): _maxes = self._maxes _load = self._load @@ -1594,8 +1838,21 @@ child = (child - 1) >> 1 _index[0] += 1 + def update(self, iterable): - """Update the list by adding all elements from *iterable*.""" + """Update sorted-key list by adding all values from `iterable`. + + Runtime complexity: `O(k*log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedKeyList(key=neg) + >>> skl.update([3, 1, 2]) + >>> skl + SortedKeyList([3, 2, 1], key=) + + :param iterable: iterable of values to add + + """ _lists = self._lists _keys = self._keys _maxes = self._maxes @@ -1622,14 +1879,29 @@ _update = update - def __contains__(self, val): - """Return True if and only if *val* is an element in the list.""" + + def __contains__(self, value): + """Return true if `value` is an element of the sorted-key list. + + ``skl.__contains__(value)`` <==> ``value in skl`` + + Runtime complexity: `O(log(n))` + + >>> from operator import neg + >>> skl = SortedKeyList([1, 2, 3, 4, 5], key=neg) + >>> 3 in skl + True + + :param value: search for value in sorted-key list + :return: true if `value` in sorted-key list + + """ _maxes = self._maxes if not _maxes: return False - key = self._key(val) + key = self._key(value) pos = bisect_left(_maxes, key) if pos == len(_maxes): @@ -1646,7 +1918,7 @@ while True: if _keys[pos][idx] != key: return False - if _lists[pos][idx] == val: + if _lists[pos][idx] == value: return True idx += 1 if idx == len_sublist: @@ -1656,18 +1928,30 @@ len_sublist = len(_keys[pos]) idx = 0 - def discard(self, val): - """ - Remove the first occurrence of *val*. - If *val* is not a member, does nothing. + def discard(self, value): + """Remove `value` from sorted-key list if it is a member. + + If `value` is not a member, do nothing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedKeyList([5, 4, 3, 2, 1], key=neg) + >>> skl.discard(1) + >>> skl.discard(0) + >>> skl == [5, 4, 3, 2] + True + + :param value: `value` to discard from sorted-key list + """ _maxes = self._maxes if not _maxes: return - key = self._key(val) + key = self._key(value) pos = bisect_left(_maxes, key) if pos == len(_maxes): @@ -1682,7 +1966,7 @@ while True: if _keys[pos][idx] != key: return - if _lists[pos][idx] == val: + if _lists[pos][idx] == value: self._delete(pos, idx) return idx += 1 @@ -1693,22 +1977,38 @@ len_sublist = len(_keys[pos]) idx = 0 - def remove(self, val): - """ - Remove first occurrence of *val*. - Raises ValueError if *val* is not present. + def remove(self, value): + """Remove `value` from sorted-key list; `value` must be a member. + + If `value` is not a member, raise ValueError. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedKeyList([1, 2, 3, 4, 5], key=neg) + >>> skl.remove(5) + >>> skl == [4, 3, 2, 1] + True + >>> skl.remove(0) + Traceback (most recent call last): + ... + ValueError: 0 not in list + + :param value: `value` to remove from sorted-key list + :raises ValueError: if `value` is not in sorted-key list + """ _maxes = self._maxes if not _maxes: - raise ValueError('{0!r} not in list'.format(val)) + raise ValueError('{0!r} not in list'.format(value)) - key = self._key(val) + key = self._key(value) pos = bisect_left(_maxes, key) if pos == len(_maxes): - raise ValueError('{0!r} not in list'.format(val)) + raise ValueError('{0!r} not in list'.format(value)) _lists = self._lists _keys = self._keys @@ -1718,27 +2018,32 @@ while True: if _keys[pos][idx] != key: - raise ValueError('{0!r} not in list'.format(val)) - if _lists[pos][idx] == val: + raise ValueError('{0!r} not in list'.format(value)) + if _lists[pos][idx] == value: self._delete(pos, idx) return idx += 1 if idx == len_sublist: pos += 1 if pos == len_keys: - raise ValueError('{0!r} not in list'.format(val)) + raise ValueError('{0!r} not in list'.format(value)) len_sublist = len(_keys[pos]) idx = 0 + def _delete(self, pos, idx): - """ - Delete the item at the given (pos, idx). + """Delete value at the given `(pos, idx)`. Combines lists that are less than half the load level. Updates the index when the sublist length is more than half the load - level. This requires decrementing the nodes in a traversal from the leaf - node to the root. For an example traversal see self._loc. + level. This requires decrementing the nodes in a traversal from the + leaf node to the root. For an example traversal see + ``SortedList._loc``. + + :param int pos: lists index + :param int idx: sublist index + """ _lists = self._lists _keys = self._keys @@ -1753,8 +2058,7 @@ len_keys_pos = len(keys_pos) - if len_keys_pos > self._half: - + if len_keys_pos > (self._load >> 1): _maxes[pos] = keys_pos[-1] if _index: @@ -1763,9 +2067,7 @@ _index[child] -= 1 child = (child - 1) >> 1 _index[0] -= 1 - elif len(_keys) > 1: - if not pos: pos += 1 @@ -1780,220 +2082,78 @@ del _index[:] self._expand(prev) - elif len_keys_pos: - _maxes[pos] = keys_pos[-1] - else: - del _lists[pos] del _keys[pos] del _maxes[pos] del _index[:] - def _check_order(self, idx, key, val): - # pylint: disable=arguments-differ - _len = self._len - _keys = self._keys - - pos, loc = self._pos(idx) - - if idx < 0: - idx += _len - - # Check that the inserted value is not less than the - # previous value. - - if idx > 0: - idx_prev = loc - 1 - pos_prev = pos - - if idx_prev < 0: - pos_prev -= 1 - idx_prev = len(_keys[pos_prev]) - 1 - - if _keys[pos_prev][idx_prev] > key: - msg = '{0!r} not in sort order at index {1}'.format(val, idx) - raise ValueError(msg) - - # Check that the inserted value is not greater than - # the previous value. - - if idx < (_len - 1): - idx_next = loc + 1 - pos_next = pos - - if idx_next == len(_keys[pos_next]): - pos_next += 1 - idx_next = 0 - - if _keys[pos_next][idx_next] < key: - msg = '{0!r} not in sort order at index {1}'.format(val, idx) - raise ValueError(msg) - - def __setitem__(self, index, value): - """Replace the item at position *index* with *value*. - - Supports slice notation. Raises a :exc:`ValueError` if the sort order - would be violated. When used with a slice and iterable, the - :exc:`ValueError` is raised before the list is mutated if the sort - order would be violated by the operation. - - """ - # pylint: disable=too-many-locals - _lists = self._lists - _keys = self._keys - _maxes = self._maxes - _check_order = self._check_order - _pos = self._pos - - if isinstance(index, slice): - _len = self._len - start, stop, step = index.indices(_len) - indices = range(start, stop, step) - - # Copy value to avoid aliasing issues with self and cases where an - # iterator is given. - - values = tuple(value) - - if step != 1: - if len(values) != len(indices): - raise ValueError( - 'attempt to assign sequence of size %s' - ' to extended slice of size %s' - % (len(values), len(indices))) - - # Keep a log of values that are set so that we can - # roll back changes if ordering is violated. - - log = [] - _append = log.append - - for idx, val in zip(indices, values): - pos, loc = _pos(idx) - key = self._key(val) - _append((idx, _keys[pos][loc], key, _lists[pos][loc], val)) - _keys[pos][loc] = key - _lists[pos][loc] = val - if len(_keys[pos]) == (loc + 1): - _maxes[pos] = key - - try: - # Validate ordering of new values. - - for idx, oldkey, newkey, oldval, newval in log: - _check_order(idx, newkey, newval) - - except ValueError: - - # Roll back changes from log. - - for idx, oldkey, newkey, oldval, newval in log: - pos, loc = _pos(idx) - _keys[pos][loc] = oldkey - _lists[pos][loc] = oldval - if len(_keys[pos]) == (loc + 1): - _maxes[pos] = oldkey - - raise - else: - if start == 0 and stop == self._len: - self._clear() - return self._update(values) - - if stop < start: - # When calculating indices, stop may be less than start. - # For example: ...[5:3:1] results in slice(5, 3, 1) which - # is a valid but not useful stop index. - stop = start - - if values: - - # Check that given values are ordered properly. - - keys = tuple(map(self._key, values)) - alphas = iter(keys) - betas = iter(keys) - next(betas) - pairs = zip(alphas, betas) - - if not all(alpha <= beta for alpha, beta in pairs): - raise ValueError('given values not in sort order') - - # Check ordering in context of sorted list. - - if start: - pos, loc = _pos(start - 1) - if _keys[pos][loc] > keys[0]: - msg = '{0!r} not in sort order at index {1}'.format( - values[0], start) - raise ValueError(msg) - - if stop != _len: - pos, loc = _pos(stop) - if _keys[pos][loc] < keys[-1]: - msg = '{0!r} not in sort order at index {1}'.format( - values[-1], stop) - raise ValueError(msg) - - # Delete the existing values. - - self._delitem(index) - - # Insert the new values. - - _insert = self.insert - for idx, val in enumerate(values): - _insert(start + idx, val) - else: - pos, loc = _pos(index) - key = self._key(value) - _check_order(index, key, value) - _lists[pos][loc] = value - _keys[pos][loc] = key - if len(_lists[pos]) == (loc + 1): - _maxes[pos] = key def irange(self, minimum=None, maximum=None, inclusive=(True, True), reverse=False): - """ - Create an iterator of values between `minimum` and `maximum`. - - `inclusive` is a pair of booleans that indicates whether the minimum - and maximum ought to be included in the range, respectively. The - default is (True, True) such that the range is inclusive of both - minimum and maximum. + """Create an iterator of values between `minimum` and `maximum`. Both `minimum` and `maximum` default to `None` which is automatically - inclusive of the start and end of the list, respectively. + inclusive of the beginning and end of the sorted-key list. + + The argument `inclusive` is a pair of booleans that indicates whether + the minimum and maximum ought to be included in the range, + respectively. The default is ``(True, True)`` such that the range is + inclusive of both minimum and maximum. When `reverse` is `True` the values are yielded from the iterator in reverse order; `reverse` defaults to `False`. + + >>> from operator import neg + >>> skl = SortedKeyList([11, 12, 13, 14, 15], key=neg) + >>> it = skl.irange(14.5, 11.5) + >>> list(it) + [14, 13, 12] + + :param minimum: minimum value to start iterating + :param maximum: maximum value to stop iterating + :param inclusive: pair of booleans + :param bool reverse: yield values in reverse order + :return: iterator + """ - minimum = self._key(minimum) if minimum is not None else None - maximum = self._key(maximum) if maximum is not None else None + min_key = self._key(minimum) if minimum is not None else None + max_key = self._key(maximum) if maximum is not None else None return self._irange_key( - min_key=minimum, max_key=maximum, + min_key=min_key, max_key=max_key, inclusive=inclusive, reverse=reverse, ) + def irange_key(self, min_key=None, max_key=None, inclusive=(True, True), reverse=False): - """ - Create an iterator of values between `min_key` and `max_key`. - - `inclusive` is a pair of booleans that indicates whether the min_key - and max_key ought to be included in the range, respectively. The - default is (True, True) such that the range is inclusive of both - `min_key` and `max_key`. + """Create an iterator of values between `min_key` and `max_key`. Both `min_key` and `max_key` default to `None` which is automatically - inclusive of the start and end of the list, respectively. + inclusive of the beginning and end of the sorted-key list. + + The argument `inclusive` is a pair of booleans that indicates whether + the minimum and maximum ought to be included in the range, + respectively. The default is ``(True, True)`` such that the range is + inclusive of both minimum and maximum. When `reverse` is `True` the values are yielded from the iterator in reverse order; `reverse` defaults to `False`. + + >>> from operator import neg + >>> skl = SortedKeyList([11, 12, 13, 14, 15], key=neg) + >>> it = skl.irange_key(-14, -12) + >>> list(it) + [14, 13, 12] + + :param min_key: minimum key to start iterating + :param max_key: maximum key to stop iterating + :param inclusive: pair of booleans + :param bool reverse: yield values in reverse order + :return: iterator + """ _maxes = self._maxes @@ -2052,29 +2212,71 @@ _irange_key = irange_key - def bisect_left(self, val): - """ - Similar to the *bisect* module in the standard library, this returns an - appropriate index to insert *val*. If *val* is already present, the - insertion point will be before (to the left of) any existing entries. - """ - return self._bisect_key_left(self._key(val)) - def bisect_right(self, val): + def bisect_left(self, value): + """Return an index to insert `value` in the sorted-key list. + + If the `value` is already present, the insertion point will be before + (to the left of) any existing values. + + Similar to the `bisect` module in the standard library. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedKeyList([5, 4, 3, 2, 1], key=neg) + >>> skl.bisect_left(1) + 4 + + :param value: insertion index of value in sorted-key list + :return: index + """ - Same as *bisect_left*, but if *val* is already present, the insertion - point will be after (to the right of) any existing entries. + return self._bisect_key_left(self._key(value)) + + + def bisect_right(self, value): + """Return an index to insert `value` in the sorted-key list. + + Similar to `bisect_left`, but if `value` is already present, the + insertion point with be after (to the right of) any existing values. + + Similar to the `bisect` module in the standard library. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedList([5, 4, 3, 2, 1], key=neg) + >>> skl.bisect_right(1) + 5 + + :param value: insertion index of value in sorted-key list + :return: index + """ - return self._bisect_key_right(self._key(val)) + return self._bisect_key_right(self._key(value)) bisect = bisect_right + def bisect_key_left(self, key): - """ - Similar to the *bisect* module in the standard library, this returns an - appropriate index to insert a value with a given *key*. If values with - *key* are already present, the insertion point will be before (to the - left of) any existing entries. + """Return an index to insert `key` in the sorted-key list. + + If the `key` is already present, the insertion point will be before (to + the left of) any existing keys. + + Similar to the `bisect` module in the standard library. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedKeyList([5, 4, 3, 2, 1], key=neg) + >>> skl.bisect_key_left(-1) + 4 + + :param key: insertion index of key in sorted-key list + :return: index + """ _maxes = self._maxes @@ -2092,10 +2294,25 @@ _bisect_key_left = bisect_key_left + def bisect_key_right(self, key): - """ - Same as *bisect_key_left*, but if *key* is already present, the insertion - point will be after (to the right of) any existing entries. + """Return an index to insert `key` in the sorted-key list. + + Similar to `bisect_key_left`, but if `key` is already present, the + insertion point with be after (to the right of) any existing keys. + + Similar to the `bisect` module in the standard library. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedList([5, 4, 3, 2, 1], key=neg) + >>> skl.bisect_key_right(-1) + 5 + + :param key: insertion index of key in sorted-key list + :return: index + """ _maxes = self._maxes @@ -2114,14 +2331,27 @@ bisect_key = bisect_key_right _bisect_key_right = bisect_key_right - def count(self, val): - """Return the number of occurrences of *val* in the list.""" + + def count(self, value): + """Return number of occurrences of `value` in the sorted-key list. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedKeyList([4, 4, 4, 4, 3, 3, 3, 2, 2, 1], key=neg) + >>> skl.count(2) + 2 + + :param value: value to count in sorted-key list + :return: count + + """ _maxes = self._maxes if not _maxes: return 0 - key = self._key(val) + key = self._key(value) pos = bisect_left(_maxes, key) if pos == len(_maxes): @@ -2137,7 +2367,7 @@ while True: if _keys[pos][idx] != key: return total - if _lists[pos][idx] == val: + if _lists[pos][idx] == value: total += 1 idx += 1 if idx == len_sublist: @@ -2147,176 +2377,53 @@ len_sublist = len(_keys[pos]) idx = 0 - def copy(self): - """Return a shallow copy of the sorted list.""" - return self.__class__(self, key=self._key) - - __copy__ = copy - - def append(self, val): - """ - Append the element *val* to the list. Raises a ValueError if the *val* - would violate the sort order. - """ - # pylint: disable=arguments-differ - _lists = self._lists - _keys = self._keys - _maxes = self._maxes - key = self._key(val) - - if not _maxes: - _maxes.append(key) - _keys.append([key]) - _lists.append([val]) - self._len = 1 - return - - pos = len(_keys) - 1 - - if key < _keys[pos][-1]: - msg = '{0!r} not in sort order at index {1}'.format(val, self._len) - raise ValueError(msg) - - _lists[pos].append(val) - _keys[pos].append(key) - _maxes[pos] = key - self._len += 1 - self._expand(pos) - - def extend(self, values): - """ - Extend the list by appending all elements from the *values*. Raises a - ValueError if the sort order would be violated. - """ - _lists = self._lists - _keys = self._keys - _maxes = self._maxes - _load = self._load - - if not isinstance(values, list): - values = list(values) - - keys = list(map(self._key, values)) - - if any(keys[pos - 1] > keys[pos] - for pos in range(1, len(keys))): - raise ValueError('given sequence not in sort order') - - offset = 0 - - if _maxes: - if keys[0] < _keys[-1][-1]: - msg = '{0!r} not in sort order at index {1}'.format(values[0], self._len) - raise ValueError(msg) - - if len(_keys[-1]) < self._half: - _lists[-1].extend(values[:_load]) - _keys[-1].extend(keys[:_load]) - _maxes[-1] = _keys[-1][-1] - offset = _load - len_keys = len(_keys) + def copy(self): + """Return a shallow copy of the sorted-key list. - for idx in range(offset, len(keys), _load): - _lists.append(values[idx:(idx + _load)]) - _keys.append(keys[idx:(idx + _load)]) - _maxes.append(_keys[-1][-1]) + Runtime complexity: `O(n)` - _index = self._index + :return: new sorted-key list - if len_keys == len(_keys): - len_index = len(_index) - if len_index > 0: - len_values = len(values) - child = len_index - 1 - while child: - _index[child] += len_values - child = (child - 1) >> 1 - _index[0] += len_values - else: - del _index[:] - - self._len += len(values) - - def insert(self, idx, val): """ - Insert the element *val* into the list at *idx*. Raises a ValueError if - the *val* at *idx* would violate the sort order. - """ - _len = self._len - _lists = self._lists - _keys = self._keys - _maxes = self._maxes - - if idx < 0: - idx += _len - if idx < 0: - idx = 0 - if idx > _len: - idx = _len + return self.__class__(self, key=self._key) - key = self._key(val) + __copy__ = copy - if not _maxes: - self._len = 1 - _lists.append([val]) - _keys.append([key]) - _maxes.append(key) - return - if not idx: - if key > _keys[0][0]: - msg = '{0!r} not in sort order at index {1}'.format(val, 0) - raise ValueError(msg) - else: - self._len += 1 - _lists[0].insert(0, val) - _keys[0].insert(0, key) - self._expand(0) - return + def index(self, value, start=None, stop=None): + """Return first index of value in sorted-key list. - if idx == _len: - pos = len(_keys) - 1 - if _keys[pos][-1] > key: - msg = '{0!r} not in sort order at index {1}'.format(val, _len) - raise ValueError(msg) - else: - self._len += 1 - _lists[pos].append(val) - _keys[pos].append(key) - _maxes[pos] = _keys[pos][-1] - self._expand(pos) - return + Raise ValueError if `value` is not present. - pos, idx = self._pos(idx) - idx_before = idx - 1 - if idx_before < 0: - pos_before = pos - 1 - idx_before = len(_keys[pos_before]) - 1 - else: - pos_before = pos + Index must be between `start` and `stop` for the `value` to be + considered present. The default value, None, for `start` and `stop` + indicate the beginning and end of the sorted-key list. + + Negative indices are supported. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> from operator import neg + >>> skl = SortedKeyList([5, 4, 3, 2, 1], key=neg) + >>> skl.index(2) + 3 + >>> skl.index(0) + Traceback (most recent call last): + ... + ValueError: 0 is not in list + + :param value: value in sorted-key list + :param int start: start index (default None, start of sorted-key list) + :param int stop: stop index (default None, end of sorted-key list) + :return: index of value + :raises ValueError: if value is not present - before = _keys[pos_before][idx_before] - if before <= key <= _keys[pos][idx]: - self._len += 1 - _lists[pos].insert(idx, val) - _keys[pos].insert(idx, key) - self._expand(pos) - else: - msg = '{0!r} not in sort order at index {1}'.format(val, idx) - raise ValueError(msg) - - def index(self, val, start=None, stop=None): - """ - Return the smallest *k* such that L[k] == val and i <= k < j`. Raises - ValueError if *val* is not present. *stop* defaults to the end of the - list. *start* defaults to the beginning. Negative indices are supported, - as for slice indices. """ _len = self._len if not _len: - raise ValueError('{0!r} is not in list'.format(val)) + raise ValueError('{0!r} is not in list'.format(value)) if start is None: start = 0 @@ -2333,14 +2440,14 @@ stop = _len if stop <= start: - raise ValueError('{0!r} is not in list'.format(val)) + raise ValueError('{0!r} is not in list'.format(value)) _maxes = self._maxes - key = self._key(val) + key = self._key(value) pos = bisect_left(_maxes, key) if pos == len(_maxes): - raise ValueError('{0!r} is not in list'.format(val)) + raise ValueError('{0!r} is not in list'.format(value)) stop -= 1 _lists = self._lists @@ -2351,8 +2458,8 @@ while True: if _keys[pos][idx] != key: - raise ValueError('{0!r} is not in list'.format(val)) - if _lists[pos][idx] == val: + raise ValueError('{0!r} is not in list'.format(value)) + if _lists[pos][idx] == value: loc = self._loc(pos, idx) if start <= loc <= stop: return loc @@ -2362,139 +2469,145 @@ if idx == len_sublist: pos += 1 if pos == len_keys: - raise ValueError('{0!r} is not in list'.format(val)) + raise ValueError('{0!r} is not in list'.format(value)) len_sublist = len(_keys[pos]) idx = 0 - raise ValueError('{0!r} is not in list'.format(val)) + raise ValueError('{0!r} is not in list'.format(value)) + + + def __add__(self, other): + """Return new sorted-key list containing all values in both sequences. + + ``skl.__add__(other)`` <==> ``skl + other`` + + Values in `other` do not need to be in sorted-key order. + + Runtime complexity: `O(n*log(n))` + + >>> from operator import neg + >>> skl1 = SortedKeyList([5, 4, 3], key=neg) + >>> skl2 = SortedKeyList([2, 1, 0], key=neg) + >>> skl1 + skl2 + SortedKeyList([5, 4, 3, 2, 1, 0], key=) + + :param other: other iterable + :return: new sorted-key list - def __add__(self, that): - """ - Return a new sorted list containing all the elements in *self* and - *that*. Elements in *that* do not need to be properly ordered with - respect to *self*. """ values = reduce(iadd, self._lists, []) - values.extend(that) + values.extend(other) return self.__class__(values, key=self._key) - def __mul__(self, that): - """ - Return a new sorted list containing *that* shallow copies of each item - in SortedListWithKey. + __radd__ = __add__ + + + def __mul__(self, num): + """Return new sorted-key list with `num` shallow copies of values. + + ``skl.__mul__(num)`` <==> ``skl * num`` + + Runtime complexity: `O(n*log(n))` + + >>> from operator import neg + >>> skl = SortedKeyList([3, 2, 1], key=neg) + >>> skl * 2 + SortedKeyList([3, 3, 2, 2, 1, 1], key=) + + :param int num: count of shallow copies + :return: new sorted-key list + """ - values = reduce(iadd, self._lists, []) * that + values = reduce(iadd, self._lists, []) * num return self.__class__(values, key=self._key) - def __imul__(self, that): - """ - Increase the length of the list by appending *that* shallow copies of - each item. - """ - values = reduce(iadd, self._lists, []) * that - self._clear() - self._update(values) - return self - @recursive_repr + @recursive_repr() def __repr__(self): - """Return string representation of sequence.""" - name = type(self).__name__ - values = list(self) - _key = self._key - return '{0}({1!r}, key={2!r})'.format(name, values, _key) + """Return string representation of sorted-key list. - def _check(self): - try: - # Check load parameters. + ``skl.__repr__()`` <==> ``repr(skl)`` - assert self._load >= 4 - assert self._half == (self._load >> 1) - assert self._dual == (self._load << 1) + :return: string representation - # Check empty sorted list case. + """ + type_name = type(self).__name__ + return '{0}({1!r}, key={2!r})'.format(type_name, list(self), self._key) - if self._maxes == []: - assert self._keys == [] - assert self._lists == [] - return - assert self._maxes and self._keys and self._lists + def _check(self): + """Check invariants of sorted-key list. + + Runtime complexity: `O(n)` + + """ + try: + assert self._load >= 4 + assert len(self._maxes) == len(self._lists) == len(self._keys) + assert self._len == sum(len(sublist) for sublist in self._lists) # Check all sublists are sorted. - assert all(sublist[pos - 1] <= sublist[pos] - for sublist in self._keys - for pos in range(1, len(sublist))) + for sublist in self._keys: + for pos in range(1, len(sublist)): + assert sublist[pos - 1] <= sublist[pos] # Check beginning/end of sublists are sorted. for pos in range(1, len(self._keys)): assert self._keys[pos - 1][-1] <= self._keys[pos][0] - # Check length of _maxes and _lists match. - - assert len(self._maxes) == len(self._lists) == len(self._keys) - # Check _keys matches _key mapped to _lists. - assert all(len(val_list) == len(key_list) - for val_list, key_list in zip(self._lists, self._keys)) - assert all(self._key(val) == key for val, key in - zip((_val for _val_list in self._lists for _val in _val_list), - (_key for _key_list in self._keys for _key in _key_list))) + for val_sublist, key_sublist in zip(self._lists, self._keys): + assert len(val_sublist) == len(key_sublist) + for val, key in zip(val_sublist, key_sublist): + assert self._key(val) == key - # Check _maxes is a map of _keys. + # Check _maxes index is the last value of each sublist. - assert all(self._maxes[pos] == self._keys[pos][-1] - for pos in range(len(self._maxes))) + for pos in range(len(self._maxes)): + assert self._maxes[pos] == self._keys[pos][-1] - # Check load level is less than _dual. + # Check sublist lengths are less than double load-factor. - assert all(len(sublist) <= self._dual for sublist in self._lists) + double = self._load << 1 + assert all(len(sublist) <= double for sublist in self._lists) - # Check load level is greater than _half for all + # Check sublist lengths are greater than half load-factor for all # but the last sublist. - assert all(len(self._lists[pos]) >= self._half - for pos in range(0, len(self._lists) - 1)) - - # Check length. - - assert self._len == sum(len(sublist) for sublist in self._lists) - - # Check index. + half = self._load >> 1 + for pos in range(0, len(self._lists) - 1): + assert len(self._lists[pos]) >= half if self._index: - assert len(self._index) == self._offset + len(self._lists) assert self._len == self._index[0] + assert len(self._index) == self._offset + len(self._lists) + + # Check index leaf nodes equal length of sublists. - def test_offset_pos(pos): - "Test positional indexing offset." - from_index = self._index[self._offset + pos] - return from_index == len(self._lists[pos]) + for pos in range(len(self._lists)): + leaf = self._index[self._offset + pos] + assert leaf == len(self._lists[pos]) - assert all(test_offset_pos(pos) - for pos in range(len(self._lists))) + # Check index branch nodes are the sum of their children. for pos in range(self._offset): child = (pos << 1) + 1 - if self._index[pos] == 0: - assert child >= len(self._index) + if child >= len(self._index): + assert self._index[pos] == 0 elif child + 1 == len(self._index): assert self._index[pos] == self._index[child] else: child_sum = self._index[child] + self._index[child + 1] - assert self._index[pos] == child_sum - + assert child_sum == self._index[pos] except: import sys import traceback - traceback.print_exc(file=sys.stdout) - print('len', self._len) - print('load', self._load, self._half, self._dual) + print('load', self._load) print('offset', self._offset) print('len_index', len(self._index)) print('index', self._index) @@ -2504,5 +2617,7 @@ print('keys', self._keys) print('len_lists', len(self._lists)) print('lists', self._lists) - raise + + +SortedListWithKey = SortedKeyList diff -Nru sortedcontainers-1.5.9/sortedcontainers/sortedset.py sortedcontainers-2.0.4/sortedcontainers/sortedset.py --- sortedcontainers-1.5.9/sortedcontainers/sortedset.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/sortedcontainers/sortedset.py 2018-06-07 05:34:49.000000000 +0000 @@ -1,50 +1,141 @@ -"""Sorted set implementation. +"""Sorted Set +============= + +:doc:`Sorted Containers` is an Apache2 licensed Python sorted +collections library, written in pure-Python, and fast as C-extensions. The +:doc:`introduction` is the best way to get started. + +Sorted set implementations: + +.. currentmodule:: sortedcontainers + +* :class:`SortedSet` """ -from collections import Set, MutableSet, Sequence +from collections import MutableSet, Sequence, Set from itertools import chain -import operator as op +from operator import eq, ne, gt, ge, lt, le +from textwrap import dedent + +from .sortedlist import SortedList, recursive_repr -from .sortedlist import SortedList, recursive_repr, SortedListWithKey class SortedSet(MutableSet, Sequence): - """ - A `SortedSet` provides the same methods as a `set`. Additionally, a - `SortedSet` maintains its items in sorted order, allowing the `SortedSet` to - be indexed. + """Sorted set is a sorted mutable set. + + Sorted set values are maintained in sorted order. The design of sorted set + is simple: sorted set uses a set for set-operations and maintains a sorted + list of values. + + Sorted set values must be hashable and comparable. The hash and total + ordering of values must not change while they are stored in the sorted set. + + Mutable set methods: + + * :func:`SortedSet.__contains__` + * :func:`SortedSet.__iter__` + * :func:`SortedSet.__len__` + * :func:`SortedSet.add` + * :func:`SortedSet.discard` + + Sequence methods: + + * :func:`SortedSet.__getitem__` + * :func:`SortedSet.__delitem__` + * :func:`SortedSet.__reversed__` + + Methods for removing values: + + * :func:`SortedSet.clear` + * :func:`SortedSet.pop` + * :func:`SortedSet.remove` + + Set-operation methods: + + * :func:`SortedSet.difference` + * :func:`SortedSet.difference_update` + * :func:`SortedSet.intersection` + * :func:`SortedSet.intersection_update` + * :func:`SortedSet.symmetric_difference` + * :func:`SortedSet.symmetric_difference_update` + * :func:`SortedSet.union` + * :func:`SortedSet.update` + + Methods for miscellany: + + * :func:`SortedSet.copy` + * :func:`SortedSet.count` + * :func:`SortedSet.__repr__` + * :func:`SortedSet._check` + + Sorted list methods available: + + * :func:`SortedList.bisect_left` + * :func:`SortedList.bisect_right` + * :func:`SortedList.index` + * :func:`SortedList.irange` + * :func:`SortedList.islice` + * :func:`SortedList._reset` + + Additional sorted list methods available, if key-function used: + + * :func:`SortedKeyList.bisect_key_left` + * :func:`SortedKeyList.bisect_key_right` + * :func:`SortedKeyList.irange_key` + + Sorted set comparisons use subset and superset relations. Two sorted sets + are equal if and only if every element of each sorted set is contained in + the other (each is a subset of the other). A sorted set is less than + another sorted set if and only if the first sorted set is a proper subset + of the second sorted set (is a subset, but is not equal). A sorted set is + greater than another sorted set if and only if the first sorted set is a + proper superset of the second sorted set (is a superset, but is not equal). - Unlike a `set`, a `SortedSet` requires items be hashable and comparable. """ - # pylint: disable=too-many-ancestors def __init__(self, iterable=None, key=None): - """ - A `SortedSet` provides the same methods as a `set`. Additionally, a - `SortedSet` maintains its items in sorted order, allowing the - `SortedSet` to be indexed. + """Initialize sorted set instance. - An optional *iterable* provides an initial series of items to populate - the `SortedSet`. + Optional `iterable` argument provides an initial iterable of values to + initialize the sorted set. - An optional *key* argument defines a callable that, like the `key` + Optional `key` argument defines a callable that, like the `key` argument to Python's `sorted` function, extracts a comparison key from - each set item. If no function is specified, the default compares the - set items directly. + each value. The default, none, compares values directly. + + Runtime complexity: `O(n*log(n))` + + >>> ss = SortedSet([3, 1, 2, 5, 4]) + >>> ss + SortedSet([1, 2, 3, 4, 5]) + >>> from operator import neg + >>> ss = SortedSet([3, 1, 2, 5, 4], neg) + >>> ss + SortedSet([5, 4, 3, 2, 1], key=) + + :param iterable: initial values (optional) + :param key: function used to extract comparison key (optional) + """ self._key = key + # SortedSet._fromset calls SortedSet.__init__ after initializing the + # _set attribute. So only create a new set if the _set attribute is not + # already present. + if not hasattr(self, '_set'): self._set = set() + self._list = SortedList(self._set, key=key) + + # Expose some set methods publicly. + _set = self._set self.isdisjoint = _set.isdisjoint self.issubset = _set.issubset self.issuperset = _set.issuperset - if key is None: - self._list = SortedList(self._set) - else: - self._list = SortedListWithKey(self._set, key=key) + # Expose some sorted list methods publicly. _list = self._list self.bisect_left = _list.bisect_left @@ -53,7 +144,7 @@ self.index = _list.index self.irange = _list.irange self.islice = _list.islice - self._reset = _list._reset # pylint: disable=protected-access + self._reset = _list._reset if key is not None: self.bisect_key_left = _list.bisect_key_left @@ -64,36 +155,93 @@ if iterable is not None: self._update(iterable) - @property - def key(self): - """Key function used to extract comparison key for sorting.""" - return self._key @classmethod def _fromset(cls, values, key=None): - """Initialize sorted set from existing set.""" + """Initialize sorted set from existing set. + + Used internally by set operations that return a new set. + + """ sorted_set = object.__new__(cls) - sorted_set._set = values # pylint: disable=protected-access + sorted_set._set = values sorted_set.__init__(key=key) return sorted_set + + @property + def key(self): + """Function used to extract comparison key from values. + + Sorted set compares values directly when the key function is none. + + """ + return self._key + + def __contains__(self, value): - """Return True if and only if *value* is an element in the set.""" + """Return true if `value` is an element of the sorted set. + + ``ss.__contains__(value)`` <==> ``value in ss`` + + Runtime complexity: `O(1)` + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> 3 in ss + True + + :param value: search for value in sorted set + :return: true if `value` in sorted set + + """ return value in self._set + def __getitem__(self, index): - """ - Return the element at position *index*. + """Lookup value at `index` in sorted set. + + ``ss.__getitem__(index)`` <==> ``ss[index]`` + + Supports slicing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> ss = SortedSet('abcde') + >>> ss[2] + 'c' + >>> ss[-1] + 'e' + >>> ss[2:5] + ['c', 'd', 'e'] + + :param index: integer or slice for indexing + :return: value or list of values + :raises IndexError: if index out of range - Supports slice notation and negative indexes. """ return self._list[index] + def __delitem__(self, index): - """ - Remove the element at position *index*. + """Remove value at `index` from sorted set. + + ``ss.__delitem__(index)`` <==> ``del ss[index]`` + + Supports slicing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> ss = SortedSet('abcde') + >>> del ss[2] + >>> ss + SortedSet(['a', 'b', 'd', 'e']) + >>> del ss[:2] + >>> ss + SortedSet(['d', 'e']) + + :param index: integer or slice for indexing + :raises IndexError: if index out of range - Supports slice notation and negative indexes. """ _set = self._set _list = self._list @@ -105,149 +253,316 @@ _set.remove(value) del _list[index] - def _make_cmp(self, set_op, doc): + + def __make_cmp(set_op, symbol, doc): "Make comparator method." - def comparer(self, that): - "Compare method for sorted set and set-like object." - # pylint: disable=protected-access - if isinstance(that, SortedSet): - return set_op(self._set, that._set) - elif isinstance(that, Set): - return set_op(self._set, that) + def comparer(self, other): + "Compare method for sorted set and set." + if isinstance(other, SortedSet): + return set_op(self._set, other._set) + elif isinstance(other, Set): + return set_op(self._set, other) return NotImplemented - comparer.__name__ = '__{0}__'.format(set_op.__name__) - doc_str = 'Return True if and only if Set is {0} `that`.' - comparer.__doc__ = doc_str.format(doc) + set_op_name = set_op.__name__ + comparer.__name__ = '__{0}__'.format(set_op_name) + doc_str = """Return true if and only if sorted set is {0} `other`. + + ``ss.__{1}__(other)`` <==> ``ss {2} other`` + + Comparisons use subset and superset semantics as with sets. + + Runtime complexity: `O(n)` + :param other: `other` set + :return: true if sorted set is {0} `other` + + """ + comparer.__doc__ = dedent(doc_str.format(doc, set_op_name, symbol)) return comparer - __eq__ = _make_cmp(None, op.eq, 'equal to') - __ne__ = _make_cmp(None, op.ne, 'not equal to') - __lt__ = _make_cmp(None, op.lt, 'a proper subset of') - __gt__ = _make_cmp(None, op.gt, 'a proper superset of') - __le__ = _make_cmp(None, op.le, 'a subset of') - __ge__ = _make_cmp(None, op.ge, 'a superset of') + + __eq__ = __make_cmp(eq, '==', 'equal to') + __ne__ = __make_cmp(ne, '!=', 'not equal to') + __lt__ = __make_cmp(lt, '<', 'a proper subset of') + __gt__ = __make_cmp(gt, '>', 'a proper superset of') + __le__ = __make_cmp(le, '<=', 'a subset of') + __ge__ = __make_cmp(ge, '>=', 'a superset of') + __make_cmp = staticmethod(__make_cmp) + def __len__(self): - """Return the number of elements in the set.""" + """Return the size of the sorted set. + + ``ss.__len__()`` <==> ``len(ss)`` + + :return: size of sorted set + + """ return len(self._set) + def __iter__(self): - """ - Return an iterator over the Set. Elements are iterated in their sorted - order. + """Return an iterator over the sorted set. + + ``ss.__iter__()`` <==> ``iter(ss)`` + + Iterating the sorted set while adding or deleting values may raise a + :exc:`RuntimeError` or fail to iterate over all values. - Iterating the Set while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. """ return iter(self._list) + def __reversed__(self): - """ - Return an iterator over the Set. Elements are iterated in their reverse - sorted order. + """Return a reverse iterator over the sorted set. + + ``ss.__reversed__()`` <==> ``reversed(ss)`` + + Iterating the sorted set while adding or deleting values may raise a + :exc:`RuntimeError` or fail to iterate over all values. - Iterating the Set while adding or deleting values may raise a - `RuntimeError` or fail to iterate over all entries. """ return reversed(self._list) + def add(self, value): - """Add the element *value* to the set.""" + """Add `value` to sorted set. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> ss = SortedSet() + >>> ss.add(3) + >>> ss.add(1) + >>> ss.add(2) + >>> ss + SortedSet([1, 2, 3]) + + :param value: value to add to sorted set + + """ _set = self._set if value not in _set: _set.add(value) self._list.add(value) + _add = add + + def clear(self): - """Remove all elements from the set.""" + """Remove all values from sorted set. + + Runtime complexity: `O(n)` + + """ self._set.clear() self._list.clear() + def copy(self): - """Create a shallow copy of the sorted set.""" + """Return a shallow copy of the sorted set. + + Runtime complexity: `O(n)` + + :return: new sorted set + + """ return self._fromset(set(self._set), key=self._key) __copy__ = copy + def count(self, value): - """Return the number of occurrences of *value* in the set.""" + """Return number of occurrences of `value` in the sorted set. + + Runtime complexity: `O(1)` + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> ss.count(3) + 1 + + :param value: value to count in sorted set + :return: count + + """ return 1 if value in self._set else 0 + def discard(self, value): - """ - Remove the first occurrence of *value*. If *value* is not a member, - does nothing. + """Remove `value` from sorted set if it is a member. + + If `value` is not a member, do nothing. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> ss.discard(5) + >>> ss.discard(0) + >>> ss == set([1, 2, 3, 4]) + True + + :param value: `value` to discard from sorted set + """ _set = self._set if value in _set: _set.remove(value) - self._list.discard(value) + self._list.remove(value) + + _discard = discard + def pop(self, index=-1): - """ - Remove and return item at *index* (default last). Raises IndexError if - set is empty or index is out of range. Negative indexes are supported, - as for slice indices. + """Remove and return value at `index` in sorted set. + + Raise :exc:`IndexError` if the sorted set is empty or index is out of + range. + + Negative indices are supported. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> ss = SortedSet('abcde') + >>> ss.pop() + 'e' + >>> ss.pop(2) + 'c' + >>> ss + SortedSet(['a', 'b', 'd']) + + :param int index: index of value (default -1) + :return: value + :raises IndexError: if index is out of range + """ # pylint: disable=arguments-differ value = self._list.pop(index) self._set.remove(value) return value + def remove(self, value): - """ - Remove first occurrence of *value*. Raises ValueError if - *value* is not present. + """Remove `value` from sorted set; `value` must be a member. + + If `value` is not a member, raise :exc:`KeyError`. + + Runtime complexity: `O(log(n))` -- approximate. + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> ss.remove(5) + >>> ss == set([1, 2, 3, 4]) + True + >>> ss.remove(0) + Traceback (most recent call last): + ... + KeyError: 0 + + :param value: `value` to remove from sorted set + :raises KeyError: if `value` is not in sorted set + """ self._set.remove(value) self._list.remove(value) + def difference(self, *iterables): - """ - Return a new set with elements in the set that are not in the - *iterables*. + """Return the difference of two or more sets as a new sorted set. + + The `difference` method also corresponds to operator ``-``. + + ``ss.__sub__(iterable)`` <==> ``ss - iterable`` + + The difference is all values that are in this sorted set but not the + other `iterables`. + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> ss.difference([4, 5, 6, 7]) + SortedSet([1, 2, 3]) + + :param iterables: iterable arguments + :return: new sorted set + """ diff = self._set.difference(*iterables) return self._fromset(diff, key=self._key) __sub__ = difference - __rsub__ = __sub__ + def difference_update(self, *iterables): - """ - Update the set, removing elements found in keeping only elements - found in any of the *iterables*. + """Remove all values of `iterables` from this sorted set. + + The `difference_update` method also corresponds to operator ``-=``. + + ``ss.__isub__(iterable)`` <==> ``ss -= iterable`` + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> _ = ss.difference_update([4, 5, 6, 7]) + >>> ss + SortedSet([1, 2, 3]) + + :param iterables: iterable arguments + :return: itself + """ _set = self._set + _list = self._list values = set(chain(*iterables)) if (4 * len(values)) > len(_set): - _list = self._list _set.difference_update(values) _list.clear() _list.update(_set) else: - _discard = self.discard + _discard = self._discard for value in values: _discard(value) return self __isub__ = difference_update + def intersection(self, *iterables): + """Return the intersection of two or more sets as a new sorted set. + + The `intersection` method also corresponds to operator ``&``. + + ``ss.__and__(iterable)`` <==> ``ss & iterable`` + + The intersection is all values that are in this sorted set and each of + the other `iterables`. + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> ss.intersection([4, 5, 6, 7]) + SortedSet([4, 5]) + + :param iterables: iterable arguments + :return: new sorted set + """ - Return a new set with elements common to the set and all *iterables*. - """ - comb = self._set.intersection(*iterables) - return self._fromset(comb, key=self._key) + intersect = self._set.intersection(*iterables) + return self._fromset(intersect, key=self._key) __and__ = intersection __rand__ = __and__ + def intersection_update(self, *iterables): - """ - Update the set, keeping only elements found in it and all *iterables*. + """Update the sorted set with the intersection of `iterables`. + + The `intersection_update` method also corresponds to operator ``&=``. + + ``ss.__iand__(iterable)`` <==> ``ss &= iterable`` + + Keep only values found in itself and all `iterables`. + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> _ = ss.intersection_update([4, 5, 6, 7]) + >>> ss + SortedSet([4, 5]) + + :param iterables: iterable arguments + :return: itself + """ _set = self._set _list = self._list @@ -258,42 +573,100 @@ __iand__ = intersection_update - def symmetric_difference(self, that): - """ - Return a new set with elements in either *self* or *that* but not both. + + def symmetric_difference(self, other): + """Return the symmetric difference with `other` as a new sorted set. + + The `symmetric_difference` method also corresponds to operator ``^``. + + ``ss.__xor__(other)`` <==> ``ss ^ other`` + + The symmetric difference is all values tha are in exactly one of the + sets. + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> ss.symmetric_difference([4, 5, 6, 7]) + SortedSet([1, 2, 3, 6, 7]) + + :param other: `other` iterable + :return: new sorted set + """ - diff = self._set.symmetric_difference(that) + diff = self._set.symmetric_difference(other) return self._fromset(diff, key=self._key) __xor__ = symmetric_difference __rxor__ = __xor__ - def symmetric_difference_update(self, that): - """ - Update the set, keeping only elements found in either *self* or *that*, - but not in both. + + def symmetric_difference_update(self, other): + """Update the sorted set with the symmetric difference with `other`. + + The `symmetric_difference_update` method also corresponds to operator + ``^=``. + + ``ss.__ixor__(other)`` <==> ``ss ^= other`` + + Keep only values found in exactly one of itself and `other`. + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> _ = ss.symmetric_difference_update([4, 5, 6, 7]) + >>> ss + SortedSet([1, 2, 3, 6, 7]) + + :param other: `other` iterable + :return: itself + """ _set = self._set _list = self._list - _set.symmetric_difference_update(that) + _set.symmetric_difference_update(other) _list.clear() _list.update(_set) return self __ixor__ = symmetric_difference_update + def union(self, *iterables): - """ - Return a new SortedSet with elements from the set and all *iterables*. + """Return new sorted set with values from itself and all `iterables`. + + The `union` method also corresponds to operator ``|``. + + ``ss.__or__(iterable)`` <==> ``ss | iterable`` + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> ss.union([4, 5, 6, 7]) + SortedSet([1, 2, 3, 4, 5, 6, 7]) + + :param iterables: iterable arguments + :return: new sorted set + """ return self.__class__(chain(iter(self), *iterables), key=self._key) __or__ = union __ror__ = __or__ + def update(self, *iterables): - """Update the set, adding elements from all *iterables*.""" + """Update the sorted set adding values from all `iterables`. + + The `update` method also corresponds to operator ``|=``. + + ``ss.__ior__(iterable)`` <==> ``ss |= iterable`` + + >>> ss = SortedSet([1, 2, 3, 4, 5]) + >>> _ = ss.update([4, 5, 6, 7]) + >>> ss + SortedSet([1, 2, 3, 4, 5, 6, 7]) + + :param iterables: iterable arguments + :return: itself + + """ _set = self._set + _list = self._list values = set(chain(*iterables)) if (4 * len(values)) > len(_set): _list = self._list @@ -301,7 +674,7 @@ _list.clear() _list.update(_set) else: - _add = self.add + _add = self._add for value in values: _add(value) return self @@ -309,19 +682,40 @@ __ior__ = update _update = update + def __reduce__(self): + """Support for pickle. + + The tricks played with exposing methods in :func:`SortedSet.__init__` + confuse pickle so customize the reducer. + + """ return (type(self), (self._set, self._key)) - @recursive_repr + + @recursive_repr() def __repr__(self): + """Return string representation of sorted set. + + ``ss.__repr__()`` <==> ``repr(ss)`` + + :return: string representation + + """ _key = self._key key = '' if _key is None else ', key={0!r}'.format(_key) - name = type(self).__name__ - return '{0}({1!r}{2})'.format(name, list(self), key) + type_name = type(self).__name__ + return '{0}({1!r}{2})'.format(type_name, list(self), key) + def _check(self): - # pylint: disable=protected-access - self._list._check() - assert len(self._set) == len(self._list) + """Check invariants of sorted set. + + Runtime complexity: `O(n)` + + """ _set = self._set - assert all(val in _set for val in self._list) + _list = self._list + _list._check() + assert len(_set) == len(_list) + assert all(value in _set for value in _list) diff -Nru sortedcontainers-1.5.9/tests/benchmark_plot.py sortedcontainers-2.0.4/tests/benchmark_plot.py --- sortedcontainers-1.5.9/tests/benchmark_plot.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/benchmark_plot.py 2018-06-07 05:34:49.000000000 +0000 @@ -24,33 +24,14 @@ from __future__ import print_function import argparse +import matplotlib import matplotlib.pyplot as plt -from collections import defaultdict +from collections import OrderedDict -def tree(): - return defaultdict(tree) - -parser = argparse.ArgumentParser(description='Plotting') -parser.add_argument('filename', help='path to file with benchmark data') -parser.add_argument('name', help='type name') -parser.add_argument('--test', action='append', help='filter tests by name') -parser.add_argument('--kind', action='append', help='filter types by name') -parser.add_argument('--suffix', default='', help='suffix for output') -parser.add_argument('--show', action='store_true', help='show results') -parser.add_argument('--save', action='store_true', help='save results') - -args = parser.parse_args() - -text = open(args.filename).read() - -lines = text.splitlines() -lines = [line.split() for line in lines] -for line in lines: - line[2] = int(line[2]) - line[3:] = map(float, line[3:]) -data = tree() -for line in lines: - data[line[0]][line[1]][line[2]] = line +class TreeDict(OrderedDict): + def __missing__(self, key): + self[key] = value = TreeDict() + return value def order_kinds(kinds): for idx, kind in enumerate(kinds): @@ -62,10 +43,15 @@ def test_plot(test): ax = plt.gca() - ax.set_color_cycle(['b', 'g', 'r', 'c', 'm', 'y', 'k', '0.8']) - kinds = order_kinds(sorted(args.kind or list(data[test]))) - for kind in kinds: - kind_plot(test, kind) + ax.grid(linestyle='dashed', linewidth=0.5) + cmap = matplotlib.cm.get_cmap('Set1') + colors = list(cmap.colors) + colors[0], colors[1] = colors[1], colors[0] + del colors[5] + ax.set_prop_cycle('color', colors) + kinds = args.kind or list(data[test]) + for order, kind in enumerate(kinds): + kind_plot(test, kind, len(kinds) - order) plt.ylim(ymin=9e-7) plt.loglog() plt.title(args.name + ' Performance: ' + test) @@ -73,25 +59,43 @@ plt.xlabel('List Size') plt.legend(kinds, loc=2) -def kind_plot(test, kind): +def kind_plot(test, kind, zorder): sizes = sorted(data[test][kind].keys()) - yrange = [[(data[test][kind][size][5] - data[test][kind][size][3]) - for size in sizes], - [(data[test][kind][size][4] - data[test][kind][size][5]) - for size in sizes]] # Timer isn't any better than micro-second resolution. yvalues = [max(1e-6, data[test][kind][size][5]) for size in sizes] - plt.errorbar(sizes, yvalues, yerr=yrange) - -tests = args.test or list(data) + plt.plot(sizes, yvalues, marker='s', zorder=zorder) -for test in tests: - test_plot(test) +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Plotting') + parser.add_argument('filename', help='path to file with benchmark data') + parser.add_argument('name', help='type name') + parser.add_argument('--test', action='append', help='filter tests by name') + parser.add_argument('--kind', action='append', help='filter types by name') + parser.add_argument('--suffix', default='', help='suffix for output') + parser.add_argument('--show', action='store_true', help='show results') + parser.add_argument('--save', action='store_true', help='save results') + args = parser.parse_args() + + text = open(args.filename).read() + + lines = text.splitlines() + lines = [line.split() for line in lines] + for line in lines: + line[2] = int(line[2]) + line[3:] = map(float, line[3:]) + data = TreeDict() + for line in lines: + data[line[0]][line[1]][line[2]] = line + + tests = args.test or list(data) + + for test in tests: + test_plot(test) - if args.show: - plt.show() + if args.show: + plt.show() - if args.save: - plt.savefig('{0}{1}-{2}.png'.format(args.name, args.suffix, test)) + if args.save: + plt.savefig('{0}{1}-{2}.png'.format(args.name, args.suffix, test)) - plt.close() + plt.close() diff -Nru sortedcontainers-1.5.9/tests/benchmark.py sortedcontainers-2.0.4/tests/benchmark.py --- sortedcontainers-1.5.9/tests/benchmark.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/benchmark.py 2018-06-07 05:34:49.000000000 +0000 @@ -1,5 +1,6 @@ from __future__ import print_function from sys import hexversion +import logging import time, random, argparse from functools import partial @@ -26,10 +27,13 @@ def benchmark(test, name, ctor, setup, func_name, limit): if args.load > 0: - if name == 'SortedDict': - ctor = partial(ctor, args.load) - else: - ctor = partial(ctor, load=args.load) + load = args.load + ctor_original = ctor + def ctor_load(): + obj = ctor_original() + obj._reset(load) + return obj + ctor = ctor_load for size in sizes: if not args.no_limit and size > limit: @@ -45,14 +49,16 @@ # record times = [] + for rpt in range(5): obj = ctor() setup(obj, size) func = getattr(obj, func_name) times.append(measure(test, func, size)) - print(getattr(test, name_attr), name + args.suffix, size, min(times), - max(times), times[2], sum(times) / len(times)) + times.sort() + print(getattr(test, name_attr), name + args.suffix, size, times[0], + times[-1], times[2], sum(times) / len(times)) def register_test(func): tests[getattr(func, name_attr)] = func @@ -119,6 +125,20 @@ if name not in kind_names: continue details = impls[test][name] - benchmark(tests[test], name, details['ctor'], details['setup'], details['func'], details['limit']) + try: + benchmark( + tests[test], + name, + details['ctor'], + details['setup'], + details['func'], + details['limit'], + ) + except Exception: + logging.exception('Benchmark Error') + logging.error('Test: %s', test) + logging.error('Name: %s', name) + for key in sorted(details): + logging.error('Details[%r]: %s', key, details[key]) detail('Benchmark Stop') diff -Nru sortedcontainers-1.5.9/tests/benchmark_scale.py sortedcontainers-2.0.4/tests/benchmark_scale.py --- sortedcontainers-1.5.9/tests/benchmark_scale.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/benchmark_scale.py 2018-06-07 05:34:49.000000000 +0000 @@ -59,6 +59,7 @@ NUMA node0 CPU(s): 0-31 """ +from __future__ import print_function import argparse import collections as co @@ -112,8 +113,8 @@ sl.clear() load = sl._load - half = sl._half - twice = sl._twice + half = sl._load >> 1 + twice = sl._load << 1 mu = load * (1.0 + moment / 10.0) sigma = load * fraction total = 0 @@ -285,7 +286,7 @@ last[0], last[1] = name, ops_sec template = '@%9s %.0e %.0e %14.5f %12.3f %6.3f' - print template % (name, size, operations, median_time, ops_sec, ratio) + print(template % (name, size, operations, median_time, ops_sec, ratio)) sys.stdout.flush() @@ -314,7 +315,7 @@ template = '@%9s %7s %7s %14s %12s %9s' header = 'Method', 'Size', 'Ops', 'Time', 'Ops/Sec', 'Ratio' - print template % header + print(template % header) sys.stdout.flush() if args.funcs == 'all': diff -Nru sortedcontainers-1.5.9/tests/benchmark.sh sortedcontainers-2.0.4/tests/benchmark.sh --- sortedcontainers-1.5.9/tests/benchmark.sh 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/benchmark.sh 2018-06-07 05:34:49.000000000 +0000 @@ -1,50 +1,54 @@ +#!/bin/bash + +set -x + # Compare Implementations -echo ". env27/bin/activate && python -m tests.benchmark_sortedlist --bare > tests/results_sortedlist.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sortedlist --bare > tests/results_sortedlist.txt" | bash python -m tests.benchmark_plot tests/results_sortedlist.txt SortedList --save -echo ". env27/bin/activate && python -m tests.benchmark_sorteddict --bare > tests/results_sorteddict.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sorteddict --bare > tests/results_sorteddict.txt" | bash python -m tests.benchmark_plot tests/results_sorteddict.txt SortedDict --save -echo ". env27/bin/activate && python -m tests.benchmark_sortedset --bare > tests/results_sortedset.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sortedset --bare > tests/results_sortedset.txt" | bash python -m tests.benchmark_plot tests/results_sortedset.txt SortedSet --save # Compare Python Versions rm tests/results_runtime_sortedlist.txt +echo ". env36/bin/activate && python -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _Py36 >> tests/results_runtime_sortedlist.txt" | bash echo ". env27/bin/activate && python -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _Py27 >> tests/results_runtime_sortedlist.txt" | bash -echo ". env35/bin/activate && python -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _Py35 >> tests/results_runtime_sortedlist.txt" | bash echo ". env27/bin/activate && pypy -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _PyPy >> tests/results_runtime_sortedlist.txt" | bash python -m tests.benchmark_plot tests/results_runtime_sortedlist.txt SortedList --suffix _runtime --save rm tests/results_runtime_sorteddict.txt +echo ". env36/bin/activate && python -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _Py36 >> tests/results_runtime_sorteddict.txt" | bash echo ". env27/bin/activate && python -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _Py27 >> tests/results_runtime_sorteddict.txt" | bash -echo ". env35/bin/activate && python -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _Py35 >> tests/results_runtime_sorteddict.txt" | bash echo ". env27/bin/activate && pypy -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _PyPy >> tests/results_runtime_sorteddict.txt" | bash python -m tests.benchmark_plot tests/results_runtime_sorteddict.txt SortedDict --suffix _runtime --save rm tests/results_runtime_sortedset.txt +echo ". env36/bin/activate && python -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _Py36 >> tests/results_runtime_sortedset.txt" | bash echo ". env27/bin/activate && python -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _Py27 >> tests/results_runtime_sortedset.txt" | bash -echo ". env35/bin/activate && python -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _Py35 >> tests/results_runtime_sortedset.txt" | bash echo ". env27/bin/activate && pypy -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _PyPy >> tests/results_runtime_sortedset.txt" | bash python -m tests.benchmark_plot tests/results_runtime_sortedset.txt SortedSet --suffix _runtime --save # Compare Loads rm tests/results_load_sortedlist.txt -echo ". env27/bin/activate && python -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _100 --load 100 --no-limit >> tests/results_load_sortedlist.txt" | bash -echo ". env27/bin/activate && python -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _1000 --load 1000 --no-limit >> tests/results_load_sortedlist.txt" | bash -echo ". env27/bin/activate && python -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _10000 --load 10000 --no-limit >> tests/results_load_sortedlist.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _100 --load 100 --no-limit >> tests/results_load_sortedlist.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _1000 --load 1000 --no-limit >> tests/results_load_sortedlist.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sortedlist --bare --kind SortedList --suffix _10000 --load 10000 --no-limit >> tests/results_load_sortedlist.txt" | bash python -m tests.benchmark_plot tests/results_load_sortedlist.txt SortedList --suffix _load --save rm tests/results_load_sorteddict.txt -echo ". env27/bin/activate && python -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _100 --load 100 --no-limit >> tests/results_load_sorteddict.txt" | bash -echo ". env27/bin/activate && python -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _1000 --load 1000 --no-limit >> tests/results_load_sorteddict.txt" | bash -echo ". env27/bin/activate && python -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _10000 --load 10000 --no-limit >> tests/results_load_sorteddict.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _100 --load 100 --no-limit >> tests/results_load_sorteddict.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _1000 --load 1000 --no-limit >> tests/results_load_sorteddict.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sorteddict --bare --kind SortedDict --suffix _10000 --load 10000 --no-limit >> tests/results_load_sorteddict.txt" | bash python -m tests.benchmark_plot tests/results_load_sorteddict.txt SortedDict --suffix _load --save rm tests/results_load_sortedset.txt -echo ". env27/bin/activate && python -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _100 --load 100 --no-limit >> tests/results_load_sortedset.txt" | bash -echo ". env27/bin/activate && python -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _1000 --load 1000 --no-limit >> tests/results_load_sortedset.txt" | bash -echo ". env27/bin/activate && python -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _10000 --load 10000 --no-limit >> tests/results_load_sortedset.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _100 --load 100 --no-limit >> tests/results_load_sortedset.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _1000 --load 1000 --no-limit >> tests/results_load_sortedset.txt" | bash +echo ". env36/bin/activate && python -m tests.benchmark_sortedset --bare --kind SortedSet --suffix _10000 --load 10000 --no-limit >> tests/results_load_sortedset.txt" | bash python -m tests.benchmark_plot tests/results_load_sortedset.txt SortedSet --suffix _load --save diff -Nru sortedcontainers-1.5.9/tests/benchmark_sorteddict.py sortedcontainers-2.0.4/tests/benchmark_sorteddict.py --- sortedcontainers-1.5.9/tests/benchmark_sorteddict.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/benchmark_sorteddict.py 2018-06-07 05:34:49.000000000 +0000 @@ -59,41 +59,40 @@ kinds['SortedDict'] = SortedDict try: - from rbtree import rbtree - kinds['rbtree'] = rbtree -except ImportError: - warnings.warn('No module named rbtree', ImportWarning) - -try: from blist import sorteddict - kinds['blist.sorteddict'] = sorteddict + kinds['B-Tree'] = sorteddict except ImportError: warnings.warn('No module named blist', ImportWarning) try: - from treap import treap - kinds['treap'] = treap + from bintrees import FastAVLTree + kinds['AVL-Tree'] = FastAVLTree except ImportError: - warnings.warn('No module named treap', ImportWarning) + warnings.warn('No module named bintrees', ImportWarning) try: - from bintrees import FastAVLTree, FastRBTree - kinds['FastAVLTree'] = FastAVLTree - kinds['FastRBTree'] = FastRBTree + from banyan import SortedDict as BanyanSortedDict + kinds['RB-Tree'] = BanyanSortedDict except ImportError: - warnings.warn('No module named bintrees', ImportWarning) + warnings.warn('No module named banyan', ImportWarning) try: from skiplistcollections import SkipListDict - kinds['SkipListDict'] = SkipListDict + kinds['Skip-List'] = SkipListDict except ImportError: warnings.warn('No module named skiplistcollections', ImportWarning) try: - from banyan import SortedDict as BanyanSortedDict - kinds['banyan.SortedDict'] = BanyanSortedDict + from sortedmap import sortedmap as CppSortedMap + kinds['std::map'] = CppSortedMap except ImportError: - warnings.warn('No module named banyan', ImportWarning) + warnings.warn('No module named sortedmap', ImportWarning) + +try: + from treap import treap + kinds['Treap'] = treap +except ImportError: + warnings.warn('No module named treap', ImportWarning) # Implementation configuration. @@ -108,8 +107,7 @@ 'limit': 1000000 } -if 'treap' in impls['contains']: - del impls['contains']['treap'] +remove('contains', 'Treap') for name, kind in kinds.items(): impls['getitem'][name] = { @@ -159,11 +157,9 @@ 'limit': 1000000 } -remove('init', 'rbtree') -remove('init', 'treap') - -limit('init', 'blist.sorteddict', 100000) -limit('init', 'SkipListDict', 100000) +remove('init', 'Treap') +limit('init', 'B-Tree', 100000) +limit('init', 'Skip-List', 100000) if __name__ == '__main__': main('SortedDict') diff -Nru sortedcontainers-1.5.9/tests/benchmark_sortedlist.py sortedcontainers-2.0.4/tests/benchmark_sortedlist.py --- sortedcontainers-1.5.9/tests/benchmark_sortedlist.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/benchmark_sortedlist.py 2018-06-07 05:34:49.000000000 +0000 @@ -108,49 +108,18 @@ from sortedcontainers import SortedList kinds['SortedList'] = SortedList -from sortedcontainers import SortedListWithKey -kinds['SortedListWithKey'] = SortedListWithKey +from sortedcontainers import SortedKeyList +kinds['SortedKeyList'] = SortedKeyList try: from blist import sortedlist - kinds['blist.sortedlist'] = sortedlist - from functools import partial - def identity(value): - return value - kinds['blist.sortedlist(key=identity)'] = partial(sortedlist, key=identity) + kinds['B-Tree'] = sortedlist except ImportError: warnings.warn('No module named blist', ImportWarning) try: - from sortedcollection import SortedCollection - from bisect import bisect_left - - SortedCollection.add = SortedCollection.insert - - def update(self, iterable): - for value in iterable: - self.insert(value) - SortedCollection.update = update - - def bisect(self, item): - key = self._key(item) - pos = bisect_left(self._keys, key) - return pos - SortedCollection.bisect = bisect - - def pop(self): - self._keys.pop() - return self._items.pop() - SortedCollection.pop = pop - - def discard(self, item): - try: - self.remove(item) - except ValueError: - pass - SortedCollection.discard = discard - - kinds['sortedcollection'] = SortedCollection + from .sortedcollection import SortedCollection + kinds['List'] = SortedCollection except ImportError: warnings.warn('No module named sortedcollection', ImportWarning) @@ -174,7 +143,7 @@ 'func': 'update', 'limit': 1000000 } -limit('update_small', 'sortedcollection', 100000) +limit('update_small', 'List', 100000) for name, kind in kinds.items(): impls['update_large'][name] = { @@ -183,7 +152,7 @@ 'func': 'update', 'limit': 1000000 } -limit('update_large', 'sortedcollection', 100000) +limit('update_large', 'List', 100000) for name, kind in kinds.items(): impls['contains'][name] = { @@ -208,6 +177,7 @@ 'func': '__delitem__', 'limit': 1000000 } +limit('delitem', 'List', 100000) for name, kind in kinds.items(): impls['bisect'][name] = { @@ -264,6 +234,8 @@ def __call__(self, *args, **kwargs): self.obj = self.kind(*args, **kwargs) return self + def _reset(self, load): + self.obj._reset(load) def update(self, values): self.obj.update(values) def run(self, value): @@ -301,7 +273,7 @@ 'func': 'run', 'limit': 1000000 } -limit('priorityqueue', 'sortedcollection', 100000) +limit('priorityqueue', 'List', 100000) class Multiset(Mixed): def run(self, value): @@ -331,7 +303,7 @@ 'func': 'run', 'limit': 1000000 } -limit('multiset', 'sortedcollection', 100000) +limit('multiset', 'List', 100000) class Ranking(Mixed): def run(self, value): @@ -361,7 +333,7 @@ 'func': 'run', 'limit': 1000000 } -limit('ranking', 'sortedcollection', 100000) +limit('ranking', 'List', 100000) class Neighbor(Mixed): def run(self, value): @@ -392,7 +364,7 @@ 'func': 'run', 'limit': 1000000 } -limit('neighbor', 'sortedcollection', 100000) +limit('neighbor', 'List', 100000) class Intervals(Mixed): def run(self, value): @@ -432,7 +404,7 @@ 'func': 'run', 'limit': 1000000 } -limit('intervals', 'sortedcollection', 100000) +limit('intervals', 'List', 100000) for name, kind in kinds.items(): impls['init'][name] = { @@ -441,8 +413,7 @@ 'func': '__init__', 'limit': 1000000 } -limit('init', 'blist.sortedlist', 100000) -limit('init', 'blist.sortedlist(key=identity)', 100000) +limit('init', 'B-Tree', 100000) if __name__ == '__main__': main('SortedList') diff -Nru sortedcontainers-1.5.9/tests/benchmark_sortedset.py sortedcontainers-2.0.4/tests/benchmark_sortedset.py --- sortedcontainers-1.5.9/tests/benchmark_sortedset.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/benchmark_sortedset.py 2018-06-07 05:34:49.000000000 +0000 @@ -187,28 +187,22 @@ kinds['SortedSet'] = SortedSet try: - from rbtree import rbset - kinds['rbset'] = rbset -except ImportError: - warnings.warn('No module named rbtree', ImportWarning) - -try: from blist import sortedset - kinds['blist.sortedset'] = sortedset + kinds['B-Tree'] = sortedset except ImportError: warnings.warn('No module named blist', ImportWarning) try: - from skiplistcollections import SkipListSet - kinds['SkipListSet'] = SkipListSet + from banyan import SortedSet as BanyanSortedSet + kinds['RB-Tree'] = BanyanSortedSet except ImportError: - warnings.warn('No module named skiplistcollections', ImportWarning) + warnings.warn('No module named banyan', ImportWarning) try: - from banyan import SortedSet as BanyanSortedSet - kinds['banyan.SortedSet'] = BanyanSortedSet + from skiplistcollections import SkipListSet + kinds['Skip-List'] = SkipListSet except ImportError: - warnings.warn('No module named banyan', ImportWarning) + warnings.warn('No module named skiplistcollections', ImportWarning) # Implementation configuration. @@ -241,7 +235,7 @@ 'limit': 1000000 } -limit('add', 'blist.sortedset', 10000) +limit('add', 'B-Tree', 10000) for name, kind in kinds.items(): impls['update_tiny'][name] = { @@ -267,7 +261,7 @@ 'limit': 1000000 } -limit('update_medium', 'blist.sortedset', 10000) +limit('update_medium', 'B-Tree', 10000) for name, kind in kinds.items(): impls['update_large'][name] = { @@ -277,12 +271,12 @@ 'limit': 1000000 } -limit('update_large', 'blist.sortedset', 10000) +limit('update_large', 'B-Tree', 10000) -remove('update_tiny', 'SkipListSet') -remove('update_small', 'SkipListSet') -remove('update_medium', 'SkipListSet') -remove('update_large', 'SkipListSet') +remove('update_tiny', 'Skip-List') +remove('update_small', 'Skip-List') +remove('update_medium', 'Skip-List') +remove('update_large', 'Skip-List') for name, kind in kinds.items(): impls['union_tiny'][name] = { @@ -308,7 +302,7 @@ 'limit': 1000000 } -limit('union_medium', 'blist.sortedset', 10000) +limit('union_medium', 'B-Tree', 10000) for name, kind in kinds.items(): impls['union_large'][name] = { @@ -318,12 +312,12 @@ 'limit': 1000000 } -limit('union_large', 'blist.sortedset', 10000) +limit('union_large', 'B-Tree', 10000) -remove('union_tiny', 'SkipListSet') -remove('union_small', 'SkipListSet') -remove('union_medium', 'SkipListSet') -remove('union_large', 'SkipListSet') +remove('union_tiny', 'Skip-List') +remove('union_small', 'Skip-List') +remove('union_medium', 'Skip-List') +remove('union_large', 'Skip-List') for name, kind in kinds.items(): impls['remove'][name] = { @@ -333,7 +327,7 @@ 'limit': 1000000 } -limit('remove', 'blist.sortedset', 10000) +limit('remove', 'B-Tree', 10000) for name, kind in kinds.items(): impls['difference_tiny'][name] = { @@ -351,8 +345,6 @@ 'limit': 1000000 } -limit('difference_small', 'rbset', 10000) - for name, kind in kinds.items(): impls['difference_medium'][name] = { 'setup': fill_values, @@ -361,8 +353,7 @@ 'limit': 1000000 } -limit('difference_medium', 'rbset', 10000) -limit('difference_medium', 'blist.sortedset', 10000) +limit('difference_medium', 'B-Tree', 10000) for name, kind in kinds.items(): impls['difference_large'][name] = { @@ -372,13 +363,12 @@ 'limit': 1000000 } -limit('difference_large', 'rbset', 10000) -limit('difference_large', 'blist.sortedset', 10000) +limit('difference_large', 'B-Tree', 10000) -remove('difference_tiny', 'SkipListSet') -remove('difference_small', 'SkipListSet') -remove('difference_medium', 'SkipListSet') -remove('difference_large', 'SkipListSet') +remove('difference_tiny', 'Skip-List') +remove('difference_small', 'Skip-List') +remove('difference_medium', 'Skip-List') +remove('difference_large', 'Skip-List') for name, kind in kinds.items(): impls['difference_update_tiny'][name] = { @@ -404,7 +394,7 @@ 'limit': 1000000 } -limit('difference_update_medium', 'blist.sortedset', 10000) +limit('difference_update_medium', 'B-Tree', 10000) for name, kind in kinds.items(): impls['difference_update_large'][name] = { @@ -414,12 +404,12 @@ 'limit': 1000000 } -limit('difference_update_large', 'blist.sortedset', 10000) +limit('difference_update_large', 'B-Tree', 10000) -remove('difference_update_tiny', 'SkipListSet') -remove('difference_update_small', 'SkipListSet') -remove('difference_update_medium', 'SkipListSet') -remove('difference_update_large', 'SkipListSet') +remove('difference_update_tiny', 'Skip-List') +remove('difference_update_small', 'Skip-List') +remove('difference_update_medium', 'Skip-List') +remove('difference_update_large', 'Skip-List') for name, kind in kinds.items(): impls['intersection_tiny'][name] = { @@ -429,7 +419,7 @@ 'limit': 1000000 } -limit('intersection_tiny', 'blist.sortedset', 10000) +limit('intersection_tiny', 'B-Tree', 10000) for name, kind in kinds.items(): impls['intersection_small'][name] = { @@ -439,8 +429,7 @@ 'limit': 1000000 } -limit('intersection_small', 'rbset', 10000) -limit('intersection_small', 'blist.sortedset', 10000) +limit('intersection_small', 'B-Tree', 10000) for name, kind in kinds.items(): impls['intersection_medium'][name] = { @@ -450,8 +439,7 @@ 'limit': 1000000 } -limit('intersection_medium', 'rbset', 10000) -limit('intersection_medium', 'blist.sortedset', 10000) +limit('intersection_medium', 'B-Tree', 10000) for name, kind in kinds.items(): impls['intersection_large'][name] = { @@ -461,13 +449,12 @@ 'limit': 1000000 } -limit('intersection_large', 'rbset', 10000) -limit('intersection_large', 'blist.sortedset', 10000) +limit('intersection_large', 'B-Tree', 10000) -remove('intersection_tiny', 'SkipListSet') -remove('intersection_small', 'SkipListSet') -remove('intersection_medium', 'SkipListSet') -remove('intersection_large', 'SkipListSet') +remove('intersection_tiny', 'Skip-List') +remove('intersection_small', 'Skip-List') +remove('intersection_medium', 'Skip-List') +remove('intersection_large', 'Skip-List') for name, kind in kinds.items(): impls['intersection_update_tiny'][name] = { @@ -477,8 +464,7 @@ 'limit': 1000000 } -limit('intersection_update_tiny', 'rbset', 10000) -limit('intersection_update_tiny', 'blist.sortedset', 10000) +limit('intersection_update_tiny', 'B-Tree', 10000) for name, kind in kinds.items(): impls['intersection_update_small'][name] = { @@ -488,8 +474,7 @@ 'limit': 1000000 } -limit('intersection_update_small', 'rbset', 10000) -limit('intersection_update_small', 'blist.sortedset', 10000) +limit('intersection_update_small', 'B-Tree', 10000) for name, kind in kinds.items(): impls['intersection_update_medium'][name] = { @@ -499,8 +484,7 @@ 'limit': 1000000 } -limit('intersection_update_medium', 'rbset', 10000) -limit('intersection_update_medium', 'blist.sortedset', 10000) +limit('intersection_update_medium', 'B-Tree', 10000) for name, kind in kinds.items(): impls['intersection_update_large'][name] = { @@ -510,13 +494,12 @@ 'limit': 1000000 } -limit('intersection_update_large', 'rbset', 10000) -limit('intersection_update_large', 'blist.sortedset', 10000) +limit('intersection_update_large', 'B-Tree', 10000) -remove('intersection_update_tiny', 'SkipListSet') -remove('intersection_update_small', 'SkipListSet') -remove('intersection_update_medium', 'SkipListSet') -remove('intersection_update_large', 'SkipListSet') +remove('intersection_update_tiny', 'Skip-List') +remove('intersection_update_small', 'Skip-List') +remove('intersection_update_medium', 'Skip-List') +remove('intersection_update_large', 'Skip-List') for name, kind in kinds.items(): impls['symmetric_difference_tiny'][name] = { @@ -526,7 +509,7 @@ 'limit': 1000000 } -limit('symmetric_difference_tiny', 'blist.sortedset', 10000) +limit('symmetric_difference_tiny', 'B-Tree', 10000) for name, kind in kinds.items(): impls['symmetric_difference_small'][name] = { @@ -536,8 +519,7 @@ 'limit': 1000000 } -limit('symmetric_difference_small', 'rbset', 10000) -limit('symmetric_difference_small', 'blist.sortedset', 10000) +limit('symmetric_difference_small', 'B-Tree', 10000) for name, kind in kinds.items(): impls['symmetric_difference_medium'][name] = { @@ -547,8 +529,7 @@ 'limit': 1000000 } -limit('symmetric_difference_medium', 'rbset', 10000) -limit('symmetric_difference_medium', 'blist.sortedset', 10000) +limit('symmetric_difference_medium', 'B-Tree', 10000) for name, kind in kinds.items(): impls['symmetric_difference_large'][name] = { @@ -558,13 +539,12 @@ 'limit': 1000000 } -limit('symmetric_difference_large', 'rbset', 10000) -limit('symmetric_difference_large', 'blist.sortedset', 10000) +limit('symmetric_difference_large', 'B-Tree', 10000) -remove('symmetric_difference_tiny', 'SkipListSet') -remove('symmetric_difference_small', 'SkipListSet') -remove('symmetric_difference_medium', 'SkipListSet') -remove('symmetric_difference_large', 'SkipListSet') +remove('symmetric_difference_tiny', 'Skip-List') +remove('symmetric_difference_small', 'Skip-List') +remove('symmetric_difference_medium', 'Skip-List') +remove('symmetric_difference_large', 'Skip-List') for name, kind in kinds.items(): impls['symmetric_difference_update_tiny'][name] = { @@ -574,7 +554,7 @@ 'limit': 1000000 } -limit('symmetric_difference_update_tiny', 'blist.sortedset', 10000) +limit('symmetric_difference_update_tiny', 'B-Tree', 10000) for name, kind in kinds.items(): impls['symmetric_difference_update_small'][name] = { @@ -584,8 +564,7 @@ 'limit': 1000000 } -limit('symmetric_difference_update_small', 'rbset', 10000) -limit('symmetric_difference_update_small', 'blist.sortedset', 10000) +limit('symmetric_difference_update_small', 'B-Tree', 10000) for name, kind in kinds.items(): impls['symmetric_difference_update_medium'][name] = { @@ -595,8 +574,7 @@ 'limit': 1000000 } -limit('symmetric_difference_update_medium', 'rbset', 10000) -limit('symmetric_difference_update_medium', 'blist.sortedset', 10000) +limit('symmetric_difference_update_medium', 'B-Tree', 10000) for name, kind in kinds.items(): impls['symmetric_difference_update_large'][name] = { @@ -606,17 +584,12 @@ 'limit': 1000000 } -limit('symmetric_difference_update_large', 'rbset', 10000) -limit('symmetric_difference_update_large', 'blist.sortedset', 10000) +limit('symmetric_difference_update_large', 'B-Tree', 10000) -remove('symmetric_difference_update_tiny', 'rbset') -remove('symmetric_difference_update_small', 'rbset') -remove('symmetric_difference_update_medium', 'rbset') -remove('symmetric_difference_update_large', 'rbset') -remove('symmetric_difference_update_tiny', 'SkipListSet') -remove('symmetric_difference_update_small', 'SkipListSet') -remove('symmetric_difference_update_medium', 'SkipListSet') -remove('symmetric_difference_update_large', 'SkipListSet') +remove('symmetric_difference_update_tiny', 'Skip-List') +remove('symmetric_difference_update_small', 'Skip-List') +remove('symmetric_difference_update_medium', 'Skip-List') +remove('symmetric_difference_update_large', 'Skip-List') for name, kind in kinds.items(): impls['pop'][name] = { @@ -634,9 +607,8 @@ 'limit': 1000000 } -remove('init', 'SkipListSet') - -limit('init', 'blist.sortedset', 100000) +remove('init', 'Skip-List') +limit('init', 'B-Tree', 100000) if __name__ == '__main__': main('SortedSet') diff -Nru sortedcontainers-1.5.9/tests/benchmark_splits_fill.py sortedcontainers-2.0.4/tests/benchmark_splits_fill.py --- sortedcontainers-1.5.9/tests/benchmark_splits_fill.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/benchmark_splits_fill.py 2018-06-07 05:34:49.000000000 +0000 @@ -91,7 +91,7 @@ count = int(random.normalvariate(int(sl._load * 1.5), 100)) count = min(count, sl._load * 2) count = max(count, sl._load) - sl._lists.append(list(xrange(total, total + count))) + sl._lists.append(list(range(total, total + count))) total += count sl._len = sum(len(sublist) for sublist in sl._lists) @@ -107,31 +107,31 @@ def fill(obj, count, limit): "Repeatedly add random values to the SortedList." - for each in xrange(count): + for each in range(count): obj.add(random.randrange(limit)) if __name__ == '__main__': low_splits = [] - for each in xrange(REPEAT): - sl = SortedListWithSplits(xrange(LIMIT)) + for each in range(REPEAT): + sl = SortedListWithSplits(range(LIMIT)) fill(sl, LIMIT / RATIO, LIMIT) low_splits.append(sl.splits) uniform_splits = [] - for each in xrange(REPEAT): + for each in range(REPEAT): sl = init_sorted_list(SortedListWithSplits(), LIMIT) fill(sl, LIMIT / RATIO, LIMIT) uniform_splits.append(sl.splits) rand_splits = [] - for each in xrange(REPEAT): + for each in range(REPEAT): sl = SortedListWithSplits() - values = list(xrange(LIMIT)) + values = list(range(LIMIT)) random.shuffle(values) for value in values: sl.add(value) diff -Nru sortedcontainers-1.5.9/tests/results_load_sorteddict.txt sortedcontainers-2.0.4/tests/results_load_sorteddict.txt --- sortedcontainers-1.5.9/tests/results_load_sorteddict.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/results_load_sorteddict.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,126 +1,126 @@ -contains SortedDict_100 100 9.99999999252e-07 7.00000000009e-06 7.00000000009e-06 2.39999999998e-06 -contains SortedDict_100 1000 1.00000000014e-06 2.99999999953e-06 2.00000000028e-06 1.99999999992e-06 -contains SortedDict_100 10000 9.99999999962e-06 2.39999999998e-05 2.39999999998e-05 1.39999999998e-05 -contains SortedDict_100 100000 0.000197 0.000198999999999 0.000198999999999 0.0001976 -contains SortedDict_100 1000000 0.003335 0.003822 0.003761 0.0035928 -contains SortedDict_100 10000000 0.052706 0.058335 0.052706 0.0554232 -getitem SortedDict_100 100 9.99999997475e-07 2.00000000206e-06 9.99999997475e-07 1.19999999839e-06 -getitem SortedDict_100 1000 1.99999999495e-06 2.99999999953e-06 2.99999999953e-06 2.79999999862e-06 -getitem SortedDict_100 10000 1.10000000006e-05 2.80000000004e-05 2.80000000004e-05 1.60000000008e-05 -getitem SortedDict_100 100000 0.000233000000001 0.000246000000004 0.000236000000001 0.000237000000001 -getitem SortedDict_100 1000000 0.003552 0.004292 0.003552 0.0037478 -getitem SortedDict_100 10000000 0.055231 0.05768 0.05768 0.0558314 -setitem SortedDict_100 100 1.99999999495e-06 3.00000000664e-06 1.99999999495e-06 2.40000000247e-06 -setitem SortedDict_100 1000 1.49999999906e-05 1.79999999972e-05 1.60000000022e-05 1.59999999994e-05 -setitem SortedDict_100 10000 0.000143999999992 0.000147000000013 0.000144999999989 0.0001452 -setitem SortedDict_100 100000 0.001537 0.001548 0.001548 0.0015402 -setitem SortedDict_100 1000000 0.017033 0.019213 0.019213 0.0177572 -setitem SortedDict_100 10000000 0.243861 0.288666 0.244434 0.2536732 -setitem_existing SortedDict_100 100 9.99999997475e-07 2.00000000916e-06 9.99999997475e-07 1.40000000215e-06 -setitem_existing SortedDict_100 1000 4.99999998738e-06 6.00000001327e-06 4.99999998738e-06 5.40000000058e-06 -setitem_existing SortedDict_100 10000 3.99999999985e-05 5.89999999931e-05 3.99999999985e-05 4.50000000001e-05 -setitem_existing SortedDict_100 100000 0.000485999999995 0.000585999999998 0.000487000000007 0.0005098 -setitem_existing SortedDict_100 1000000 0.00617199999999 0.006325 0.006325 0.0062144 -setitem_existing SortedDict_100 10000000 0.082985 0.091247 0.082985 0.0871666 -delitem SortedDict_100 100 3.9999999899e-06 5.99999999906e-06 3.9999999899e-06 4.59999999975e-06 -delitem SortedDict_100 1000 1.69999999997e-05 1.80000000114e-05 1.79999999972e-05 1.74000000015e-05 -delitem SortedDict_100 10000 0.000174999999999 0.000188000000009 0.000175999999996 0.000178199999999 -delitem SortedDict_100 100000 0.00207900000001 0.00220499999999 0.00211299999999 0.002124 -delitem SortedDict_100 1000000 0.028228 0.031293 0.028547 0.029052 -delitem SortedDict_100 10000000 0.398386 0.410463 0.404565 0.403378 -iter SortedDict_100 100 8.99999997728e-06 1.39999999931e-05 8.99999997728e-06 1.03999999908e-05 -iter SortedDict_100 1000 7.89999999995e-05 8.19999999919e-05 7.9999999997e-05 7.9999999997e-05 -iter SortedDict_100 10000 0.000903000000022 0.000914000000023 0.00090800000001 0.000909400000012 -iter SortedDict_100 100000 0.00758999999999 0.010517 0.00758999999999 0.0085684 -iter SortedDict_100 1000000 0.076316 0.090456 0.085366 0.0810888 -iter SortedDict_100 10000000 0.76365 0.81199 0.81199 0.7794222 -init SortedDict_100 100 2.10000000038e-05 2.29999999988e-05 2.10000000038e-05 2.20000000013e-05 -init SortedDict_100 1000 0.000129999999984 0.000140999999985 0.000136999999995 0.000137199999989 -init SortedDict_100 10000 0.00134400000002 1.538059 0.00149100000002 0.3088304 -init SortedDict_100 100000 0.023881 0.024981 0.024058 0.0242652 -init SortedDict_100 1000000 0.415328 0.519765 0.491272 0.4760448 -init SortedDict_100 10000000 6.239064 7.688623 7.644649 7.2094462 -contains SortedDict_1000 100 1.00000000014e-06 5.99999999995e-06 5.99999999995e-06 2.0000000001e-06 -contains SortedDict_1000 1000 1.00000000014e-06 3.00000000042e-06 1.00000000014e-06 2.19999999995e-06 -contains SortedDict_1000 10000 1.19999999999e-05 1.3e-05 1.3e-05 1.26e-05 -contains SortedDict_1000 100000 0.000214 0.000251 0.000251 0.0002272 -contains SortedDict_1000 1000000 0.003361 0.003518 0.003518 0.0034314 -contains SortedDict_1000 10000000 0.052645 0.060679 0.052645 0.0576358 -getitem SortedDict_1000 100 1.00000000103e-06 2.99999999953e-06 2.99999999953e-06 1.99999999992e-06 -getitem SortedDict_1000 1000 2.00000000206e-06 4.00000000056e-06 2.99999999953e-06 3.00000000024e-06 -getitem SortedDict_1000 10000 1.20000000017e-05 2.69999999993e-05 2.69999999993e-05 1.62000000003e-05 -getitem SortedDict_1000 100000 0.000223999999999 0.000236999999998 0.000228 0.0002304 -getitem SortedDict_1000 1000000 0.003827 0.004113 0.00411 0.0040126 -getitem SortedDict_1000 10000000 0.055162 0.063981 0.063577 0.0591236 -setitem SortedDict_1000 100 2.00000000206e-06 3.99999999701e-06 2.99999999953e-06 3.19999999903e-06 -setitem SortedDict_1000 1000 1.89999999947e-05 2.10000000038e-05 2.10000000038e-05 1.97999999997e-05 -setitem SortedDict_1000 10000 0.000151000000002 0.000155999999997 0.000152 0.0001536 -setitem SortedDict_1000 100000 0.001601 0.001639 0.001612 0.0016194 -setitem SortedDict_1000 1000000 0.018977 0.024229 0.024229 0.0204166 -setitem SortedDict_1000 10000000 0.257405 0.264302 0.257559 0.2598634 -setitem_existing SortedDict_1000 100 1.00000000458e-06 2.00000000206e-06 2.00000000206e-06 1.79999999972e-06 -setitem_existing SortedDict_1000 1000 3.99999999701e-06 5.99999999906e-06 5.99999999906e-06 5.19999999824e-06 -setitem_existing SortedDict_1000 10000 3.80000000035e-05 5.80000000028e-05 5.80000000028e-05 4.36000000008e-05 -setitem_existing SortedDict_1000 100000 0.000484999999998 0.000580999999997 0.000499999999995 0.000527399999999 -setitem_existing SortedDict_1000 1000000 0.005947 0.006771 0.00597500000001 0.006369 -setitem_existing SortedDict_1000 10000000 0.082732 0.088514 0.08313 0.0851664 -delitem SortedDict_1000 100 2.99999999243e-06 5.00000000159e-06 5.00000000159e-06 3.60000000228e-06 -delitem SortedDict_1000 1000 1.79999999972e-05 2.00000000063e-05 1.89999999947e-05 1.90000000003e-05 -delitem SortedDict_1000 10000 0.00018 0.000185999999999 0.00018 0.0001814 -delitem SortedDict_1000 100000 0.00215900000001 0.00221599999999 0.00216999999999 0.0021844 -delitem SortedDict_1000 1000000 0.028196 0.028748 0.028206 0.0284954 -delitem SortedDict_1000 10000000 0.433862 0.445171 0.442879 0.4405502 -iter SortedDict_1000 100 2.09999999896e-05 2.49999999937e-05 2.10000000038e-05 2.1799999999e-05 -iter SortedDict_1000 1000 0.000103999999993 0.000172000000006 0.000169999999997 0.0001454 -iter SortedDict_1000 10000 0.000907000000012 0.001088 0.000917000000001 0.000947200000005 -iter SortedDict_1000 100000 0.00744300000001 0.00756 0.00754999999999 0.0075282 -iter SortedDict_1000 1000000 0.075156 0.082832 0.077053 0.0792472 -iter SortedDict_1000 10000000 0.759224 0.798957 0.760345 0.7728524 -init SortedDict_1000 100 4.59999999975e-05 5.60000000007e-05 4.79999999925e-05 5.00000000045e-05 -init SortedDict_1000 1000 0.000295000000023 0.00030000000001 0.000298000000015 0.000298000000009 -init SortedDict_1000 10000 0.00172699999999 0.00213600000001 0.002017 0.0019658 -init SortedDict_1000 100000 0.019787 0.020661 0.020337 0.0202532 -init SortedDict_1000 1000000 0.384433 0.436946 0.435667 0.4238246 -init SortedDict_1000 10000000 5.45031 12.509464 5.854826 7.0446588 -contains SortedDict_10000 100 9.99999999252e-07 4.99999999981e-06 4.99999999981e-06 1.99999999992e-06 -contains SortedDict_10000 1000 1.00000000014e-06 3.00000000042e-06 1.99999999939e-06 2.3999999998e-06 -contains SortedDict_10000 10000 1.3e-05 1.40000000002e-05 1.40000000002e-05 1.34000000001e-05 -contains SortedDict_10000 100000 0.000212 0.000233000000001 0.000233000000001 0.0002172 -contains SortedDict_10000 1000000 0.003461 0.004078 0.003465 0.0036938 -contains SortedDict_10000 10000000 0.052572 0.055281 0.052572 0.0536056 -getitem SortedDict_10000 100 0.0 1.00000000103e-06 1.00000000103e-06 8.00000000112e-07 -getitem SortedDict_10000 1000 1.9999999985e-06 2.99999999953e-06 1.9999999985e-06 2.20000000013e-06 -getitem SortedDict_10000 10000 1.50000000012e-05 1.69999999997e-05 1.69999999997e-05 1.63999999998e-05 -getitem SortedDict_10000 100000 0.000223999999999 0.000326999999999 0.000231999999997 0.00025 -getitem SortedDict_10000 1000000 0.004246 0.004266 0.004266 0.0042548 -getitem SortedDict_10000 10000000 0.054515 0.059397 0.056649 0.0561216 -setitem SortedDict_10000 100 1.99999999495e-06 4.00000000411e-06 4.00000000411e-06 2.99999999953e-06 -setitem SortedDict_10000 1000 1.70000000068e-05 1.80000000043e-05 1.79999999972e-05 1.78000000005e-05 -setitem SortedDict_10000 10000 0.000146999999998 0.000181999999995 0.000168000000002 0.000164599999999 -setitem SortedDict_10000 100000 0.001586 0.001597 0.001592 0.0015908 -setitem SortedDict_10000 1000000 0.025843 0.027256 0.026758 0.0264244 -setitem SortedDict_10000 10000000 0.49771 0.506579 0.506579 0.5014448 -setitem_existing SortedDict_10000 100 9.99999997475e-07 2.00000000206e-06 9.99999997475e-07 1.5999999988e-06 -setitem_existing SortedDict_10000 1000 4.99999999448e-06 5.99999999906e-06 4.99999999448e-06 5.39999999916e-06 -setitem_existing SortedDict_10000 10000 3.99999999985e-05 4.10000000031e-05 4.10000000031e-05 4.05999999998e-05 -setitem_existing SortedDict_10000 100000 0.000463000000003 0.000474999999994 0.000464999999998 0.000467599999999 -setitem_existing SortedDict_10000 1000000 0.006217 0.006668 0.006668 0.0064024 -setitem_existing SortedDict_10000 10000000 0.081719 0.085733 0.083188 0.0835848 -delitem SortedDict_10000 100 1.99999999495e-06 5.00000000159e-06 2.99999999243e-06 3.19999999761e-06 -delitem SortedDict_10000 1000 1.79999999972e-05 2.10000000038e-05 1.80000000114e-05 1.92000000055e-05 -delitem SortedDict_10000 10000 0.000281000000001 0.000282999999996 0.000281000000001 0.000282199999998 -delitem SortedDict_10000 100000 0.003243 0.003355 0.00332399999999 0.0032832 -delitem SortedDict_10000 1000000 0.043865 0.044692 0.043865 0.044491 -delitem SortedDict_10000 10000000 0.623108 0.649911 0.640017 0.6380776 -iter SortedDict_10000 100 8.99999999149e-06 9.99999998896e-06 8.99999999149e-06 9.19999999383e-06 -iter SortedDict_10000 1000 7.59999999929e-05 7.89999999995e-05 7.70000000045e-05 7.76000000002e-05 -iter SortedDict_10000 10000 0.000857999999994 0.000945000000002 0.000861 0.000879799999998 -iter SortedDict_10000 100000 0.007368 0.00764799999999 0.007417 0.0074506 -iter SortedDict_10000 1000000 0.080112 0.091053 0.080112 0.0834354 -iter SortedDict_10000 10000000 0.758451 0.793783 0.758451 0.7760548 -init SortedDict_10000 100 2.10000000038e-05 2.50000000079e-05 2.29999999988e-05 2.3200000004e-05 -init SortedDict_10000 1000 0.000162000000003 0.000210999999993 0.000192999999996 0.000180399999999 -init SortedDict_10000 10000 0.001559 0.00164700000001 0.00164700000001 0.0016154 -init SortedDict_10000 100000 0.019457 0.0236 0.019457 0.021185 -init SortedDict_10000 1000000 0.3107 0.408261 0.355752 0.356623 -init SortedDict_10000 10000000 4.61376 9.270042 4.843967 5.7523462 +contains SortedDict_100 100 2.000000000279556e-06 2.9999999995311555e-06 2.9999999995311555e-06 2.5999999998305156e-06 +contains SortedDict_100 1000 2.9999999995311555e-06 4.999999999810711e-06 3.999999998782755e-06 3.7999999999982492e-06 +contains SortedDict_100 10000 1.3999999998404178e-05 2.800000000036107e-05 2.19999999995224e-05 2.099999999991553e-05 +contains SortedDict_100 100000 0.0002739999999992193 0.00029299999999921056 0.00027500000000024727 0.0002783999999994791 +contains SortedDict_100 1000000 0.004462000000000188 0.004592999999999847 0.00451800000000091 0.0045236000000002715 +contains SortedDict_100 10000000 0.06748600000000238 0.07617499999999922 0.06845799999999969 0.06980160000000027 +getitem SortedDict_100 100 1.9999999949504854e-06 3.999999997006398e-06 2.0000000020559128e-06 2.599999999119973e-06 +getitem SortedDict_100 1000 2.9999999995311555e-06 4.0000000041118255e-06 2.9999999995311555e-06 3.4000000013634237e-06 +getitem SortedDict_100 10000 1.699999999971169e-05 2.200000000129876e-05 1.7999999997186933e-05 1.9199999999841567e-05 +getitem SortedDict_100 100000 0.0002980000000007976 0.00037700000000029377 0.0003150000000005093 0.0003216000000008989 +getitem SortedDict_100 1000000 0.004998000000000502 0.005631999999998527 0.005093000000002235 0.0052417999999988755 +getitem SortedDict_100 10000000 0.07325000000000159 0.07905399999999929 0.07337099999999452 0.07448619999999977 +setitem SortedDict_100 100 4.0000000041118255e-06 5.999999999062311e-06 5.000000001587068e-06 5.200000001082117e-06 +setitem SortedDict_100 1000 2.2999999998774e-05 2.800000000036107e-05 2.3999999996249244e-05 2.5199999998903878e-05 +setitem SortedDict_100 10000 0.00016599999999300508 0.00017499999999870397 0.00016699999999048032 0.00016839999999547218 +setitem SortedDict_100 100000 0.0017320000000040636 0.0018249999999966349 0.001774999999994975 0.001776799999998957 +setitem SortedDict_100 1000000 0.019542999999998756 0.020169999999993138 0.019812999999999192 0.019892599999997172 +setitem SortedDict_100 10000000 0.26478300000000843 0.3218779999999981 0.26619599999999366 0.27810679999999766 +setitem_existing SortedDict_100 100 1.9999999949504854e-06 4.0000000041118255e-06 2.00000000916134e-06 2.8000000014571926e-06 +setitem_existing SortedDict_100 1000 5.999999999062311e-06 6.999999996537554e-06 5.999999999062311e-06 6.399999998052408e-06 +setitem_existing SortedDict_100 10000 4.299999999091142e-05 6.700000000137152e-05 4.400000000259752e-05 4.820000000052005e-05 +setitem_existing SortedDict_100 100000 0.000549000000006572 0.0005560000000031096 0.0005540000000081591 0.0005532000000073367 +setitem_existing SortedDict_100 1000000 0.00746300000000133 0.007918000000003644 0.007694999999998231 0.007687399999997524 +setitem_existing SortedDict_100 10000000 0.10333199999999465 0.10731400000000235 0.10493499999999756 0.10487919999999917 +delitem SortedDict_100 100 5.000000001587068e-06 7.999999994012796e-06 5.999999999062311e-06 6.19999999855736e-06 +delitem SortedDict_100 1000 2.1000000003823516e-05 2.2999999998774e-05 2.200000000129876e-05 2.1999999998456587e-05 +delitem SortedDict_100 10000 0.00019799999999747797 0.00020700000000317686 0.00019899999999495321 0.00020059999999659793 +delitem SortedDict_100 100000 0.0024230000000073915 0.002765999999994051 0.002512999999993326 0.00257519999999829 +delitem SortedDict_100 1000000 0.03224300000000824 0.03433099999999456 0.0323099999999954 0.03284800000000132 +delitem SortedDict_100 10000000 0.44271899999999675 0.4619880000000052 0.45329900000000123 0.45337839999999974 +iter SortedDict_100 100 9.999999988963282e-06 2.3999999996249244e-05 1.100000000064938e-05 1.3399999997432132e-05 +iter SortedDict_100 1000 9.699999999668307e-05 0.00010600000000238197 9.799999999415832e-05 0.00010079999999561551 +iter SortedDict_100 10000 0.0009600000000062892 0.001110999999994533 0.001024000000001024 0.0010359999999991487 +iter SortedDict_100 100000 0.009250999999991905 0.009398999999987723 0.009334000000009723 0.009324199999994676 +iter SortedDict_100 1000000 0.09199199999999053 0.09215800000001195 0.09206399999999348 0.09207220000000405 +iter SortedDict_100 10000000 0.9241499999999974 0.9507650000000183 0.9427799999999991 0.9381306000000051 +init SortedDict_100 100 3.100000000699765e-05 3.499999999689862e-05 3.100000000699765e-05 3.2000000004472895e-05 +init SortedDict_100 1000 0.0002910000000042601 0.00029299999999921056 0.0002920000000017353 0.0002918000000022403 +init SortedDict_100 10000 0.003689000000008491 0.004155000000025666 0.0039759999999944284 0.003961200000009058 +init SortedDict_100 100000 0.05624199999999746 0.058991999999989275 0.05842400000000225 0.05805199999999786 +init SortedDict_100 1000000 0.9024139999999932 0.9748549999999909 0.9218649999999968 0.9312153999999907 +init SortedDict_100 10000000 15.174035000000003 16.60709 15.701736000000011 15.780175800000006 +contains SortedDict_1000 100 9.999999992515995e-07 2.9999999995311555e-06 1.0000000010279564e-06 1.5999999998683733e-06 +contains SortedDict_1000 1000 2.000000000279556e-06 7.000000000090267e-06 3.999999998782755e-06 4.000000000203841e-06 +contains SortedDict_1000 10000 1.3000000000928935e-05 1.5999999998683734e-05 1.4000000000180535e-05 1.4399999999881174e-05 +contains SortedDict_1000 100000 0.0002510000000004453 0.00031300000000022976 0.0002569999999995076 0.0002676000000001011 +contains SortedDict_1000 1000000 0.004433999999999827 0.005342999999999876 0.004856999999999445 0.0048227999999998165 +contains SortedDict_1000 10000000 0.06721699999999942 0.07597099999999912 0.07512399999999886 0.07252419999999944 +getitem SortedDict_1000 100 1.999999998503199e-06 2.9999999995311555e-06 2.9999999995311555e-06 2.599999999119973e-06 +getitem SortedDict_1000 1000 3.999999997006398e-06 5.000000001587068e-06 4.9999999980343546e-06 4.799999999249849e-06 +getitem SortedDict_1000 10000 2.1000000000270802e-05 2.5000000000829914e-05 2.2999999998774e-05 2.3199999999690137e-05 +getitem SortedDict_1000 100000 0.00030800000000041905 0.0004249999999998977 0.00031200000000097816 0.0003360000000007801 +getitem SortedDict_1000 1000000 0.004761999999999489 0.005274999999997476 0.0049259999999975435 0.005010000000000047 +getitem SortedDict_1000 10000000 0.07265000000000299 0.07471299999999559 0.07306400000000224 0.07344239999999899 +setitem SortedDict_1000 100 2.9999999995311555e-06 3.999999997006398e-06 2.9999999995311555e-06 3.3999999985212525e-06 +setitem SortedDict_1000 1000 1.699999999971169e-05 1.9999999999242846e-05 1.800000000429236e-05 1.8400000000440288e-05 +setitem SortedDict_1000 10000 0.00016699999999758575 0.00019300000000299633 0.00017100000000169757 0.0001756000000000313 +setitem SortedDict_1000 100000 0.0017989999999983297 0.001967000000000496 0.0018719999999987635 0.001875400000000127 +setitem SortedDict_1000 1000000 0.021736000000004196 0.022151999999998395 0.022104999999996267 0.02199939999999856 +setitem SortedDict_1000 10000000 0.2909089999999992 0.29522999999999655 0.2918729999999954 0.2923837999999989 +setitem_existing SortedDict_1000 100 1.9999999949504854e-06 2.9999999995311555e-06 2.0000000020559128e-06 2.3999999996249244e-06 +setitem_existing SortedDict_1000 1000 5.999999999062311e-06 1.1999999998124622e-05 6.999999996537554e-06 7.80000000020209e-06 +setitem_existing SortedDict_1000 10000 4.7999999999603915e-05 5.200000000371574e-05 5.099999999913507e-05 5.040000000207101e-05 +setitem_existing SortedDict_1000 100000 0.0005559999999960041 0.0005689999999987094 0.0005669999999966535 0.0005647999999979447 +setitem_existing SortedDict_1000 1000000 0.007640999999999565 0.008592000000000155 0.007694999999998231 0.008032199999999535 +setitem_existing SortedDict_1000 10000000 0.10318700000000547 0.11369200000000035 0.10446599999998796 0.10648439999999937 +delitem SortedDict_1000 100 5.999999999062311e-06 7.999999994012796e-06 6.999999996537554e-06 6.799999997042505e-06 +delitem SortedDict_1000 1000 2.200000000129876e-05 3.100000000699765e-05 2.2999999998774e-05 2.5600000003578317e-05 +delitem SortedDict_1000 10000 0.000206999999988966 0.00021200000000476393 0.0002090000000123382 0.00020959999999945467 +delitem SortedDict_1000 100000 0.002564000000006672 0.002894999999995207 0.0025789999999972224 0.0026472000000012487 +delitem SortedDict_1000 1000000 0.035609000000007995 0.03661600000000931 0.03605299999999545 0.03604220000000282 +delitem SortedDict_1000 10000000 0.49894199999999955 0.5848440000000039 0.5061369999999954 0.5219689999999986 +iter SortedDict_1000 100 1.1999999998124622e-05 1.7999999997186933e-05 1.3999999993075107e-05 1.4199999995412327e-05 +iter SortedDict_1000 1000 9.599999999920783e-05 9.900000000584441e-05 9.700000001089393e-05 9.720000000186246e-05 +iter SortedDict_1000 10000 0.0010120000000028995 0.00115300000000218 0.001036999999996624 0.0010524000000003753 +iter SortedDict_1000 100000 0.00946500000000583 0.014097000000006688 0.009512000000000853 0.010452200000005973 +iter SortedDict_1000 1000000 0.0921120000000002 0.10368800000000533 0.09884399999999971 0.09781060000000252 +iter SortedDict_1000 10000000 0.9188039999999944 0.932140000000004 0.9213909999999998 0.9246607999999981 +init SortedDict_1000 100 3.499999999689862e-05 3.90000000152213e-05 3.8999999986799594e-05 3.7600000001702935e-05 +init SortedDict_1000 1000 0.0003280000000245309 0.00038200000000188084 0.00033200000001443186 0.0003414000000134365 +init SortedDict_1000 10000 0.003757000000007338 0.014057000000008202 0.003876999999988584 0.005893800000001193 +init SortedDict_1000 100000 0.053374999999988404 0.055216000000001486 0.0548960000000136 0.05465820000000008 +init SortedDict_1000 1000000 0.8816829999999811 1.0189479999999946 0.8982220000000041 0.9193971999999974 +init SortedDict_1000 10000000 13.51871700000001 13.722599000000002 13.671183000000013 13.63854520000001 +contains SortedDict_10000 100 1.0000000010279564e-06 2.000000000279556e-06 1.999999998503199e-06 1.6000000002236448e-06 +contains SortedDict_10000 1000 2.9999999995311555e-06 7.999999999341867e-06 4.000000000559112e-06 4.600000000110072e-06 +contains SortedDict_10000 10000 1.2999999999152578e-05 1.4000000000180535e-05 1.4000000000180535e-05 1.3799999999619672e-05 +contains SortedDict_10000 100000 0.00024900000000016576 0.00025399999999997647 0.00025399999999997647 0.000252800000000164 +contains SortedDict_10000 1000000 0.004219000000000861 0.004790000000001626 0.004362000000000421 0.004416200000000714 +contains SortedDict_10000 10000000 0.06791599999999676 0.07552599999999998 0.06849200000000266 0.07024679999999961 +getitem SortedDict_10000 100 1.999999998503199e-06 1.1999999998124622e-05 2.9999999995311555e-06 4.799999998539306e-06 +getitem SortedDict_10000 1000 2.9999999995311555e-06 4.000000000559112e-06 2.9999999995311555e-06 3.3999999992317954e-06 +getitem SortedDict_10000 10000 1.699999999971169e-05 1.8000000000739647e-05 1.8000000000739647e-05 1.7800000000534057e-05 +getitem SortedDict_10000 100000 0.0002940000000002385 0.00030599999999836314 0.0003010000000003288 0.0003001999999995064 +getitem SortedDict_10000 1000000 0.004753999999998371 0.005246999999997115 0.004789000000002375 0.004880599999999902 +getitem SortedDict_10000 10000000 0.073048 0.07975700000000074 0.07355600000000351 0.07480960000000039 +setitem SortedDict_10000 100 2.9999999995311555e-06 5.000000001587068e-06 4.0000000041118255e-06 4.000000001269655e-06 +setitem SortedDict_10000 1000 1.8999999994662176e-05 2.199999999419333e-05 1.9999999999242846e-05 1.999999999782176e-05 +setitem SortedDict_10000 10000 0.00017299999999664806 0.0001869999999968286 0.0001790000000028158 0.00017999999999886995 +setitem SortedDict_10000 100000 0.0018799999999998818 0.0019220000000004234 0.0019080000000002428 0.001905800000000113 +setitem SortedDict_10000 1000000 0.02850100000000566 0.0292220000000043 0.028729000000005556 0.028819600000002766 +setitem SortedDict_10000 10000000 0.5236610000000042 0.5324370000000016 0.5295389999999998 0.5291414000000003 +setitem_existing SortedDict_10000 100 1.9999999949504854e-06 2.9999999995311555e-06 2.9999999995311555e-06 2.599999999119973e-06 +setitem_existing SortedDict_10000 1000 5.999999999062311e-06 8.000000001118224e-06 7.000000003642981e-06 6.800000002726847e-06 +setitem_existing SortedDict_10000 10000 4.2000000000541604e-05 5.699999999819738e-05 5.300000000119098e-05 5.15999999990413e-05 +setitem_existing SortedDict_10000 100000 0.0005510000000015225 0.000605999999997664 0.0005620000000021719 0.000575599999999099 +setitem_existing SortedDict_10000 1000000 0.007398999999999489 0.007917999999996539 0.007435000000000969 0.007577999999998042 +setitem_existing SortedDict_10000 10000000 0.1026509999999945 0.10953899999999805 0.10289300000000168 0.10521459999999934 +delitem SortedDict_10000 100 5.000000001587068e-06 7.999999994012796e-06 6.999999996537554e-06 6.399999998052408e-06 +delitem SortedDict_10000 1000 2.4999999993724487e-05 2.6000000005410584e-05 2.500000000793534e-05 2.5400000001241097e-05 +delitem SortedDict_10000 10000 0.00030200000000490945 0.00034499999999582087 0.00030399999999985994 0.0003158000000013317 +delitem SortedDict_10000 100000 0.0037520000000057507 0.003937999999990893 0.0038709999999895217 0.0038475999999946 +delitem SortedDict_10000 1000000 0.048649999999994975 0.04964099999999405 0.048737000000002695 0.04893519999999683 +delitem SortedDict_10000 10000000 0.6944450000000018 0.7149840000000012 0.7018829999999951 0.703052199999999 +iter SortedDict_10000 100 1.100000000064938e-05 1.2000000012335477e-05 1.1999999998124622e-05 1.1800000001471744e-05 +iter SortedDict_10000 1000 9.799999999415832e-05 0.00013800000000685486 0.00012800000000368073 0.000119000000000824 +iter SortedDict_10000 10000 0.0010079999999987876 0.001040999999986525 0.0010309999999975616 0.0010279999999937672 +iter SortedDict_10000 100000 0.009129000000001497 0.015973999999999933 0.009639000000007059 0.010792400000002544 +iter SortedDict_10000 1000000 0.09232499999998822 0.09386600000000556 0.092772999999994 0.09301779999999837 +iter SortedDict_10000 10000000 0.9283960000000064 0.9801980000000015 0.9372659999999939 0.9441995999999989 +init SortedDict_10000 100 3.100000000699765e-05 4.5999999997548e-05 3.300000000194814e-05 3.540000000157306e-05 +init SortedDict_10000 1000 0.00029600000000584714 0.00032199999999704687 0.0003070000000064965 0.0003073999999998023 +init SortedDict_10000 10000 0.0035060000000015634 0.004085000000003447 0.0037419999999883657 0.003772199999997383 +init SortedDict_10000 100000 0.051173000000005686 0.05317900000000009 0.05273800000000506 0.052523600000003515 +init SortedDict_10000 1000000 0.834512999999987 1.0285619999999938 0.8442009999999982 0.8815781999999956 +init SortedDict_10000 10000000 12.789107000000001 19.747027000000003 12.914602000000002 14.2436912 diff -Nru sortedcontainers-1.5.9/tests/results_load_sortedlist.txt sortedcontainers-2.0.4/tests/results_load_sortedlist.txt --- sortedcontainers-1.5.9/tests/results_load_sortedlist.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/results_load_sortedlist.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,324 +1,324 @@ -add SortedList_100 100 1.99999999939e-06 3.00000000042e-06 2.99999999953e-06 2.80000000004e-06 -add SortedList_100 1000 1.40000000002e-05 1.69999999997e-05 1.40000000002e-05 1.46000000001e-05 -add SortedList_100 10000 0.000135999999999 0.000137 0.000135999999999 0.0001364 -add SortedList_100 100000 0.001614 0.001735 0.001735 0.0016648 -add SortedList_100 1000000 0.020385 0.020784 0.020784 0.020613 -add SortedList_100 10000000 0.337733 0.359191 0.344795 0.3443 -update_small SortedList_100 100 1.29999999956e-05 1.40000000073e-05 1.29999999956e-05 1.34000000031e-05 -update_small SortedList_100 1000 0.000124999999997 0.000139000000004 0.000125999999995 0.0001284 -update_small SortedList_100 10000 0.00142 0.001481 0.001475 0.001455 -update_small SortedList_100 100000 0.01488 0.015492 0.014953 0.015033 -update_small SortedList_100 1000000 0.177837 0.185329 0.179555 0.1802494 -update_small SortedList_100 10000000 2.167129 2.248893 2.183323 2.1941292 -update_large SortedList_100 100 2.20000000013e-05 2.50000000221e-05 2.20000000013e-05 2.32000000096e-05 -update_large SortedList_100 1000 0.000233000000009 0.000246000000004 0.000235000000004 0.000236399999994 -update_large SortedList_100 10000 0.00316699999999 0.00335799999999 0.003356 0.0033154 -update_large SortedList_100 100000 0.040751 0.040891 0.040795 0.0407978 -update_large SortedList_100 1000000 0.64575 1.101071 0.64575 0.8279116 -update_large SortedList_100 10000000 10.416255 11.494066 10.632318 10.8063798 -contains SortedList_100 100 1.99999999495e-06 2.99999999243e-06 1.99999999495e-06 2.20000001718e-06 -contains SortedList_100 1000 8.99999997728e-06 1.00000000316e-05 8.99999997728e-06 9.19999999951e-06 -contains SortedList_100 10000 8.80000000052e-05 8.90000000027e-05 8.80000000052e-05 8.86000000037e-05 -contains SortedList_100 100000 0.00109699999996 0.00113600000003 0.00109699999996 0.0011082 -contains SortedList_100 1000000 0.01462 0.015415 0.01485 0.0148924 -contains SortedList_100 10000000 0.254546 0.257669 0.254886 0.2556156 -remove SortedList_100 100 1.99999999495e-06 3.9999999899e-06 2.99999999243e-06 3.19999999192e-06 -remove SortedList_100 1000 1.49999999621e-05 1.59999999596e-05 1.49999999621e-05 1.53999999611e-05 -remove SortedList_100 10000 0.000144999999975 0.000153000000012 0.000145000000032 0.000146599999994 -remove SortedList_100 100000 0.00168400000001 0.00176900000002 0.00176499999998 0.00172160000001 -remove SortedList_100 1000000 0.02093 0.0238 0.02109 0.0216766 -remove SortedList_100 10000000 0.321887 0.335112 0.321887 0.3263984 -delitem SortedList_100 100 2.99999999243e-06 5.00000004422e-06 3.9999999899e-06 4.00000000127e-06 -delitem SortedList_100 1000 5.00000000443e-05 5.59999999723e-05 5.59999999723e-05 5.33999999902e-05 -delitem SortedList_100 10000 0.000456999999983 0.00046100000003 0.000457999999981 0.000459000000001 -delitem SortedList_100 100000 0.00471199999998 0.00519100000002 0.00480600000003 0.00483380000001 -delitem SortedList_100 1000000 0.057125 0.057648 0.057648 0.0573632 -delitem SortedList_100 10000000 0.694313 0.704551 0.704551 0.6986042 -bisect SortedList_100 100 9.99999997475e-07 1.99999999495e-06 9.99999997475e-07 1.59999999596e-06 -bisect SortedList_100 1000 3.20000000329e-05 5.29999999799e-05 5.29999999799e-05 3.78000000183e-05 -bisect SortedList_100 10000 0.000251999999989 0.000253999999984 0.000252999999987 0.000252999999998 -bisect SortedList_100 100000 0.00272200000001 0.00278800000001 0.00278800000001 0.00274620000001 -bisect SortedList_100 1000000 0.035143 0.037007 0.035583 0.0358864 -bisect SortedList_100 10000000 0.499125 0.522909 0.502697 0.5079738 -getitem SortedList_100 100 9.99999997475e-07 2.99999999243e-06 9.99999997475e-07 1.79999999546e-06 -getitem SortedList_100 1000 3.90000000152e-05 4.30000000051e-05 3.9999999899e-05 4.05999999884e-05 -getitem SortedList_100 10000 0.000263999999902 0.000266000000011 0.000265000000013 0.00026519999999 -getitem SortedList_100 100000 0.00272100000007 0.00273700000002 0.00272100000007 0.00273020000004 -getitem SortedList_100 1000000 0.031844 0.0326209999999 0.032043 0.032139 -getitem SortedList_100 10000000 0.397271 0.402515 0.401434 0.4003752 -pop SortedList_100 100 1.99999999495e-06 2.99999999243e-06 1.99999999495e-06 2.59999999344e-06 -pop SortedList_100 1000 9.99999997475e-06 1.09999999722e-05 1.00000000884e-05 1.0599999996e-05 -pop SortedList_100 10000 9.29999999926e-05 0.000102999999967 9.50000001012e-05 9.60000000077e-05 -pop SortedList_100 100000 0.000932000000034 0.000974000000042 0.000934000000029 0.000941400000011 -pop SortedList_100 1000000 0.00920399999995 0.00943400000006 0.00933099999997 0.00931660000001 -pop SortedList_100 10000000 0.0922479999999 0.098171 0.0932320000001 0.0936382 -index SortedList_100 100 1.99999999495e-06 3.9999999899e-06 1.99999999495e-06 2.79999999293e-06 -index SortedList_100 1000 3.50000000253e-05 3.80000000177e-05 3.70000000203e-05 3.64000000218e-05 -index SortedList_100 10000 0.000287999999955 0.000292000000059 0.000290000000064 0.000289799999996 -index SortedList_100 100000 0.00300600000003 0.003378 0.00300600000003 0.00310340000001 -index SortedList_100 1000000 0.038631 0.0431530000001 0.038781 0.0396128 -index SortedList_100 10000000 0.535865 0.55477 0.535865 0.5414642 -iter SortedList_100 100 7.9999999798e-06 9.99999997475e-06 7.9999999798e-06 8.80000002326e-06 -iter SortedList_100 1000 7.29999999294e-05 7.30000000431e-05 7.30000000431e-05 7.29999999976e-05 -iter SortedList_100 10000 0.000712999999905 0.000736000000074 0.000715000000014 0.000720800000022 -iter SortedList_100 100000 0.00715600000001 0.00726700000007 0.00717199999997 0.0071876 -iter SortedList_100 1000000 0.0734200000001 0.079778 0.0734200000001 0.075916 -iter SortedList_100 10000000 0.736013 0.772366 0.736013 0.760324 -count SortedList_100 100 1.99999999495e-06 3.9999999899e-06 1.99999999495e-06 2.99999999243e-06 -count SortedList_100 1000 1.39999999647e-05 1.59999999596e-05 1.39999999647e-05 1.49999999621e-05 -count SortedList_100 10000 0.000207000000046 0.000218000000018 0.000210000000038 0.000211400000035 -count SortedList_100 100000 0.00210000000004 0.00215200000002 0.00215200000002 0.00211560000002 -count SortedList_100 1000000 0.0245179999999 0.026647 0.02502 0.0256078 -count SortedList_100 10000000 0.354223 0.361014 0.361014 0.3583418 -priorityqueue SortedList_100 100 1.90000000657e-05 2.20000000581e-05 2.10000000607e-05 2.08000000157e-05 -priorityqueue SortedList_100 1000 0.00018799999998 0.000198000000069 0.000196999999957 0.000194599999986 -priorityqueue SortedList_100 10000 0.00199899999996 0.00225999999998 0.00202000000002 0.00212039999999 -priorityqueue SortedList_100 100000 0.02106 0.021242 0.021242 0.0211442 -priorityqueue SortedList_100 1000000 0.259562 0.264817 0.26393 0.261951 -priorityqueue SortedList_100 10000000 3.254186 3.307157 3.283008 3.2822132 -multiset SortedList_100 100 2.49999999369e-05 3.60000000228e-05 2.49999999369e-05 2.7799999998e-05 -multiset SortedList_100 1000 0.00022899999999 0.000242999999955 0.000242999999955 0.000236799999971 -multiset SortedList_100 10000 0.00226799999996 0.00232700000004 0.00228200000004 0.0022954 -multiset SortedList_100 100000 0.024094 0.024493 0.024094 0.0242778 -multiset SortedList_100 1000000 0.318853 0.326149 0.326149 0.3233836 -multiset SortedList_100 10000000 4.18637 4.242273 4.242273 4.2200382 -ranking SortedList_100 100 2.79999999293e-05 3.40000000278e-05 2.79999999293e-05 2.99999999925e-05 -ranking SortedList_100 1000 0.00033099999996 0.000340000000051 0.000340000000051 0.000336000000016 -ranking SortedList_100 10000 0.00341400000002 0.00345399999992 0.00341400000002 0.00342539999995 -ranking SortedList_100 100000 0.038294 0.03873 0.038294 0.038489 -ranking SortedList_100 1000000 0.485521 0.489879 0.485521 0.4879328 -ranking SortedList_100 10000000 6.015687 6.039083 6.015687 6.0263896 -neighbor SortedList_100 100 2.50000000506e-05 4.09999997828e-05 2.50000000506e-05 3.07999999677e-05 -neighbor SortedList_100 1000 0.000291999999945 0.000313000000006 0.000305000000026 0.000305800000024 -neighbor SortedList_100 10000 0.00313399999982 0.00317900000005 0.00314099999991 0.00315919999994 -neighbor SortedList_100 100000 0.035353 0.035603 0.0355 0.035504 -neighbor SortedList_100 1000000 0.465241 0.475542 0.465241 0.4705752 -neighbor SortedList_100 10000000 5.950248 6.022087 5.950248 5.9806326 -intervals SortedList_100 100 2.19999999445e-05 3.10000000354e-05 2.60000001617e-05 2.58000000485e-05 -intervals SortedList_100 1000 0.00037599999996 0.000404000000117 0.000404000000117 0.000388800000019 -intervals SortedList_100 10000 0.00388399999997 0.00398700000005 0.00395100000014 0.00394760000004 -intervals SortedList_100 100000 0.044719 0.0464179999999 0.044719 0.0458284 -intervals SortedList_100 1000000 0.564693 0.576415 0.567131 0.5716316 -intervals SortedList_100 10000000 6.932922 7.032504 6.953052 6.9594306 -init SortedList_100 100 1.39999999647e-05 1.59999999596e-05 1.39999999647e-05 1.49999999849e-05 -init SortedList_100 1000 0.000166999999919 0.000170000000026 0.000167000000147 0.000167800000054 -init SortedList_100 10000 0.00224900000012 0.00226799999996 0.00224900000012 0.00225460000006 -init SortedList_100 100000 0.030248 0.03062 0.030248 0.0304244 -init SortedList_100 1000000 0.511899 0.540189 0.526886 0.5263608 -init SortedList_100 10000000 7.953445 8.090798 7.984483 8.0036732 -add SortedList_1000 100 1.99999999939e-06 4.00000000056e-06 2.00000000028e-06 2.3999999998e-06 -add SortedList_1000 1000 1.40000000002e-05 1.59999999996e-05 1.59999999996e-05 1.48000000001e-05 -add SortedList_1000 10000 0.000144 0.000146 0.000146 0.000145 -add SortedList_1000 100000 0.0017 0.001904 0.001712 0.0017628 -add SortedList_1000 1000000 0.023146 0.024493 0.024493 0.0236388 -add SortedList_1000 10000000 0.415896 0.442092 0.42042 0.425481 -update_small SortedList_1000 100 1.50000000048e-05 1.69999999997e-05 1.50000000048e-05 1.60000000022e-05 -update_small SortedList_1000 1000 0.000138999999997 0.000141000000006 0.000138999999997 0.000139799999999 -update_small SortedList_1000 10000 0.001493 0.001641 0.001639 0.0015796 -update_small SortedList_1000 100000 0.016246 0.016432 0.016246 0.0163402 -update_small SortedList_1000 1000000 0.190972 0.196731 0.190972 0.1929938 -update_small SortedList_1000 10000000 2.309076 2.363836 2.363836 2.3434974 -update_large SortedList_1000 100 1.99999999779e-05 2.20000000013e-05 2.00000000063e-05 2.07999999986e-05 -update_large SortedList_1000 1000 0.00022899999999 0.000242000000014 0.000230000000016 0.000233400000002 -update_large SortedList_1000 10000 0.00286800000001 0.00291100000001 0.00291100000001 0.00288620000001 -update_large SortedList_1000 100000 0.03856 0.038688 0.038627 0.0386046 -update_large SortedList_1000 1000000 0.61153 0.649951 0.61153 0.623126 -update_large SortedList_1000 10000000 9.115899 9.29836 9.115899 9.2129122 -contains SortedList_1000 100 9.99999997475e-07 2.99999999243e-06 2.00000002337e-06 1.80000000114e-06 -contains SortedList_1000 1000 8.99999997728e-06 1.00000000032e-05 9.0000000057e-06 9.399999999e-06 -contains SortedList_1000 10000 8.79999999768e-05 9.09999999976e-05 8.79999999768e-05 8.91999999965e-05 -contains SortedList_1000 100000 0.00112999999999 0.001227 0.001148 0.001163 -contains SortedList_1000 1000000 0.015276 0.015591 0.015311 0.0154236 -contains SortedList_1000 10000000 0.249405 0.25663 0.25022 0.2520588 -remove SortedList_1000 100 1.99999999495e-06 2.99999999243e-06 2.99999999243e-06 2.79999999293e-06 -remove SortedList_1000 1000 1.5000000019e-05 1.60000000164e-05 1.60000000164e-05 1.56000000061e-05 -remove SortedList_1000 10000 0.000149999999962 0.000153000000012 0.000153000000012 0.000151199999982 -remove SortedList_1000 100000 0.00175100000001 0.00188000000003 0.00180800000004 0.00181300000002 -remove SortedList_1000 1000000 0.023121 0.023647 0.023139 0.0234188 -remove SortedList_1000 10000000 0.369735 0.382101 0.369735 0.376723 -delitem SortedList_1000 100 3.9999999899e-06 6.00000004169e-06 3.9999999899e-06 4.59999999975e-06 -delitem SortedList_1000 1000 2.00000000063e-05 2.39999999962e-05 2.00000000063e-05 2.16000000023e-05 -delitem SortedList_1000 10000 0.000364999999988 0.000373999999965 0.000373999999965 0.000369999999998 -delitem SortedList_1000 100000 0.004007 0.00411000000003 0.00403699999998 0.00404540000001 -delitem SortedList_1000 1000000 0.04882 0.050087 0.048968 0.049328 -delitem SortedList_1000 10000000 0.639983 0.661125 0.661125 0.6510256 -bisect SortedList_1000 100 9.99999997475e-07 2.99999999243e-06 9.99999997475e-07 1.80000000682e-06 -bisect SortedList_1000 1000 9.00000003412e-06 1.10000000291e-05 9.00000003412e-06 9.99999999749e-06 -bisect SortedList_1000 10000 0.000192000000027 0.000194000000022 0.000193999999965 0.000192800000013 -bisect SortedList_1000 100000 0.00229899999999 0.00232299999999 0.00230000000005 0.00230640000001 -bisect SortedList_1000 1000000 0.030352 0.03172 0.03107 0.0308814 -bisect SortedList_1000 10000000 0.435001 0.469593 0.444057 0.4449134 -getitem SortedList_1000 100 9.99999997475e-07 1.99999999495e-06 9.99999997475e-07 1.59999999596e-06 -getitem SortedList_1000 1000 5.99999998485e-06 8.00000003665e-06 6.99999998233e-06 7.20000001593e-06 -getitem SortedList_1000 10000 0.000194000000022 0.000196999999957 0.000196000000017 0.000195800000006 -getitem SortedList_1000 100000 0.002253 0.00228800000002 0.00228800000002 0.0022728 -getitem SortedList_1000 1000000 0.026462 0.028395 0.026994 0.0272862 -getitem SortedList_1000 10000000 0.330728 0.338107 0.330728 0.3333218 -pop SortedList_1000 100 1.99999999495e-06 2.99999999243e-06 1.99999999495e-06 2.20000001718e-06 -pop SortedList_1000 1000 1.09999999722e-05 1.20000000834e-05 1.19999999697e-05 1.15999999935e-05 -pop SortedList_1000 10000 9.00000000001e-05 9.09999999976e-05 9.00000000001e-05 9.03999999991e-05 -pop SortedList_1000 100000 0.000894000000017 0.000896000000012 0.000896000000012 0.000895000000014 -pop SortedList_1000 1000000 0.008914 0.00914999999998 0.008914 0.00900359999998 -pop SortedList_1000 10000000 0.089246 0.0922429999999 0.0922429999999 0.090094 -index SortedList_1000 100 1.99999999495e-06 2.99999999243e-06 2.99999999243e-06 2.40000001668e-06 -index SortedList_1000 1000 1.29999999672e-05 1.40000000783e-05 1.29999999672e-05 1.36000000111e-05 -index SortedList_1000 10000 0.000231999999983 0.000233999999978 0.000231999999983 0.000232600000004 -index SortedList_1000 100000 0.00264400000003 0.00266099999999 0.00266099999999 0.002648 -index SortedList_1000 1000000 0.034313 0.034943 0.034799 0.0346438 -index SortedList_1000 10000000 0.467313 0.481817 0.476318 0.4734134 -iter SortedList_1000 100 8.00000009349e-06 8.99999997728e-06 8.99999997728e-06 8.80000000052e-06 -iter SortedList_1000 1000 7.19999999319e-05 7.40000000405e-05 7.30000000431e-05 7.29999999976e-05 -iter SortedList_1000 10000 0.000708000000031 0.000744000000054 0.000709000000029 0.000715600000035 -iter SortedList_1000 100000 0.00710499999991 0.00712999999996 0.00712200000009 0.00712059999998 -iter SortedList_1000 1000000 0.0729779999999 0.0757620000001 0.0730930000001 0.0737756 -iter SortedList_1000 10000000 0.735123 0.768452 0.740357 0.7496972 -count SortedList_1000 100 1.99999999495e-06 2.99999999243e-06 1.99999999495e-06 2.19999999445e-06 -count SortedList_1000 1000 1.50000000758e-05 1.59999999596e-05 1.59999999596e-05 1.56000000061e-05 -count SortedList_1000 10000 0.00018 0.00018399999999 0.000182999999993 0.000182399999994 -count SortedList_1000 100000 0.00197600000001 0.00199399999997 0.00198399999999 0.00198459999997 -count SortedList_1000 1000000 0.0235120000001 0.0243850000001 0.02359 0.0237924 -count SortedList_1000 10000000 0.338331 0.349204 0.34054 0.3422864 -priorityqueue SortedList_1000 100 1.99999999495e-05 2.20000000581e-05 2.19999999445e-05 2.13999999687e-05 -priorityqueue SortedList_1000 1000 0.000192000000084 0.000208000000043 0.000208000000043 0.000201400000014 -priorityqueue SortedList_1000 10000 0.00204899999994 0.00212699999997 0.00212699999997 0.00207579999999 -priorityqueue SortedList_1000 100000 0.021848 0.0223060000001 0.022027 0.022046 -priorityqueue SortedList_1000 1000000 0.279031 0.287078 0.279031 0.282059 -priorityqueue SortedList_1000 10000000 3.434694 3.558985 3.493643 3.5048276 -multiset SortedList_1000 100 1.79999999546e-05 2.99999999243e-05 1.8999999952e-05 2.11999999465e-05 -multiset SortedList_1000 1000 0.000177000000008 0.000185000000101 0.000185000000101 0.000180200000023 -multiset SortedList_1000 10000 0.00218699999994 0.0022449999999 0.00218699999994 0.00221439999996 -multiset SortedList_1000 100000 0.023236 0.0235670000001 0.0232930000001 0.0233694 -multiset SortedList_1000 1000000 0.316857 0.318839 0.316857 0.3175126 -multiset SortedList_1000 10000000 4.205377 4.28741 4.237308 4.2315858 -ranking SortedList_1000 100 2.0999999947e-05 2.69999999318e-05 2.29999999419e-05 2.33999999409e-05 -ranking SortedList_1000 1000 0.000198000000069 0.000202000000058 0.000202000000058 0.000199600000042 -ranking SortedList_1000 10000 0.00299300000006 0.00302799999997 0.00299699999994 0.00300599999998 -ranking SortedList_1000 100000 0.0341149999999 0.034347 0.0343469999999 0.0342446 -ranking SortedList_1000 1000000 0.445027 0.458312 0.451759 0.451149 -ranking SortedList_1000 10000000 5.651258 5.692588 5.651258 5.6751122 -neighbor SortedList_1000 100 2.40000000531e-05 4.20000000076e-05 2.50000000506e-05 3.10000000127e-05 -neighbor SortedList_1000 1000 0.000186999999983 0.000210999999922 0.000197999999955 0.000200799999971 -neighbor SortedList_1000 10000 0.00280199999997 0.00284299999998 0.00280399999997 0.00282459999999 -neighbor SortedList_1000 100000 0.032345 0.03349 0.032345 0.0326968 -neighbor SortedList_1000 1000000 0.436121 0.442521 0.440763 0.4404582 -neighbor SortedList_1000 10000000 5.676349 5.75477 5.68898 5.718783 -intervals SortedList_1000 100 2.19999999445e-05 3.00000001516e-05 2.59999999344e-05 2.55999999808e-05 -intervals SortedList_1000 1000 0.000223999999889 0.00024099999996 0.00024099999996 0.000231399999939 -intervals SortedList_1000 10000 0.00336900000002 0.00346600000012 0.00337500000001 0.00341199999998 -intervals SortedList_1000 100000 0.0392649999999 0.0407720000001 0.0392780000002 0.0398202 -intervals SortedList_1000 1000000 0.513254 0.523185 0.518913 0.5177388 -intervals SortedList_1000 10000000 6.468445 6.596042 6.468445 6.5365456 -init SortedList_1000 100 1.39999999647e-05 1.59999999596e-05 1.39999999647e-05 1.45999999859e-05 -init SortedList_1000 1000 0.000166000000036 0.000168999999914 0.000166999999919 0.000167599999941 -init SortedList_1000 10000 0.00223899999992 0.00225 0.0022449999999 0.00224359999997 -init SortedList_1000 100000 0.029992 0.030624 0.0300539999998 0.0302138 -init SortedList_1000 1000000 0.508452 0.551415 0.511247 0.5181 -init SortedList_1000 10000000 7.989345 8.096398 8.03011 8.0441728 -add SortedList_10000 100 2.99999999953e-06 4.00000000056e-06 2.99999999953e-06 3.20000000009e-06 -add SortedList_10000 1000 1.40000000002e-05 1.59999999996e-05 1.59999999996e-05 1.47999999999e-05 -add SortedList_10000 10000 0.000324 0.000327 0.000325999999999 0.0003258 -add SortedList_10000 100000 0.003344 0.003368 0.003368 0.0033584 -add SortedList_10000 1000000 0.042705 0.048312 0.043603 0.0448928 -add SortedList_10000 10000000 0.615388 0.675635 0.615388 0.6416248 -update_small SortedList_10000 100 1.49999999977e-05 1.80000000043e-05 1.49999999977e-05 1.59999999994e-05 -update_small SortedList_10000 1000 0.000138 0.000166 0.000140000000002 0.0001442 -update_small SortedList_10000 10000 0.003067 0.003091 0.00307 0.0030752 -update_small SortedList_10000 100000 0.032234 0.032472 0.032255 0.0323146 -update_small SortedList_10000 1000000 0.352183 0.359402 0.359402 0.3549592 -update_small SortedList_10000 10000000 3.902879 3.978126 3.952029 3.9314942 -update_large SortedList_10000 100 1.99999999779e-05 2.29999999988e-05 2.09999999754e-05 2.13999999914e-05 -update_large SortedList_10000 1000 0.000225999999998 0.00022899999999 0.000228000000021 0.0002272 -update_large SortedList_10000 10000 0.002838 0.00286 0.00284299999998 0.00284679999999 -update_large SortedList_10000 100000 0.037839 0.037983 0.037925 0.03792 -update_large SortedList_10000 1000000 0.608974 0.624172 0.620668 0.6165902 -update_large SortedList_10000 10000000 8.72143 9.062985 8.907916 8.9236578 -contains SortedList_10000 100 9.99999997475e-07 2.99999999243e-06 1.99999999495e-06 1.79999999546e-06 -contains SortedList_10000 1000 7.9999999798e-06 9.0000000057e-06 9.0000000057e-06 8.80000000052e-06 -contains SortedList_10000 10000 8.69999999793e-05 8.89999999742e-05 8.70000000077e-05 8.75999999892e-05 -contains SortedList_10000 100000 0.001093 0.00119799999999 0.00119799999999 0.001137 -contains SortedList_10000 1000000 0.015258 0.015982 0.015476 0.015534 -contains SortedList_10000 10000000 0.250714 0.259328 0.251879 0.2538172 -remove SortedList_10000 100 1.99999999495e-06 3.9999999899e-06 1.99999999495e-06 2.79999999293e-06 -remove SortedList_10000 1000 1.5000000019e-05 1.70000000139e-05 1.5000000019e-05 1.60000000164e-05 -remove SortedList_10000 10000 0.000251999999989 0.000253999999984 0.000252999999987 0.000253199999986 -remove SortedList_10000 100000 0.00283899999999 0.00304999999997 0.00283899999999 0.0028944 -remove SortedList_10000 1000000 0.038243 0.039051 0.039051 0.0384832 -remove SortedList_10000 10000000 0.549291 0.582105 0.551801 0.561004 -delitem SortedList_10000 100 2.99999999243e-06 5.00000004422e-06 3.9999999899e-06 3.80000000177e-06 -delitem SortedList_10000 1000 2.00000000063e-05 2.29999999988e-05 2.29999999988e-05 2.20000000013e-05 -delitem SortedList_10000 10000 0.000269000000003 0.000282000000027 0.000274999999988 0.000275600000009 -delitem SortedList_10000 100000 0.00446399999998 0.00471399999998 0.00454500000001 0.00455879999998 -delitem SortedList_10000 1000000 0.05582 0.05657 0.05582 0.0561052 -delitem SortedList_10000 10000000 0.730157 0.743229 0.730157 0.7376632 -bisect SortedList_10000 100 1.99999999495e-06 2.99999999243e-06 1.99999999495e-06 2.39999999394e-06 -bisect SortedList_10000 1000 9.99999997475e-06 1.10000000291e-05 9.99999997475e-06 1.0199999997e-05 -bisect SortedList_10000 10000 9.49999999875e-05 9.60000000418e-05 9.49999999875e-05 9.55999999974e-05 -bisect SortedList_10000 100000 0.00188600000001 0.00189800000004 0.00188900000001 0.00189180000001 -bisect SortedList_10000 1000000 0.026672 0.02759 0.026855 0.0269884 -bisect SortedList_10000 10000000 0.386416 0.401104 0.38742 0.3922654 -getitem SortedList_10000 100 9.99999997475e-07 2.99999999243e-06 1.99999999495e-06 1.99999999495e-06 -getitem SortedList_10000 1000 5.99999998485e-06 1.5000000019e-05 6.99999998233e-06 8.20000000203e-06 -getitem SortedList_10000 10000 5.69999999698e-05 5.90000000216e-05 5.79999999673e-05 5.7599999991e-05 -getitem SortedList_10000 100000 0.00172000000003 0.00173100000001 0.00172699999996 0.0017258 -getitem SortedList_10000 1000000 0.021425 0.022266 0.022095 0.0219146 -getitem SortedList_10000 10000000 0.27433 0.288004 0.27433 0.2801336 -pop SortedList_10000 100 1.99999999495e-06 3.9999999899e-06 2.99999999243e-06 2.79999999293e-06 -pop SortedList_10000 1000 1.09999999722e-05 1.20000000834e-05 1.09999999722e-05 1.12000000172e-05 -pop SortedList_10000 10000 9.09999999976e-05 9.19999999951e-05 9.19999999951e-05 9.15999999961e-05 -pop SortedList_10000 100000 0.000892000000022 0.000896000000012 0.000893000000019 0.000893200000019 -pop SortedList_10000 1000000 0.008871 0.00892599999997 0.008871 0.00890219999999 -pop SortedList_10000 10000000 0.0895939999999 0.091007 0.0895939999999 0.090016 -index SortedList_10000 100 1.99999999495e-06 2.99999999243e-06 1.99999999495e-06 2.40000001668e-06 -index SortedList_10000 1000 1.29999999672e-05 1.49999999621e-05 1.49999999621e-05 1.36000000111e-05 -index SortedList_10000 10000 0.000128000000018 0.000130999999897 0.000128000000018 0.00012879999997 -index SortedList_10000 100000 0.00218700000005 0.00222899999994 0.00219300000003 0.00220140000001 -index SortedList_10000 1000000 0.029995 0.03333 0.030395 0.0312274 -index SortedList_10000 10000000 0.418249 0.423188 0.42064 0.4205402 -iter SortedList_10000 100 7.9999999798e-06 9.00000009096e-06 8.99999997728e-06 8.60000000102e-06 -iter SortedList_10000 1000 7.20000000456e-05 7.30000000431e-05 7.29999999294e-05 7.27999999754e-05 -iter SortedList_10000 10000 0.00070699999992 0.000708000000031 0.000708000000031 0.00070740000001 -iter SortedList_10000 100000 0.00708200000008 0.00719700000002 0.00719700000002 0.00711540000007 -iter SortedList_10000 1000000 0.073311 0.0756239999999 0.073311 0.0746268 -iter SortedList_10000 10000000 0.739178 0.769132 0.769132 0.7572262 -count SortedList_10000 100 1.99999999495e-06 4.99999998738e-06 1.99999999495e-06 3.19999999192e-06 -count SortedList_10000 1000 1.40000000783e-05 1.60000000733e-05 1.40000000783e-05 1.50000000303e-05 -count SortedList_10000 10000 0.000149999999962 0.00015099999996 0.00015099999996 0.000150399999984 -count SortedList_10000 100000 0.00177099999996 0.00186499999995 0.00177499999995 0.00180199999998 -count SortedList_10000 1000000 0.0240209999999 0.024633 0.024367 0.0243184 -count SortedList_10000 10000000 0.336085 0.3512 0.337754 0.3426014 -priorityqueue SortedList_10000 100 2.29999999419e-05 3.20000000329e-05 2.29999999419e-05 2.55999999808e-05 -priorityqueue SortedList_10000 1000 0.000196000000074 0.000251000000048 0.000206999999932 0.000213400000007 -priorityqueue SortedList_10000 10000 0.00276499999995 0.00280500000008 0.00276599999995 0.00277999999998 -priorityqueue SortedList_10000 100000 0.0302539999999 0.0304749999999 0.0304749999999 0.030401 -priorityqueue SortedList_10000 1000000 0.401088 0.408636 0.401088 0.4044494 -priorityqueue SortedList_10000 10000000 4.568853 4.698074 4.698074 4.6281112 -multiset SortedList_10000 100 1.79999999546e-05 2.90000000405e-05 1.90000000657e-05 2.14000000369e-05 -multiset SortedList_10000 1000 0.00017600000001 0.00018399999999 0.00018399999999 0.000179200000002 -multiset SortedList_10000 10000 0.00206400000002 0.00220200000001 0.00211200000001 0.0021244 -multiset SortedList_10000 100000 0.02538 0.0262230000001 0.025659 0.0257596 -multiset SortedList_10000 1000000 0.354665 0.359839 0.358592 0.357953 -multiset SortedList_10000 10000000 4.933587 4.994913 4.994913 4.9553936 -ranking SortedList_10000 100 2.0999999947e-05 2.59999999344e-05 2.19999999445e-05 2.27999999652e-05 -ranking SortedList_10000 1000 0.000197000000071 0.000209000000041 0.000200999999947 0.000201000000038 -ranking SortedList_10000 10000 0.00228700000002 0.00233800000001 0.00228700000002 0.00231159999998 -ranking SortedList_10000 100000 0.0332530000001 0.037959 0.037959 0.0343508 -ranking SortedList_10000 1000000 0.45057 0.466216 0.466216 0.4569018 -ranking SortedList_10000 10000000 5.933286 5.996462 5.946975 5.970369 -neighbor SortedList_10000 100 1.79999999546e-05 3.20000000329e-05 1.8999999952e-05 2.35999999632e-05 -neighbor SortedList_10000 1000 0.000198000000069 0.000234999999975 0.000201999999945 0.000210599999991 -neighbor SortedList_10000 10000 0.00233500000002 0.00286499999993 0.00233500000002 0.00251579999999 -neighbor SortedList_10000 100000 0.032017 0.0325759999999 0.032017 0.0322762 -neighbor SortedList_10000 1000000 0.446491 0.447793 0.447637 0.4472872 -neighbor SortedList_10000 10000000 6.092051 6.141607 6.130867 6.1185114 -intervals SortedList_10000 100 2.40000001668e-05 3.39999999142e-05 2.59999999344e-05 2.7399999999e-05 -intervals SortedList_10000 1000 0.000226999999995 0.000245000000177 0.000245000000177 0.000234 -intervals SortedList_10000 10000 0.00273700000002 0.00285499999995 0.0027570000002 0.00278920000001 -intervals SortedList_10000 100000 0.0398540000001 0.0415800000001 0.0398540000001 0.0406768 -intervals SortedList_10000 1000000 0.536585 0.55173 0.536585 0.5469902 -intervals SortedList_10000 10000000 6.573198 6.895442 6.613872 6.7009928 -init SortedList_10000 100 1.79999999546e-05 2.10000000607e-05 1.80000001819e-05 1.92000000425e-05 -init SortedList_10000 1000 0.00017600000001 0.000189999999975 0.000176999999894 0.000179799999978 -init SortedList_10000 10000 0.00224000000003 0.00225999999998 0.00224000000003 0.00224899999994 -init SortedList_10000 100000 0.0300169999998 0.0301410000002 0.0300289999998 0.0300712 -init SortedList_10000 1000000 0.512195 0.64629 0.519692 0.5479964 -init SortedList_10000 10000000 7.935521 8.172279 7.935521 8.0350742 +add SortedList_100 100 3.999999998782755e-06 5.999999999062311e-06 4.000000000559112e-06 4.79999999960512e-06 +add SortedList_100 1000 1.799999999896329e-05 3.5999999999702936e-05 1.8000000000739647e-05 2.179999999967208e-05 +add SortedList_100 10000 0.00015400000000020952 0.00017099999999992122 0.00015500000000123748 0.00015900000000073077 +add SortedList_100 100000 0.0018330000000013058 0.002079000000000164 0.0018529999999987723 0.0018940000000000623 +add SortedList_100 1000000 0.024003999999999692 0.02635400000000132 0.02524900000000052 0.025283400000000355 +add SortedList_100 10000000 0.3730059999999966 0.395583000000002 0.37910200000000316 0.3816378 +update_small SortedList_100 100 1.5999999988025593e-05 1.7999999997186933e-05 1.699999999971169e-05 1.679999999737447e-05 +update_small SortedList_100 1000 0.00014500000000339242 0.00014899999999329339 0.00014600000000086766 0.00014639999999701558 +update_small SortedList_100 10000 0.0015180000000043492 0.00160900000000197 0.0015829999999965594 0.0015718000000020994 +update_small SortedList_100 100000 0.016887999999994463 0.016975999999999658 0.016954999999995835 0.016948799999997276 +update_small SortedList_100 1000000 0.20057400000000314 0.21032699999999238 0.20141299999998807 0.20332999999999685 +update_small SortedList_100 10000000 2.4593010000000106 2.4860840000000053 2.4631219999999985 2.4685562000000005 +update_large SortedList_100 100 2.200000000129876e-05 2.4999999993724487e-05 2.2999999998774e-05 2.3399999997764097e-05 +update_large SortedList_100 1000 0.00023300000000858745 0.0002460000000041873 0.0002340000000060627 0.00023640000000568762 +update_large SortedList_100 10000 0.003146000000015192 0.0032989999999983866 0.0031520000000000437 0.0031801999999970577 +update_large SortedList_100 100000 0.04240899999999215 0.043124000000005935 0.042820000000006075 0.042785000000003494 +update_large SortedList_100 1000000 0.6506359999999916 1.1678839999999866 0.6758839999999964 0.8373481999999968 +update_large SortedList_100 10000000 10.965007000000014 11.46655100000001 11.069983999999977 11.165515799999998 +contains SortedList_100 100 2.999999992425728e-06 4.9999999873762135e-06 3.999999989900971e-06 3.799999990405922e-06 +contains SortedList_100 1000 9.999999974752427e-06 1.4000000021496817e-05 1.1000000029071089e-05 1.2000000003808963e-05 +contains SortedList_100 10000 9.399999999004649e-05 0.00011200000000144428 9.499999998752173e-05 9.839999999030624e-05 +contains SortedList_100 100000 0.001197999999988042 0.0012849999999957618 0.0012229999999817665 0.0012305999999853157 +contains SortedList_100 1000000 0.015178999999989173 0.015900999999985288 0.015567999999973381 0.015558599999997114 +contains SortedList_100 10000000 0.26882599999999 0.27146199999998544 0.26933000000002494 0.26967180000000324 +remove SortedList_100 100 3.999999989900971e-06 4.9999999873762135e-06 4.00000004674439e-06 4.400000000259751e-06 +remove SortedList_100 1000 1.8000000011397788e-05 1.900000000887303e-05 1.900000000887303e-05 1.8800000009377982e-05 +remove SortedList_100 10000 0.0001650000000381624 0.0001679999999737447 0.00016699999997626946 0.00016659999998864806 +remove SortedList_100 100000 0.001925999999969008 0.0020989999999869724 0.0019689999999741303 0.0019909999999981665 +remove SortedList_100 1000000 0.022681000000034146 0.02322199999997565 0.02275800000001027 0.022849600000006375 +remove SortedList_100 10000000 0.34752900000000864 0.3592100000000187 0.3533260000000382 0.3529359999999997 +delitem SortedList_100 100 4.9999999873762135e-06 7.999999979801942e-06 5.999999984851456e-06 5.999999984851456e-06 +delitem SortedList_100 1000 6.199999995715189e-05 7.900000002791785e-05 7.499999998117346e-05 7.319999998571803e-05 +delitem SortedList_100 10000 0.0006050000000072941 0.0006109999999921456 0.0006089999999971951 0.000608199999999215 +delitem SortedList_100 100000 0.006532999999990352 0.006635000000017044 0.006549000000006799 0.0065626000000065686 +delitem SortedList_100 1000000 0.07907199999999648 0.08213799999998628 0.08003200000001698 0.08023319999999785 +delitem SortedList_100 10000000 0.9794180000000097 0.9876840000000016 0.9831540000000132 0.9834525999999982 +bisect SortedList_100 100 1.9999999949504854e-06 5.000000044219632e-06 2.999999992425728e-06 3.400000002784509e-06 +bisect SortedList_100 1000 3.299999997352643e-05 3.4999999968476914e-05 3.400000002784509e-05 3.380000000561267e-05 +bisect SortedList_100 10000 0.00028899999995246617 0.0002910000000042601 0.00029000000000678483 0.00028999999999541616 +bisect SortedList_100 100000 0.0034309999999777574 0.0035389999999893007 0.003497000000038497 0.0034892000000013466 +bisect SortedList_100 1000000 0.04598300000003519 0.04670600000002878 0.04640100000000302 0.046355800000014824 +bisect SortedList_100 10000000 0.6368989999999712 0.6498129999999946 0.6396100000000047 0.6426069999999868 +getitem SortedList_100 100 3.999999989900971e-06 4.9999999873762135e-06 4.0000001035878086e-06 4.400000011628435e-06 +getitem SortedList_100 1000 3.400000002784509e-05 4.400000000259752e-05 3.700000002027082e-05 3.880000001572625e-05 +getitem SortedList_100 10000 0.0003100000000131331 0.0003140000000030341 0.0003120000000080836 0.0003122000000075786 +getitem SortedList_100 100000 0.0034279999999853317 0.0036130000000866858 0.0034489999999323118 0.003476999999998043 +getitem SortedList_100 1000000 0.04159100000003946 0.04366800000002513 0.04189599999995153 0.04220619999998689 +getitem SortedList_100 10000000 0.5176359999999249 0.5371850000000222 0.5199820000000273 0.5237225999999964 +pop SortedList_100 100 3.999999989900971e-06 3.999999989900971e-06 3.999999989900971e-06 3.999999989900971e-06 +pop SortedList_100 1000 1.3999999964653398e-05 1.6999999957079126e-05 1.5999999959603883e-05 1.5599999983351154e-05 +pop SortedList_100 10000 0.00012399999991430377 0.0001260000000229411 0.0001240000000279906 0.00012479999998049607 +pop SortedList_100 100000 0.0012540000000171858 0.0012900000000399814 0.001262999999994463 0.001269800000000032 +pop SortedList_100 1000000 0.012563000000000102 0.012893999999960215 0.01266499999996995 0.012706199999979618 +pop SortedList_100 10000000 0.12609099999997397 0.12824799999998504 0.12644199999999728 0.12675619999997706 +index SortedList_100 100 3.999999989900971e-06 5.000000101063051e-06 3.999999989900971e-06 4.400000011628435e-06 +index SortedList_100 1000 4.0000000012696546e-05 4.799999999249849e-05 4.400000000259752e-05 4.3800000003102466e-05 +index SortedList_100 10000 0.0003289999999651627 0.00033199999995758844 0.0003309999999601132 0.00033059999998386047 +index SortedList_100 100000 0.0038660000000163564 0.004013999999983753 0.0039050000000315777 0.003917799999999261 +index SortedList_100 1000000 0.05010800000002291 0.05057899999997062 0.05028300000003583 0.05030640000002222 +index SortedList_100 10000000 0.675028999999995 0.7005149999999958 0.6784749999999349 0.6822753999999804 +iter SortedList_100 100 1.099999997222767e-05 1.5000000075815478e-05 1.099999997222767e-05 1.2000000015177648e-05 +iter SortedList_100 1000 8.900000000267028e-05 9.1999999995096e-05 9.000000000014552e-05 9.039999999913562e-05 +iter SortedList_100 10000 0.0009129999999686333 0.0009709999999358843 0.0009149999999635838 0.0009269999999560241 +iter SortedList_100 100000 0.00915599999996175 0.009233999999992193 0.009214000000042688 0.009199599999988095 +iter SortedList_100 1000000 0.09218700000008084 0.09663999999997941 0.09272199999998065 0.09344740000001366 +iter SortedList_100 10000000 0.9212850000000117 0.9357430000000022 0.9290170000000444 0.9292606000000205 +count SortedList_100 100 2.999999992425728e-06 4.9999999873762135e-06 3.999999989900971e-06 3.799999990405922e-06 +count SortedList_100 1000 1.6999999957079126e-05 1.799999995455437e-05 1.7000000070765964e-05 1.739999997880659e-05 +count SortedList_100 10000 0.00021699999990687502 0.00022000000001298758 0.00021799999990435026 0.00021839999994881508 +count SortedList_100 100000 0.0022529999999960637 0.002319999999940592 0.0022649999999657666 0.002274199999965276 +count SortedList_100 1000000 0.025882000000024163 0.027122999999960484 0.026718000000073516 0.026500800000030723 +count SortedList_100 10000000 0.3813320000000431 0.3862699999999677 0.3844249999999647 0.3840525999999954 +priorityqueue SortedList_100 100 2.5000000050567905e-05 3.000000003794412e-05 2.6999999931831553e-05 2.7200000022276073e-05 +priorityqueue SortedList_100 1000 0.00025199999993219535 0.00027199999999538704 0.0002540000000408327 0.00025740000000951113 +priorityqueue SortedList_100 10000 0.0026300000000674117 0.003036000000065542 0.002998999999931584 0.002866200000016761 +priorityqueue SortedList_100 100000 0.02738499999998112 0.027870000000007167 0.027553000000011707 0.0276189999999815 +priorityqueue SortedList_100 1000000 0.3228229999999712 0.32686200000000554 0.32386700000006385 0.3246936000000005 +priorityqueue SortedList_100 10000000 3.919913999999949 3.99254499999995 3.9575119999999515 3.959145399999966 +multiset SortedList_100 100 2.4000000053092663e-05 2.9000000040468876e-05 2.6000000048043148e-05 2.6400000047033244e-05 +multiset SortedList_100 1000 0.00027699999998276326 0.000321999999982836 0.00029900000004090543 0.00030019999999240097 +multiset SortedList_100 10000 0.002777000000037333 0.0028969999999617357 0.002843999999981861 0.002834400000006099 +multiset SortedList_100 100000 0.030754000000001724 0.031510000000025684 0.03084200000000692 0.031073200000014366 +multiset SortedList_100 1000000 0.3950559999999541 0.4203989999999749 0.3984530000000177 0.4029101999999966 +multiset SortedList_100 10000000 5.059897999999976 5.1337769999998955 5.100725000000011 5.103824199999986 +ranking SortedList_100 100 2.7999999929306796e-05 2.9000000040468876e-05 2.800000015668047e-05 2.8400000019246363e-05 +ranking SortedList_100 1000 0.00040400000011686643 0.0004139999998642452 0.0004109999999855063 0.0004104000000097585 +ranking SortedList_100 10000 0.004259000000047308 0.004340999999840278 0.004294999999956417 0.004297399999950357 +ranking SortedList_100 100000 0.05020399999989422 0.05524999999988722 0.05044300000008661 0.05136359999996785 +ranking SortedList_100 1000000 0.6311729999999898 0.6435559999999896 0.6415230000000065 0.6382823999999345 +ranking SortedList_100 10000000 7.782047999999804 7.869006000000127 7.81562299999996 7.820200199999954 +neighbor SortedList_100 100 2.3999999939405825e-05 2.999999992425728e-05 2.700000004551839e-05 2.660000000105356e-05 +neighbor SortedList_100 1000 0.0004229999999552092 0.0004490000001169392 0.0004340000000411237 0.00043580000001384176 +neighbor SortedList_100 10000 0.0039329999999608845 0.003967000000102416 0.003960000000006403 0.003953400000000329 +neighbor SortedList_100 100000 0.04592099999990751 0.04629500000010012 0.046177000000170665 0.046118800000067496 +neighbor SortedList_100 1000000 0.5999909999998181 0.6168900000000122 0.6036329999999452 0.6053353999999672 +neighbor SortedList_100 10000000 7.592905999999857 7.703152999999929 7.622669000000087 7.629611399999976 +intervals SortedList_100 100 2.999999992425728e-05 4.0000000126383384e-05 3.599999990910874e-05 3.579999997782579e-05 +intervals SortedList_100 1000 0.00046999999995023245 0.0005779999999049323 0.0004880000001321605 0.0005067999999937456 +intervals SortedList_100 10000 0.005025000000159707 0.005130000000008295 0.005100999999967826 0.005083400000012261 +intervals SortedList_100 100000 0.05970600000000559 0.06046100000003207 0.06029800000010255 0.06020939999998518 +intervals SortedList_100 1000000 0.7503720000001977 0.7629969999998139 0.7513960000001134 0.7534502000000429 +intervals SortedList_100 10000000 9.089512000000013 9.19608100000005 9.177072999999837 9.157605199999944 +init SortedList_100 100 1.900000006571645e-05 1.9999999949504854e-05 1.900000006571645e-05 1.9400000019231813e-05 +init SortedList_100 1000 0.00016100000016194826 0.00022000000012667442 0.00016200000004573667 0.00017340000003969181 +init SortedList_100 10000 0.002219999999852007 0.0022759999999379943 0.002220999999963169 0.0022361999999702675 +init SortedList_100 100000 0.03027099999985694 0.03047000000015032 0.030314999999973224 0.030346599999984392 +init SortedList_100 1000000 0.5280949999998938 0.541005000000041 0.5315870000001723 0.5331408000000011 +init SortedList_100 10000000 8.445290000000114 9.479354999999941 8.486662000000024 8.68328419999998 +add SortedList_1000 100 2.9999999995311555e-06 4.999999999810711e-06 4.000000000559112e-06 3.999999999848569e-06 +add SortedList_1000 1000 1.799999999896329e-05 1.8999999999991246e-05 1.8999999999991246e-05 1.8799999999785656e-05 +add SortedList_1000 10000 0.00016499999999908255 0.00016999999999889326 0.0001660000000001105 0.00016699999999971737 +add SortedList_1000 100000 0.0018960000000003419 0.002004000000001227 0.001954999999998819 0.0019476000000000937 +add SortedList_1000 1000000 0.02568899999999985 0.031316999999999595 0.02674500000000002 0.02757920000000027 +add SortedList_1000 10000000 0.42161399999999816 0.4406140000000036 0.4275999999999982 0.4290835999999999 +update_small SortedList_1000 100 1.699999999971169e-05 1.8999999994662176e-05 1.7999999997186933e-05 1.7800000000534057e-05 +update_small SortedList_1000 1000 0.00015799999999899228 0.0001699999999971169 0.00015899999999646752 0.0001607999999976073 +update_small SortedList_1000 10000 0.0016669999999976426 0.001700999999997066 0.0016710000000017544 0.0016763999999994893 +update_small SortedList_1000 100000 0.01829099999999073 0.019116999999994277 0.018383000000000038 0.018509199999999736 +update_small SortedList_1000 1000000 0.22137200000000234 0.22622799999999188 0.22353999999999985 0.2235385999999977 +update_small SortedList_1000 10000000 2.68810400000001 2.720909000000006 2.712336999999991 2.705484200000001 +update_large SortedList_1000 100 2.4999999993724487e-05 2.700000001709668e-05 2.599999999119973e-05 2.5800000003073364e-05 +update_large SortedList_1000 1000 0.00022699999999531428 0.00024700000000166256 0.00023100000001363696 0.0002341999999998734 +update_large SortedList_1000 10000 0.0030820000000062464 0.0031329999999911706 0.003087999999991098 0.003095799999994142 +update_large SortedList_1000 100000 0.03858700000000681 0.039614999999997735 0.03862000000000876 0.038955400000003235 +update_large SortedList_1000 1000000 0.6065250000000049 0.6243240000000014 0.6080440000000067 0.6113595999999972 +update_large SortedList_1000 10000000 9.51621799999998 10.133868000000007 9.609332999999992 9.722418999999997 +contains SortedList_1000 100 2.999999992425728e-06 3.000000049269147e-06 2.999999992425728e-06 3.000000003794412e-06 +contains SortedList_1000 1000 1.1000000029071089e-05 1.3000000024021574e-05 1.3000000024021574e-05 1.2600000013662794e-05 +contains SortedList_1000 10000 9.800000003679088e-05 9.900000003426612e-05 9.89999999774227e-05 9.860000001253866e-05 +contains SortedList_1000 100000 0.0012419999999906395 0.0012980000000197833 0.0012529999999628672 0.0012605999999891538 +contains SortedList_1000 1000000 0.015824000000009164 0.01605699999998933 0.015834999999981392 0.015889399999991838 +contains SortedList_1000 10000000 0.26548200000002 0.27083899999996675 0.26850899999999456 0.26837419999999385 +remove SortedList_1000 100 2.999999992425728e-06 5.000000044219632e-06 4.9999999873762135e-06 4.2000000007647035e-06 +remove SortedList_1000 1000 1.8000000011397788e-05 2.99999999811007e-05 1.900000000887303e-05 2.1000000003823516e-05 +remove SortedList_1000 10000 0.00017300000001796434 0.00017500000001291482 0.00017300000001796434 0.00017380000000457584 +remove SortedList_1000 100000 0.001990999999975429 0.0023410000000012587 0.0021820000000047912 0.002154799999993884 +remove SortedList_1000 1000000 0.025034000000005108 0.025743999999974676 0.025552000000004682 0.025435400000003484 +remove SortedList_1000 10000000 0.3928070000000048 0.4137279999999919 0.39960400000001073 0.40074379999999793 +delitem SortedList_1000 100 5.999999984851456e-06 9.000000034120603e-06 6.000000041694875e-06 6.800000016937702e-06 +delitem SortedList_1000 1000 2.7999999986150215e-05 3.799999996090264e-05 3.000000003794412e-05 3.100000000131331e-05 +delitem SortedList_1000 10000 0.0004799999999818283 0.0004969999999957508 0.0004950000000008004 0.0004927999999949862 +delitem SortedList_1000 100000 0.005559000000005199 0.005620000000021719 0.005599000000017895 0.005591200000003483 +delitem SortedList_1000 1000000 0.06902699999994866 0.06966499999998632 0.06946000000004915 0.06941399999999476 +delitem SortedList_1000 10000000 0.9229610000000434 0.9358210000000327 0.9305079999999748 0.9307284000000096 +bisect SortedList_1000 100 2.999999992425728e-06 3.999999989900971e-06 2.999999992425728e-06 3.399999991415825e-06 +bisect SortedList_1000 1000 1.2000000026546331e-05 1.3000000024021574e-05 1.2999999967178155e-05 1.2600000013662794e-05 +bisect SortedList_1000 10000 0.0002230000000054133 0.00022599999999783904 0.0002230000000054133 0.00022400000000288856 +bisect SortedList_1000 100000 0.0027980000000411565 0.0028760000000147556 0.002800000000036107 0.0028174000000149137 +bisect SortedList_1000 1000000 0.03774199999998018 0.03891199999998207 0.03861100000000306 0.03836919999999964 +bisect SortedList_1000 10000000 0.5475999999999885 0.5548420000000078 0.5501320000000192 0.5506289999999922 +getitem SortedList_1000 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 2.999999992425728e-06 +getitem SortedList_1000 1000 9.999999974752427e-06 1.099999997222767e-05 1.099999997222767e-05 1.0599999984606257e-05 +getitem SortedList_1000 10000 0.00023799999996754195 0.0002499999999940883 0.00023999999996249244 0.00024139999999306383 +getitem SortedList_1000 100000 0.0029009999999516367 0.00299500000005537 0.002931999999987056 0.0029399999999895955 +getitem SortedList_1000 1000000 0.03557699999998931 0.03773000000001048 0.036856000000057065 0.03677560000003268 +getitem SortedList_1000 10000000 0.4552219999999352 0.47018099999991136 0.4647469999999885 0.46389499999995676 +pop SortedList_1000 100 3.999999989900971e-06 4.9999999873762135e-06 4.9999999873762135e-06 4.599999988386116e-06 +pop SortedList_1000 1000 1.5999999959603883e-05 1.799999995455437e-05 1.6999999957079126e-05 1.6999999979816492e-05 +pop SortedList_1000 10000 0.0001269999999067295 0.00013000000001284207 0.00012700000002041634 0.00012759999997342676 +pop SortedList_1000 100000 0.0012530000000197106 0.001301000000012209 0.0012659999999868887 0.0012725999999929627 +pop SortedList_1000 1000000 0.012780000000020664 0.013115999999968153 0.012819000000035885 0.01287240000001475 +pop SortedList_1000 10000000 0.12892199999998866 0.13494900000000598 0.1295750000000453 0.13046240000001036 +index SortedList_1000 100 2.999999992425728e-06 4.9999999873762135e-06 3.999999989900971e-06 3.999999989900971e-06 +index SortedList_1000 1000 1.499999996212864e-05 1.6999999957079126e-05 1.5000000075815478e-05 1.5400000006593472e-05 +index SortedList_1000 10000 0.0002610000000231594 0.0002660000000105356 0.0002620000000206346 0.0002628000000186148 +index SortedList_1000 100000 0.0031420000000252912 0.0032089999999698193 0.0031610000000910077 0.003164799999990464 +index SortedList_1000 1000000 0.0416730000000598 0.04260099999999056 0.04244800000003579 0.042257400000016786 +index SortedList_1000 10000000 0.5807439999999815 0.5880559999999377 0.5814359999999397 0.5835005999999566 +iter SortedList_1000 100 9.999999974752427e-06 1.1000000085914508e-05 1.099999997222767e-05 1.0799999995469988e-05 +iter SortedList_1000 1000 8.900000000267028e-05 9.699999998247222e-05 9.099999999762076e-05 9.15999999961059e-05 +iter SortedList_1000 10000 0.0009089999999787324 0.0009619999999586071 0.0009099999999762076 0.0009199999999736974 +iter SortedList_1000 100000 0.009180000000014843 0.009395000000040454 0.00929699999994682 0.009288199999991776 +iter SortedList_1000 1000000 0.09180699999990338 0.09439700000007178 0.0924289999999246 0.09274419999999281 +iter SortedList_1000 10000000 0.9175670000000764 0.9346699999999828 0.9248460000000023 0.9261113999999907 +count SortedList_1000 100 2.999999992425728e-06 4.9999999873762135e-06 3.999999989900971e-06 3.799999990405922e-06 +count SortedList_1000 1000 1.6999999957079126e-05 2.0999999946980097e-05 1.7000000070765964e-05 1.8000000000029105e-05 +count SortedList_1000 10000 0.0001650000000381624 0.00016900000002806337 0.0001650000000381624 0.00016600000001290027 +count SortedList_1000 100000 0.0021299999999655483 0.0021550000000161162 0.0021510000000262153 0.002145999999993364 +count SortedList_1000 1000000 0.024385999999935848 0.024713000000019747 0.024442000000021835 0.02453619999998864 +count SortedList_1000 10000000 0.3590470000000323 0.3630470000000514 0.36005199999999604 0.3607788000000028 +priorityqueue SortedList_1000 100 2.700000004551839e-05 2.9000000040468876e-05 2.8000000042993634e-05 2.8199999997013946e-05 +priorityqueue SortedList_1000 1000 0.0002610000000231594 0.0002709999999979118 0.00026599999989684875 0.0002663999999867883 +priorityqueue SortedList_1000 10000 0.002629999999953725 0.002686000000039712 0.0026500000000169166 0.002651400000013382 +priorityqueue SortedList_1000 100000 0.027665999999953783 0.028601999999978034 0.02801899999997204 0.028070999999977177 +priorityqueue SortedList_1000 1000000 0.3446289999999408 0.3542850000000044 0.3493459999999686 0.34929460000000745 +priorityqueue SortedList_1000 10000000 4.119703999999956 4.146069000000011 4.126831000000038 4.129573200000005 +multiset SortedList_1000 100 2.300000005561742e-05 2.8000000042993634e-05 2.4999999936881068e-05 2.540000000408327e-05 +multiset SortedList_1000 1000 0.00022800000010647636 0.0002479999999422944 0.00023999999996249244 0.0002391999999872496 +multiset SortedList_1000 10000 0.0027039999999942665 0.0027760000000398577 0.0027370000000246364 0.0027386000000205967 +multiset SortedList_1000 100000 0.029123000000026877 0.029459999999971842 0.029219000000011874 0.029241200000024038 +multiset SortedList_1000 1000000 0.38768099999992955 0.39360599999997703 0.39162999999996373 0.39105739999997696 +multiset SortedList_1000 10000000 4.883497000000034 4.931215000000066 4.91715099999999 4.911842400000023 +ranking SortedList_1000 100 2.7999999929306796e-05 3.000000003794412e-05 2.8000000042993634e-05 2.8799999995499093e-05 +ranking SortedList_1000 1000 0.00024999999993724487 0.00025600000003578316 0.0002509999999347201 0.00025160000000141737 +ranking SortedList_1000 10000 0.0038710000000037326 0.004064000000084889 0.003926000000092245 0.003937400000017988 +ranking SortedList_1000 100000 0.04577200000005632 0.046818000000030224 0.04639399999996385 0.04625040000000809 +ranking SortedList_1000 1000000 0.5861439999999902 0.5958400000000665 0.5904899999999316 0.5905743999999913 +ranking SortedList_1000 10000000 7.227051999999958 7.310582999999951 7.274454999999989 7.272279799999978 +neighbor SortedList_1000 100 2.3999999939405825e-05 3.100000003541936e-05 2.7999999929306796e-05 2.699999995456892e-05 +neighbor SortedList_1000 1000 0.0002360000000862783 0.00025600000003578316 0.00024499999994986865 0.0002457999999933236 +neighbor SortedList_1000 10000 0.0034509999998135754 0.0035230000000865402 0.003478999999970256 0.0034813999999641966 +neighbor SortedList_1000 100000 0.04066699999998491 0.04108599999995022 0.04095800000004601 0.04093379999994795 +neighbor SortedList_1000 1000000 0.5463090000000648 0.5505640000001222 0.548860999999988 0.5487722000000304 +neighbor SortedList_1000 10000000 6.992721000000074 7.048246000000063 7.03088200000002 7.024097200000005 +intervals SortedList_1000 100 3.999999989900971e-05 6.299999995462713e-05 4.6999999995023245e-05 4.840000001422595e-05 +intervals SortedList_1000 1000 0.0002789999998640269 0.000293000000056054 0.0002899999999499414 0.0002873999999337684 +intervals SortedList_1000 10000 0.004330999999865526 0.00444100000004255 0.004361000000017157 0.004369799999949464 +intervals SortedList_1000 100000 0.05116999999995642 0.05379599999992024 0.05138499999998203 0.05200379999996585 +intervals SortedList_1000 1000000 0.6730689999999413 0.6855499999999211 0.682365000000118 0.6810249999999541 +intervals SortedList_1000 10000000 8.368026999999984 8.443809999999985 8.426942000000054 8.41271700000002 +init SortedList_1000 100 1.3999999964653398e-05 1.5999999959603883e-05 1.5000000075815478e-05 1.5000000030340743e-05 +init SortedList_1000 1000 0.00016200000004573667 0.00016399999981331348 0.00016299999992952507 0.00016299999997499982 +init SortedList_1000 10000 0.0022190000001955923 0.0025040000000444707 0.0022839999999177962 0.0023514000000432133 +init SortedList_1000 100000 0.030416000000059285 0.031340000000000146 0.030631999999968684 0.030707400000028428 +init SortedList_1000 1000000 0.5138220000001184 0.5308430000000044 0.5247130000000197 0.5223364000000401 +init SortedList_1000 10000000 8.430441999999857 8.567232999999987 8.503335000000106 8.512036800000033 +add SortedList_10000 100 3.999999998782755e-06 4.999999999810711e-06 4.000000000559112e-06 4.399999999549209e-06 +add SortedList_10000 1000 1.8000000000739647e-05 1.9999999999242846e-05 1.8999999999991246e-05 1.8999999999991246e-05 +add SortedList_10000 10000 0.00031899999999929207 0.0003709999999994551 0.00032000000000032003 0.0003298000000000911 +add SortedList_10000 100000 0.0036399999999989774 0.003723000000000809 0.00367799999999896 0.003672399999999598 +add SortedList_10000 1000000 0.045459000000001026 0.04779399999999967 0.046165999999999485 0.0463358000000003 +add SortedList_10000 10000000 0.6384070000000008 0.6913469999999933 0.6480159999999984 0.6617671999999984 +update_small SortedList_10000 100 1.6000000002236447e-05 1.699999999971169e-05 1.699999999971169e-05 1.6600000000721594e-05 +update_small SortedList_10000 1000 0.00015700000000151704 0.00015899999999646752 0.00015899999999646752 0.00015839999999798238 +update_small SortedList_10000 10000 0.003236999999998602 0.00332000000000221 0.0032389999999935526 0.003259599999998386 +update_small SortedList_10000 100000 0.034140999999991095 0.03462400000000798 0.03432200000000307 0.034365200000002004 +update_small SortedList_10000 1000000 0.3757439999999974 0.37817300000000387 0.3765910000000048 0.37691580000000047 +update_small SortedList_10000 10000000 4.2584659999999985 4.294289000000006 4.27644500000001 4.276060599999999 +update_large SortedList_10000 100 2.200000000129876e-05 2.4000000024670953e-05 2.2999999998774e-05 2.3200000009637732e-05 +update_large SortedList_10000 1000 0.00022799999999278953 0.00023100000001363696 0.00023000000001616172 0.00022940000001199224 +update_large SortedList_10000 10000 0.003068999999982225 0.003166999999990594 0.0030739999999980228 0.0031011999999918773 +update_large SortedList_10000 100000 0.038473000000010416 0.038852999999988924 0.03859600000001251 0.038619400000010275 +update_large SortedList_10000 1000000 0.6020479999999964 0.6184060000000215 0.6110500000000059 0.6110074000000054 +update_large SortedList_10000 10000000 9.150359000000009 9.516998999999998 9.327542999999991 9.319211000000001 +contains SortedList_10000 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 3.199999991920777e-06 +contains SortedList_10000 1000 1.099999997222767e-05 1.2000000026546331e-05 1.1000000029071089e-05 1.1400000005323818e-05 +contains SortedList_10000 10000 9.89999999774227e-05 0.00010000000003174137 9.900000003426612e-05 9.92000000110238e-05 +contains SortedList_10000 100000 0.0011679999999500978 0.0012210000000436594 0.0011990000000423606 0.00119520000000648 +contains SortedList_10000 1000000 0.016269000000022515 0.016684999999995398 0.016412000000002536 0.016436800000008134 +contains SortedList_10000 10000000 0.2699599999999691 0.28128700000002027 0.27059100000002445 0.2729248000000098 +remove SortedList_10000 100 3.999999989900971e-06 5.999999984851456e-06 3.999999989900971e-06 4.599999988386116e-06 +remove SortedList_10000 1000 1.899999995202961e-05 2.1000000003823516e-05 1.900000000887303e-05 1.9599999984620808e-05 +remove SortedList_10000 10000 0.0002579999999738902 0.0002690000000029613 0.00025899999997136547 0.0002605999999900632 +remove SortedList_10000 100000 0.003058000000009997 0.00332599999995864 0.0030960000000277432 0.00313699999999244 +remove SortedList_10000 1000000 0.039861000000030344 0.04099899999999934 0.04017399999997906 0.04025180000001001 +remove SortedList_10000 10000000 0.5932329999999979 0.6086750000000052 0.5981150000000071 0.5998257999999964 +delitem SortedList_10000 100 4.9999999873762135e-06 7.000000039170118e-06 6.000000041694875e-06 6.200000007083872e-06 +delitem SortedList_10000 1000 2.7999999986150215e-05 2.99999999811007e-05 2.8999999983625457e-05 2.8799999995499093e-05 +delitem SortedList_10000 10000 0.00032999999996263796 0.0003439999999841348 0.00033899999999675856 0.00033799999998791465 +delitem SortedList_10000 100000 0.005459000000030301 0.00571300000001429 0.005573999999967327 0.005575400000009267 +delitem SortedList_10000 1000000 0.07131899999995994 0.07451400000002195 0.07187400000003663 0.07259819999999309 +delitem SortedList_10000 10000000 0.9473110000000133 0.9806760000000168 0.9578880000000254 0.9586214000000155 +bisect SortedList_10000 100 2.999999992425728e-06 4.9999999873762135e-06 3.999999989900971e-06 3.800000001774606e-06 +bisect SortedList_10000 1000 1.1999999969702912e-05 1.3999999964653398e-05 1.2999999967178155e-05 1.3199999966673203e-05 +bisect SortedList_10000 10000 0.00010400000002164234 0.00010600000001659282 0.00010500000001911758 0.00010520000000724394 +bisect SortedList_10000 100000 0.002123000000040065 0.00228599999996959 0.002143999999987045 0.002192000000002281 +bisect SortedList_10000 1000000 0.03169600000001083 0.03242499999998927 0.03206999999997606 0.03204759999999851 +bisect SortedList_10000 10000000 0.4752510000000143 0.4888230000000249 0.4770780000000059 0.48072960000001785 +getitem SortedList_10000 100 2.999999992425728e-06 3.999999989900971e-06 2.999999992425728e-06 3.199999991920777e-06 +getitem SortedList_10000 1000 8.999999977277184e-06 9.000000090964022e-06 8.999999977277184e-06 9.000000000014552e-06 +getitem SortedList_10000 10000 6.499999994957761e-05 6.700000005821494e-05 6.60000000607397e-05 6.620000001476001e-05 +getitem SortedList_10000 100000 0.002114999999889733 0.002128999999968073 0.002116000000000895 0.0021203999999670486 +getitem SortedList_10000 1000000 0.027294000000097185 0.028187000000002627 0.027589000000034503 0.027626800000030018 +getitem SortedList_10000 10000000 0.36838399999999183 0.37339300000007825 0.3706359999999904 0.370595000000003 +pop SortedList_10000 100 3.000000106112566e-06 4.9999999873762135e-06 3.999999989900971e-06 4.200000012133387e-06 +pop SortedList_10000 1000 1.5000000075815478e-05 1.8000000068241206e-05 1.600000007329072e-05 1.6400000026806084e-05 +pop SortedList_10000 10000 0.00012499999991177901 0.00014899999996487168 0.00012500000002546585 0.0001307999999880849 +pop SortedList_10000 100000 0.001241999999933796 0.0013020000000096843 0.0012659999999868887 0.0012673999999833542 +pop SortedList_10000 1000000 0.012363000000050306 0.012905999999929918 0.0126109999999926 0.012605600000006234 +pop SortedList_10000 10000000 0.1278060000000778 0.14295900000001893 0.1286080000000993 0.1316314000000375 +index SortedList_10000 100 3.999999989900971e-06 4.9999999873762135e-06 4.0000001035878086e-06 4.400000011628435e-06 +index SortedList_10000 1000 1.499999996212864e-05 1.7000000070765964e-05 1.5999999959603883e-05 1.57999999828462e-05 +index SortedList_10000 10000 0.00014099999998506973 0.00016700000003311288 0.00014299999998002022 0.00014779999999063874 +index SortedList_10000 100000 0.0024859999999762294 0.002669000000082633 0.0025069999999232095 0.002541199999973287 +index SortedList_10000 1000000 0.035397999999986496 0.03629000000000815 0.0357370000000401 0.03579979999999523 +index SortedList_10000 10000000 0.5060780000000022 0.5146930000000793 0.5097230000000081 0.5101546000000099 +iter SortedList_10000 100 9.999999974752427e-06 1.1000000085914508e-05 1.099999997222767e-05 1.059999999597494e-05 +iter SortedList_10000 1000 8.900000000267028e-05 9.000000000014552e-05 8.900000000267028e-05 8.940000000166038e-05 +iter SortedList_10000 10000 0.0009079999999812571 0.0010059999999612046 0.0009170000000722212 0.0009385999999949491 +iter SortedList_10000 100000 0.009152999999969325 0.009376999999972213 0.009232999999994718 0.009257000000002336 +iter SortedList_10000 1000000 0.09198800000001484 0.09298200000000634 0.09269199999994271 0.09256419999999252 +iter SortedList_10000 10000000 0.9162099999999782 0.9448510000000852 0.9222739999999021 0.9257105999999794 +count SortedList_10000 100 2.999999992425728e-06 4.9999999873762135e-06 3.999999989900971e-06 4.1999999893960195e-06 +count SortedList_10000 1000 1.7000000070765964e-05 1.899999995202961e-05 1.899999995202961e-05 1.83999999990192e-05 +count SortedList_10000 10000 0.0001659999999219508 0.00016800000003058813 0.00016700000003311288 0.00016720000000987057 +count SortedList_10000 100000 0.0019019999999727588 0.0019839999999931024 0.0019269999999096399 0.0019383999999718071 +count SortedList_10000 1000000 0.024429999999938445 0.024859999999989668 0.024779999999964275 0.024687399999970695 +count SortedList_10000 10000000 0.3591440000000148 0.37219600000003084 0.36909800000000814 0.3666872000000012 +priorityqueue SortedList_10000 100 2.6999999931831553e-05 2.999999992425728e-05 2.7999999929306796e-05 2.799999997478153e-05 +priorityqueue SortedList_10000 1000 0.00026700000000801083 0.00027899999997771374 0.00027000000000043656 0.00027199999999538704 +priorityqueue SortedList_10000 10000 0.0033280000000104337 0.003467000000000553 0.0033870000000888467 0.0033910000000332728 +priorityqueue SortedList_10000 100000 0.03650700000002871 0.03702099999998154 0.03682800000001407 0.03679979999999432 +priorityqueue SortedList_10000 1000000 0.4534640000000536 0.47003400000005513 0.46174199999995835 0.46239020000000436 +priorityqueue SortedList_10000 10000000 5.286713999999961 5.369058999999993 5.341973000000053 5.33341240000002 +multiset SortedList_10000 100 2.8000000042993634e-05 3.500000002532033e-05 3.199999991920777e-05 3.120000001217704e-05 +multiset SortedList_10000 1000 0.00022299999989172647 0.00023099999998521525 0.00022599999999783904 0.00022619999997459673 +multiset SortedList_10000 10000 0.0025059999999257343 0.002669000000082633 0.0025650000000041473 0.0025730000000066867 +multiset SortedList_10000 100000 0.03071999999997388 0.031156000000009954 0.030934000000002015 0.030955200000016704 +multiset SortedList_10000 1000000 0.423567999999932 0.4299630000000434 0.4252450000000181 0.42673419999998713 +multiset SortedList_10000 10000000 5.684498000000076 5.720864000000006 5.70318999999995 5.704144999999994 +ranking SortedList_10000 100 2.6999999931831553e-05 3.000000003794412e-05 2.8000000042993634e-05 2.8399999996508997e-05 +ranking SortedList_10000 1000 0.0002489999999397696 0.00025600000003578316 0.00025100000004840695 0.00025180000002364975 +ranking SortedList_10000 10000 0.002777000000037333 0.003074000000083288 0.002849000000082924 0.002882800000043062 +ranking SortedList_10000 100000 0.04195700000002489 0.04212899999993169 0.041987999999946624 0.042011399999978494 +ranking SortedList_10000 1000000 0.5543410000000222 0.5637940000000299 0.5563929999999573 0.5588527999999997 +ranking SortedList_10000 10000000 7.362767000000076 7.414406000000099 7.380523000000039 7.382824800000071 +neighbor SortedList_10000 100 2.3999999939405825e-05 3.300000003036985e-05 2.599999993435631e-05 2.779999999802385e-05 +neighbor SortedList_10000 1000 0.0002360000000862783 0.0002540000000408327 0.00024600000006103073 0.000244600000041828 +neighbor SortedList_10000 10000 0.002787000000125772 0.0028839999999945576 0.0028529999999591382 0.0028398000000379397 +neighbor SortedList_10000 100000 0.038066000000071654 0.038563000000067404 0.0380889999998999 0.038222600000017336 +neighbor SortedList_10000 1000000 0.5391190000000279 0.544983000000002 0.5429680000002008 0.5419742000000042 +neighbor SortedList_10000 10000000 7.208641999999827 7.340016999999989 7.277501000000029 7.270121999999901 +intervals SortedList_10000 100 3.100000003541936e-05 4.899999998997373e-05 3.699999979289714e-05 3.819999997176637e-05 +intervals SortedList_10000 1000 0.00028500000007625204 0.00035099999990961805 0.00029699999981858127 0.0003153999999994994 +intervals SortedList_10000 10000 0.003273999999919397 0.0034700000001066655 0.0032860000001164735 0.003320400000029622 +intervals SortedList_10000 100000 0.04916900000011992 0.05089599999996608 0.049707000000125845 0.04984479999998257 +intervals SortedList_10000 1000000 0.6601530000000366 0.6708430000001044 0.6673739999998816 0.6663368000000446 +intervals SortedList_10000 10000000 8.854872999999998 8.919773000000077 8.90024900000003 8.893970600000012 +init SortedList_10000 100 1.9999999949504854e-05 2.1000000060666935e-05 1.9999999949504854e-05 2.0200000017212004e-05 +init SortedList_10000 1000 0.00016300000015689875 0.0002139999999144493 0.00016400000004068715 0.00017400000006091433 +init SortedList_10000 10000 0.00221800000008443 0.0022839999999177962 0.0022240000000692817 0.0022438000000420287 +init SortedList_10000 100000 0.030033000000003085 0.030361999999968248 0.030106000000159838 0.030139800000051765 +init SortedList_10000 1000000 0.5233749999999873 0.5389160000001993 0.535665999999992 0.5320734000000357 +init SortedList_10000 10000000 8.448174999999992 8.622822000000042 8.550305999999864 8.536662999999953 diff -Nru sortedcontainers-1.5.9/tests/results_load_sortedset.txt sortedcontainers-2.0.4/tests/results_load_sortedset.txt --- sortedcontainers-1.5.9/tests/results_load_sortedset.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/results_load_sortedset.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,684 +1,684 @@ -contains SortedSet_100 100 1.00000000014e-06 3.00000000042e-06 1.00000000014e-06 1.80000000025e-06 -contains SortedSet_100 1000 2.99999999953e-06 4.00000000056e-06 2.99999999953e-06 3.40000000012e-06 -contains SortedSet_100 10000 1.59999999996e-05 1.9e-05 1.59999999996e-05 1.68e-05 -contains SortedSet_100 100000 0.000218 0.00022 0.000218 0.0002188 -contains SortedSet_100 1000000 0.003329 0.003482 0.003423 0.0034044 -contains SortedSet_100 10000000 0.046514 0.051728 0.050909 0.0485428 -iter SortedSet_100 100 8.99999999149e-06 1.10000000006e-05 1.00000000032e-05 9.60000000134e-06 -iter SortedSet_100 1000 7.30000000004e-05 7.50000000096e-05 7.39999999979e-05 7.38000000013e-05 -iter SortedSet_100 10000 0.000715999999997 0.000719999999987 0.000716000000011 0.000717199999997 -iter SortedSet_100 100000 0.007155 0.007193 0.007193 0.0071764 -iter SortedSet_100 1000000 0.073715 0.07653 0.073981 0.074376 -iter SortedSet_100 10000000 0.740205 0.748965 0.748965 0.743474 -add SortedSet_100 100 3.00000002085e-06 4.00000001832e-06 3.00000002085e-06 3.60000000796e-06 -add SortedSet_100 1000 1.69999999855e-05 1.7999999983e-05 1.69999999855e-05 1.7599999984e-05 -add SortedSet_100 10000 0.000161999999989 0.000177999999977 0.000177999999977 0.000166599999983 -add SortedSet_100 100000 0.001756 0.00188900000001 0.00179700000001 0.0018034 -add SortedSet_100 1000000 0.020101 0.02102 0.020647 0.020554 -add SortedSet_100 10000000 0.296085 0.302819 0.297432 0.298299 -update_tiny SortedSet_100 100 1.39999999931e-05 2.39999999962e-05 2.39999999962e-05 1.71999999964e-05 -update_tiny SortedSet_100 1000 1.5999999988e-05 1.80000000114e-05 1.5999999988e-05 1.69999999912e-05 -update_tiny SortedSet_100 10000 1.89999999805e-05 2.20000000013e-05 2.00000000063e-05 2.00000000007e-05 -update_tiny SortedSet_100 100000 3.20000000045e-05 3.30000000019e-05 3.30000000019e-05 3.28000000025e-05 -update_tiny SortedSet_100 1000000 3.90000000152e-05 4.50000000001e-05 4.50000000001e-05 4.34000000041e-05 -update_tiny SortedSet_100 10000000 6.09999999881e-05 8.30000000178e-05 8.30000000178e-05 7.0599999998e-05 -update_small SortedSet_100 100 1.49999999621e-05 1.70000000139e-05 1.70000000139e-05 1.56000000061e-05 -update_small SortedSet_100 1000 0.000135999999998 0.000137999999993 0.000137999999993 0.000137399999994 -update_small SortedSet_100 10000 0.00141500000001 0.00187199999999 0.00154900000001 0.00156740000001 -update_small SortedSet_100 100000 0.014652 0.016324 0.014709 0.0150848 -update_small SortedSet_100 1000000 0.16244 0.167914 0.163268 0.1642402 -update_small SortedSet_100 10000000 1.73899 1.754779 1.754779 1.7466402 -update_medium SortedSet_100 100 1.20000000265e-05 1.5000000019e-05 1.29999999672e-05 1.35999999998e-05 -update_medium SortedSet_100 1000 6.59999999471e-05 6.99999999938e-05 6.70000000014e-05 6.699999999e-05 -update_medium SortedSet_100 10000 0.00059200000004 0.000595000000033 0.000594000000035 0.000593600000013 -update_medium SortedSet_100 100000 0.00858699999998 0.012137 0.00858699999998 0.0100044 -update_medium SortedSet_100 1000000 0.122988 0.577817 0.125838 0.218176 -update_medium SortedSet_100 10000000 2.262544 3.518452 2.262544 3.0527436 -update_large SortedSet_100 100 1.39999999647e-05 1.70000000139e-05 1.49999999621e-05 1.51999999844e-05 -update_large SortedSet_100 1000 8.59999999534e-05 8.79999999484e-05 8.59999999534e-05 8.69999999736e-05 -update_large SortedSet_100 10000 0.000894000000017 0.000904000000048 0.000903999999991 0.000898200000006 -update_large SortedSet_100 100000 0.013936 0.014107 0.014107 0.0140432 -update_large SortedSet_100 1000000 0.183571 0.664873 0.217814 0.3763788 -update_large SortedSet_100 10000000 3.922332 4.429775 3.922332 4.0773354 -union_tiny SortedSet_100 100 2.19999999445e-05 2.79999999293e-05 2.50000000506e-05 2.48000000056e-05 -union_tiny SortedSet_100 1000 7.60000000355e-05 8.10000000229e-05 8.10000000229e-05 7.78000000082e-05 -union_tiny SortedSet_100 10000 0.000643999999966 0.000675999999999 0.000644999999963 0.000655399999982 -union_tiny SortedSet_100 100000 0.0106970000001 0.0116360000001 0.0116360000001 0.0109626 -union_tiny SortedSet_100 1000000 0.150698 0.629469 0.151918 0.24856 -union_tiny SortedSet_100 10000000 3.049634 3.434813 3.049634 3.2363514 -union_small SortedSet_100 100 2.29999999419e-05 2.69999999318e-05 2.30000000556e-05 2.39999999849e-05 -union_small SortedSet_100 1000 8.49999998991e-05 9.00000000001e-05 8.59999998966e-05 8.67999999628e-05 -union_small SortedSet_100 10000 0.000752000000034 0.000811999999996 0.000755000000026 0.000774200000001 -union_small SortedSet_100 100000 0.012527 0.012842 0.0125430000001 0.012649 -union_small SortedSet_100 1000000 0.179841 0.698088 0.179841 0.2998624 -union_small SortedSet_100 10000000 3.046833 4.236444 3.046833 3.5688876 -union_medium SortedSet_100 100 2.70000000455e-05 2.89999999268e-05 2.8000000043e-05 2.79999999975e-05 -union_medium SortedSet_100 1000 0.000113000000056 0.000117999999929 0.000113000000056 0.00011499999996 -union_medium SortedSet_100 10000 0.000895000000014 0.000932000000034 0.000899000000004 0.000907400000028 -union_medium SortedSet_100 100000 0.0160520000001 0.018048 0.0160520000001 0.0165482 -union_medium SortedSet_100 1000000 0.265693 0.298249 0.26648 0.2735232 -union_medium SortedSet_100 10000000 4.54427 6.136838 5.786284 5.4851592 -union_large SortedSet_100 100 2.69999999318e-05 2.90000000405e-05 2.69999999318e-05 2.78000000208e-05 -union_large SortedSet_100 1000 0.000133000000005 0.000135999999998 0.000134000000003 0.000134000000003 -union_large SortedSet_100 10000 0.00124700000003 0.00136599999996 0.00124700000003 0.00127259999999 -union_large SortedSet_100 100000 0.022202 0.028776 0.022202 0.025099 -union_large SortedSet_100 1000000 0.313013 0.821903 0.313013 0.43695 -union_large SortedSet_100 10000000 6.484637 7.406401 7.002111 6.9634924 -remove SortedSet_100 100 2.99999999243e-06 4.99999998738e-06 3.9999999899e-06 3.79999999041e-06 -remove SortedSet_100 1000 1.8999999952e-05 1.99999999495e-05 1.99999999495e-05 1.93999999965e-05 -remove SortedSet_100 10000 0.00017600000001 0.000182999999993 0.00017600000001 0.000178000000005 -remove SortedSet_100 100000 0.00201600000003 0.002162 0.00203999999997 0.0020642 -remove SortedSet_100 1000000 0.0260930000001 0.0286600000001 0.0260930000001 0.0268338 -remove SortedSet_100 10000000 0.362315 0.369964 0.369964 0.3667062 -difference_tiny SortedSet_100 100 1.29999998535e-05 1.50000000758e-05 1.50000000758e-05 1.37999999879e-05 -difference_tiny SortedSet_100 1000 4.20000001213e-05 4.40000001163e-05 4.40000001163e-05 4.34000000496e-05 -difference_tiny SortedSet_100 10000 0.000333999999839 0.000406999999996 0.000333999999839 0.000354599999946 -difference_tiny SortedSet_100 100000 0.00615199999993 0.00665299999991 0.00615199999993 0.00629959999997 -difference_tiny SortedSet_100 1000000 0.0773450000002 0.502073 0.502073 0.1714546 -difference_tiny SortedSet_100 10000000 2.27953 3.648502 3.648502 2.6350406 -difference_small SortedSet_100 100 1.29999998535e-05 1.6000000187e-05 1.50000000758e-05 1.46000000314e-05 -difference_small SortedSet_100 1000 4.1999999894e-05 4.30000000051e-05 4.1999999894e-05 4.21999999162e-05 -difference_small SortedSet_100 10000 0.000342000000046 0.000356000000011 0.000356000000011 0.000350000000026 -difference_small SortedSet_100 100000 0.0056219999999 0.005764 0.00566400000002 0.00568499999999 -difference_small SortedSet_100 1000000 0.093785 0.0952749999999 0.0942619999998 0.0943921999999 -difference_small SortedSet_100 10000000 1.999968 2.389507 1.999968 2.221109 -difference_medium SortedSet_100 100 1.59999999596e-05 1.79999999546e-05 1.70000000708e-05 1.68000000031e-05 -difference_medium SortedSet_100 1000 4.80000001062e-05 6.20000000708e-05 5.00000001011e-05 5.18000000284e-05 -difference_medium SortedSet_100 10000 0.00038399999994 0.000389999999925 0.000385999999935 0.000386199999957 -difference_medium SortedSet_100 100000 0.00458000000003 0.00475200000005 0.00458000000003 0.00464980000002 -difference_medium SortedSet_100 1000000 0.0647240000001 0.0806090000001 0.0661090000001 0.0727896 -difference_medium SortedSet_100 10000000 1.113329 2.024243 2.023388 1.4994682 -difference_large SortedSet_100 100 1.30000000809e-05 1.6000000187e-05 1.39999999647e-05 1.46000000768e-05 -difference_large SortedSet_100 1000 5.29999999799e-05 5.6000000086e-05 5.29999999799e-05 5.42000000223e-05 -difference_large SortedSet_100 10000 0.000430000000051 0.000434999999925 0.000434999999925 0.000432799999999 -difference_large SortedSet_100 100000 0.00499500000001 0.00510099999997 0.00499500000001 0.00503940000003 -difference_large SortedSet_100 1000000 0.0652219999999 0.550626 0.550626 0.1670548 -difference_large SortedSet_100 10000000 1.141526 2.067025 1.253964 1.5271568 -difference_update_tiny SortedSet_100 100 1.79999999546e-05 1.90000000657e-05 1.80000001819e-05 1.86000000213e-05 -difference_update_tiny SortedSet_100 1000 2.10000000607e-05 2.20000001718e-05 2.10000000607e-05 2.14000000597e-05 -difference_update_tiny SortedSet_100 10000 2.19999999445e-05 2.50000000506e-05 2.29999998282e-05 2.33999999637e-05 -difference_update_tiny SortedSet_100 100000 3.90000000152e-05 4.50000000001e-05 3.90000000152e-05 4.10000000102e-05 -difference_update_tiny SortedSet_100 1000000 4.59999998839e-05 4.899999999e-05 4.60000001112e-05 4.71999999718e-05 -difference_update_tiny SortedSet_100 10000000 7.59999998081e-05 8.29999999041e-05 7.90000001416e-05 7.99999999799e-05 -difference_update_small SortedSet_100 100 1.89999998383e-05 1.99999999495e-05 1.99999999495e-05 1.93999999283e-05 -difference_update_small SortedSet_100 1000 0.000174000000015 0.000180999999884 0.00017600000001 0.000176199999987 -difference_update_small SortedSet_100 10000 0.00175399999989 0.001935 0.00175399999989 0.00187899999996 -difference_update_small SortedSet_100 100000 0.018354 0.0193140000001 0.018509 0.0185990000001 -difference_update_small SortedSet_100 1000000 0.19575 0.197456 0.196311 0.1964168 -difference_update_small SortedSet_100 10000000 2.300417 2.313258 2.313258 2.3059874 -difference_update_medium SortedSet_100 100 1.09999998585e-05 1.30000000809e-05 1.30000000809e-05 1.21999999919e-05 -difference_update_medium SortedSet_100 1000 4.79999998788e-05 5.09999999849e-05 4.99999998738e-05 4.97999999425e-05 -difference_update_medium SortedSet_100 10000 0.00036399999999 0.000395000000026 0.000391000000036 0.000378799999999 -difference_update_medium SortedSet_100 100000 0.00436600000012 0.00468099999989 0.00441100000012 0.00446840000004 -difference_update_medium SortedSet_100 1000000 0.067043 0.0848449999999 0.0848449999999 0.075057 -difference_update_medium SortedSet_100 10000000 0.862264 1.461437 0.862264 1.1330614 -difference_update_large SortedSet_100 100 1.19999999697e-05 1.30000000809e-05 1.30000000809e-05 1.21999999919e-05 -difference_update_large SortedSet_100 1000 5.49999999748e-05 5.69999999698e-05 5.59999998586e-05 5.59999999496e-05 -difference_update_large SortedSet_100 10000 0.000488000000132 0.000525000000152 0.000525000000152 0.000499200000058 -difference_update_large SortedSet_100 100000 0.00614699999983 0.00621999999998 0.00614699999983 0.00618079999999 -difference_update_large SortedSet_100 1000000 0.0902699999999 0.105153 0.104209 0.0990417999999 -difference_update_large SortedSet_100 10000000 1.10933 1.915122 1.896162 1.4904706 -intersection_tiny SortedSet_100 100 1.10000000859e-05 1.30000000809e-05 1.30000000809e-05 1.24000000596e-05 -intersection_tiny SortedSet_100 1000 1.19999999697e-05 1.39999999647e-05 1.39999999647e-05 1.31999999667e-05 -intersection_tiny SortedSet_100 10000 1.50000000758e-05 1.79999999546e-05 1.70000000708e-05 1.64000000041e-05 -intersection_tiny SortedSet_100 100000 3.50000000253e-05 3.70000000203e-05 3.59999999091e-05 3.60000000001e-05 -intersection_tiny SortedSet_100 1000000 4.50000000001e-05 5.19999998687e-05 4.60000001112e-05 4.7799999993e-05 -intersection_tiny SortedSet_100 10000000 6.20000000708e-05 0.000148000000081 6.20000000708e-05 8.40000000153e-05 -intersection_small SortedSet_100 100 1.09999998585e-05 1.19999999697e-05 1.19999999697e-05 1.15999999252e-05 -intersection_small SortedSet_100 1000 1.99999999495e-05 2.10000000607e-05 1.99999999495e-05 2.02000000172e-05 -intersection_small SortedSet_100 10000 7.19999998182e-05 7.40000000405e-05 7.19999998182e-05 7.27999999981e-05 -intersection_small SortedSet_100 100000 0.000735999999961 0.000778999999966 0.000735999999961 0.000749999999925 -intersection_small SortedSet_100 1000000 0.00924699999996 0.0146069999998 0.00934699999993 0.0106063999999 -intersection_small SortedSet_100 10000000 0.126623 0.934943 0.126752 0.2941356 -intersection_medium SortedSet_100 100 1.19999999697e-05 1.49999998484e-05 1.29999998535e-05 1.3399999898e-05 -intersection_medium SortedSet_100 1000 4.1999999894e-05 4.40000001163e-05 4.20000001213e-05 4.30000000506e-05 -intersection_medium SortedSet_100 10000 0.00028999999995 0.000294000000167 0.00029399999994 0.000292799999988 -intersection_medium SortedSet_100 100000 0.00317300000006 0.00321899999994 0.00321899999994 0.00319240000003 -intersection_medium SortedSet_100 1000000 0.049614 0.0621480000002 0.0621480000002 0.0533502 -intersection_medium SortedSet_100 10000000 0.776324 1.802707 0.847474 1.3331088 -intersection_large SortedSet_100 100 1.30000000809e-05 1.50000000758e-05 1.30000000809e-05 1.38000000334e-05 -intersection_large SortedSet_100 1000 4.59999998839e-05 4.80000001062e-05 4.80000001062e-05 4.6999999995e-05 -intersection_large SortedSet_100 10000 0.000338000000056 0.000342000000046 0.000338000000056 0.000340000000051 -intersection_large SortedSet_100 100000 0.00358399999982 0.00366699999995 0.00366699999995 0.00363719999996 -intersection_large SortedSet_100 1000000 0.0609029999998 0.0765590000001 0.0609029999998 0.0701246 -intersection_large SortedSet_100 10000000 0.82842 1.807525 1.807525 1.3536126 -intersection_update_tiny SortedSet_100 100 7.00000009601e-06 8.99999986359e-06 7.00000009601e-06 8.00000002528e-06 -intersection_update_tiny SortedSet_100 1000 9.99999997475e-06 1.19999999697e-05 9.99999997475e-06 1.11999999717e-05 -intersection_update_tiny SortedSet_100 10000 4.00000001264e-05 6.40000000658e-05 4.10000000102e-05 4.54000000445e-05 -intersection_update_tiny SortedSet_100 100000 0.000735999999961 0.000792999999931 0.000739999999951 0.000757399999975 -intersection_update_tiny SortedSet_100 1000000 0.00760299999979 0.00902399999995 0.00763400000005 0.00806759999996 -intersection_update_tiny SortedSet_100 10000000 0.126641 0.133676 0.126641 0.131106 -intersection_update_small SortedSet_100 100 7.00000009601e-06 7.9999999798e-06 7.9999999798e-06 7.40000004953e-06 -intersection_update_small SortedSet_100 1000 1.59999999596e-05 1.69999998434e-05 1.69999998434e-05 1.65999998899e-05 -intersection_update_small SortedSet_100 10000 9.00000000001e-05 0.000145999999859 0.000117999999929 0.000112199999967 -intersection_update_small SortedSet_100 100000 0.00138599999991 0.0014500000002 0.0013869999998 0.00140919999994 -intersection_update_small SortedSet_100 1000000 0.0148410000002 0.016016 0.0155919999997 0.0154803999999 -intersection_update_small SortedSet_100 10000000 0.217968 0.253181 0.217968 0.2324678 -intersection_update_medium SortedSet_100 100 8.99999986359e-06 1.00000002021e-05 8.99999986359e-06 9.20000002225e-06 -intersection_update_medium SortedSet_100 1000 3.70000002476e-05 3.90000000152e-05 3.90000000152e-05 3.8399999994e-05 -intersection_update_medium SortedSet_100 10000 0.00029399999994 0.000325999999859 0.000325999999859 0.000303800000074 -intersection_update_medium SortedSet_100 100000 0.00326399999994 0.00348600000007 0.00326399999994 0.00336260000004 -intersection_update_medium SortedSet_100 1000000 0.048468 0.456933 0.456933 0.1314946 -intersection_update_medium SortedSet_100 10000000 0.690394 1.31714 0.772514 0.938134 -intersection_update_large SortedSet_100 100 8.99999986359e-06 1.10000000859e-05 8.99999986359e-06 9.80000013442e-06 -intersection_update_large SortedSet_100 1000 4.20000001213e-05 4.39999998889e-05 4.39999998889e-05 4.28000000284e-05 -intersection_update_large SortedSet_100 10000 0.000340999999935 0.000364999999874 0.000364999999874 0.000347399999919 -intersection_update_large SortedSet_100 100000 0.00396000000001 0.00451500000008 0.00414600000022 0.00422360000002 -intersection_update_large SortedSet_100 1000000 0.0553850000001 0.0631640000001 0.0631640000001 0.0592634000001 -intersection_update_large SortedSet_100 10000000 0.692485 1.259757 1.259757 0.9360614 -symmetric_difference_tiny SortedSet_100 100 1.39999997373e-05 1.69999998434e-05 1.59999999596e-05 1.51999999616e-05 -symmetric_difference_tiny SortedSet_100 1000 4.6999999995e-05 4.90000002173e-05 4.90000002173e-05 4.80000000607e-05 -symmetric_difference_tiny SortedSet_100 10000 0.0003999999999 0.00043100000039 0.000417000000198 0.000413000000026 -symmetric_difference_tiny SortedSet_100 100000 0.00666899999987 0.00683299999992 0.00668300000007 0.00670920000002 -symmetric_difference_tiny SortedSet_100 1000000 0.100664 0.621675 0.100664 0.208527 -symmetric_difference_tiny SortedSet_100 10000000 2.141526 2.391798 2.176568 2.244835 -symmetric_difference_small SortedSet_100 100 1.4000000192e-05 1.70000002981e-05 1.50000000758e-05 1.54000001203e-05 -symmetric_difference_small SortedSet_100 1000 5.29999997525e-05 5.49999999748e-05 5.4000000091e-05 5.41999999768e-05 -symmetric_difference_small SortedSet_100 10000 0.000418000000082 0.000508999999965 0.000502999999753 0.000456999999915 -symmetric_difference_small SortedSet_100 100000 0.00659899999982 0.00671300000022 0.00659899999982 0.00663360000008 -symmetric_difference_small SortedSet_100 1000000 0.100292 0.614306 0.102347 0.2044062 -symmetric_difference_small SortedSet_100 10000000 2.232997 2.430969 2.400257 2.3190852 -symmetric_difference_medium SortedSet_100 100 1.39999997373e-05 1.80000001819e-05 1.39999997373e-05 1.51999999616e-05 -symmetric_difference_medium SortedSet_100 1000 4.99999996464e-05 5.19999998687e-05 5.09999999849e-05 5.0999999894e-05 -symmetric_difference_medium SortedSet_100 10000 0.000434000000041 0.000455000000329 0.000455000000329 0.000445600000057 -symmetric_difference_medium SortedSet_100 100000 0.00527300000022 0.00532099999964 0.00530799999979 0.00529640000004 -symmetric_difference_medium SortedSet_100 1000000 0.072799 0.540641 0.072799 0.172563 -symmetric_difference_medium SortedSet_100 10000000 1.059534 1.947526 1.234219 1.452652 -symmetric_difference_large SortedSet_100 100 1.50000000758e-05 3.80000001314e-05 1.70000002981e-05 2.04000000849e-05 -symmetric_difference_large SortedSet_100 1000 7.59999998081e-05 7.70000001467e-05 7.69999996919e-05 7.6799999988e-05 -symmetric_difference_large SortedSet_100 10000 0.00056799999993 0.000573999999688 0.00057199999992 0.000570599999901 -symmetric_difference_large SortedSet_100 100000 0.0087410000001 0.00884899999983 0.0087880000001 0.00878240000002 -symmetric_difference_large SortedSet_100 1000000 0.150957 0.577177 0.176925 0.246698 -symmetric_difference_large SortedSet_100 10000000 2.765303 2.994856 2.904452 2.8623078 -symmetric_difference_update_tiny SortedSet_100 100 7.9999999798e-06 9.00000031834e-06 7.9999999798e-06 8.40000002427e-06 -symmetric_difference_update_tiny SortedSet_100 1000 2.89999998131e-05 3.00000001516e-05 3.00000001516e-05 2.93999999485e-05 -symmetric_difference_update_tiny SortedSet_100 10000 0.000241000000187 0.000245999999606 0.000242000000071 0.000242600000001 -symmetric_difference_update_tiny SortedSet_100 100000 0.00329199999987 0.00422499999968 0.00329199999987 0.00349119999992 -symmetric_difference_update_tiny SortedSet_100 1000000 0.0519020000002 0.0641209999999 0.0564200000003 0.0560636 -symmetric_difference_update_tiny SortedSet_100 10000000 1.229637 2.196565 1.44845 1.57638 -symmetric_difference_update_small SortedSet_100 100 8.99999986359e-06 1.09999996312e-05 1.09999996312e-05 9.99999983833e-06 -symmetric_difference_update_small SortedSet_100 1000 3.10000000354e-05 3.90000000152e-05 3.19999999192e-05 3.34000000294e-05 -symmetric_difference_update_small SortedSet_100 10000 0.000254999999925 0.000257000000147 0.000255000000379 0.000255800000195 -symmetric_difference_update_small SortedSet_100 100000 0.00340800000004 0.003557 0.00340800000004 0.00345360000001 -symmetric_difference_update_small SortedSet_100 1000000 0.0534379999999 0.0582220000001 0.055069 0.0559159999999 -symmetric_difference_update_small SortedSet_100 10000000 1.299935 1.420902 1.374937 1.3582856 -symmetric_difference_update_medium SortedSet_100 100 9.00000031834e-06 1.10000000859e-05 1.00000002021e-05 1.00000002021e-05 -symmetric_difference_update_medium SortedSet_100 1000 4.09999997828e-05 4.30000000051e-05 4.20000001213e-05 4.22000000071e-05 -symmetric_difference_update_medium SortedSet_100 10000 0.000328999999965 0.000338000000284 0.000336999999945 0.000335799999993 -symmetric_difference_update_medium SortedSet_100 100000 0.00376300000016 0.003827 0.00377600000002 0.00378719999999 -symmetric_difference_update_medium SortedSet_100 1000000 0.0532990000002 0.0638269999999 0.0566480000002 0.0562884000001 -symmetric_difference_update_medium SortedSet_100 10000000 0.766759 1.583287 1.519117 1.1248386 -symmetric_difference_update_large SortedSet_100 100 1.10000000859e-05 1.29999998535e-05 1.19999999697e-05 1.19999999697e-05 -symmetric_difference_update_large SortedSet_100 1000 6.39999998384e-05 6.5000000177e-05 6.5000000177e-05 6.44000000648e-05 -symmetric_difference_update_large SortedSet_100 10000 0.000542999999652 0.000547000000097 0.000547000000097 0.000545399999919 -symmetric_difference_update_large SortedSet_100 100000 0.00762399999985 0.0084240000001 0.0084240000001 0.00780380000006 -symmetric_difference_update_large SortedSet_100 1000000 0.107301 0.620602 0.123892 0.2146722 -symmetric_difference_update_large SortedSet_100 10000000 1.296217 2.160354 2.11517 1.933172 -pop SortedSet_100 100 1.99999976758e-06 3.9999999899e-06 2.99999965137e-06 2.99999992421e-06 -pop SortedSet_100 1000 1.29999998535e-05 1.49999996211e-05 1.29999998535e-05 1.35999999657e-05 -pop SortedSet_100 10000 0.000116000000162 0.000131000000238 0.000131000000238 0.000126800000089 -pop SortedSet_100 100000 0.00112399999989 0.00129599999991 0.00112500000023 0.00116440000002 -pop SortedSet_100 1000000 0.0110519999998 0.0111540000003 0.011094 0.0111114 -pop SortedSet_100 10000000 0.110852 0.113375 0.110852 0.1116794 -init SortedSet_100 100 1.10000000859e-05 1.39999997373e-05 1.19999999697e-05 1.24000000142e-05 -init SortedSet_100 1000 5.49999999748e-05 5.70000001971e-05 5.70000001971e-05 5.63999999031e-05 -init SortedSet_100 10000 0.000629000000117 0.000670999999784 0.000633999999991 0.000644599999941 -init SortedSet_100 100000 0.0105250000001 0.011043 0.010601 0.010647 -init SortedSet_100 1000000 0.195767 0.230741 0.195767 0.2059302 -init SortedSet_100 10000000 4.159479 5.024424 4.194587 4.3953308 -contains SortedSet_1000 100 1.00000000014e-06 3.00000000042e-06 1.99999999939e-06 1.99999999992e-06 -contains SortedSet_1000 1000 3.99999999967e-06 4.99999999981e-06 4.99999999981e-06 4.59999999975e-06 -contains SortedSet_1000 10000 1.49999999994e-05 2.70000000002e-05 1.49999999994e-05 1.79999999999e-05 -contains SortedSet_1000 100000 0.000243 0.000252000000001 0.000252000000001 0.0002464 -contains SortedSet_1000 1000000 0.003047 0.003819 0.003272 0.0033226 -contains SortedSet_1000 10000000 0.046496 0.050307 0.04681 0.0481846 -iter SortedSet_1000 100 7.99999999401e-06 1.10000000006e-05 1.00000000032e-05 9.5999999985e-06 -iter SortedSet_1000 1000 7.2000000003e-05 7.40000000121e-05 7.2000000003e-05 7.32000000028e-05 -iter SortedSet_1000 10000 0.00071299999999 0.000718000000006 0.000718000000006 0.000715199999999 -iter SortedSet_1000 100000 0.00715699999999 0.007282 0.00721300000001 0.0072224 -iter SortedSet_1000 1000000 0.073019 0.076865 0.076049 0.0750938 -iter SortedSet_1000 10000000 0.734609 0.767472 0.734609 0.751237 -add SortedSet_1000 100 3.00000002085e-06 4.99999998738e-06 3.00000002085e-06 3.60000000796e-06 -add SortedSet_1000 1000 1.90000000089e-05 2.10000000038e-05 1.90000000089e-05 2.00000000063e-05 -add SortedSet_1000 10000 0.000181999999995 0.00018799999998 0.000186000000014 0.000184799999994 -add SortedSet_1000 100000 0.00205299999999 0.002284 0.00206800000001 0.0021088 -add SortedSet_1000 1000000 0.02129 0.02193 0.02193 0.0216138 -add SortedSet_1000 10000000 0.248649 0.256979 0.248843 0.251456 -update_tiny SortedSet_1000 100 1.39999999931e-05 1.60000000164e-05 1.49999999906e-05 1.53999999952e-05 -update_tiny SortedSet_1000 1000 1.5999999988e-05 1.90000000089e-05 1.80000000114e-05 1.7200000002e-05 -update_tiny SortedSet_1000 10000 1.69999999855e-05 2.00000000063e-05 2.00000000063e-05 1.85999999985e-05 -update_tiny SortedSet_1000 100000 2.89999999836e-05 3.39999999994e-05 2.89999999836e-05 3.09999999956e-05 -update_tiny SortedSet_1000 1000000 3.99999999843e-05 4.40000000026e-05 4.00000000127e-05 4.17999999968e-05 -update_tiny SortedSet_1000 10000000 5.39999999773e-05 9.00000000001e-05 9.00000000001e-05 6.46000000017e-05 -update_small SortedSet_1000 100 1.40000000215e-05 1.70000000139e-05 1.5000000019e-05 1.5400000018e-05 -update_small SortedSet_1000 1000 0.000126000000023 0.000134000000003 0.000133000000005 0.000130400000012 -update_small SortedSet_1000 10000 0.001307 0.00138099999998 0.001307 0.00132479999999 -update_small SortedSet_1000 100000 0.012899 0.013079 0.012924 0.0129598 -update_small SortedSet_1000 1000000 0.168 0.173602 0.169466 0.170056 -update_small SortedSet_1000 10000000 1.726154 1.75347 1.75347 1.7405418 -update_medium SortedSet_1000 100 9.99999997475e-06 1.29999999672e-05 1.09999999722e-05 1.0999999995e-05 -update_medium SortedSet_1000 1000 6.10000000165e-05 6.2000000014e-05 6.2000000014e-05 6.1200000016e-05 -update_medium SortedSet_1000 10000 0.000540999999998 0.000548999999978 0.000540999999998 0.000545199999988 -update_medium SortedSet_1000 100000 0.00633399999998 0.00804400000004 0.00633399999998 0.00705300000001 -update_medium SortedSet_1000 1000000 0.110131 0.145449 0.110207 0.1213946 -update_medium SortedSet_1000 10000000 1.254069 2.353315 1.44108 1.5908016 -update_large SortedSet_1000 100 1.40000000215e-05 1.60000000164e-05 1.40000000215e-05 1.48000000195e-05 -update_large SortedSet_1000 1000 8.00000000254e-05 8.20000000203e-05 8.20000000203e-05 8.14000000219e-05 -update_large SortedSet_1000 10000 0.000797999999975 0.000813999999991 0.000813999999991 0.000802799999985 -update_large SortedSet_1000 100000 0.011733 0.011961 0.011788 0.0118106 -update_large SortedSet_1000 1000000 0.152442 0.184756 0.153359 0.1604346 -update_large SortedSet_1000 10000000 1.75443 3.269218 1.75443 2.4697562 -union_tiny SortedSet_1000 100 2.29999999988e-05 2.49999999937e-05 2.29999999988e-05 2.37999999968e-05 -union_tiny SortedSet_1000 1000 7.40000000405e-05 8.40000000153e-05 7.69999999761e-05 7.78000000082e-05 -union_tiny SortedSet_1000 10000 0.000644000000023 0.000696000000005 0.000657999999987 0.000661400000001 -union_tiny SortedSet_1000 100000 0.00702000000001 0.00732400000004 0.00719299999997 0.00719300000001 -union_tiny SortedSet_1000 1000000 0.12 0.13568 0.133218 0.1310474 -union_tiny SortedSet_1000 10000000 2.052888 3.061206 2.254392 2.346353 -union_small SortedSet_1000 100 2.20000000581e-05 2.40000000531e-05 2.39999999394e-05 2.32000000096e-05 -union_small SortedSet_1000 1000 8.10000000229e-05 8.20000000203e-05 8.20000000203e-05 8.16000000214e-05 -union_small SortedSet_1000 10000 0.000675000000001 0.000721999999996 0.000675000000001 0.00068940000001 -union_small SortedSet_1000 100000 0.009007 0.00918899999999 0.00901399999998 0.00908200000001 -union_small SortedSet_1000 1000000 0.148395 0.177302 0.171972 0.162585 -union_small SortedSet_1000 10000000 2.167848 2.55453 2.167848 2.3336414 -union_medium SortedSet_1000 100 2.40000000531e-05 2.8000000043e-05 2.49999999369e-05 2.54000000041e-05 -union_medium SortedSet_1000 1000 0.000116999999932 0.000120000000038 0.000118999999927 0.000118399999974 -union_medium SortedSet_1000 10000 0.000956999999971 0.000990000000002 0.000957999999969 0.000966599999992 -union_medium SortedSet_1000 100000 0.012222 0.0126290000001 0.012375 0.012421 -union_medium SortedSet_1000 1000000 0.215381 0.252556 0.220213 0.2245554 -union_medium SortedSet_1000 10000000 3.108057 4.400521 3.509767 3.5558848 -union_large SortedSet_1000 100 2.59999999344e-05 2.99999999243e-05 2.70000000455e-05 2.71999999768e-05 -union_large SortedSet_1000 1000 0.00014699999997 0.000171000000023 0.00014699999997 0.000153999999975 -union_large SortedSet_1000 10000 0.00135999999998 0.00142800000003 0.00136200000009 0.00138380000001 -union_large SortedSet_1000 100000 0.018643 0.0200510000001 0.018643 0.0191218 -union_large SortedSet_1000 1000000 0.246977 0.300942 0.246977 0.2815914 -union_large SortedSet_1000 10000000 4.090496 4.515361 4.515361 4.2891008 -remove SortedSet_1000 100 2.99999999243e-06 3.9999999899e-06 2.99999999243e-06 3.19999999192e-06 -remove SortedSet_1000 1000 1.80000000682e-05 3.90000000152e-05 1.8999999952e-05 2.30000000101e-05 -remove SortedSet_1000 10000 0.000178000000005 0.000180999999998 0.000178000000005 0.000178800000003 -remove SortedSet_1000 100000 0.00204899999994 0.00220300000001 0.00206100000003 0.00209480000001 -remove SortedSet_1000 1000000 0.0271220000001 0.0289829999999 0.0271220000001 0.0279614 -remove SortedSet_1000 10000000 0.403214 0.431188 0.409946 0.41201 -difference_tiny SortedSet_1000 100 1.29999999672e-05 1.50000000758e-05 1.40000000783e-05 1.38000000334e-05 -difference_tiny SortedSet_1000 1000 3.90000000152e-05 4.10000000102e-05 4.00000000127e-05 4.00000000127e-05 -difference_tiny SortedSet_1000 10000 0.000333000000069 0.000339999999937 0.000334000000066 0.000336000000016 -difference_tiny SortedSet_1000 100000 0.0036060000001 0.00375700000006 0.00362400000006 0.00366360000005 -difference_tiny SortedSet_1000 1000000 0.06521 0.077366 0.0660630000001 0.0696816 -difference_tiny SortedSet_1000 10000000 1.336839 2.309296 1.350872 1.579525 -difference_small SortedSet_1000 100 1.29999999672e-05 1.49999999621e-05 1.39999999647e-05 1.39999999647e-05 -difference_small SortedSet_1000 1000 4.00000000127e-05 4.20000000076e-05 4.00000000127e-05 4.08000000107e-05 -difference_small SortedSet_1000 10000 0.000339000000054 0.00036399999999 0.000340999999935 0.000346800000011 -difference_small SortedSet_1000 100000 0.0036849999999 0.00414699999999 0.00414699999999 0.00383319999996 -difference_small SortedSet_1000 1000000 0.064038 0.077886 0.077886 0.0719662 -difference_small SortedSet_1000 10000000 1.079143 1.455947 1.079143 1.292352 -difference_medium SortedSet_1000 100 1.19999999697e-05 1.39999999647e-05 1.30000000809e-05 1.30000000354e-05 -difference_medium SortedSet_1000 1000 4.50000000001e-05 4.6999999995e-05 4.50000000001e-05 4.56000000213e-05 -difference_medium SortedSet_1000 10000 0.000349999999798 0.000352000000021 0.000352000000021 0.000350999999955 -difference_medium SortedSet_1000 100000 0.0036120000002 0.00381399999992 0.0036120000002 0.00366700000004 -difference_medium SortedSet_1000 1000000 0.0493180000001 0.056934 0.0514000000001 0.0521984 -difference_medium SortedSet_1000 10000000 0.986245 1.251222 0.997944 1.1102988 -difference_large SortedSet_1000 100 1.29999998535e-05 1.50000000758e-05 1.39999999647e-05 1.37999999424e-05 -difference_large SortedSet_1000 1000 4.99999998738e-05 5.09999999849e-05 4.99999998738e-05 5.05999999859e-05 -difference_large SortedSet_1000 10000 0.000397000000021 0.0003999999999 0.000397999999905 0.000398399999949 -difference_large SortedSet_1000 100000 0.00408300000004 0.00416999999993 0.00408300000004 0.00411600000002 -difference_large SortedSet_1000 1000000 0.0566120000001 0.0676550000001 0.0566120000001 0.0619676 -difference_large SortedSet_1000 10000000 0.967989 1.163508 0.967989 1.097931 -difference_update_tiny SortedSet_1000 100 1.90000000657e-05 2.10000000607e-05 1.90000000657e-05 1.96000000869e-05 -difference_update_tiny SortedSet_1000 1000 2.09999998333e-05 2.20000001718e-05 2.20000001718e-05 2.11999999919e-05 -difference_update_tiny SortedSet_1000 10000 2.19999999445e-05 2.40000001668e-05 2.29999998282e-05 2.31999999869e-05 -difference_update_tiny SortedSet_1000 100000 3.50000000253e-05 3.9999999899e-05 3.80000001314e-05 3.69999999748e-05 -difference_update_tiny SortedSet_1000 1000000 4.39999998889e-05 5.29999999799e-05 4.39999998889e-05 4.77999999475e-05 -difference_update_tiny SortedSet_1000 10000000 6.09999999597e-05 7.09999999344e-05 6.3000000182e-05 6.41999999971e-05 -difference_update_small SortedSet_1000 100 1.99999999495e-05 2.19999999445e-05 2.10000000607e-05 2.09999999697e-05 -difference_update_small SortedSet_1000 1000 0.000170000000026 0.000172999999904 0.00017200000002 0.000171599999976 -difference_update_small SortedSet_1000 10000 0.00170399999979 0.001712 0.00170600000001 0.00170819999994 -difference_update_small SortedSet_1000 100000 0.0185739999999 0.0187639999999 0.0187579999999 0.0186737999999 -difference_update_small SortedSet_1000 1000000 0.190265 0.191021 0.190367 0.1904852 -difference_update_small SortedSet_1000 10000000 1.956838 1.994544 1.956838 1.9794034 -difference_update_medium SortedSet_1000 100 9.00000009096e-06 1.09999998585e-05 9.00000009096e-06 9.80000004347e-06 -difference_update_medium SortedSet_1000 1000 4.50000000001e-05 4.899999999e-05 4.60000001112e-05 4.6199999997e-05 -difference_update_medium SortedSet_1000 10000 0.000345999999809 0.000348999999915 0.000347000000147 0.000347399999964 -difference_update_medium SortedSet_1000 100000 0.00412600000004 0.00418400000012 0.00412900000015 0.00414620000006 -difference_update_medium SortedSet_1000 1000000 0.0543640000001 0.0613030000002 0.0613030000002 0.0584358 -difference_update_medium SortedSet_1000 10000000 0.702983 1.751037 0.704642 0.9523916 -difference_update_large SortedSet_1000 100 1.19999999697e-05 1.30000000809e-05 1.30000000809e-05 1.22000000374e-05 -difference_update_large SortedSet_1000 1000 5.4000000091e-05 5.50000002022e-05 5.4000000091e-05 5.440000009e-05 -difference_update_large SortedSet_1000 10000 0.000464000000193 0.000470000000178 0.000467999999955 0.000466800000049 -difference_update_large SortedSet_1000 100000 0.00537099999997 0.00608099999999 0.00608099999999 0.00593159999994 -difference_update_large SortedSet_1000 1000000 0.076693 0.085767 0.085767 0.0787066 -difference_update_large SortedSet_1000 10000000 1.007283 1.593666 1.310871 1.234224 -intersection_tiny SortedSet_1000 100 9.99999997475e-06 1.30000000809e-05 9.99999997475e-06 1.08000000182e-05 -intersection_tiny SortedSet_1000 1000 1.19999999697e-05 1.39999999647e-05 1.19999999697e-05 1.25999999455e-05 -intersection_tiny SortedSet_1000 10000 1.39999999647e-05 1.50000000758e-05 1.39999999647e-05 1.41999999869e-05 -intersection_tiny SortedSet_1000 100000 3.10000000354e-05 3.50000000253e-05 3.30000000304e-05 3.32000000071e-05 -intersection_tiny SortedSet_1000 1000000 4.59999998839e-05 5.09999999849e-05 4.80000001062e-05 4.87999999677e-05 -intersection_tiny SortedSet_1000 10000000 6.09999999597e-05 6.40000000658e-05 6.09999999597e-05 6.22000000476e-05 -intersection_small SortedSet_1000 100 9.99999997475e-06 1.19999999697e-05 9.99999997475e-06 1.10000000404e-05 -intersection_small SortedSet_1000 1000 1.89999998383e-05 2.19999999445e-05 1.90000000657e-05 1.99999999495e-05 -intersection_small SortedSet_1000 10000 7.09999999344e-05 7.20000000456e-05 7.09999999344e-05 7.12000000021e-05 -intersection_small SortedSet_1000 100000 0.000704999999925 0.000749000000042 0.000704999999925 0.000715199999968 -intersection_small SortedSet_1000 1000000 0.00742000000014 0.00890600000002 0.00845400000003 0.00797900000002 -intersection_small SortedSet_1000 10000000 0.104319 0.123472 0.123316 0.116136 -intersection_medium SortedSet_1000 100 1.19999999697e-05 1.39999999647e-05 1.29999998535e-05 1.29999999444e-05 -intersection_medium SortedSet_1000 1000 4.10000000102e-05 4.20000001213e-05 4.10000000102e-05 4.14000000092e-05 -intersection_medium SortedSet_1000 10000 0.00028199999997 0.000287999999955 0.00028199999997 0.000284199999942 -intersection_medium SortedSet_1000 100000 0.00301899999999 0.00305800000001 0.00302299999998 0.00302900000002 -intersection_medium SortedSet_1000 1000000 0.0408259999999 0.049532 0.045633 0.0446274 -intersection_medium SortedSet_1000 10000000 0.611961 0.821805 0.611961 0.7177906 -intersection_large SortedSet_1000 100 1.30000000809e-05 1.49999998484e-05 1.39999999647e-05 1.37999999879e-05 -intersection_large SortedSet_1000 1000 4.6999999995e-05 4.99999998738e-05 4.79999998788e-05 4.85999999455e-05 -intersection_large SortedSet_1000 10000 0.000328000000081 0.000352000000021 0.00033099999996 0.000335200000063 -intersection_large SortedSet_1000 100000 0.00379199999998 0.00387899999987 0.00380799999994 0.00381399999992 -intersection_large SortedSet_1000 1000000 0.044772 0.055513 0.0505370000001 0.0495096 -intersection_large SortedSet_1000 10000000 0.656755 0.942718 0.656755 0.8420742 -intersection_update_tiny SortedSet_1000 100 5.99999998485e-06 9.00000009096e-06 7.00000009601e-06 7.40000004953e-06 -intersection_update_tiny SortedSet_1000 1000 8.99999986359e-06 1.19999999697e-05 9.99999997475e-06 1.01999999515e-05 -intersection_update_tiny SortedSet_1000 10000 3.30000000304e-05 3.50000000253e-05 3.50000000253e-05 3.44000000041e-05 -intersection_update_tiny SortedSet_1000 100000 0.000313000000006 0.000373999999965 0.000373999999965 0.000332799999933 -intersection_update_tiny SortedSet_1000 1000000 0.00704100000007 0.0076590000001 0.0076590000001 0.00750360000011 -intersection_update_tiny SortedSet_1000 10000000 0.114914 0.123349 0.121987 0.1209878 -intersection_update_small SortedSet_1000 100 7.00000009601e-06 8.00000020718e-06 7.00000009601e-06 7.80000004852e-06 -intersection_update_small SortedSet_1000 1000 1.70000000708e-05 2.20000001718e-05 2.20000001718e-05 1.96000000415e-05 -intersection_update_small SortedSet_1000 10000 8.8999999889e-05 9.00000000001e-05 8.8999999889e-05 8.93999999334e-05 -intersection_update_small SortedSet_1000 100000 0.000919999999951 0.000988000000007 0.000919999999951 0.000941599999987 -intersection_update_small SortedSet_1000 1000000 0.0131899999999 0.0150600000002 0.013831 0.0141812 -intersection_update_small SortedSet_1000 10000000 0.205678 0.231001 0.224273 0.2156398 -intersection_update_medium SortedSet_1000 100 9.99999997475e-06 1.20000001971e-05 1.19999999697e-05 1.1399999994e-05 -intersection_update_medium SortedSet_1000 1000 3.59999999091e-05 5.09999999849e-05 4.6999999995e-05 4.18000000082e-05 -intersection_update_medium SortedSet_1000 10000 0.000283999999965 0.000313000000006 0.000313000000006 0.00029340000001 -intersection_update_medium SortedSet_1000 100000 0.00308400000017 0.00324099999989 0.00308899999982 0.00312019999997 -intersection_update_medium SortedSet_1000 1000000 0.0429730000001 0.047442 0.0467500000002 0.0447464000001 -intersection_update_medium SortedSet_1000 10000000 0.630943 1.295931 1.295931 0.7837934 -intersection_update_large SortedSet_1000 100 7.9999999798e-06 9.99999997475e-06 9.00000009096e-06 9.00000000001e-06 -intersection_update_large SortedSet_1000 1000 4.10000000102e-05 4.20000001213e-05 4.1999999894e-05 4.15999999859e-05 -intersection_update_large SortedSet_1000 10000 0.000329999999849 0.00033099999996 0.00033099999996 0.000330200000008 -intersection_update_large SortedSet_1000 100000 0.00355300000001 0.00370399999997 0.00355600000012 0.003593 -intersection_update_large SortedSet_1000 1000000 0.0483280000001 0.05258 0.05258 0.051496 -intersection_update_large SortedSet_1000 10000000 0.677691 0.838916 0.677691 0.755394 -symmetric_difference_tiny SortedSet_1000 100 1.39999999647e-05 1.59999999596e-05 1.39999999647e-05 1.47999999626e-05 -symmetric_difference_tiny SortedSet_1000 1000 4.39999998889e-05 4.59999998839e-05 4.39999998889e-05 4.45999999556e-05 -symmetric_difference_tiny SortedSet_1000 10000 0.000373000000081 0.00038799999993 0.000382999999829 0.000379599999951 -symmetric_difference_tiny SortedSet_1000 100000 0.00411299999996 0.00428899999997 0.00418799999989 0.00418880000002 -symmetric_difference_tiny SortedSet_1000 1000000 0.0790400000001 0.098397 0.0805499999999 0.0885958 -symmetric_difference_tiny SortedSet_1000 10000000 1.163537 1.955403 1.281501 1.4083342 -symmetric_difference_small SortedSet_1000 100 1.49999996211e-05 2.20000001718e-05 1.8999999611e-05 1.79999998181e-05 -symmetric_difference_small SortedSet_1000 1000 4.6999999995e-05 5.29999997525e-05 5.29999997525e-05 4.97999998515e-05 -symmetric_difference_small SortedSet_1000 10000 0.00037999999995 0.00038799999993 0.000381000000289 0.000383400000101 -symmetric_difference_small SortedSet_1000 100000 0.0041769999998 0.00434900000027 0.00418899999977 0.00422659999995 -symmetric_difference_small SortedSet_1000 1000000 0.0832169999999 0.0952010000001 0.0839089999999 0.0862858 -symmetric_difference_small SortedSet_1000 10000000 1.277089 1.426069 1.277089 1.357811 -symmetric_difference_medium SortedSet_1000 100 1.59999999596e-05 2.09999998333e-05 1.79999997272e-05 1.77999999323e-05 -symmetric_difference_medium SortedSet_1000 1000 4.80000003336e-05 5.30000002072e-05 4.90000002173e-05 5.00000001011e-05 -symmetric_difference_medium SortedSet_1000 10000 0.000418000000082 0.000422000000071 0.000420999999733 0.000419800000054 -symmetric_difference_medium SortedSet_1000 100000 0.00454600000012 0.00473299999976 0.00455800000009 0.00459860000001 -symmetric_difference_medium SortedSet_1000 1000000 0.060986 0.0717829999999 0.0612029999998 0.0634575999999 -symmetric_difference_medium SortedSet_1000 10000000 1.018338 1.188967 1.018338 1.0878772 -symmetric_difference_large SortedSet_1000 100 1.4000000192e-05 1.59999999596e-05 1.59999999596e-05 1.54000000293e-05 -symmetric_difference_large SortedSet_1000 1000 7.19999998182e-05 7.59999998081e-05 7.40000000405e-05 7.39999998586e-05 -symmetric_difference_large SortedSet_1000 10000 0.000545999999758 0.000573000000259 0.000573000000259 0.000553599999876 -symmetric_difference_large SortedSet_1000 100000 0.0061440000004 0.00652800000034 0.0061440000004 0.00623060000007 -symmetric_difference_large SortedSet_1000 1000000 0.127054 0.134351 0.127054 0.1305298 -symmetric_difference_large SortedSet_1000 10000000 1.782818 2.653397 1.782818 2.038476 -symmetric_difference_update_tiny SortedSet_1000 100 7.9999999798e-06 1.80000001819e-05 7.9999999798e-06 1.07999999273e-05 -symmetric_difference_update_tiny SortedSet_1000 1000 2.60000001617e-05 2.79999999293e-05 2.70000000455e-05 2.70000000455e-05 -symmetric_difference_update_tiny SortedSet_1000 10000 0.000211000000036 0.000260000000253 0.000211000000036 0.000224600000183 -symmetric_difference_update_tiny SortedSet_1000 100000 0.00210700000025 0.00241099999994 0.00214499999993 0.00222839999997 -symmetric_difference_update_tiny SortedSet_1000 1000000 0.038176 0.0444600000001 0.0390170000001 0.0398622 -symmetric_difference_update_tiny SortedSet_1000 10000000 0.642777 0.695656 0.695656 0.6708006 -symmetric_difference_update_small SortedSet_1000 100 7.9999999798e-06 1.00000002021e-05 9.99999974738e-06 9.00000004549e-06 -symmetric_difference_update_small SortedSet_1000 1000 2.89999998131e-05 3.10000000354e-05 2.99999996969e-05 2.99999998788e-05 -symmetric_difference_update_small SortedSet_1000 10000 0.000240999999733 0.000244000000293 0.000242999999955 0.000242600000001 -symmetric_difference_update_small SortedSet_1000 100000 0.00261 0.00268499999993 0.00261 0.00263340000001 -symmetric_difference_update_small SortedSet_1000 1000000 0.0401230000002 0.0453779999998 0.0414919999998 0.0416346 -symmetric_difference_update_small SortedSet_1000 10000000 0.637469 0.775732 0.637469 0.6932558 -symmetric_difference_update_medium SortedSet_1000 100 9.99999974738e-06 1.19999999697e-05 9.99999974738e-06 1.07999998363e-05 -symmetric_difference_update_medium SortedSet_1000 1000 3.90000000152e-05 4.10000002375e-05 3.90000000152e-05 3.96000000364e-05 -symmetric_difference_update_medium SortedSet_1000 10000 0.000313999999889 0.000317999999879 0.000317999999879 0.000316800000019 -symmetric_difference_update_medium SortedSet_1000 100000 0.0035240000002 0.00366900000017 0.0035240000002 0.00356060000013 -symmetric_difference_update_medium SortedSet_1000 1000000 0.0457590000001 0.0528860000004 0.0528860000004 0.0489624000001 -symmetric_difference_update_medium SortedSet_1000 10000000 0.6538 0.792006 0.6538 0.7276018 -symmetric_difference_update_large SortedSet_1000 100 1.09999996312e-05 1.30000003082e-05 1.19999999697e-05 1.17999999929e-05 -symmetric_difference_update_large SortedSet_1000 1000 6.29999999546e-05 7.40000000405e-05 6.5000000177e-05 6.5800000084e-05 -symmetric_difference_update_large SortedSet_1000 10000 0.000547999999981 0.000562000000173 0.000550000000203 0.000552400000015 -symmetric_difference_update_large SortedSet_1000 100000 0.00658199999998 0.00667500000009 0.00660599999992 0.00661760000003 -symmetric_difference_update_large SortedSet_1000 1000000 0.103379 0.586305 0.586305 0.206196 -symmetric_difference_update_large SortedSet_1000 10000000 1.222584 1.874217 1.222584 1.39013 -pop SortedSet_1000 100 2.99999965137e-06 5.00000032844e-06 3.00000010611e-06 3.60000003639e-06 -pop SortedSet_1000 1000 1.29999998535e-05 1.70000002981e-05 1.29999998535e-05 1.40000000101e-05 -pop SortedSet_1000 10000 0.000113000000056 0.00011399999994 0.000113000000056 0.000113400000009 -pop SortedSet_1000 100000 0.00111100000004 0.00111500000003 0.00111200000038 0.00111319999996 -pop SortedSet_1000 1000000 0.0110119999999 0.0144720000003 0.0110119999999 0.0117128 -pop SortedSet_1000 10000000 0.11008 0.111174 0.110236 0.110459 -init SortedSet_1000 100 1.09999996312e-05 1.30000003082e-05 1.10000000859e-05 1.16000000162e-05 -init SortedSet_1000 1000 5.19999998687e-05 5.49999999748e-05 5.39999996363e-05 5.37999999324e-05 -init SortedSet_1000 10000 0.000612000000274 0.000653000000057 0.000612999999703 0.000625600000058 -init SortedSet_1000 100000 0.00756599999977 0.008374 0.00757199999998 0.00775779999994 -init SortedSet_1000 1000000 0.168532 0.200989 0.200445 0.1910694 -init SortedSet_1000 10000000 3.194131 3.367465 3.304035 3.2759916 -contains SortedSet_10000 100 1.00000000014e-06 3.00000000042e-06 3.00000000042e-06 1.80000000025e-06 -contains SortedSet_10000 1000 2.00000000028e-06 3.00000000042e-06 3.00000000042e-06 2.80000000004e-06 -contains SortedSet_10000 10000 1.59999999996e-05 1.79999999999e-05 1.59999999996e-05 1.67999999997e-05 -contains SortedSet_10000 100000 0.000244 0.000268 0.000244 0.0002512 -contains SortedSet_10000 1000000 0.002903 0.003664 0.002903 0.0031996 -contains SortedSet_10000 10000000 0.046087 0.050345 0.050345 0.047162 -iter SortedSet_10000 100 8.99999999149e-06 1.00000000032e-05 8.99999999149e-06 9.59999999282e-06 -iter SortedSet_10000 1000 7.2000000003e-05 7.39999999979e-05 7.39999999979e-05 7.30000000004e-05 -iter SortedSet_10000 10000 0.000707999999989 0.000730000000004 0.000709000000001 0.0007126 -iter SortedSet_10000 100000 0.007097 0.007254 0.007097 0.00714 -iter SortedSet_10000 1000000 0.073093 0.076319 0.073368 0.0740136 -iter SortedSet_10000 10000000 0.735047 0.770384 0.770384 0.7510492 -add SortedSet_10000 100 2.99999999243e-06 3.9999999899e-06 2.99999999243e-06 3.39999999142e-06 -add SortedSet_10000 1000 1.89999999805e-05 2.10000000038e-05 1.99999999779e-05 1.97999999898e-05 -add SortedSet_10000 10000 0.000506999999999 0.000587999999993 0.000546999999983 0.000532400000003 -add SortedSet_10000 100000 0.00528300000002 0.00611699999999 0.005292 0.0054534 -add SortedSet_10000 1000000 0.063742 0.064571 0.063804 0.064139 -add SortedSet_10000 10000000 0.505951 0.523655 0.516477 0.514169 -update_tiny SortedSet_10000 100 1.39999999931e-05 1.49999999906e-05 1.39999999931e-05 1.43999999921e-05 -update_tiny SortedSet_10000 1000 1.49999999906e-05 1.60000000164e-05 1.5000000019e-05 1.54000000066e-05 -update_tiny SortedSet_10000 10000 1.5999999988e-05 2.09999999754e-05 1.80000000114e-05 1.81999999995e-05 -update_tiny SortedSet_10000 100000 2.80000000146e-05 3.30000000019e-05 2.80000000146e-05 3.02000000033e-05 -update_tiny SortedSet_10000 1000000 3.39999999994e-05 4.59999999975e-05 3.79999999893e-05 3.83999999997e-05 -update_tiny SortedSet_10000 10000000 5.29999999799e-05 0.000116999999989 5.30000000083e-05 7.41999999946e-05 -update_small SortedSet_10000 100 1.90000000089e-05 2.10000000038e-05 2.00000000063e-05 1.9999999995e-05 -update_small SortedSet_10000 1000 0.000125000000025 0.000126999999964 0.000125000000025 0.000125600000013 -update_small SortedSet_10000 10000 0.001282 0.00140299999998 0.001284 0.00133219999999 -update_small SortedSet_10000 100000 0.012028 0.012461 0.012177 0.0122902 -update_small SortedSet_10000 1000000 0.324324 0.335339 0.325856 0.3274216 -update_small SortedSet_10000 10000000 3.257499 3.287031 3.268707 3.2706692 -update_medium SortedSet_10000 100 1.29999999672e-05 1.5000000019e-05 1.5000000019e-05 1.42000000096e-05 -update_medium SortedSet_10000 1000 5.89999999647e-05 7.09999999913e-05 6.0000000019e-05 6.28000000006e-05 -update_medium SortedSet_10000 10000 0.000522999999987 0.000525000000039 0.000525000000039 0.000523799999996 -update_medium SortedSet_10000 100000 0.00640799999996 0.00691499999999 0.00652300000002 0.0066252 -update_medium SortedSet_10000 1000000 0.086038 0.100088 0.088349 0.089818 -update_medium SortedSet_10000 10000000 1.268768 1.329888 1.268768 1.3061426 -update_large SortedSet_10000 100 1.69999999571e-05 2.00000000063e-05 1.8999999952e-05 1.83999999877e-05 -update_large SortedSet_10000 1000 7.99999999685e-05 8.20000000203e-05 7.99999999685e-05 8.07999999893e-05 -update_large SortedSet_10000 10000 0.000800000000027 0.00113799999997 0.000802000000022 0.000870199999997 -update_large SortedSet_10000 100000 0.011961 0.015205 0.011976 0.0131664 -update_large SortedSet_10000 1000000 0.122952 0.152472 0.124209 0.1306338 -update_large SortedSet_10000 10000000 1.596163 2.424552 1.816025 1.9265178 -union_tiny SortedSet_10000 100 2.10000000038e-05 2.49999999937e-05 2.20000000013e-05 2.24000000117e-05 -union_tiny SortedSet_10000 1000 6.99999999938e-05 7.79999999736e-05 7.09999999913e-05 7.23999999991e-05 -union_tiny SortedSet_10000 10000 0.000601000000017 0.00061599999998 0.00061599999998 0.000609999999995 -union_tiny SortedSet_10000 100000 0.00634100000002 0.00667499999997 0.00667499999997 0.00651519999999 -union_tiny SortedSet_10000 1000000 0.090269 0.099979 0.090592 0.0926164 -union_tiny SortedSet_10000 10000000 1.68621 2.036154 1.738319 1.7957972 -union_small SortedSet_10000 100 2.19999999445e-05 2.40000000531e-05 2.20000000581e-05 2.26000000112e-05 -union_small SortedSet_10000 1000 7.90000000279e-05 8.10000000229e-05 7.90000000279e-05 7.98000000032e-05 -union_small SortedSet_10000 10000 0.000674000000004 0.000678999999991 0.000675999999999 0.000676199999998 -union_small SortedSet_10000 100000 0.00800800000002 0.00846200000001 0.00843499999996 0.0082768 -union_small SortedSet_10000 1000000 0.118356 0.148167 0.11869 0.1303808 -union_small SortedSet_10000 10000000 1.776368 2.163742 1.920192 1.9232818 -union_medium SortedSet_10000 100 2.39999999394e-05 2.6000000048e-05 2.39999999394e-05 2.46000000061e-05 -union_medium SortedSet_10000 1000 0.000117000000046 0.00014299999998 0.000119000000041 0.000123400000007 -union_medium SortedSet_10000 10000 0.000999999999976 0.00113199999998 0.000999999999976 0.00103260000001 -union_medium SortedSet_10000 100000 0.017687 0.0182010000001 0.017702 0.0178082 -union_medium SortedSet_10000 1000000 0.170724 0.195059 0.173808 0.1785218 -union_medium SortedSet_10000 10000000 2.69553 3.389711 3.389711 2.9059756 -union_large SortedSet_10000 100 2.59999999344e-05 2.90000000405e-05 2.59999999344e-05 2.70000000228e-05 -union_large SortedSet_10000 1000 0.000141999999983 0.00014699999997 0.00014299999998 0.000143800000001 -union_large SortedSet_10000 10000 0.00109699999996 0.00113199999998 0.00109699999996 0.00111239999999 -union_large SortedSet_10000 100000 0.017003 0.017892 0.017337 0.0173428 -union_large SortedSet_10000 1000000 0.191631 0.219365 0.192189 0.1985464 -union_large SortedSet_10000 10000000 3.344431 4.358928 3.530501 3.7985974 -remove SortedSet_10000 100 1.99999999495e-06 3.9999999899e-06 3.00000010611e-06 3.00000001516e-06 -remove SortedSet_10000 1000 1.79999999546e-05 2.00000000632e-05 1.8999999952e-05 1.8799999998e-05 -remove SortedSet_10000 10000 0.000275999999985 0.000279999999975 0.000275999999985 0.000278200000002 -remove SortedSet_10000 100000 0.00313600000004 0.00343199999998 0.00313600000004 0.0032342 -remove SortedSet_10000 1000000 0.041446 0.0423820000001 0.041732 0.0418514 -remove SortedSet_10000 10000000 0.591479 0.610087 0.591479 0.6027784 -difference_tiny SortedSet_10000 100 1.49999999621e-05 1.79999999546e-05 1.49999999621e-05 1.58000000056e-05 -difference_tiny SortedSet_10000 1000 3.79999999041e-05 4.6999999995e-05 3.80000000177e-05 3.97999999905e-05 -difference_tiny SortedSet_10000 10000 0.000308000000018 0.000310000000013 0.000308000000018 0.000309400000015 -difference_tiny SortedSet_10000 100000 0.00318100000004 0.00538800000004 0.00538800000004 0.0039078 -difference_tiny SortedSet_10000 1000000 0.043378 0.051379 0.050203 0.0483206 -difference_tiny SortedSet_10000 10000000 1.063163 1.257137 1.077557 1.1606304 -difference_small SortedSet_10000 100 1.29999999672e-05 1.50000000758e-05 1.39999999647e-05 1.38000000106e-05 -difference_small SortedSet_10000 1000 3.80000000177e-05 4.10000000102e-05 3.89999999015e-05 3.9199999992e-05 -difference_small SortedSet_10000 10000 0.000315999999998 0.000317999999993 0.000315999999998 0.000317199999995 -difference_small SortedSet_10000 100000 0.00319300000001 0.00362500000006 0.00319300000001 0.00334480000001 -difference_small SortedSet_10000 1000000 0.0435630000001 0.0498240000001 0.0498240000001 0.04736 -difference_small SortedSet_10000 10000000 1.04448 1.402101 1.059122 1.1484838 -difference_medium SortedSet_10000 100 1.19999999697e-05 1.49999999621e-05 1.19999999697e-05 1.29999999672e-05 -difference_medium SortedSet_10000 1000 4.40000000026e-05 4.50000000001e-05 4.50000000001e-05 4.48000000006e-05 -difference_medium SortedSet_10000 10000 0.00034699999992 0.000366999999983 0.000366999999983 0.000351599999999 -difference_medium SortedSet_10000 100000 0.00348999999994 0.00377500000002 0.00348999999994 0.00362279999997 -difference_medium SortedSet_10000 1000000 0.04811 0.056386 0.056386 0.050749 -difference_medium SortedSet_10000 10000000 0.715149 0.795717 0.795717 0.762617 -difference_large SortedSet_10000 100 1.19999999697e-05 1.50000000758e-05 1.19999999697e-05 1.35999999657e-05 -difference_large SortedSet_10000 1000 4.899999999e-05 5.00000001011e-05 4.99999998738e-05 4.9799999988e-05 -difference_large SortedSet_10000 10000 0.000395000000026 0.000397000000021 0.000396000000137 0.000396000000046 -difference_large SortedSet_10000 100000 0.00396000000001 0.004279 0.00396000000001 0.00406800000001 -difference_large SortedSet_10000 1000000 0.053604 0.056464 0.0542909999999 0.054662 -difference_large SortedSet_10000 10000000 0.772453 0.842153 0.785476 0.7942514 -difference_update_tiny SortedSet_10000 100 2.19999999445e-05 2.30000000556e-05 2.30000000556e-05 2.26000000112e-05 -difference_update_tiny SortedSet_10000 1000 2.09999998333e-05 2.30000000556e-05 2.09999998333e-05 2.15999999909e-05 -difference_update_tiny SortedSet_10000 10000 3.19999999192e-05 3.30000000304e-05 3.20000001466e-05 3.25999999859e-05 -difference_update_tiny SortedSet_10000 100000 5.69999999698e-05 7.69999999193e-05 5.69999999698e-05 6.11999999819e-05 -difference_update_tiny SortedSet_10000 1000000 6.69999999445e-05 7.29999999294e-05 7.20000000456e-05 7.08000000031e-05 -difference_update_tiny SortedSet_10000 10000000 8.80000000052e-05 0.000117000000046 8.80000000052e-05 9.73999999587e-05 -difference_update_small SortedSet_10000 100 1.79999999546e-05 2.19999999445e-05 1.90000000657e-05 1.9599999996e-05 -difference_update_small SortedSet_10000 1000 0.000178999999889 0.000205999999935 0.000178999999889 0.000184599999966 -difference_update_small SortedSet_10000 10000 0.00252799999998 0.00275199999987 0.00275199999987 0.00265279999994 -difference_update_small SortedSet_10000 100000 0.027143 0.0273070000001 0.0272380000001 0.0272146000001 -difference_update_small SortedSet_10000 1000000 0.28167 0.283305 0.283305 0.2821926 -difference_update_small SortedSet_10000 10000000 2.849231 2.892264 2.884884 2.8714082 -difference_update_medium SortedSet_10000 100 1.19999999697e-05 1.50000000758e-05 1.19999999697e-05 1.29999999899e-05 -difference_update_medium SortedSet_10000 1000 4.79999998788e-05 4.99999998738e-05 4.80000001062e-05 4.87999999677e-05 -difference_update_medium SortedSet_10000 10000 0.000342000000046 0.000344000000041 0.000344000000041 0.00034340000002 -difference_update_medium SortedSet_10000 100000 0.00374499999998 0.00393699999995 0.00374499999998 0.00381179999999 -difference_update_medium SortedSet_10000 1000000 0.053574 0.0603169999999 0.05557 0.0557872 -difference_update_medium SortedSet_10000 10000000 0.578269 0.674779 0.586804 0.6012984 -difference_update_large SortedSet_10000 100 9.99999997475e-06 1.19999999697e-05 1.19999999697e-05 1.1399999994e-05 -difference_update_large SortedSet_10000 1000 6.09999999597e-05 6.20000000708e-05 6.20000000708e-05 6.18000000031e-05 -difference_update_large SortedSet_10000 10000 0.000475999999935 0.000481000000036 0.000475999999935 0.000478600000042 -difference_update_large SortedSet_10000 100000 0.00540499999988 0.00667799999997 0.00540499999988 0.00585979999996 -difference_update_large SortedSet_10000 1000000 0.0765490000001 0.0869600000001 0.07861 0.0811620000001 -difference_update_large SortedSet_10000 10000000 0.834313 0.951245 0.834313 0.8855658 -intersection_tiny SortedSet_10000 100 1.19999999697e-05 1.59999999596e-05 1.19999999697e-05 1.33999999889e-05 -intersection_tiny SortedSet_10000 1000 1.19999999697e-05 1.59999999596e-05 1.19999999697e-05 1.29999999899e-05 -intersection_tiny SortedSet_10000 10000 1.39999999647e-05 1.50000000758e-05 1.39999999647e-05 1.42000000324e-05 -intersection_tiny SortedSet_10000 100000 3.19999999192e-05 3.9999999899e-05 3.30000000304e-05 3.41999999819e-05 -intersection_tiny SortedSet_10000 1000000 4.1999999894e-05 4.6999999995e-05 4.30000000051e-05 4.49999999546e-05 -intersection_tiny SortedSet_10000 10000000 6.09999999597e-05 6.80000000557e-05 6.19999998435e-05 6.37999999981e-05 -intersection_small SortedSet_10000 100 9.99999997475e-06 1.20000001971e-05 9.99999997475e-06 1.10000000404e-05 -intersection_small SortedSet_10000 1000 1.79999999546e-05 2.10000000607e-05 2.00000001769e-05 1.96000000415e-05 -intersection_small SortedSet_10000 10000 8.09999999092e-05 8.40000000153e-05 8.10000001366e-05 8.21999999971e-05 -intersection_small SortedSet_10000 100000 0.000711000000138 0.000804000000016 0.000711000000138 0.000743400000056 -intersection_small SortedSet_10000 1000000 0.00754500000016 0.00892999999996 0.00892999999996 0.0081056 -intersection_small SortedSet_10000 10000000 0.0832209999999 0.08761 0.087593 0.085606 -intersection_medium SortedSet_10000 100 1.19999999697e-05 1.30000000809e-05 1.19999999697e-05 1.24000000596e-05 -intersection_medium SortedSet_10000 1000 4.39999998889e-05 4.6999999995e-05 4.50000000001e-05 4.55999999758e-05 -intersection_medium SortedSet_10000 10000 0.00029799999993 0.000319999999874 0.000299000000041 0.000303599999961 -intersection_medium SortedSet_10000 100000 0.00303899999994 0.00312699999995 0.00312699999995 0.00308799999998 -intersection_medium SortedSet_10000 1000000 0.0446280000001 0.0486490000001 0.045226 0.0455896 -intersection_medium SortedSet_10000 10000000 0.478899 0.566533 0.483727 0.5011568 -intersection_large SortedSet_10000 100 1.50000000758e-05 1.70000000708e-05 1.69999998434e-05 1.60000000051e-05 -intersection_large SortedSet_10000 1000 5.00000001011e-05 5.19999998687e-05 5.09999999849e-05 5.09999999849e-05 -intersection_large SortedSet_10000 10000 0.000344000000041 0.000347000000147 0.000346000000036 0.000346000000081 -intersection_large SortedSet_10000 100000 0.00358600000004 0.00415799999996 0.00408199999993 0.00390319999997 -intersection_large SortedSet_10000 1000000 0.0443809999999 0.047294 0.045447 0.045553 -intersection_large SortedSet_10000 10000000 0.526134 0.537001 0.529642 0.5303966 -intersection_update_tiny SortedSet_10000 100 6.99999986864e-06 7.9999999798e-06 7.00000009601e-06 7.39999995858e-06 -intersection_update_tiny SortedSet_10000 1000 9.00000009096e-06 1.19999999697e-05 1.19999999697e-05 1.04000000192e-05 -intersection_update_tiny SortedSet_10000 10000 3.2999999803e-05 3.50000000253e-05 3.39999999142e-05 3.35999999606e-05 -intersection_update_tiny SortedSet_10000 100000 0.000299999999925 0.000361000000112 0.000339999999824 0.000328399999898 -intersection_update_tiny SortedSet_10000 1000000 0.00690699999996 0.00752199999988 0.00744499999996 0.00725659999998 -intersection_update_tiny SortedSet_10000 10000000 0.114108 0.121006 0.121006 0.116914 -intersection_update_small SortedSet_10000 100 6.99999986864e-06 7.9999999798e-06 7.00000009601e-06 7.2000000273e-06 -intersection_update_small SortedSet_10000 1000 1.59999999596e-05 1.79999999546e-05 1.70000000708e-05 1.68000000031e-05 -intersection_update_small SortedSet_10000 10000 9.69999998688e-05 9.79999999799e-05 9.69999998688e-05 9.71999999365e-05 -intersection_update_small SortedSet_10000 100000 0.000860000000102 0.000974999999926 0.000880000000052 0.000899999999956 -intersection_update_small SortedSet_10000 1000000 0.0129650000001 0.0145149999998 0.0145149999998 0.013447 -intersection_update_small SortedSet_10000 10000000 0.194063 0.212351 0.194063 0.202299 -intersection_update_medium SortedSet_10000 100 7.9999999798e-06 9.99999997475e-06 8.99999986359e-06 8.99999995454e-06 -intersection_update_medium SortedSet_10000 1000 3.90000000152e-05 4.10000000102e-05 3.90000000152e-05 4.00000000354e-05 -intersection_update_medium SortedSet_10000 10000 0.00030199999992 0.000307000000021 0.000307000000021 0.00030499999998 -intersection_update_medium SortedSet_10000 100000 0.003242 0.00325900000007 0.00325900000007 0.00324900000001 -intersection_update_medium SortedSet_10000 1000000 0.0417769999999 0.045259 0.0422080000001 0.0427252 -intersection_update_medium SortedSet_10000 10000000 0.54766 0.609638 0.609638 0.5907796 -intersection_update_large SortedSet_10000 100 7.9999999798e-06 9.99999997475e-06 8.99999986359e-06 9.19999997677e-06 -intersection_update_large SortedSet_10000 1000 4.40000001163e-05 4.6999999995e-05 4.60000001112e-05 4.58000000435e-05 -intersection_update_large SortedSet_10000 10000 0.000350000000026 0.000367000000097 0.000352000000021 0.000354800000014 -intersection_update_large SortedSet_10000 100000 0.00371999999993 0.00377299999991 0.00375499999996 0.00374299999999 -intersection_update_large SortedSet_10000 1000000 0.0471300000002 0.0513999999998 0.0472159999999 0.0480876 -intersection_update_large SortedSet_10000 10000000 0.587948 0.658524 0.592207 0.6050672 -symmetric_difference_tiny SortedSet_10000 100 1.29999998535e-05 1.69999998434e-05 1.39999999647e-05 1.43999999182e-05 -symmetric_difference_tiny SortedSet_10000 1000 4.30000000051e-05 4.50000000001e-05 4.50000000001e-05 4.42000000021e-05 -symmetric_difference_tiny SortedSet_10000 10000 0.00037199999997 0.000401999999895 0.000401999999895 0.000379199999952 -symmetric_difference_tiny SortedSet_10000 100000 0.00402299999996 0.00421400000005 0.00418400000012 0.00411600000002 -symmetric_difference_tiny SortedSet_10000 1000000 0.0582609999999 0.0661400000001 0.0584739999999 0.0615679999999 -symmetric_difference_tiny SortedSet_10000 10000000 1.043442 1.191867 1.191867 1.1249254 -symmetric_difference_small SortedSet_10000 100 1.39999999647e-05 1.70000000708e-05 1.4000000192e-05 1.46000001223e-05 -symmetric_difference_small SortedSet_10000 1000 4.6999999995e-05 4.899999999e-05 4.79999998788e-05 4.79999999243e-05 -symmetric_difference_small SortedSet_10000 10000 0.000392000000147 0.000408999999991 0.000393999999915 0.000397200000043 -symmetric_difference_small SortedSet_10000 100000 0.00462800000014 0.00478500000008 0.00470599999994 0.00469420000004 -symmetric_difference_small SortedSet_10000 1000000 0.0625729999999 0.0721880000001 0.0625729999999 0.0682536 -symmetric_difference_small SortedSet_10000 10000000 1.063149 1.234753 1.063149 1.1282052 -symmetric_difference_medium SortedSet_10000 100 1.90000000657e-05 2.29999998282e-05 2.09999998333e-05 2.0399999994e-05 -symmetric_difference_medium SortedSet_10000 1000 5.39999998637e-05 5.99999998485e-05 5.4000000091e-05 5.53999999283e-05 -symmetric_difference_medium SortedSet_10000 10000 0.000459999999975 0.000502999999981 0.000459999999975 0.000477999999976 -symmetric_difference_medium SortedSet_10000 100000 0.00519000000008 0.00589100000002 0.00576599999999 0.00548420000005 -symmetric_difference_medium SortedSet_10000 1000000 0.060943 0.07305 0.061854 0.0674384 -symmetric_difference_medium SortedSet_10000 10000000 0.780279 0.896704 0.780279 0.855471 -symmetric_difference_large SortedSet_10000 100 1.90000000657e-05 2.20000001718e-05 1.99999999495e-05 2.06000000617e-05 -symmetric_difference_large SortedSet_10000 1000 8.20000000203e-05 8.50000001265e-05 8.39999997879e-05 8.33999999486e-05 -symmetric_difference_large SortedSet_10000 10000 0.00055999999995 0.000568999999814 0.000564000000395 0.000563599999987 -symmetric_difference_large SortedSet_10000 100000 0.00614099999984 0.00624599999992 0.00614499999983 0.00619019999986 -symmetric_difference_large SortedSet_10000 1000000 0.103562 0.105352 0.103859 0.1045576 -symmetric_difference_large SortedSet_10000 10000000 1.555447 1.924664 1.555579 1.7005678 -symmetric_difference_update_tiny SortedSet_10000 100 8.99999986359e-06 1.10000000859e-05 8.99999986359e-06 9.60000006671e-06 -symmetric_difference_update_tiny SortedSet_10000 1000 2.49999998232e-05 2.70000000455e-05 2.60000001617e-05 2.59999999798e-05 -symmetric_difference_update_tiny SortedSet_10000 10000 0.000208999999813 0.000211000000036 0.000209999999697 0.000209600000017 -symmetric_difference_update_tiny SortedSet_10000 100000 0.00207499999988 0.00235900000007 0.00207799999998 0.00213800000001 -symmetric_difference_update_tiny SortedSet_10000 1000000 0.026687 0.0297609999998 0.0297609999998 0.028505 -symmetric_difference_update_tiny SortedSet_10000 10000000 0.508148 0.729371 0.587122 0.5776626 -symmetric_difference_update_small SortedSet_10000 100 7.9999999798e-06 9.99999974738e-06 9.00000031834e-06 8.79999997778e-06 -symmetric_difference_update_small SortedSet_10000 1000 2.99999996969e-05 3.00000001516e-05 3.00000001516e-05 3.00000000607e-05 -symmetric_difference_update_small SortedSet_10000 10000 0.000240000000304 0.000242999999955 0.000240000000304 0.000241000000096 -symmetric_difference_update_small SortedSet_10000 100000 0.00244900000007 0.00253599999996 0.00247600000012 0.00248840000004 -symmetric_difference_update_small SortedSet_10000 1000000 0.0307039999998 0.0353559999999 0.0307430000003 0.0316733999999 -symmetric_difference_update_small SortedSet_10000 10000000 0.545039 0.694398 0.610892 0.6103812 -symmetric_difference_update_medium SortedSet_10000 100 1.09999996312e-05 1.30000003082e-05 1.09999996312e-05 1.16000000162e-05 -symmetric_difference_update_medium SortedSet_10000 1000 4.20000001213e-05 4.49999997727e-05 4.30000000051e-05 4.36000000263e-05 -symmetric_difference_update_medium SortedSet_10000 10000 0.000326000000314 0.000328000000081 0.000326000000314 0.000327000000107 -symmetric_difference_update_medium SortedSet_10000 100000 0.00349100000039 0.00363900000002 0.00349100000039 0.00355939999999 -symmetric_difference_update_medium SortedSet_10000 1000000 0.0454829999999 0.0565810000003 0.0454829999999 0.0492656000001 -symmetric_difference_update_medium SortedSet_10000 10000000 0.564678 0.661176 0.564678 0.6179474 -symmetric_difference_update_large SortedSet_10000 100 1.10000000859e-05 1.30000003082e-05 1.29999998535e-05 1.20000000607e-05 -symmetric_difference_update_large SortedSet_10000 1000 6.89999997121e-05 7.00000000506e-05 6.89999997121e-05 6.91999999617e-05 -symmetric_difference_update_large SortedSet_10000 10000 0.00056399999994 0.000571000000036 0.000571000000036 0.000567599999977 -symmetric_difference_update_large SortedSet_10000 100000 0.00641700000006 0.00654299999997 0.006441 0.00649299999995 -symmetric_difference_update_large SortedSet_10000 1000000 0.0900849999998 0.102654 0.0937650000001 0.0944946000001 -symmetric_difference_update_large SortedSet_10000 10000000 1.093034 1.207939 1.10032 1.132357 -pop SortedSet_10000 100 2.99999965137e-06 3.9999999899e-06 3.00000010611e-06 3.19999999192e-06 -pop SortedSet_10000 1000 1.29999998535e-05 1.50000000758e-05 1.4000000192e-05 1.40000000101e-05 -pop SortedSet_10000 10000 0.000112999999601 0.000148000000081 0.000112999999601 0.000119999999879 -pop SortedSet_10000 100000 0.00110200000017 0.0011800000002 0.00114599999961 0.00113759999995 -pop SortedSet_10000 1000000 0.0109729999999 0.0110249999998 0.0110019999997 0.0109973999999 -pop SortedSet_10000 10000000 0.110264 0.115011 0.110693 0.1115016 -init SortedSet_10000 100 1.00000002021e-05 1.39999997373e-05 1.10000000859e-05 1.13999999485e-05 -init SortedSet_10000 1000 5.30000002072e-05 5.49999999748e-05 5.30000002072e-05 5.38000000233e-05 -init SortedSet_10000 10000 0.000604999999723 0.000610999999935 0.000606999999945 0.00060799999992 -init SortedSet_10000 100000 0.0076039999999 0.00808700000016 0.00776700000006 0.00783240000001 -init SortedSet_10000 1000000 0.139303 0.140463 0.139495 0.1398132 -init SortedSet_10000 10000000 2.908746 3.109124 2.908746 3.020758 +contains SortedSet_100 100 1.999999998503199e-06 2.9999999995311555e-06 2.000000000279556e-06 2.1999999997746046e-06 +contains SortedSet_100 1000 3.0000000013075123e-06 4.999999999810711e-06 4.000000000559112e-06 4.200000000409432e-06 +contains SortedSet_100 10000 1.8999999999991246e-05 1.9999999999242846e-05 1.8999999999991246e-05 1.9199999999841567e-05 +contains SortedSet_100 100000 0.0002309999999994261 0.00024599999999885824 0.00023400000000073362 0.00023559999999989145 +contains SortedSet_100 1000000 0.0031689999999997553 0.0033680000000000376 0.0032239999999994495 0.003238999999999592 +contains SortedSet_100 10000000 0.05050899999999103 0.05529700000000304 0.05122000000000071 0.05233640000000008 +iter SortedSet_100 100 9.999999988963282e-06 1.100000000064938e-05 9.999999988963282e-06 1.039999999363772e-05 +iter SortedSet_100 1000 9.099999999762076e-05 9.600000001341868e-05 9.1999999995096e-05 9.300000000109777e-05 +iter SortedSet_100 10000 0.0009149999999920055 0.0010710000000102582 0.0009219999999885431 0.0009643999999980224 +iter SortedSet_100 100000 0.009250999999991905 0.009378000000012321 0.009265999999996666 0.009285399999998844 +iter SortedSet_100 1000000 0.09214399999999046 0.09368800000000022 0.09219000000000221 0.09260979999999677 +iter SortedSet_100 10000000 0.9267429999999877 0.9537929999999903 0.9322459999999921 0.9344443999999925 +add SortedSet_100 100 4.9999999873762135e-06 5.000000015797923e-06 5.000000015797923e-06 5.000000010113581e-06 +add SortedSet_100 1000 2.200000000129876e-05 2.4999999993724487e-05 2.4000000024670953e-05 2.3600000002943488e-05 +add SortedSet_100 10000 0.0001859999999851425 0.00019700000001421358 0.00018700000001103945 0.0001890000000003056 +add SortedSet_100 100000 0.0019849999999905776 0.0022380000000055134 0.002174999999994043 0.0021276000000000294 +add SortedSet_100 1000000 0.022257999999993672 0.022889000000020587 0.022500000000007958 0.022539000000006127 +add SortedSet_100 10000000 0.31791700000002265 0.3235260000000153 0.31955100000001835 0.3197608000000116 +update_tiny SortedSet_100 100 1.7999999982976078e-05 2.0999999975401806e-05 1.8000000011397788e-05 1.8599999992829908e-05 +update_tiny SortedSet_100 1000 2.0000000006348273e-05 2.1000000003823516e-05 2.1000000003823516e-05 2.0799999998644125e-05 +update_tiny SortedSet_100 10000 2.200000000129876e-05 2.300000002719571e-05 2.2999999998774e-05 2.2600000005468245e-05 +update_tiny SortedSet_100 100000 3.499999999689862e-05 3.5999999994373866e-05 3.5999999994373866e-05 3.559999999538377e-05 +update_tiny SortedSet_100 1000000 4.3000000005122274e-05 4.6999999995023245e-05 4.3000000005122274e-05 4.3800000003102466e-05 +update_tiny SortedSet_100 10000000 5.3999999977349944e-05 0.00011299999999891952 6.20000000139953e-05 7.099999999127249e-05 +update_small SortedSet_100 100 1.8000000011397788e-05 2.1000000003823516e-05 1.899999995202961e-05 1.9199999996999395e-05 +update_small SortedSet_100 1000 0.00015899999999646752 0.00016199999998889325 0.00015999999999394277 0.00016039999999293287 +update_small SortedSet_100 10000 0.0016270000000417895 0.0017829999999889878 0.0016299999999773718 0.0016604000000029373 +update_small SortedSet_100 100000 0.017069000000049073 0.017581999999947584 0.017323000000033062 0.017345000000011622 +update_small SortedSet_100 1000000 0.1865099999999984 0.19543600000002925 0.1885599999999954 0.18947999999999182 +update_small SortedSet_100 10000000 1.9701789999999733 2.623000999999988 1.9805299999999875 2.1081251999999835 +update_medium SortedSet_100 100 1.3000000024021574e-05 2.6999999988674972e-05 1.3999999964653398e-05 1.6399999992700032e-05 +update_medium SortedSet_100 1000 6.799999999884676e-05 7.100000004811591e-05 6.999999999379725e-05 6.960000001754452e-05 +update_medium SortedSet_100 10000 0.0005400000000008731 0.0005429999999932988 0.0005419999999958236 0.0005417999999963285 +update_medium SortedSet_100 100000 0.008382999999980711 0.009365999999999985 0.008864000000016858 0.00889319999999998 +update_medium SortedSet_100 1000000 0.1350699999999847 0.6381640000000175 0.14251000000001568 0.33120300000000497 +update_medium SortedSet_100 10000000 2.1780840000000126 3.072287000000017 2.880863999999974 2.8163905999999996 +update_large SortedSet_100 100 1.6000000016447302e-05 3.500000002532033e-05 1.8000000011397788e-05 2.1400000014182298e-05 +update_large SortedSet_100 1000 8.900000000267028e-05 9.000000000014552e-05 8.900000000267028e-05 8.920000000216533e-05 +update_large SortedSet_100 10000 0.0007820000000151595 0.0007920000000467553 0.0007840000000101099 0.0007858000000169341 +update_large SortedSet_100 100000 0.013985999999988508 0.01763600000003862 0.014124000000037995 0.014785800000004201 +update_large SortedSet_100 1000000 0.18964299999998957 0.6409170000000017 0.19605599999999868 0.2838581999999974 +update_large SortedSet_100 10000000 3.588109999999915 3.918506999999977 3.7726290000000517 3.7563133999999763 +union_tiny SortedSet_100 100 2.2999999941930582e-05 2.6000000048043148e-05 2.300000005561742e-05 2.360000000862783e-05 +union_tiny SortedSet_100 1000 6.69999999445281e-05 7.200000004559115e-05 7.100000004811591e-05 7.000000000516593e-05 +union_tiny SortedSet_100 10000 0.0005400000000008731 0.0005770000000211439 0.0005439999999907741 0.0005546000000094864 +union_tiny SortedSet_100 100000 0.006863999999950465 0.0072339999999258 0.006965000000036525 0.0070055999999567575 +union_tiny SortedSet_100 1000000 0.0997260000000324 0.10768499999994674 0.10331999999993968 0.10377779999998893 +union_tiny SortedSet_100 10000000 1.790405000000078 2.6544039999999995 1.869448000000034 2.0079252000000225 +union_small SortedSet_100 100 2.199999994445534e-05 2.4999999936881068e-05 2.300000005561742e-05 2.3199999986900366e-05 +union_small SortedSet_100 1000 7.299999992937956e-05 7.600000003549212e-05 7.400000004054164e-05 7.439999999405699e-05 +union_small SortedSet_100 10000 0.0005939999999782231 0.0005969999999706488 0.0005950000000893851 0.0005951999999979307 +union_small SortedSet_100 100000 0.006243999999924199 0.006466999999929612 0.006317999999964741 0.006343199999969329 +union_small SortedSet_100 1000000 0.12379499999997279 0.1376549999999952 0.12393399999996291 0.1277673999999706 +union_small SortedSet_100 10000000 1.6945329999999785 2.7857380000000376 1.973532999999975 2.043365799999992 +union_medium SortedSet_100 100 2.3999999939405825e-05 2.7999999929306796e-05 2.4999999936881068e-05 2.53999999813459e-05 +union_medium SortedSet_100 1000 0.00010799999995469989 0.00012500000002546585 0.00010899999995217513 0.00011259999998856074 +union_medium SortedSet_100 10000 0.0008070000000088839 0.000853000000006432 0.0008280000000695509 0.0008262000000286207 +union_medium SortedSet_100 100000 0.010200999999938176 0.010571000000027198 0.01049399999999423 0.010410400000000663 +union_medium SortedSet_100 1000000 0.19079499999998006 0.2171210000000201 0.19206899999994675 0.19689339999999902 +union_medium SortedSet_100 10000000 2.8993619999999964 4.121292999999923 2.9220600000001014 3.160972000000015 +union_large SortedSet_100 100 2.6999999931831553e-05 3.000000003794412e-05 2.700000004551839e-05 2.7599999998528802e-05 +union_large SortedSet_100 1000 0.0001310000000103173 0.0001469999999699212 0.00013200000000779255 0.00013460000000122818 +union_large SortedSet_100 10000 0.001167000000009466 0.0012490000000298096 0.0011939999999412976 0.001202000000012049 +union_large SortedSet_100 100000 0.014685999999983324 0.016651000000024396 0.015344000000027336 0.01561060000001362 +union_large SortedSet_100 1000000 0.22914000000002943 0.23754699999994955 0.2336080000000038 0.23270780000000285 +union_large SortedSet_100 10000000 3.863279999999918 5.1856650000000855 3.8729489999999487 4.138739999999984 +remove SortedSet_100 100 3.999999989900971e-06 5.999999984851456e-06 3.999999989900971e-06 4.599999988386116e-06 +remove SortedSet_100 1000 2.199999994445534e-05 2.4999999936881068e-05 2.2999999941930582e-05 2.2999999987405318e-05 +remove SortedSet_100 10000 0.00019699999995737016 0.00040999999998803105 0.00020300000005590846 0.00024240000000190775 +remove SortedSet_100 100000 0.002250000000003638 0.002484000000094966 0.002262999999970816 0.002307599999994636 +remove SortedSet_100 1000000 0.02853699999991477 0.02949999999998454 0.028868999999986045 0.028931399999964923 +remove SortedSet_100 10000000 0.38905099999999493 0.4014039999999568 0.39500599999996666 0.3953915999999708 +difference_tiny SortedSet_100 100 1.3999999964653398e-05 1.5999999959603883e-05 1.499999996212864e-05 1.4999999984866009e-05 +difference_tiny SortedSet_100 1000 3.90000000152213e-05 4.200000000764703e-05 4.100000001017179e-05 4.060000001118169e-05 +difference_tiny SortedSet_100 10000 0.00030900000001565786 0.0003839999999399879 0.0003150000000005093 0.0003300000000081127 +difference_tiny SortedSet_100 100000 0.003730000000018663 0.004221000000029562 0.0038319999999885113 0.003944200000000819 +difference_tiny SortedSet_100 1000000 0.057920999999964806 0.06357500000001437 0.05818099999999049 0.06005239999999503 +difference_tiny SortedSet_100 10000000 1.0718560000000252 2.037810000000036 1.2112369999999828 1.3502948000000288 +difference_small SortedSet_100 100 1.900000006571645e-05 2.199999994445534e-05 1.9999999949504854e-05 2.0399999993969686e-05 +difference_small SortedSet_100 1000 4.1999999893960194e-05 4.9000000217347406e-05 4.5999999883861165e-05 4.5399999999062855e-05 +difference_small SortedSet_100 10000 0.00033699999994496466 0.0003449999999247666 0.0003430000001571898 0.00034120000000257276 +difference_small SortedSet_100 100000 0.003333999999995285 0.003764000000046508 0.0034009999999398133 0.003459999999995489 +difference_small SortedSet_100 1000000 0.05731100000002698 0.06381299999998191 0.058538999999882435 0.06008739999997488 +difference_small SortedSet_100 10000000 1.1658419999998841 1.8221450000000914 1.1817920000000868 1.3104440000000068 +difference_medium SortedSet_100 100 1.799999995455437e-05 2.099999983329326e-05 1.799999995455437e-05 1.8799999952534564e-05 +difference_medium SortedSet_100 1000 4.899999998997373e-05 5.499999997482519e-05 5.3999999863663106e-05 5.3399999933390065e-05 +difference_medium SortedSet_100 10000 0.0003859999999349384 0.00044300000013208773 0.00038900000004105095 0.00040220000000772415 +difference_medium SortedSet_100 100000 0.0039039999999204156 0.0041300000000319415 0.003963999999996304 0.003989400000000387 +difference_medium SortedSet_100 1000000 0.0466039999998884 0.04960699999992357 0.04692699999986871 0.047811199999932795 +difference_medium SortedSet_100 10000000 0.9221660000000611 1.085407000000032 1.06369699999982 1.0156538000000181 +difference_large SortedSet_100 100 1.4999999848441803e-05 1.7000000070765964e-05 1.5000000075815478e-05 1.5600000051563256e-05 +difference_large SortedSet_100 1000 5.799999985356408e-05 6.899999993947858e-05 6.099999995967664e-05 6.159999998089916e-05 +difference_large SortedSet_100 10000 0.00048000000015235855 0.0006160000000363652 0.00048300000003109744 0.0005094000000099186 +difference_large SortedSet_100 100000 0.005031000000144559 0.005590000000211148 0.005090000000109285 0.005231800000092335 +difference_large SortedSet_100 1000000 0.05664299999989453 0.06569800000011128 0.05671700000016244 0.05858680000005734 +difference_large SortedSet_100 10000000 1.0198259999999664 1.223889999999983 1.0376320000000305 1.0957614000000375 +difference_update_tiny SortedSet_100 100 2.3999999939405825e-05 2.3999999939405825e-05 2.3999999939405825e-05 2.3999999939405825e-05 +difference_update_tiny SortedSet_100 1000 2.499999982319423e-05 3.700000002027082e-05 2.6999999818144715e-05 2.8199999951539213e-05 +difference_update_tiny SortedSet_100 10000 2.6999999818144715e-05 3.999999989900971e-05 2.700000004551839e-05 2.9799999992974335e-05 +difference_update_tiny SortedSet_100 100000 4.100000001017179e-05 4.4000000116284355e-05 4.1999999893960194e-05 4.220000000714208e-05 +difference_update_tiny SortedSet_100 1000000 4.899999998997373e-05 5.29999999798747e-05 4.9999999873762135e-05 5.0199999986944024e-05 +difference_update_tiny SortedSet_100 10000000 7.600000003549212e-05 8.000000002539309e-05 7.699999991928053e-05 7.74000000092201e-05 +difference_update_small SortedSet_100 100 2.199999994445534e-05 2.3999999939405825e-05 2.199999994445534e-05 2.2599999965677853e-05 +difference_update_small SortedSet_100 1000 0.00020300000005590846 0.00020500000005085894 0.00020399999993969686 0.00020400000003064633 +difference_update_small SortedSet_100 10000 0.0019929999998566927 0.002012000000149783 0.00200700000004872 0.002003400000012334 +difference_update_small SortedSet_100 100000 0.020291999999926702 0.0204510000000937 0.020428000000038082 0.02039599999998245 +difference_update_small SortedSet_100 1000000 0.21271999999999025 0.22429299999998875 0.2142509999998765 0.21592279999999847 +difference_update_small SortedSet_100 10000000 2.4758500000000367 2.5001949999998487 2.4817259999999806 2.4855933999999706 +difference_update_medium SortedSet_100 100 1.1000000085914508e-05 1.3000000080864993e-05 1.1999999969702912e-05 1.2000000060652382e-05 +difference_update_medium SortedSet_100 1000 5.0999999984924216e-05 5.100000021229789e-05 5.0999999984924216e-05 5.100000003039895e-05 +difference_update_medium SortedSet_100 10000 0.0003959999999096908 0.0004320000000461732 0.0003979999999046413 0.0004043999999794323 +difference_update_medium SortedSet_100 100000 0.004253999999946245 0.004523999999946682 0.004307999999809908 0.004366399999935311 +difference_update_medium SortedSet_100 1000000 0.06664700000010271 0.08019000000012966 0.07444699999996374 0.07379240000000209 +difference_update_medium SortedSet_100 10000000 0.8861699999999928 1.5880929999998443 0.9033269999999902 1.1519445999999334 +difference_update_large SortedSet_100 100 1.1999999969702912e-05 1.3999999964653398e-05 1.2999999853491317e-05 1.2800000013157841e-05 +difference_update_large SortedSet_100 1000 6.400000006578921e-05 6.700000017190177e-05 6.599999983336602e-05 6.540000003951718e-05 +difference_update_large SortedSet_100 10000 0.0005619999999453285 0.0005970000001980225 0.0005639999999402789 0.00057040000001507 +difference_update_large SortedSet_100 100000 0.007137999999940803 0.007333000000016909 0.00726899999995112 0.007251799999949071 +difference_update_large SortedSet_100 1000000 0.09808300000008785 0.5319889999998395 0.11560799999983828 0.19403059999995093 +difference_update_large SortedSet_100 10000000 1.3086769999999888 1.9742160000000695 1.8439400000002024 1.6798874000000523 +intersection_tiny SortedSet_100 100 1.0999999858540832e-05 1.2999999853491317e-05 1.1999999969702912e-05 1.1999999924228177e-05 +intersection_tiny SortedSet_100 1000 1.2999999853491317e-05 1.600000018697756e-05 1.3999999964653398e-05 1.4000000010128134e-05 +intersection_tiny SortedSet_100 10000 1.5000000075815478e-05 1.7000000070765964e-05 1.5999999959603883e-05 1.600000000507862e-05 +intersection_tiny SortedSet_100 100000 3.300000003036985e-05 3.500000002532033e-05 3.399999991415825e-05 3.3799999982875306e-05 +intersection_tiny SortedSet_100 1000000 4.100000001017179e-05 4.6999999995023245e-05 4.500000000007276e-05 4.400000002533488e-05 +intersection_tiny SortedSet_100 10000000 5.600000008598727e-05 5.800000008093775e-05 5.699999996977567e-05 5.7000000015250404e-05 +intersection_small SortedSet_100 100 1.0999999858540832e-05 1.1999999969702912e-05 1.1000000085914508e-05 1.13999999484804e-05 +intersection_small SortedSet_100 1000 2.199999994445534e-05 2.3999999939405825e-05 2.2999999828243745e-05 2.279999998791027e-05 +intersection_small SortedSet_100 10000 8.100000013655517e-05 8.399999978792039e-05 8.200000002034358e-05 8.240000001933368e-05 +intersection_small SortedSet_100 100000 0.0007610000000113359 0.0008040000000164582 0.0007679999998799758 0.000773799999979019 +intersection_small SortedSet_100 1000000 0.007673999999951775 0.00807899999995243 0.007692000000133703 0.007794400000011592 +intersection_small SortedSet_100 10000000 0.11902900000018235 0.12596999999982472 0.12132099999985257 0.12155119999993076 +intersection_medium SortedSet_100 100 1.4999999848441803e-05 1.600000018697756e-05 1.5999999959603883e-05 1.560000000608852e-05 +intersection_medium SortedSet_100 1000 4.899999998997373e-05 5.29999999798747e-05 5.0999999984924216e-05 5.07999999626918e-05 +intersection_medium SortedSet_100 10000 0.00034899999991466757 0.0003859999999349384 0.000354999999899519 0.0003587999999126623 +intersection_medium SortedSet_100 100000 0.0035989999998946587 0.004200000000082582 0.003717999999935273 0.0038008000000445464 +intersection_medium SortedSet_100 1000000 0.049576999999999316 0.050362999999833846 0.04993999999987864 0.0499091999999564 +intersection_medium SortedSet_100 10000000 0.7146419999999125 1.4629939999999806 0.8067949999999655 0.9070301999999628 +intersection_large SortedSet_100 100 1.4999999848441803e-05 1.799999995455437e-05 1.600000018697756e-05 1.6400000004068715e-05 +intersection_large SortedSet_100 1000 5.899999996472616e-05 6.800000005569018e-05 6.000000007588824e-05 6.220000000212167e-05 +intersection_large SortedSet_100 10000 0.0004349999999249121 0.00044000000002597517 0.0004380000000310247 0.00043780000000879225 +intersection_large SortedSet_100 100000 0.004470000000083019 0.004703000000063184 0.004494999999906213 0.004564400000026581 +intersection_large SortedSet_100 1000000 0.05913600000008046 0.06107200000019475 0.05978799999979856 0.0598877999999786 +intersection_large SortedSet_100 10000000 0.7748919999999089 0.9614900000001398 0.8822569999999814 0.8651480000000447 +intersection_update_tiny SortedSet_100 100 6.999999868639861e-06 7.999999979801942e-06 7.999999979801942e-06 7.599999935337109e-06 +intersection_update_tiny SortedSet_100 1000 1.2999999853491317e-05 1.9999999949504854e-05 1.5999999959603883e-05 1.600000000507862e-05 +intersection_update_tiny SortedSet_100 10000 4.500000000007276e-05 4.899999998997373e-05 4.500000000007276e-05 4.6199999997043054e-05 +intersection_update_tiny SortedSet_100 100000 0.0006499999999505235 0.0006550000000515865 0.000653000000056636 0.0006525999999666965 +intersection_update_tiny SortedSet_100 1000000 0.007882000000108746 0.008090000000038344 0.00789400000007845 0.00794080000005124 +intersection_update_tiny SortedSet_100 10000000 0.1281450000001314 0.13818700000001627 0.13215500000001157 0.1318840000000364 +intersection_update_small SortedSet_100 100 7.999999979801942e-06 9.999999974752427e-06 9.000000090964022e-06 9.000000000014552e-06 +intersection_update_small SortedSet_100 1000 1.8999999838342774e-05 2.300000005561742e-05 2.1000000060666935e-05 2.1000000060666935e-05 +intersection_update_small SortedSet_100 10000 0.00010799999995469989 0.00013799999987895717 0.00010999999994965037 0.00011479999998300627 +intersection_update_small SortedSet_100 100000 0.0013689999998405256 0.001400999999987107 0.001374999999825377 0.0013797999999042077 +intersection_update_small SortedSet_100 1000000 0.0162319999999454 0.01826800000003459 0.016642999999930908 0.016915199999994003 +intersection_update_small SortedSet_100 10000000 0.24578100000007908 0.25399700000025405 0.24853200000006836 0.248794000000089 +intersection_update_medium SortedSet_100 100 8.999999863590347e-06 1.1000000085914508e-05 9.999999747378752e-06 9.999999929277691e-06 +intersection_update_medium SortedSet_100 1000 4.4999999772699084e-05 4.600000011123484e-05 4.600000011123484e-05 4.559999997582054e-05 +intersection_update_medium SortedSet_100 10000 0.0003560000000106811 0.0003780000001825101 0.0003739999997378618 0.00036860000000160653 +intersection_update_medium SortedSet_100 100000 0.003940000000056898 0.004305999999814958 0.004120999999940977 0.004143799999928888 +intersection_update_medium SortedSet_100 1000000 0.05934499999966647 0.47469200000023193 0.06232300000010582 0.14444860000003246 +intersection_update_medium SortedSet_100 10000000 0.8169859999998152 1.3132970000001478 1.2350500000002285 1.095576600000004 +intersection_update_large SortedSet_100 100 1.0999999631167157e-05 1.1999999969702912e-05 1.1000000085914508e-05 1.1199999971722718e-05 +intersection_update_large SortedSet_100 1000 5.399999963628943e-05 5.600000031336094e-05 5.400000009103678e-05 5.4400000044552145e-05 +intersection_update_large SortedSet_100 10000 0.00044899999966219184 0.0005160000000614673 0.00045100000033926335 0.00046380000012504754 +intersection_update_large SortedSet_100 100000 0.005020999999942433 0.005542999999761378 0.005129000000124506 0.00521180000005188 +intersection_update_large SortedSet_100 1000000 0.07012699999995675 0.0802969999999732 0.07302400000025955 0.07413940000005823 +intersection_update_large SortedSet_100 10000000 0.8768279999999322 1.4763080000002446 0.8997229999999945 1.104789400000027 +symmetric_difference_tiny SortedSet_100 100 1.4999999621068127e-05 1.700000029813964e-05 1.5999999959603883e-05 1.6199999936361565e-05 +symmetric_difference_tiny SortedSet_100 1000 4.8999999762600055e-05 5.0999999984924216e-05 5.000000010113581e-05 5.000000001018634e-05 +symmetric_difference_tiny SortedSet_100 10000 0.00041800000008151983 0.0004460000000108266 0.0004360000002634479 0.00043420000010883084 +symmetric_difference_tiny SortedSet_100 100000 0.004985999999917112 0.005493000000114989 0.0051199999998061685 0.005210600000009435 +symmetric_difference_tiny SortedSet_100 1000000 0.07344499999999243 0.08168300000033923 0.07378000000016982 0.07547620000013922 +symmetric_difference_tiny SortedSet_100 10000000 1.1610729999997602 1.9299999999998363 1.1678019999999378 1.322496599999886 +symmetric_difference_small SortedSet_100 100 1.5999999959603883e-05 1.7999999727180693e-05 1.699999984339229e-05 1.699999984339229e-05 +symmetric_difference_small SortedSet_100 1000 5.899999996472616e-05 6.299999995462713e-05 6.100000018705032e-05 6.1000000005151375e-05 +symmetric_difference_small SortedSet_100 10000 0.00042199999961667345 0.0005070000001978769 0.00042600000006132177 0.00044879999995828257 +symmetric_difference_small SortedSet_100 100000 0.004981999999927211 0.005623999999897933 0.0050899999996545375 0.005223999999816442 +symmetric_difference_small SortedSet_100 1000000 0.08388700000023164 0.09016599999995378 0.08410900000035326 0.08527300000005197 +symmetric_difference_small SortedSet_100 10000000 1.0495489999998426 2.062419000000318 1.2098980000000665 1.3615042000000357 +symmetric_difference_medium SortedSet_100 100 1.699999984339229e-05 1.900000006571645e-05 1.700000029813964e-05 1.7800000023271423e-05 +symmetric_difference_medium SortedSet_100 1000 5.6999999742402e-05 5.899999996472616e-05 5.800000008093775e-05 5.8199999966745966e-05 +symmetric_difference_medium SortedSet_100 10000 0.0005160000000614673 0.0005190000001675799 0.0005169999999452557 0.00051740000008067 +symmetric_difference_medium SortedSet_100 100000 0.0054919999997764535 0.005680000000211294 0.005558999999720982 0.005570199999874603 +symmetric_difference_medium SortedSet_100 1000000 0.06602100000009159 0.07377600000017992 0.06630600000016784 0.06899600000006104 +symmetric_difference_medium SortedSet_100 10000000 1.0347170000000006 1.2089169999999285 1.0791880000001584 1.1073397999999544 +symmetric_difference_large SortedSet_100 100 1.699999984339229e-05 1.8000000181928044e-05 1.700000029813964e-05 1.720000009299838e-05 +symmetric_difference_large SortedSet_100 1000 9.099999988393392e-05 0.00010499999962121365 0.00010000000020227162 9.819999986575567e-05 +symmetric_difference_large SortedSet_100 10000 0.0006659999999101274 0.0006789999997636187 0.0006749999997737177 0.0006727999998474843 +symmetric_difference_large SortedSet_100 100000 0.007525999999870692 0.007661999999982072 0.007569999999759602 0.007573999999931402 +symmetric_difference_large SortedSet_100 1000000 0.1327579999997397 0.1521139999999832 0.13560800000004747 0.13818439999995463 +symmetric_difference_large SortedSet_100 10000000 1.7229389999997693 1.962858999999753 1.942094999999881 1.8945875999997952 +symmetric_difference_update_tiny SortedSet_100 100 8.999999863590347e-06 1.1000000085914508e-05 9.000000318337698e-06 9.600000157661271e-06 +symmetric_difference_update_tiny SortedSet_100 1000 3.300000025774352e-05 3.700000024764449e-05 3.500000002532033e-05 3.520000009302748e-05 +symmetric_difference_update_tiny SortedSet_100 10000 0.00026800000023285975 0.0002740000004450849 0.00027000000000043656 0.00027060000011260856 +symmetric_difference_update_tiny SortedSet_100 100000 0.0036479999998846324 0.003748000000086904 0.0036939999999958673 0.0036946000000170898 +symmetric_difference_update_tiny SortedSet_100 1000000 0.048945999999887135 0.06196399999998903 0.05381600000009712 0.05466440000000148 +symmetric_difference_update_tiny SortedSet_100 10000000 1.2860850000001847 2.0042200000002595 1.3261959999999817 1.4535672000000885 +symmetric_difference_update_small SortedSet_100 100 8.999999863590347e-06 9.999999747378752e-06 9.000000318337698e-06 9.399999908055178e-06 +symmetric_difference_update_small SortedSet_100 1000 3.799999967668555e-05 4.000000035375706e-05 3.90000000152213e-05 3.90000000152213e-05 +symmetric_difference_update_small SortedSet_100 10000 0.00030900000001565786 0.0003229999997529376 0.000311000000237982 0.00031440000002476155 +symmetric_difference_update_small SortedSet_100 100000 0.0039249999999810825 0.004255999999713822 0.004118000000289612 0.004105800000070303 +symmetric_difference_update_small SortedSet_100 1000000 0.04855100000031598 0.06120999999984633 0.05638799999996991 0.05559280000006765 +symmetric_difference_update_small SortedSet_100 10000000 1.2426510000000235 1.424764000000323 1.3066450000001169 1.3090520000000652 +symmetric_difference_update_medium SortedSet_100 100 1.2999999853491317e-05 1.5999999959603883e-05 1.4999999621068127e-05 1.4599999849451705e-05 +symmetric_difference_update_medium SortedSet_100 1000 4.999999964638846e-05 5.0999999984924216e-05 5.000000010113581e-05 5.0199999986944024e-05 +symmetric_difference_update_medium SortedSet_100 10000 0.0003930000002583256 0.0005169999999452557 0.00039700000024822657 0.00042020000009870275 +symmetric_difference_update_medium SortedSet_100 100000 0.004554000000098313 0.005773999999746593 0.004943999999795778 0.005070399999840447 +symmetric_difference_update_medium SortedSet_100 1000000 0.0635109999998349 0.07084699999995792 0.06971599999997125 0.06772839999994176 +symmetric_difference_update_medium SortedSet_100 10000000 0.8228910000002543 1.4833269999999175 0.8477549999997791 1.0680470000000242 +symmetric_difference_update_large SortedSet_100 100 1.1999999969702912e-05 1.4000000192027073e-05 1.3000000308238668e-05 1.3000000126339729e-05 +symmetric_difference_update_large SortedSet_100 1000 7.60000002628658e-05 8.100000013655517e-05 7.70000001466542e-05 7.80000000304426e-05 +symmetric_difference_update_large SortedSet_100 10000 0.0006469999998444109 0.0006520000001728476 0.0006490000000667351 0.0006496000000879576 +symmetric_difference_update_large SortedSet_100 100000 0.00881100000015067 0.00970099999995 0.009202000000186672 0.009276599999975588 +symmetric_difference_update_large SortedSet_100 1000000 0.12344699999994191 0.5385780000001432 0.12595600000031482 0.20862700000006953 +symmetric_difference_update_large SortedSet_100 10000000 1.4560999999998785 2.10579000000007 2.0820479999997588 1.9339043999998466 +pop SortedSet_100 100 3.999999989900971e-06 7.000000096013537e-06 5.000000328436727e-06 5.400000009103678e-06 +pop SortedSet_100 1000 1.8000000181928044e-05 1.900000006571645e-05 1.900000006571645e-05 1.8800000088958767e-05 +pop SortedSet_100 10000 0.0001449999999749707 0.0001509999997324485 0.00014800000008108327 0.00014759999994566896 +pop SortedSet_100 100000 0.001457999999729509 0.0015379999999822758 0.0014690000002701709 0.001481800000055955 +pop SortedSet_100 1000000 0.01460899999983667 0.015478999999686494 0.014786000000185595 0.014892799999961426 +pop SortedSet_100 10000000 0.14619300000003932 0.14958999999998923 0.14727300000004107 0.14791860000004817 +init SortedSet_100 100 1.1999999969702912e-05 1.5000000075815478e-05 1.1999999969702912e-05 1.2799999967683107e-05 +init SortedSet_100 1000 5.300000020724838e-05 7.80000000304426e-05 6.299999995462713e-05 6.279999997786945e-05 +init SortedSet_100 10000 0.0005910000004405447 0.0006969999999455467 0.0006269999998949061 0.0006348000000798492 +init SortedSet_100 100000 0.01036100000010265 0.010819000000083179 0.010522000000037224 0.010588800000004995 +init SortedSet_100 1000000 0.1529289999998582 0.17397699999992255 0.1708490000000893 0.16726239999998144 +init SortedSet_100 10000000 3.569940000000315 4.663806000000022 3.7611070000002655 3.9397558000001482 +contains SortedSet_1000 100 2.000000000279556e-06 2.9999999995311555e-06 2.000000000279556e-06 2.399999999980196e-06 +contains SortedSet_1000 1000 2.9999999995311555e-06 4.000000000559112e-06 3.999999998782755e-06 3.599999999792658e-06 +contains SortedSet_1000 10000 1.8000000000739647e-05 1.8999999999991246e-05 1.8999999999991246e-05 1.8800000000140926e-05 +contains SortedSet_1000 100000 0.00022899999999914655 0.00023999999999979593 0.00023200000000045407 0.00023279999999985533 +contains SortedSet_1000 1000000 0.003159000000000134 0.00326300000000046 0.0032010000000006755 0.003211600000000203 +contains SortedSet_1000 10000000 0.05045700000000153 0.05141100000000165 0.05122999999998967 0.05102600000000024 +iter SortedSet_1000 100 1.100000000064938e-05 1.2999999995599865e-05 1.1999999998124622e-05 1.1799999998629574e-05 +iter SortedSet_1000 1000 9.099999999762076e-05 9.400000000425734e-05 9.200000000930686e-05 9.239999999977044e-05 +iter SortedSet_1000 10000 0.0009099999999904185 0.0009520000000122764 0.0009110000000021046 0.0009210000000024366 +iter SortedSet_1000 100000 0.009167000000005032 0.009335999999990463 0.009220999999996593 0.009231399999995915 +iter SortedSet_1000 1000000 0.0916560000000004 0.0924659999999875 0.09173100000001 0.09188000000000045 +iter SortedSet_1000 10000000 0.9169989999999899 0.9352640000000036 0.924010999999993 0.9244775999999973 +add SortedSet_1000 100 4.9999999873762135e-06 7.000000010748408e-06 5.999999984851456e-06 5.800000002409433e-06 +add SortedSet_1000 1000 2.2999999998774e-05 2.6999999988674972e-05 2.600000001962144e-05 2.540000000408327e-05 +add SortedSet_1000 10000 0.00021199999997634222 0.0002869999999859374 0.00023100000001363696 0.0002381999999954587 +add SortedSet_1000 100000 0.0022840000000030614 0.0023519999999734864 0.0022930000000087603 0.0023091999999905965 +add SortedSet_1000 1000000 0.023889999999994416 0.024528000000003658 0.024401000000011663 0.024333000000001447 +add SortedSet_1000 10000000 0.27778699999998935 0.28406499999999824 0.2799360000000206 0.2807907999999998 +update_tiny SortedSet_1000 100 1.6999999985500835e-05 2.0000000006348273e-05 1.8000000011397788e-05 1.8200000005208496e-05 +update_tiny SortedSet_1000 1000 1.8000000011397788e-05 2.0000000006348273e-05 1.899999998045132e-05 1.8999999997504347e-05 +update_tiny SortedSet_1000 10000 2.1000000003823516e-05 2.2999999998774e-05 2.199999997287705e-05 2.1799999996119367e-05 +update_tiny SortedSet_1000 100000 3.1999999976051186e-05 3.399999999942338e-05 3.300000000194814e-05 3.2999999996263794e-05 +update_tiny SortedSet_1000 1000000 4.200000000764703e-05 5.7999999995672624e-05 4.799999999249849e-05 4.8999999995658074e-05 +update_tiny SortedSet_1000 10000000 5.300000000829641e-05 8.000000002539309e-05 5.499999997482519e-05 5.9599999991633014e-05 +update_small SortedSet_1000 100 1.900000000887303e-05 2.0000000006348273e-05 1.900000000887303e-05 1.9400000007863126e-05 +update_small SortedSet_1000 1000 0.0001519999999572974 0.00015500000000656655 0.0001540000000090913 0.00015339999999923747 +update_small SortedSet_1000 10000 0.0015720000000101209 0.0017619999999851643 0.0015780000000518157 0.0016252000000122279 +update_small SortedSet_1000 100000 0.015384999999980664 0.015521999999975833 0.015417000000013559 0.015436399999998685 +update_small SortedSet_1000 1000000 0.19213799999999992 0.19368800000000874 0.1933580000000461 0.1930736000000138 +update_small SortedSet_1000 10000000 2.02494999999999 2.047880999999961 2.0330940000000055 2.0342885999999796 +update_medium SortedSet_1000 100 1.2000000026546331e-05 1.3000000024021574e-05 1.2000000026546331e-05 1.2400000025536429e-05 +update_medium SortedSet_1000 1000 6.300000001147055e-05 8.700000000771979e-05 6.400000000894579e-05 6.839999999783686e-05 +update_medium SortedSet_1000 10000 0.00048800000001847366 0.0006369999999833453 0.0004910000000108994 0.0005193999999960397 +update_medium SortedSet_1000 100000 0.0055770000000165965 0.005871000000013282 0.005591000000038093 0.005676000000016756 +update_medium SortedSet_1000 1000000 0.10683899999997948 0.10999200000003384 0.10794299999997747 0.10846119999999929 +update_medium SortedSet_1000 10000000 1.2854199999999878 2.008961999999997 1.3008099999999558 1.4505275999999867 +update_large SortedSet_1000 100 1.499999996212864e-05 1.7000000013922545e-05 1.6000000016447302e-05 1.600000000507862e-05 +update_large SortedSet_1000 1000 8.199999996350016e-05 8.700000000771979e-05 8.29999999609754e-05 8.339999999407155e-05 +update_large SortedSet_1000 10000 0.0007180000000062137 0.0007200000000011642 0.0007190000000036889 0.0007189999999923202 +update_large SortedSet_1000 100000 0.010217000000011467 0.010234999999966021 0.010223999999993794 0.010225000000002638 +update_large SortedSet_1000 1000000 0.15492799999998397 0.17364700000001676 0.1596689999999512 0.1625581999999895 +update_large SortedSet_1000 10000000 1.9442090000000007 2.7283970000000295 1.9829620000000432 2.1889336000000186 +union_tiny SortedSet_1000 100 2.3999999939405825e-05 2.599999993435631e-05 2.3999999939405825e-05 2.4599999960628338e-05 +union_tiny SortedSet_1000 1000 6.899999993947858e-05 6.900000005316542e-05 6.900000005316542e-05 6.900000000769069e-05 +union_tiny SortedSet_1000 10000 0.0005589999999529027 0.0006010000000742366 0.0005630000000564905 0.000573000000031243 +union_tiny SortedSet_1000 100000 0.00573399999996127 0.005986000000007152 0.00587499999994634 0.005867199999966033 +union_tiny SortedSet_1000 1000000 0.10222399999997833 0.12998000000004595 0.10352699999998549 0.10891820000001644 +union_tiny SortedSet_1000 10000000 1.7997080000000096 1.8620970000000625 1.8340269999999919 1.8312876000000415 +union_small SortedSet_1000 100 2.199999994445534e-05 2.3999999939405825e-05 2.300000005561742e-05 2.2999999987405318e-05 +union_small SortedSet_1000 1000 7.400000004054164e-05 8.300000001781882e-05 8.000000002539309e-05 7.900000002791785e-05 +union_small SortedSet_1000 10000 0.0005909999999857973 0.0006660000000238142 0.0005919999999832726 0.0006075999999893611 +union_small SortedSet_1000 100000 0.00622000000009848 0.00675300000000334 0.006358000000091124 0.006421200000045246 +union_small SortedSet_1000 1000000 0.1251830000001064 0.1402020000000448 0.12584800000001906 0.12863460000003216 +union_small SortedSet_1000 10000000 1.7379700000000184 1.9950919999999996 1.9615210000000616 1.9283436000000165 +union_medium SortedSet_1000 100 2.4999999936881068e-05 2.700000004551839e-05 2.5000000050567905e-05 2.5600000003578317e-05 +union_medium SortedSet_1000 1000 0.00010800000006838673 0.00011000000006333721 0.00010900000006586197 0.0001090000000431246 +union_medium SortedSet_1000 10000 0.000803000000018983 0.000979000000029373 0.000803000000018983 0.0008388000000195461 +union_medium SortedSet_1000 100000 0.010244000000056985 0.010971000000040476 0.010358999999994012 0.010536999999999352 +union_medium SortedSet_1000 1000000 0.19420800000000327 0.2058710000000019 0.19925999999998112 0.19973580000000765 +union_medium SortedSet_1000 10000000 2.940327000000025 3.9090640000000576 2.9604910000000473 3.153504399999997 +union_large SortedSet_1000 100 2.6999999931831553e-05 3.100000003541936e-05 2.700000004551839e-05 2.7999999997518898e-05 +union_large SortedSet_1000 1000 0.0001330000000052678 0.00014799999996739643 0.00014199999998254498 0.00014099999998506973 +union_large SortedSet_1000 10000 0.0010439999999789507 0.0011030000000573636 0.0010510000000749642 0.0010618000000249595 +union_large SortedSet_1000 100000 0.01556099999993421 0.01637500000003911 0.0156769999999824 0.015782999999964888 +union_large SortedSet_1000 1000000 0.2345550000000003 0.6225590000000238 0.23537099999998645 0.31263940000001184 +union_large SortedSet_1000 10000000 3.4839050000000498 4.156960000000026 3.935247000000004 3.8969798000000084 +remove SortedSet_1000 100 3.999999989900971e-06 6.999999982326699e-06 5.000000101063051e-06 5.400000009103678e-06 +remove SortedSet_1000 1000 2.199999994445534e-05 2.4000000053092663e-05 2.3999999939405825e-05 2.3400000009132783e-05 +remove SortedSet_1000 10000 0.00020600000004833419 0.00020799999992959783 0.00020700000004580943 0.00020700000000033468 +remove SortedSet_1000 100000 0.002334000000018932 0.002372000000036678 0.0023479999999835854 0.002348800000004303 +remove SortedSet_1000 1000000 0.029794000000038068 0.031619999999975335 0.030287999999927706 0.030495799999994234 +remove SortedSet_1000 10000000 0.45148599999993166 0.4673819999999296 0.45769899999993413 0.4578339999999571 +difference_tiny SortedSet_1000 100 1.5999999959603883e-05 1.6999999957079126e-05 1.600000007329072e-05 1.6200000004573667e-05 +difference_tiny SortedSet_1000 1000 4.0000000012696546e-05 4.100000001017179e-05 4.0000000012696546e-05 4.040000001168664e-05 +difference_tiny SortedSet_1000 10000 0.0003189999999904103 0.00032699999997021223 0.0003230000000939981 0.00032280000000355357 +difference_tiny SortedSet_1000 100000 0.003163000000085958 0.0032800000000179352 0.0032549999999673673 0.0032248000000208777 +difference_tiny SortedSet_1000 1000000 0.05849800000009964 0.07035599999994702 0.06031900000004953 0.06280860000001667 +difference_tiny SortedSet_1000 10000000 1.0940560000000232 2.0656940000000077 1.2277520000000095 1.3492960000000038 +difference_small SortedSet_1000 100 1.499999996212864e-05 1.600000007329072e-05 1.5999999959603883e-05 1.580000000558357e-05 +difference_small SortedSet_1000 1000 4.200000000764703e-05 4.400000000259752e-05 4.200000000764703e-05 4.240000000663713e-05 +difference_small SortedSet_1000 10000 0.00032799999996768747 0.00037599999996018596 0.00032999999996263796 0.0003391999999621476 +difference_small SortedSet_1000 100000 0.003317000000038206 0.0034110000000282525 0.0033889999999701104 0.003374400000006972 +difference_small SortedSet_1000 1000000 0.058176000000003114 0.4444730000000163 0.058797000000026856 0.1368454000000156 +difference_small SortedSet_1000 10000000 1.0339340000000448 1.2108369999998558 1.1935739999998987 1.1674003999999514 +difference_medium SortedSet_1000 100 1.3999999964653398e-05 1.5999999959603883e-05 1.5000000075815478e-05 1.4800000008108327e-05 +difference_medium SortedSet_1000 1000 4.799999987881165e-05 5.2000000096086296e-05 5.199999986871262e-05 5.0999999939449483e-05 +difference_medium SortedSet_1000 10000 0.00038700000004610047 0.0004069999999956053 0.00039199999991978984 0.0003933999999844673 +difference_medium SortedSet_1000 100000 0.003930999999965934 0.004243000000087704 0.003965000000107466 0.004024000000026717 +difference_medium SortedSet_1000 1000000 0.04684399999996458 0.04927399999996851 0.04705799999987903 0.047586799999953654 +difference_medium SortedSet_1000 10000000 0.9231919999999718 1.7944119999999657 0.9676739999999882 1.1449195999999575 +difference_large SortedSet_1000 100 1.3999999964653398e-05 1.5999999959603883e-05 1.5000000075815478e-05 1.4800000008108327e-05 +difference_large SortedSet_1000 1000 5.699999996977567e-05 5.900000019209983e-05 5.899999996472616e-05 5.839999998897838e-05 +difference_large SortedSet_1000 10000 0.00048300000003109744 0.00048500000002604793 0.00048300000003109744 0.00048360000005231996 +difference_large SortedSet_1000 100000 0.00497599999994236 0.005036000000018248 0.005005000000210202 0.005007000000068729 +difference_large SortedSet_1000 1000000 0.05674900000008165 0.06059400000003734 0.057467000000087864 0.05785240000004706 +difference_large SortedSet_1000 10000000 1.0102939999999307 1.878056000000015 1.0651010000001406 1.2414602000000285 +difference_update_tiny SortedSet_1000 100 2.300000005561742e-05 2.9000000040468876e-05 2.300000005561742e-05 2.4400000029345392e-05 +difference_update_tiny SortedSet_1000 1000 2.499999982319423e-05 2.6000000161729986e-05 2.599999993435631e-05 2.5600000026315683e-05 +difference_update_tiny SortedSet_1000 10000 2.599999993435631e-05 2.9000000040468876e-05 2.7999999929306796e-05 2.7600000021266168e-05 +difference_update_tiny SortedSet_1000 100000 3.999999989900971e-05 4.399999988891068e-05 4.100000001017179e-05 4.179999996267725e-05 +difference_update_tiny SortedSet_1000 1000000 4.9999999873762135e-05 5.29999999798747e-05 5.000000010113581e-05 5.120000000715663e-05 +difference_update_tiny SortedSet_1000 10000000 6.100000018705032e-05 7.100000016180275e-05 6.299999995462713e-05 6.48000000637694e-05 +difference_update_small SortedSet_1000 100 2.2999999828243745e-05 2.5000000050567905e-05 2.40000001667795e-05 2.399999998488056e-05 +difference_update_small SortedSet_1000 1000 0.0001979999999548454 0.00022800000010647636 0.0001999999999497959 0.0002050000000053842 +difference_update_small SortedSet_1000 10000 0.0020050000000537693 0.002246000000013737 0.00201599999991231 0.0020665999999891936 +difference_update_small SortedSet_1000 100000 0.02126799999996365 0.021952999999939493 0.02145199999995384 0.02152119999996103 +difference_update_small SortedSet_1000 1000000 0.22062499999992724 0.22282499999982974 0.22134400000004462 0.2216129999999339 +difference_update_small SortedSet_1000 10000000 2.2888580000001184 2.2971370000000206 2.2940360000000055 2.293543800000043 +difference_update_medium SortedSet_1000 100 9.999999974752427e-06 1.2000000197076588e-05 1.0999999858540832e-05 1.0999999994965038e-05 +difference_update_medium SortedSet_1000 1000 4.899999998997373e-05 5.000000010113581e-05 4.899999998997373e-05 4.920000001220615e-05 +difference_update_medium SortedSet_1000 10000 0.00037599999996018596 0.0004959999998845888 0.00037700000007134804 0.0004009999999652791 +difference_update_medium SortedSet_1000 100000 0.004185999999890555 0.004470999999966807 0.004202000000077533 0.004258199999958379 +difference_update_medium SortedSet_1000 1000000 0.05599800000004507 0.05954399999995985 0.056493999999929656 0.057035399999995205 +difference_update_medium SortedSet_1000 10000000 0.7597250000001168 0.8606079999999565 0.8352429999999913 0.8136916000000383 +difference_update_large SortedSet_1000 100 1.3999999964653398e-05 1.5000000075815478e-05 1.3999999964653398e-05 1.4399999963643495e-05 +difference_update_large SortedSet_1000 1000 5.999999984851456e-05 6.200000007083872e-05 6.100000018705032e-05 6.1000000050626114e-05 +difference_update_large SortedSet_1000 10000 0.0005409999998846615 0.0005759999999099819 0.0005430000001069857 0.0005524000000150409 +difference_update_large SortedSet_1000 100000 0.006806000000096901 0.006986000000097192 0.006889000000001033 0.006888800000024275 +difference_update_large SortedSet_1000 1000000 0.08425799999986339 0.08910600000012892 0.0849719999998797 0.08557080000000497 +difference_update_large SortedSet_1000 10000000 1.1444739999999456 1.3207609999999477 1.1729740000000675 1.2170294000000013 +intersection_tiny SortedSet_1000 100 1.1000000085914508e-05 1.3000000080864993e-05 1.1999999969702912e-05 1.1800000038419967e-05 +intersection_tiny SortedSet_1000 1000 1.3000000080864993e-05 1.4000000192027073e-05 1.3999999964653398e-05 1.3800000033370452e-05 +intersection_tiny SortedSet_1000 10000 1.4999999848441803e-05 1.5999999959603883e-05 1.5999999959603883e-05 1.5599999960613788e-05 +intersection_tiny SortedSet_1000 100000 3.100000003541936e-05 3.500000002532033e-05 3.400000014153193e-05 3.380000002835004e-05 +intersection_tiny SortedSet_1000 1000000 4.500000000007276e-05 4.5999999883861165e-05 4.500000000007276e-05 4.519999997683044e-05 +intersection_tiny SortedSet_1000 10000000 5.699999996977567e-05 6.000000007588824e-05 5.700000019714935e-05 5.7800000058705335e-05 +intersection_small SortedSet_1000 100 1.1000000085914508e-05 1.2999999853491317e-05 1.1999999969702912e-05 1.1999999969702912e-05 +intersection_small SortedSet_1000 1000 2.300000005561742e-05 2.999999992425728e-05 2.89999998130952e-05 2.779999999802385e-05 +intersection_small SortedSet_1000 10000 8.200000002034358e-05 8.300000013150566e-05 8.299999990413198e-05 8.259999999609136e-05 +intersection_small SortedSet_1000 100000 0.0007699999998749263 0.000831999999945765 0.0007770000001983135 0.0007897999999840977 +intersection_small SortedSet_1000 1000000 0.009340999999949418 0.009685999999874184 0.009422999999969761 0.009465399999953661 +intersection_small SortedSet_1000 10000000 0.12269199999991542 0.12711399999989226 0.12316800000007788 0.12388380000002144 +intersection_medium SortedSet_1000 100 1.3000000080864993e-05 1.799999995455437e-05 1.3999999964653398e-05 1.5200000007098424e-05 +intersection_medium SortedSet_1000 1000 4.899999998997373e-05 6.999999982326699e-05 5.499999997482519e-05 5.719999999200809e-05 +intersection_medium SortedSet_1000 10000 0.00035000000002582965 0.0003580000000056316 0.0003540000000157306 0.0003532000000177504 +intersection_medium SortedSet_1000 100000 0.003912000000127591 0.003952999999910389 0.0039289999999709835 0.0039302000000134285 +intersection_medium SortedSet_1000 1000000 0.05068699999992532 0.053140999999868654 0.0511429999999109 0.051566199999933816 +intersection_medium SortedSet_1000 10000000 0.7353849999999511 0.8349430000000666 0.7706089999999222 0.7857059999999819 +intersection_large SortedSet_1000 100 1.3999999964653398e-05 1.5000000075815478e-05 1.3999999964653398e-05 1.440000000911823e-05 +intersection_large SortedSet_1000 1000 6.30000001820008e-05 6.60000000607397e-05 6.400000006578921e-05 6.440000006477931e-05 +intersection_large SortedSet_1000 10000 0.00044300000013208773 0.0004919999998946878 0.0004480000000057771 0.0004609999999956926 +intersection_large SortedSet_1000 100000 0.004638999999997395 0.005069999999932406 0.004930999999942287 0.0049185999999735944 +intersection_large SortedSet_1000 1000000 0.060963000000128886 0.06690699999990102 0.06145800000012969 0.06250439999998889 +intersection_large SortedSet_1000 10000000 0.7770120000000134 0.9317419999999856 0.8018020000001798 0.8413954000000103 +intersection_update_tiny SortedSet_1000 100 6.999999868639861e-06 9.000000090964022e-06 7.999999979801942e-06 7.799999957569526e-06 +intersection_update_tiny SortedSet_1000 1000 1.1000000085914508e-05 1.1999999969702912e-05 1.1999999969702912e-05 1.160000001618755e-05 +intersection_update_tiny SortedSet_1000 10000 3.90000000152213e-05 4.0000000126383384e-05 3.999999989900971e-05 3.9600000036443816e-05 +intersection_update_tiny SortedSet_1000 100000 0.0003600000000005821 0.00041100000021287997 0.0003780000001825101 0.00038540000005014006 +intersection_update_tiny SortedSet_1000 1000000 0.0068979999998646235 0.008288999999876978 0.00768700000003264 0.007551399999965724 +intersection_update_tiny SortedSet_1000 10000000 0.11160399999994297 0.12298499999997148 0.1144720000002053 0.11541160000001582 +intersection_update_small SortedSet_1000 100 7.000000096013537e-06 3.90000000152213e-05 9.000000090964022e-06 1.780000006874616e-05 +intersection_update_small SortedSet_1000 1000 1.900000006571645e-05 1.9999999949504854e-05 1.900000006571645e-05 1.9400000019231813e-05 +intersection_update_small SortedSet_1000 10000 9.799999997994746e-05 0.00010099999985868635 9.999999997489795e-05 9.959999993043311e-05 +intersection_update_small SortedSet_1000 100000 0.0010039999999662541 0.0010729999999057327 0.0010559999998349667 0.001048599999921862 +intersection_update_small SortedSet_1000 1000000 0.014825000000200816 0.015969999999924767 0.015327000000070257 0.015304400000059105 +intersection_update_small SortedSet_1000 10000000 0.21406100000012884 0.23824400000012247 0.22056599999996251 0.22341760000003888 +intersection_update_medium SortedSet_1000 100 9.000000090964022e-06 1.0000000202126103e-05 9.999999974752427e-06 9.800000043469481e-06 +intersection_update_medium SortedSet_1000 1000 4.3000000005122274e-05 4.399999988891068e-05 4.399999988891068e-05 4.3599999935395316e-05 +intersection_update_medium SortedSet_1000 10000 0.00033699999994496466 0.00036300000010669464 0.00033800000005612674 0.0003430000000207656 +intersection_update_medium SortedSet_1000 100000 0.0036290000000462896 0.003940999999940686 0.0037170000000514847 0.0037596000000121423 +intersection_update_medium SortedSet_1000 1000000 0.05258400000002439 0.05604100000005019 0.05281599999989339 0.05388299999999617 +intersection_update_medium SortedSet_1000 10000000 0.6901210000000901 0.747532000000092 0.6982270000000881 0.7140828000000511 +intersection_update_large SortedSet_1000 100 9.000000090964022e-06 1.1999999969702912e-05 1.1000000085914508e-05 1.0600000041449676e-05 +intersection_update_large SortedSet_1000 1000 5.0999999984924216e-05 6.299999995462713e-05 5.2000000096086296e-05 5.420000002231973e-05 +intersection_update_large SortedSet_1000 10000 0.00041999999984909664 0.00044000000002597517 0.0004209999999602587 0.00042539999994914977 +intersection_update_large SortedSet_1000 100000 0.004421999999976833 0.004725999999891428 0.004490999999916312 0.004514999999946668 +intersection_update_large SortedSet_1000 1000000 0.06048499999997148 0.06314999999995052 0.06225500000005013 0.061839799999961545 +intersection_update_large SortedSet_1000 10000000 0.7826880000000074 0.8392289999999321 0.8072899999999663 0.8109311999999591 +symmetric_difference_tiny SortedSet_1000 100 1.5999999959603883e-05 1.900000006571645e-05 1.5999999959603883e-05 1.6800000003058814e-05 +symmetric_difference_tiny SortedSet_1000 1000 4.8000000106185325e-05 5.499999997482519e-05 4.9999999873762135e-05 5.0400000009176435e-05 +symmetric_difference_tiny SortedSet_1000 10000 0.0004200000000764703 0.0004460000000108266 0.00042899999994006066 0.0004306000000269705 +symmetric_difference_tiny SortedSet_1000 100000 0.00462599999991653 0.004838999999947191 0.0046950000000833825 0.004735399999981382 +symmetric_difference_tiny SortedSet_1000 1000000 0.07371899999998277 0.07698300000015479 0.07526099999995495 0.0751278000000184 +symmetric_difference_tiny SortedSet_1000 10000000 1.1954839999998512 1.2361440000004222 1.2080320000000029 1.2116870000000746 +symmetric_difference_small SortedSet_1000 100 1.5999999959603883e-05 1.9999999949504854e-05 1.7999999727180693e-05 1.75999998646148e-05 +symmetric_difference_small SortedSet_1000 1000 5.999999984851456e-05 6.500000017695129e-05 6.200000007083872e-05 6.200000007083872e-05 +symmetric_difference_small SortedSet_1000 10000 0.00041800000008151983 0.0004490000001169392 0.000420000000303844 0.0004268000001502514 +symmetric_difference_small SortedSet_1000 100000 0.004840999999942142 0.005179000000225642 0.005078000000139582 0.0050158000000010364 +symmetric_difference_small SortedSet_1000 1000000 0.08519499999965774 0.08725800000001982 0.08583600000019942 0.08597460000000864 +symmetric_difference_small SortedSet_1000 10000000 1.2153370000000905 1.9761779999998907 1.25301300000001 1.3914862000000539 +symmetric_difference_medium SortedSet_1000 100 1.699999984339229e-05 1.7999999727180693e-05 1.7999999727180693e-05 1.759999977366533e-05 +symmetric_difference_medium SortedSet_1000 1000 5.800000008093775e-05 6.199999961609137e-05 5.800000008093775e-05 5.940000000919099e-05 +symmetric_difference_medium SortedSet_1000 10000 0.0005139999998391431 0.0005190000001675799 0.0005159999996067199 0.0005159999999705178 +symmetric_difference_medium SortedSet_1000 100000 0.005384000000049127 0.005526000000372733 0.005493999999998778 0.005473800000072515 +symmetric_difference_medium SortedSet_1000 1000000 0.06823399999984758 0.0737040000003617 0.06939200000033452 0.07000020000014047 +symmetric_difference_medium SortedSet_1000 10000000 1.036366000000271 1.1948809999998957 1.1179440000000795 1.1246992000000318 +symmetric_difference_large SortedSet_1000 100 1.699999984339229e-05 1.8000000181928044e-05 1.700000029813964e-05 1.740000016070553e-05 +symmetric_difference_large SortedSet_1000 1000 9.000000000014552e-05 0.00013199999966673204 9.199999976772233e-05 0.00010139999985767645 +symmetric_difference_large SortedSet_1000 10000 0.000665000000026339 0.0006720000001223525 0.0006720000001223525 0.0006700000000819273 +symmetric_difference_large SortedSet_1000 100000 0.007156000000122731 0.009016999999857944 0.007159000000228843 0.007616200000029494 +symmetric_difference_large SortedSet_1000 1000000 0.1372559999999794 0.15052400000013222 0.13908900000024005 0.14114660000004733 +symmetric_difference_large SortedSet_1000 10000000 1.9336840000000848 1.9864509999997608 1.9676019999997152 1.9664919999999255 +symmetric_difference_update_tiny SortedSet_1000 100 9.999999747378752e-06 1.1000000085914508e-05 1.0000000202126103e-05 1.0399999973742525e-05 +symmetric_difference_update_tiny SortedSet_1000 1000 2.9999999696883606e-05 3.100000003541936e-05 3.0000000151630957e-05 3.0200000037439167e-05 +symmetric_difference_update_tiny SortedSet_1000 10000 0.00023499999997511622 0.0002389999999650172 0.00023599999985890463 0.00023639999999431894 +symmetric_difference_update_tiny SortedSet_1000 100000 0.0023649999998269777 0.0024670000002515735 0.002369000000271626 0.0023970000001099835 +symmetric_difference_update_tiny SortedSet_1000 1000000 0.036939000000074884 0.03847399999995105 0.038056000000324275 0.03775920000007318 +symmetric_difference_update_tiny SortedSet_1000 10000000 0.5768920000000435 1.193051999999625 0.5996839999997974 0.7141043999998147 +symmetric_difference_update_small SortedSet_1000 100 8.999999863590347e-06 1.1000000085914508e-05 1.0000000202126103e-05 1.0200000087934313e-05 +symmetric_difference_update_small SortedSet_1000 1000 3.699999979289714e-05 3.80000001314329e-05 3.700000024764449e-05 3.7200000042503235e-05 +symmetric_difference_update_small SortedSet_1000 10000 0.00026499999967199983 0.00028199999997013947 0.0002710000003389723 0.0002723999999943771 +symmetric_difference_update_small SortedSet_1000 100000 0.002719000000070082 0.003026999999747204 0.0027219999997214472 0.002803799999946932 +symmetric_difference_update_small SortedSet_1000 1000000 0.04272999999966487 0.04931799999985742 0.043207999999594904 0.04456919999984166 +symmetric_difference_update_small SortedSet_1000 10000000 0.5878160000002026 0.6956800000002659 0.6153010000002723 0.6296918000000915 +symmetric_difference_update_medium SortedSet_1000 100 9.999999747378752e-06 1.1999999969702912e-05 1.0000000202126103e-05 1.0600000041449676e-05 +symmetric_difference_update_medium SortedSet_1000 1000 4.6999999995023245e-05 5.0999999984924216e-05 5.000000010113581e-05 4.920000001220615e-05 +symmetric_difference_update_medium SortedSet_1000 10000 0.0003739999997378618 0.0004739999999401334 0.00037699999984397436 0.0003963999998632062 +symmetric_difference_update_medium SortedSet_1000 100000 0.004372000000330445 0.004657999999835738 0.004398999999921216 0.004460399999970832 +symmetric_difference_update_medium SortedSet_1000 1000000 0.05505899999980102 0.0562049999998635 0.05542100000002392 0.05550459999994928 +symmetric_difference_update_medium SortedSet_1000 10000000 0.7188270000001467 1.29882600000019 0.7674229999997806 0.8695404000000962 +symmetric_difference_update_large SortedSet_1000 100 1.2999999853491317e-05 1.4000000192027073e-05 1.2999999853491317e-05 1.3200000012147939e-05 +symmetric_difference_update_large SortedSet_1000 1000 7.400000004054164e-05 8.099999968180782e-05 7.999999979801942e-05 7.88000000284228e-05 +symmetric_difference_update_large SortedSet_1000 10000 0.0006149999999252032 0.0006669999997939158 0.0006210000001374283 0.0006317999998827872 +symmetric_difference_update_large SortedSet_1000 100000 0.007664000000204396 0.00786100000004808 0.007684000000153901 0.007718600000043807 +symmetric_difference_update_large SortedSet_1000 1000000 0.11269499999980326 0.11522000000013577 0.11406999999962864 0.1140293999998903 +symmetric_difference_update_large SortedSet_1000 10000000 1.2975850000002538 1.4008590000003096 1.3303270000001248 1.349283000000105 +pop SortedSet_1000 100 3.999999989900971e-06 4.999999873689376e-06 4.999999873689376e-06 4.599999920174014e-06 +pop SortedSet_1000 1000 1.7999999727180693e-05 1.9999999949504854e-05 1.8000000181928044e-05 1.8600000021251618e-05 +pop SortedSet_1000 10000 0.0001449999999749707 0.00015100000018719584 0.0001459999998587591 0.00014679999994768878 +pop SortedSet_1000 100000 0.00143900000011854 0.0015450000000782893 0.0014489999998659187 0.0014766000001145585 +pop SortedSet_1000 1000000 0.014768999999887455 0.015429000000040105 0.015001000000211206 0.015078999999968801 +pop SortedSet_1000 10000000 0.1483080000002701 0.15380199999981414 0.14882699999998295 0.15019540000002962 +init SortedSet_1000 100 1.1999999969702912e-05 1.5999999959603883e-05 1.3000000308238668e-05 1.360000005661277e-05 +init SortedSet_1000 1000 5.0999999984924216e-05 6.200000007083872e-05 5.400000009103678e-05 5.500000006577466e-05 +init SortedSet_1000 10000 0.0005619999997179548 0.0007339999997384439 0.0006079999998291896 0.0006165999999211636 +init SortedSet_1000 100000 0.006863000000066677 0.007288999999673251 0.007087999999839667 0.007106599999860919 +init SortedSet_1000 1000000 0.14061899999978777 0.527552999999898 0.14241100000026563 0.21896719999995184 +init SortedSet_1000 10000000 2.915535000000091 3.0799090000000433 2.994673000000148 2.9933216000000358 +contains SortedSet_10000 100 1.999999998503199e-06 2.9999999995311555e-06 2.000000000279556e-06 2.1999999997746046e-06 +contains SortedSet_10000 1000 2.9999999995311555e-06 4.999999999810711e-06 3.0000000013075123e-06 3.6000000001479295e-06 +contains SortedSet_10000 10000 1.799999999896329e-05 2.0000000001019203e-05 1.8999999999991246e-05 1.8999999999991246e-05 +contains SortedSet_10000 100000 0.00023200000000045407 0.000256000000000256 0.00025399999999997647 0.0002500000000001279 +contains SortedSet_10000 1000000 0.0031280000000002417 0.0037400000000005207 0.0034309999999990737 0.003434999999999988 +contains SortedSet_10000 10000000 0.05155899999999747 0.05881099999999151 0.05559300000000178 0.05478079999999892 +iter SortedSet_10000 100 1.0000000003174137e-05 1.2999999995599865e-05 1.100000000064938e-05 1.1200000000144427e-05 +iter SortedSet_10000 1000 9.1999999995096e-05 9.30000000067821e-05 9.200000000930686e-05 9.220000000311756e-05 +iter SortedSet_10000 10000 0.0009090000000071541 0.001022999999989338 0.0009119999999995798 0.0009427999999957138 +iter SortedSet_10000 100000 0.009152999999997746 0.00950399999999263 0.009215999999995006 0.009268599999995786 +iter SortedSet_10000 1000000 0.09147300000000769 0.09308699999999703 0.09179399999999305 0.09216179999999667 +iter SortedSet_10000 10000000 0.9176700000000153 0.9287270000000092 0.9243150000000071 0.9235622000000063 +add SortedSet_10000 100 3.999999989900971e-06 6.000000013273166e-06 5.000000015797923e-06 5.199999998239946e-06 +add SortedSet_10000 1000 2.7999999986150215e-05 3.699999999184911e-05 3.000000000952241e-05 3.0999999995628966e-05 +add SortedSet_10000 10000 0.0005349999999850752 0.0005900000000167438 0.0005360000000109721 0.0005468000000007578 +add SortedSet_10000 100000 0.0055310000000190485 0.005591000000009672 0.005539000000027272 0.005546600000013768 +add SortedSet_10000 1000000 0.06586599999999976 0.0669030000000248 0.06612200000000712 0.06621880000000716 +add SortedSet_10000 10000000 0.5399690000000135 0.5470830000000149 0.5426080000000013 0.5431186000000026 +update_tiny SortedSet_10000 100 1.6999999985500835e-05 1.900000000887303e-05 1.8000000011397788e-05 1.8199999999524152e-05 +update_tiny SortedSet_10000 1000 1.9999999977926564e-05 2.1000000003823516e-05 2.0000000006348273e-05 2.020000000015898e-05 +update_tiny SortedSet_10000 10000 2.0000000006348273e-05 2.199999997287705e-05 2.1000000003823516e-05 2.0999999998139172e-05 +update_tiny SortedSet_10000 100000 3.300000000194814e-05 3.700000002027082e-05 3.399999999942338e-05 3.440000000409782e-05 +update_tiny SortedSet_10000 1000000 3.9999999984274837e-05 4.200000000764703e-05 4.100000001017179e-05 4.09999999988031e-05 +update_tiny SortedSet_10000 10000000 5.1000000041767635e-05 0.00010199999999827014 5.5000000031668606e-05 6.32000000109656e-05 +update_small SortedSet_10000 100 2.3999999996249244e-05 2.599999999119973e-05 2.4999999993724487e-05 2.4999999993724487e-05 +update_small SortedSet_10000 1000 0.00015200000001414082 0.0001560000000040418 0.0001540000000090913 0.00015420000000858635 +update_small SortedSet_10000 10000 0.001564000000030319 0.001645999999993819 0.0015689999999608517 0.001583600000003571 +update_small SortedSet_10000 100000 0.014803000000028987 0.015065999999990254 0.014988999999957286 0.014958799999999429 +update_small SortedSet_10000 1000000 0.3463509999999701 0.34729700000002595 0.3467090000000326 0.34678940000001146 +update_small SortedSet_10000 10000000 3.56885699999998 3.5923819999999864 3.5777550000000247 3.5788653999999953 +update_medium SortedSet_10000 100 1.1000000029071089e-05 1.4000000021496817e-05 1.2000000026546331e-05 1.220000002604138e-05 +update_medium SortedSet_10000 1000 6.400000000894579e-05 6.500000000642103e-05 6.400000000894579e-05 6.420000000844084e-05 +update_medium SortedSet_10000 10000 0.0004890000000159489 0.0005209999999920001 0.0004920000000083746 0.0004974000000061096 +update_medium SortedSet_10000 100000 0.0055040000000303735 0.005752999999970143 0.005593999999973676 0.005614599999989878 +update_medium SortedSet_10000 1000000 0.08837600000003931 0.0966980000000035 0.08989700000000767 0.09095080000001872 +update_medium SortedSet_10000 10000000 1.1117380000000026 1.1685759999999732 1.1280290000000264 1.138398399999994 +update_large SortedSet_10000 100 1.5999999959603883e-05 1.8000000011397788e-05 1.6000000016447302e-05 1.6400000004068715e-05 +update_large SortedSet_10000 1000 8.29999999609754e-05 8.899999994582686e-05 8.400000001529406e-05 8.499999999003193e-05 +update_large SortedSet_10000 10000 0.0007410000000049877 0.0007780000000252585 0.0007429999999999382 0.0007518000000118263 +update_large SortedSet_10000 100000 0.010431999999980235 0.011174000000039541 0.010487000000011903 0.010728400000004967 +update_large SortedSet_10000 1000000 0.12784799999997176 0.14193199999999706 0.12871400000000222 0.13357099999999492 +update_large SortedSet_10000 10000000 1.6458020000000033 1.717183000000034 1.6668249999999603 1.6753251999999974 +union_tiny SortedSet_10000 100 2.200000000129876e-05 2.599999999119973e-05 2.2999999998774e-05 2.3599999997259148e-05 +union_tiny SortedSet_10000 1000 6.400000000894579e-05 6.600000000389628e-05 6.500000000642103e-05 6.500000000642103e-05 +union_tiny SortedSet_10000 10000 0.0005350000000134969 0.0005569999999579522 0.0005370000000084474 0.0005409999999983484 +union_tiny SortedSet_10000 100000 0.005650000000002819 0.006065999999975702 0.005762000000004264 0.0058339999999930114 +union_tiny SortedSet_10000 1000000 0.1139800000000264 0.1156029999999646 0.1149780000000078 0.11494220000000724 +union_tiny SortedSet_10000 10000000 1.9518970000000309 2.787382999999977 2.035005999999953 2.1574031999999987 +union_small SortedSet_10000 100 2.199999994445534e-05 2.3999999939405825e-05 2.2000000058142177e-05 2.259999998841522e-05 +union_small SortedSet_10000 1000 7.100000004811591e-05 7.400000004054164e-05 7.299999992937956e-05 7.259999999860156e-05 +union_small SortedSet_10000 10000 0.0005869999999958964 0.000619000000028791 0.0005929999999807478 0.000596399999994901 +union_small SortedSet_10000 100000 0.006234999999946922 0.006399999999985084 0.006360999999969863 0.006333199999971839 +union_small SortedSet_10000 1000000 0.13709700000003977 0.15333299999997507 0.13988399999993817 0.1421233999999913 +union_small SortedSet_10000 10000000 1.870883000000049 3.0084170000000086 2.0985809999999674 2.2155456000000187 +union_medium SortedSet_10000 100 2.3999999939405825e-05 2.6000000048043148e-05 2.5000000050567905e-05 2.4800000005598122e-05 +union_medium SortedSet_10000 1000 0.00010699999995722465 0.00010999999994965037 0.00010799999995469989 0.0001081999999769323 +union_medium SortedSet_10000 10000 0.0007989999999153952 0.0008040000000164582 0.0008010000000240325 0.0008014000000002852 +union_medium SortedSet_10000 100000 0.010715000000004693 0.010820999999964442 0.010768999999982043 0.01076860000000579 +union_medium SortedSet_10000 1000000 0.20481099999994967 0.25818100000003597 0.20731399999999667 0.21876320000001215 +union_medium SortedSet_10000 10000000 2.67169100000001 4.101902999999993 3.113160999999991 3.2200078000000074 +union_large SortedSet_10000 100 2.5000000050567905e-05 2.8000000042993634e-05 2.599999993435631e-05 2.620000000206346e-05 +union_large SortedSet_10000 1000 0.00012900000001536682 0.00013200000000779255 0.00012900000001536682 0.00012980000001334703 +union_large SortedSet_10000 10000 0.0010470000000850632 0.0010979999999563006 0.0010679999999183565 0.0010679999999865686 +union_large SortedSet_10000 100000 0.015859999999975116 0.01669800000001942 0.01604900000006637 0.01611920000000282 +union_large SortedSet_10000 1000000 0.2477880000000141 0.27439800000001924 0.2512060000000247 0.25874840000003585 +union_large SortedSet_10000 10000000 4.0712630000000445 5.19996500000002 4.201906000000008 4.385471800000005 +remove SortedSet_10000 100 3.999999989900971e-06 6.000000098538294e-06 5.999999984851456e-06 5.400000009103678e-06 +remove SortedSet_10000 1000 2.3999999939405825e-05 2.5000000050567905e-05 2.4000000053092663e-05 2.4200000007112975e-05 +remove SortedSet_10000 10000 0.00029200000005857873 0.00030400000002828165 0.000293000000056054 0.00029540000004999454 +remove SortedSet_10000 100000 0.00342200000000048 0.0035200000000941145 0.003451000000040949 0.0034540000000106374 +remove SortedSet_10000 1000000 0.04405199999996512 0.04444699999999102 0.04422399999998561 0.044258199999967475 +remove SortedSet_10000 10000000 0.6430820000000494 0.6544649999999592 0.6500320000000102 0.6500798000000032 +difference_tiny SortedSet_10000 100 1.2999999967178155e-05 1.6999999957079126e-05 1.499999996212864e-05 1.4999999984866009e-05 +difference_tiny SortedSet_10000 1000 3.90000000152213e-05 4.100000001017179e-05 4.0000000012696546e-05 4.0199999989454224e-05 +difference_tiny SortedSet_10000 10000 0.0003079999999044958 0.0003609999999980573 0.0003150000000005093 0.000321799999983341 +difference_tiny SortedSet_10000 100000 0.003232999999909225 0.003573000000073989 0.0032690000000457076 0.0033255999999937556 +difference_tiny SortedSet_10000 1000000 0.07125799999994342 0.07802800000001753 0.07491400000003523 0.0742484000000104 +difference_tiny SortedSet_10000 10000000 1.2330769999999802 2.1557090000000017 1.3812219999999797 1.5101117999999816 +difference_small SortedSet_10000 100 1.3999999964653398e-05 1.600000007329072e-05 1.5000000075815478e-05 1.5000000030340743e-05 +difference_small SortedSet_10000 1000 4.0000000012696546e-05 6.199999995715189e-05 4.200000000764703e-05 4.579999999805295e-05 +difference_small SortedSet_10000 10000 0.00032299999998031126 0.00041499999997540726 0.0003309999999601132 0.00034499999997024134 +difference_small SortedSet_10000 100000 0.003359000000045853 0.0034490000000459986 0.003408000000035827 0.0034020000000055005 +difference_small SortedSet_10000 1000000 0.06938000000002376 0.07094200000005912 0.07049699999993209 0.07025459999999839 +difference_small SortedSet_10000 10000000 1.3518300000000636 2.161393999999973 1.3748190000000022 1.5365856000000122 +difference_medium SortedSet_10000 100 1.2999999853491317e-05 1.5999999959603883e-05 1.3999999964653398e-05 1.3999999919178662e-05 +difference_medium SortedSet_10000 1000 4.899999998997373e-05 4.9000000217347406e-05 4.899999998997373e-05 4.900000003544846e-05 +difference_medium SortedSet_10000 10000 0.00038500000005115 0.0005039999998643907 0.00038999999992483936 0.00041359999995620455 +difference_medium SortedSet_10000 100000 0.003936000000066997 0.004106000000092536 0.003989000000046872 0.004004200000099445 +difference_medium SortedSet_10000 1000000 0.04659400000014102 0.047240999999985434 0.0467670000000453 0.046831600000041364 +difference_medium SortedSet_10000 10000000 0.9236069999999472 1.2383829999998852 1.2208960000000388 1.1118777999999565 +difference_large SortedSet_10000 100 1.3999999964653398e-05 1.7000000070765964e-05 1.4999999848441803e-05 1.5199999961623688e-05 +difference_large SortedSet_10000 1000 5.800000008093775e-05 6.000000007588824e-05 5.800000008093775e-05 5.860000005668553e-05 +difference_large SortedSet_10000 10000 0.0004789999998138228 0.0004890000000159489 0.00048300000003109744 0.0004825999999866326 +difference_large SortedSet_10000 100000 0.0048529999999118445 0.004985000000033324 0.0049539999999979045 0.004926999999997861 +difference_large SortedSet_10000 1000000 0.05676600000015242 0.06052999999997155 0.05711100000007718 0.05786580000003596 +difference_large SortedSet_10000 10000000 1.0150569999998424 1.3413419999999405 1.3247549999998682 1.209710399999949 +difference_update_tiny SortedSet_10000 100 2.3999999939405825e-05 2.5000000050567905e-05 2.3999999939405825e-05 2.439999993839592e-05 +difference_update_tiny SortedSet_10000 1000 2.89999998130952e-05 3.0999999808045686e-05 2.9000000040468876e-05 2.9399999948509504e-05 +difference_update_tiny SortedSet_10000 10000 3.599999990910874e-05 3.80000001314329e-05 3.700000002027082e-05 3.6999999974796086e-05 +difference_update_tiny SortedSet_10000 100000 6.099999995967664e-05 6.499999994957761e-05 6.299999995462713e-05 6.259999995563703e-05 +difference_update_tiny SortedSet_10000 1000000 7.000000005064066e-05 7.80000000304426e-05 7.500000015170372e-05 7.520000003751193e-05 +difference_update_tiny SortedSet_10000 10000000 8.600000001024455e-05 0.00012300000003051537 9.000000000014552e-05 9.7200000027442e-05 +difference_update_small SortedSet_10000 100 2.3999999939405825e-05 2.40000001667795e-05 2.40000001667795e-05 2.400000007583003e-05 +difference_update_small SortedSet_10000 1000 0.0002110000000357104 0.00021599999990939978 0.00021300000003066089 0.00021299999998518614 +difference_update_small SortedSet_10000 10000 0.002772999999933745 0.0028839999999945576 0.0028250000000298314 0.002825799999936862 +difference_update_small SortedSet_10000 100000 0.029793999999810694 0.030148999999937587 0.02984399999991183 0.029917599999907906 +difference_update_small SortedSet_10000 1000000 0.31006299999990006 0.3144279999999071 0.3127560000000358 0.31236479999997757 +difference_update_small SortedSet_10000 10000000 3.1761629999998604 3.197454000000107 3.184545999999955 3.1874213999999936 +difference_update_medium SortedSet_10000 100 1.3999999964653398e-05 1.5000000075815478e-05 1.3999999964653398e-05 1.4199999986885814e-05 +difference_update_medium SortedSet_10000 1000 4.799999987881165e-05 5.0999999984924216e-05 4.899999998997373e-05 4.919999996673141e-05 +difference_update_medium SortedSet_10000 10000 0.0003739999999652355 0.0003819999999450374 0.00037700000007134804 0.0003770000000258733 +difference_update_medium SortedSet_10000 100000 0.004534999999805223 0.00489400000014939 0.004644000000098458 0.004677799999990384 +difference_update_medium SortedSet_10000 1000000 0.05621700000006058 0.05755999999996675 0.056844999999839274 0.05689179999994849 +difference_update_medium SortedSet_10000 10000000 0.6602620000001025 0.7224529999998595 0.664935000000014 0.6755533999999443 +difference_update_large SortedSet_10000 100 1.0999999858540832e-05 1.3000000080864993e-05 1.1999999969702912e-05 1.2199999946460594e-05 +difference_update_large SortedSet_10000 1000 6.000000007588824e-05 6.200000007083872e-05 6.099999995967664e-05 6.1000000005151375e-05 +difference_update_large SortedSet_10000 10000 0.000546999999869513 0.0007379999999557185 0.0005830000000059954 0.0005998000000090542 +difference_update_large SortedSet_10000 100000 0.006969000000026426 0.007323000000042157 0.006987999999864769 0.007058999999981097 +difference_update_large SortedSet_10000 1000000 0.08489200000008168 0.08743100000015147 0.08635800000001836 0.08642500000000837 +difference_update_large SortedSet_10000 10000000 1.0457840000001397 1.0891630000000987 1.0808959999999388 1.0700380000000222 +intersection_tiny SortedSet_10000 100 1.0999999858540832e-05 1.2000000197076588e-05 1.1000000085914508e-05 1.140000003942987e-05 +intersection_tiny SortedSet_10000 1000 1.3000000080864993e-05 1.799999995455437e-05 1.699999984339229e-05 1.57999999828462e-05 +intersection_tiny SortedSet_10000 10000 1.4999999848441803e-05 1.5000000075815478e-05 1.4999999848441803e-05 1.4999999939391273e-05 +intersection_tiny SortedSet_10000 100000 3.100000003541936e-05 3.599999990910874e-05 3.399999991415825e-05 3.360000000611763e-05 +intersection_tiny SortedSet_10000 1000000 3.90000000152213e-05 4.6999999995023245e-05 4.500000000007276e-05 4.420000000209257e-05 +intersection_tiny SortedSet_10000 10000000 5.400000009103678e-05 5.899999996472616e-05 5.800000008093775e-05 5.740000001424051e-05 +intersection_small SortedSet_10000 100 1.0999999858540832e-05 1.3000000080864993e-05 1.1999999969702912e-05 1.2199999991935328e-05 +intersection_small SortedSet_10000 1000 2.099999983329326e-05 2.199999994445534e-05 2.199999994445534e-05 2.1599999899990508e-05 +intersection_small SortedSet_10000 10000 8.09999999091815e-05 8.499999989908247e-05 8.299999990413198e-05 8.279999997284904e-05 +intersection_small SortedSet_10000 100000 0.0007549999997991108 0.0007860000000619038 0.0007630000000062864 0.0007661999999982072 +intersection_small SortedSet_10000 1000000 0.00955100000010134 0.010111999999935506 0.009658999999828666 0.00971319999998741 +intersection_small SortedSet_10000 10000000 0.1376839999998083 0.295470000000023 0.1393190000001141 0.17151960000001054 +intersection_medium SortedSet_10000 100 1.3000000080864993e-05 1.4999999848441803e-05 1.3999999964653398e-05 1.3800000033370452e-05 +intersection_medium SortedSet_10000 1000 4.899999998997373e-05 5.000000010113581e-05 4.899999998997373e-05 4.9399999988963826e-05 +intersection_medium SortedSet_10000 10000 0.00034800000003087916 0.0003540000000157306 0.00035000000002582965 0.00035080000002380985 +intersection_medium SortedSet_10000 100000 0.004092000000127882 0.004166999999824839 0.004102999999986423 0.004114999999956126 +intersection_medium SortedSet_10000 1000000 0.05319099999996979 0.05738600000017868 0.05349100000012186 0.05429940000003626 +intersection_medium SortedSet_10000 10000000 0.7100299999999606 0.9916269999998804 0.9614719999999579 0.8702823999999965 +intersection_large SortedSet_10000 100 1.3999999964653398e-05 1.5999999959603883e-05 1.5000000075815478e-05 1.4999999984866009e-05 +intersection_large SortedSet_10000 1000 5.699999996977567e-05 5.900000019209983e-05 5.800000008093775e-05 5.82000000122207e-05 +intersection_large SortedSet_10000 10000 0.0004350000001522858 0.00045999999997548 0.0004389999999148131 0.00044240000001991573 +intersection_large SortedSet_10000 100000 0.004990000000134387 0.005225999999993292 0.0050369999999020365 0.005072999999993044 +intersection_large SortedSet_10000 1000000 0.06056499999999687 0.06179100000008475 0.06119599999988168 0.06110020000000986 +intersection_large SortedSet_10000 10000000 0.7882110000000466 1.06641999999988 1.0505570000000262 0.9580608000000211 +intersection_update_tiny SortedSet_10000 100 7.999999979801942e-06 9.999999974752427e-06 9.000000090964022e-06 9.000000045489286e-06 +intersection_update_tiny SortedSet_10000 1000 1.3000000080864993e-05 1.5000000075815478e-05 1.3000000080864993e-05 1.360000005661277e-05 +intersection_update_tiny SortedSet_10000 10000 3.80000001314329e-05 4.1999999893960194e-05 3.90000000152213e-05 3.94000000142114e-05 +intersection_update_tiny SortedSet_10000 100000 0.0003420000000460277 0.0003570000001218432 0.0003440000000409782 0.0003460000000814034 +intersection_update_tiny SortedSet_10000 1000000 0.006757999999990716 0.00743600000009792 0.006902999999965687 0.007074599999987186 +intersection_update_tiny SortedSet_10000 10000000 0.11171600000011495 0.11499699999990298 0.11299699999995028 0.11315059999997175 +intersection_update_small SortedSet_10000 100 7.999999979801942e-06 9.000000090964022e-06 8.999999863590347e-06 8.600000001024455e-06 +intersection_update_small SortedSet_10000 1000 2.099999983329326e-05 2.3999999939405825e-05 2.2000000171829015e-05 2.239999998892017e-05 +intersection_update_small SortedSet_10000 10000 9.899999986373587e-05 0.00011700000004566391 0.00010300000008101051 0.00010460000003149616 +intersection_update_small SortedSet_10000 100000 0.0010270000000218715 0.0011150000000270666 0.001050000000077489 0.0010584000000108062 +intersection_update_small SortedSet_10000 1000000 0.015082000000120388 0.01565600000003542 0.015460000000075524 0.01539520000005723 +intersection_update_small SortedSet_10000 10000000 0.20878099999981714 0.23241999999982 0.20990699999993012 0.21461639999993168 +intersection_update_medium SortedSet_10000 100 9.999999974752427e-06 1.3000000080864993e-05 1.1000000085914508e-05 1.1200000017197453e-05 +intersection_update_medium SortedSet_10000 1000 4.3000000005122274e-05 5.2000000096086296e-05 4.4000000116284355e-05 4.5400000044537594e-05 +intersection_update_medium SortedSet_10000 10000 0.00033699999994496466 0.00044400000001587614 0.0003440000000409782 0.0003635999999460182 +intersection_update_medium SortedSet_10000 100000 0.00415900000007241 0.004363999999895896 0.00422500000013315 0.004234000000042215 +intersection_update_medium SortedSet_10000 1000000 0.051632999999810636 0.05337399999984882 0.051893000000063694 0.05214839999989636 +intersection_update_medium SortedSet_10000 10000000 0.6396010000000842 0.6909319999999752 0.6496709999998984 0.65995640000001 +intersection_update_large SortedSet_10000 100 8.999999863590347e-06 1.1000000085914508e-05 9.999999974752427e-06 9.999999974752427e-06 +intersection_update_large SortedSet_10000 1000 5.0999999984924216e-05 5.400000009103678e-05 5.29999999798747e-05 5.240000004960166e-05 +intersection_update_large SortedSet_10000 10000 0.00041999999984909664 0.0005529999998543644 0.0004220000000714208 0.00044799999996030236 +intersection_update_large SortedSet_10000 100000 0.004903999999896769 0.005241000000069107 0.00497799999993731 0.005034800000021278 +intersection_update_large SortedSet_10000 1000000 0.062376000000085696 0.0663560000000416 0.06288900000004105 0.06411259999999856 +intersection_update_large SortedSet_10000 10000000 0.7225980000000618 0.745967999999948 0.7270809999999983 0.7325122000000193 +symmetric_difference_tiny SortedSet_10000 100 1.4999999848441803e-05 1.799999995455437e-05 1.5999999959603883e-05 1.639999995859398e-05 +symmetric_difference_tiny SortedSet_10000 1000 4.799999987881165e-05 4.9000000217347406e-05 4.899999998997373e-05 4.8599999990983635e-05 +symmetric_difference_tiny SortedSet_10000 10000 0.0004200000000764703 0.0005530000000817381 0.0004349999999249121 0.00045580000000882136 +symmetric_difference_tiny SortedSet_10000 100000 0.0046950000000833825 0.005298000000038883 0.004818999999997686 0.004881999999997788 +symmetric_difference_tiny SortedSet_10000 1000000 0.08509400000002643 0.09521699999982047 0.08624900000017988 0.08901900000000751 +symmetric_difference_tiny SortedSet_10000 10000000 1.2370719999998983 1.4821059999999306 1.3492499999999836 1.3615687999999408 +symmetric_difference_small SortedSet_10000 100 1.5999999959603883e-05 1.900000006571645e-05 1.699999984339229e-05 1.7199999911099438e-05 +symmetric_difference_small SortedSet_10000 1000 6.100000018705032e-05 7.70000001466542e-05 7.300000015675323e-05 6.960000009712531e-05 +symmetric_difference_small SortedSet_10000 10000 0.0004349999999249121 0.0004619999999704305 0.00044299999990471406 0.0004443999999239168 +symmetric_difference_small SortedSet_10000 100000 0.00486799999998766 0.005590999999640189 0.0051419999999779975 0.005148000000008324 +symmetric_difference_small SortedSet_10000 1000000 0.09847900000022491 0.1033900000002177 0.09976899999992384 0.10016100000011648 +symmetric_difference_small SortedSet_10000 10000000 1.3993149999996604 1.4530819999999949 1.435563000000002 1.4315849999998136 +symmetric_difference_medium SortedSet_10000 100 1.3999999737279722e-05 1.700000029813964e-05 1.5000000075815478e-05 1.540000002933084e-05 +symmetric_difference_medium SortedSet_10000 1000 5.79999996261904e-05 5.999999984851456e-05 5.800000008093775e-05 5.879999989701901e-05 +symmetric_difference_medium SortedSet_10000 10000 0.0005129999999553547 0.0005180000002837915 0.0005139999998391431 0.0005149999999957799 +symmetric_difference_medium SortedSet_10000 100000 0.0053699999998571 0.005525000000034197 0.0054129999998622225 0.005426399999942077 +symmetric_difference_medium SortedSet_10000 1000000 0.06832500000018626 0.07054799999968964 0.06971999999996115 0.06956860000000234 +symmetric_difference_medium SortedSet_10000 10000000 1.0657969999997476 1.4635690000000068 1.3069760000003043 1.2606179999999767 +symmetric_difference_large SortedSet_10000 100 1.699999984339229e-05 1.8000000181928044e-05 1.700000029813964e-05 1.720000009299838e-05 +symmetric_difference_large SortedSet_10000 1000 9.099999988393392e-05 9.300000010625808e-05 9.200000022246968e-05 9.220000001732842e-05 +symmetric_difference_large SortedSet_10000 10000 0.0006889999999657448 0.0007430000000567816 0.0007040000000415603 0.0007079999999405117 +symmetric_difference_large SortedSet_10000 100000 0.007986999999957334 0.008139999999912106 0.008031000000300992 0.0080524000000878 +symmetric_difference_large SortedSet_10000 1000000 0.15056899999990492 0.1540460000001076 0.15233999999963999 0.15251839999991718 +symmetric_difference_large SortedSet_10000 10000000 2.0753669999999147 2.180981999999858 2.12284499999987 2.134760599999936 +symmetric_difference_update_tiny SortedSet_10000 100 9.000000318337698e-06 1.1000000085914508e-05 9.999999747378752e-06 1.0000000020227163e-05 +symmetric_difference_update_tiny SortedSet_10000 1000 3.0000000151630957e-05 3.299999980299617e-05 3.099999958067201e-05 3.099999994446989e-05 +symmetric_difference_update_tiny SortedSet_10000 10000 0.00023199999986900366 0.00025700000014694524 0.00023599999985890463 0.000238800000079209 +symmetric_difference_update_tiny SortedSet_10000 100000 0.0023290000003726163 0.002411999999822001 0.002336999999897671 0.002350199999909819 +symmetric_difference_update_tiny SortedSet_10000 1000000 0.029231000000436325 0.029561000000285276 0.02947199999971417 0.029437200000120355 +symmetric_difference_update_tiny SortedSet_10000 10000000 0.4691330000000562 0.47706300000027113 0.47389899999961926 0.47310279999992416 +symmetric_difference_update_small SortedSet_10000 100 8.999999863590347e-06 1.1000000085914508e-05 1.0000000202126103e-05 9.800000134418951e-06 +symmetric_difference_update_small SortedSet_10000 1000 3.400000014153193e-05 3.90000000152213e-05 3.599999990910874e-05 3.600000009100768e-05 +symmetric_difference_update_small SortedSet_10000 10000 0.000262999999904423 0.000266999999894324 0.000262999999904423 0.0002637999999024032 +symmetric_difference_update_small SortedSet_10000 100000 0.0026850000003832974 0.002828000000135944 0.002699000000120577 0.0027300000001559965 +symmetric_difference_update_small SortedSet_10000 1000000 0.033456999999998516 0.033861000000342756 0.03364400000009482 0.033658400000058465 +symmetric_difference_update_small SortedSet_10000 10000000 0.5179109999999127 0.5477989999999409 0.5221000000001368 0.5266350000000785 +symmetric_difference_update_medium SortedSet_10000 100 1.0000000202126103e-05 1.1000000085914508e-05 1.1000000085914508e-05 1.0800000018207356e-05 +symmetric_difference_update_medium SortedSet_10000 1000 4.6999999995023245e-05 4.799999987881165e-05 4.6999999995023245e-05 4.739999994853861e-05 +symmetric_difference_update_medium SortedSet_10000 10000 0.00037500000007639755 0.00041800000008151983 0.0003790000000662985 0.00038580000000365544 +symmetric_difference_update_medium SortedSet_10000 100000 0.004480000000057771 0.004797000000053231 0.004485999999815249 0.004583800000000337 +symmetric_difference_update_medium SortedSet_10000 1000000 0.05515399999967485 0.05599500000016633 0.05575299999964045 0.05560219999988476 +symmetric_difference_update_medium SortedSet_10000 10000000 0.649159999999938 0.6757210000000669 0.6537469999998393 0.657987199999934 +symmetric_difference_update_large SortedSet_10000 100 1.699999984339229e-05 1.700000029813964e-05 1.699999984339229e-05 1.699999993434176e-05 +symmetric_difference_update_large SortedSet_10000 1000 7.300000015675323e-05 8.200000002034358e-05 7.699999969190685e-05 7.700000005570474e-05 +symmetric_difference_update_large SortedSet_10000 10000 0.0006149999999252032 0.0006840000000920554 0.0006499999999505235 0.0006457999998929154 +symmetric_difference_update_large SortedSet_10000 100000 0.007454999999936263 0.007769999999709398 0.007548999999926309 0.007579399999849556 +symmetric_difference_update_large SortedSet_10000 1000000 0.10412800000040079 0.10511900000028618 0.10443600000007791 0.10454620000018622 +symmetric_difference_update_large SortedSet_10000 10000000 1.235182999999779 1.3508339999998498 1.2380600000001323 1.269192000000021 +pop SortedSet_10000 100 4.999999873689376e-06 7.000000096013537e-06 6.000000212225132e-06 6.200000098033343e-06 +pop SortedSet_10000 1000 1.900000006571645e-05 2.500000027794158e-05 2.1999999717081664e-05 2.1800000013172394e-05 +pop SortedSet_10000 10000 0.00014800000008108327 0.00017699999989417847 0.00014800000008108327 0.0001548000000184402 +pop SortedSet_10000 100000 0.0014550000000781438 0.0016510000000380387 0.0014670000000478467 0.0015049999999973806 +pop SortedSet_10000 1000000 0.014614000000165106 0.014830999999958294 0.014709000000038941 0.014711000000079365 +pop SortedSet_10000 10000000 0.15108799999961775 0.15499099999988175 0.15237400000023626 0.15259539999997287 +init SortedSet_10000 100 1.0999999631167157e-05 1.3999999737279722e-05 1.2999999853491317e-05 1.2599999899975956e-05 +init SortedSet_10000 1000 4.9000000217347406e-05 5.2999999752501026e-05 5.000000010113581e-05 5.0799999917217066e-05 +init SortedSet_10000 10000 0.000559999999950378 0.0005639999999402789 0.0005620000001727021 0.0005621999999675609 +init SortedSet_10000 100000 0.006786999999803811 0.007111999999779073 0.006914000000051601 0.00692399999988993 +init SortedSet_10000 1000000 0.11836499999981243 0.1525379999998222 0.11924899999985428 0.12856959999990067 +init SortedSet_10000 10000000 2.6295399999999063 3.044261000000006 2.6397969999998168 2.7221059999998944 diff -Nru sortedcontainers-1.5.9/tests/results_runtime_sorteddict.txt sortedcontainers-2.0.4/tests/results_runtime_sorteddict.txt --- sortedcontainers-1.5.9/tests/results_runtime_sorteddict.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/results_runtime_sorteddict.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,105 +1,105 @@ -contains SortedDict_Py27 100 1.00000000014e-06 5.99999999995e-06 5.99999999995e-06 2.40000000016e-06 -contains SortedDict_Py27 1000 1.00000000014e-06 3.00000000042e-06 3.00000000042e-06 2.60000000001e-06 -contains SortedDict_Py27 10000 1.09999999998e-05 1.29999999992e-05 1.19999999999e-05 1.19999999997e-05 -contains SortedDict_Py27 100000 0.000188 0.0002 0.000196 0.0001946 -contains SortedDict_Py27 1000000 0.003404 0.003771 0.003771 0.003676 -getitem SortedDict_Py27 100 0.0 2.00000000028e-06 2.00000000028e-06 1.39999999966e-06 -getitem SortedDict_Py27 1000 2.00000000028e-06 3.00000000042e-06 2.00000000028e-06 2.80000000021e-06 -getitem SortedDict_Py27 10000 1.3e-05 1.50000000003e-05 1.3e-05 1.38000000002e-05 -getitem SortedDict_Py27 100000 0.000220000000001 0.000329 0.000220000000001 0.0002454 -getitem SortedDict_Py27 1000000 0.003527 0.005305 0.005305 0.0039034 -setitem SortedDict_Py27 100 1.00000000103e-06 2.99999999953e-06 2.00000000028e-06 2.39999999998e-06 -setitem SortedDict_Py27 1000 1.40000000002e-05 1.60000000005e-05 1.40000000002e-05 1.47999999999e-05 -setitem SortedDict_Py27 10000 0.000141999999999 0.00015 0.000141999999999 0.0001444 -setitem SortedDict_Py27 100000 0.001581 0.002064 0.001628 0.0016992 -setitem SortedDict_Py27 1000000 0.019096 0.019235 0.019167 0.0191632 -setitem_existing SortedDict_Py27 100 2.00000000028e-06 7.00000000009e-06 3.00000000131e-06 3.20000000045e-06 -setitem_existing SortedDict_Py27 1000 4.99999999981e-06 5.99999999906e-06 5.99999999906e-06 5.59999999972e-06 -setitem_existing SortedDict_Py27 10000 3.8e-05 3.9000000001e-05 3.9000000001e-05 3.88000000001e-05 -setitem_existing SortedDict_Py27 100000 0.000463999999999 0.000472 0.000468 0.0004688 -setitem_existing SortedDict_Py27 1000000 0.006151 0.00728 0.00728 0.0066286 -delitem SortedDict_Py27 100 2.00000000028e-06 4.00000000056e-06 4.00000000056e-06 3.20000000045e-06 -delitem SortedDict_Py27 1000 1.7999999999e-05 1.9e-05 1.9e-05 1.85999999999e-05 -delitem SortedDict_Py27 10000 0.000178999999999 0.000183 0.000181 0.000181 -delitem SortedDict_Py27 100000 0.002214 0.002292 0.002215 0.002231 -delitem SortedDict_Py27 1000000 0.028472 0.031578 0.028472 0.0298092 -iter SortedDict_Py27 100 8.99999999859e-06 1.10000000006e-05 9.99999999962e-06 1.01999999998e-05 -iter SortedDict_Py27 1000 7.6e-05 8.59999999996e-05 8.59999999996e-05 7.96000000001e-05 -iter SortedDict_Py27 10000 0.000712 0.000717 0.000712999999999 0.0007132 -iter SortedDict_Py27 100000 0.007189 0.007631 0.007267 0.007325 -iter SortedDict_Py27 1000000 0.075384 0.07997 0.07997 0.0775558 -init SortedDict_Py27 100 2.19999999995e-05 2.30000000006e-05 2.19999999995e-05 2.24000000003e-05 -init SortedDict_Py27 1000 0.00013 0.00014 0.00013 0.0001342 -init SortedDict_Py27 10000 0.001312 0.001622 0.001345 0.0014876 -init SortedDict_Py27 100000 0.019041 0.055875 0.019332 0.0268728 -init SortedDict_Py27 1000000 0.364847 0.698854 0.376076 0.4397364 -contains SortedDict_Py35 100 9.999999992515995e-07 2.000000000279556e-06 2.000000000279556e-06 1.7999999997186933e-06 -contains SortedDict_Py35 1000 1.0000000010279564e-06 3.0000000013075123e-06 1.0000000010279564e-06 2.4000000003354673e-06 -contains SortedDict_Py35 10000 1.0999999998873022e-05 2.6999999999333113e-05 1.1999999999900979e-05 1.5599999999693638e-05 -contains SortedDict_Py35 100000 0.00024099999999904753 0.00028200000000033754 0.00024099999999904753 0.0002492000000000161 -contains SortedDict_Py35 1000000 0.0037199999999995015 0.0047290000000010934 0.004694000000000642 0.004313600000000051 -getitem SortedDict_Py35 100 0.0 3.0000000013075123e-06 9.999999992515995e-07 1.4000000000180534e-06 -getitem SortedDict_Py35 1000 2.000000000279556e-06 4.000000000559112e-06 3.0000000013075123e-06 2.8000000003913782e-06 -getitem SortedDict_Py35 10000 1.4000000000180535e-05 3.0999999999892225e-05 1.4000000000180535e-05 1.8199999999524152e-05 -getitem SortedDict_Py35 100000 0.0002849999999998687 0.00036100000000161003 0.00036100000000161003 0.00030500000000017736 -getitem SortedDict_Py35 1000000 0.0046879999999998034 0.0048560000000001935 0.004715000000000913 0.004760800000000032 -setitem SortedDict_Py35 100 2.000000000279556e-06 2.9999999995311555e-06 2.000000000279556e-06 2.399999999980196e-06 -setitem SortedDict_Py35 1000 1.4999999999432134e-05 1.8999999999991246e-05 1.600000000046009e-05 1.659999999965578e-05 -setitem SortedDict_Py35 10000 0.00014799999999937086 0.00015300000000095793 0.00015300000000095793 0.00015099999999996784 -setitem SortedDict_Py35 100000 0.0016619999999996082 0.0016850000000001586 0.0016850000000001586 0.0016739999999995092 -setitem SortedDict_Py35 1000000 0.019847000000000392 0.020046999999999926 0.01997500000000052 0.019933200000000185 -setitem_existing SortedDict_Py35 100 9.999999992515995e-07 2.000000000279556e-06 9.999999992515995e-07 1.3999999996627821e-06 -setitem_existing SortedDict_Py35 1000 5.999999999062311e-06 7.000000000090267e-06 5.999999999062311e-06 6.199999999978445e-06 -setitem_existing SortedDict_Py35 10000 4.2999999999793204e-05 4.599999999932436e-05 4.599999999932436e-05 4.459999999966158e-05 -setitem_existing SortedDict_Py35 100000 0.0005430000000004043 0.0005839999999999179 0.0005839999999999179 0.0005553999999996506 -setitem_existing SortedDict_Py35 1000000 0.00710199999999972 0.007459000000000771 0.00710199999999972 0.0073706000000001385 -delitem SortedDict_Py35 100 2.9999999995311555e-06 5.000000001587068e-06 4.000000000559112e-06 3.7999999996429778e-06 -delitem SortedDict_Py35 1000 2.000000000279556e-05 2.800000000036107e-05 2.000000000279556e-05 2.24000000009994e-05 -delitem SortedDict_Py35 10000 0.0001909999999973877 0.00019400000000047157 0.0001909999999973877 0.00019299999999944362 -delitem SortedDict_Py35 100000 0.0024130000000006646 0.002697999999998757 0.0024130000000006646 0.002515200000001272 -delitem SortedDict_Py35 1000000 0.03561900000000051 0.037352999999999525 0.036046000000002465 0.03624280000000013 -iter SortedDict_Py35 100 9.999999999621423e-06 1.1999999998124622e-05 9.999999999621423e-06 1.0599999999527654e-05 -iter SortedDict_Py35 1000 9.099999999762076e-05 9.899999999873899e-05 9.299999999967667e-05 9.479999999868482e-05 -iter SortedDict_Py35 10000 0.000913999999998083 0.000914999999999111 0.000914999999999111 0.0009143999999992047 -iter SortedDict_Py35 100000 0.009245999999997423 0.00978500000000082 0.009245999999997423 0.009374800000000506 -iter SortedDict_Py35 1000000 0.0929770000000012 0.1005439999999993 0.09361399999999875 0.09511079999999979 -init SortedDict_Py35 100 2.2999999998774e-05 2.5000000000829914e-05 2.3000000002326715e-05 2.3800000001017452e-05 -init SortedDict_Py35 1000 0.00016500000000263526 0.00017400000000122873 0.00016899999999964166 0.00016860000000065156 -init SortedDict_Py35 10000 0.001604000000000383 0.0018549999999990519 0.001806999999999448 0.0017382000000004893 -init SortedDict_Py35 100000 0.02269399999999777 0.05817499999999853 0.0234310000000022 0.03029939999999982 -init SortedDict_Py35 1000000 0.4002869999999987 0.9675930000000008 0.4078230000000005 0.5173152000000002 -contains SortedDict_PyPy 100 2.00000000006e-06 4.99999999992e-06 4.99999999992e-06 3.60000000001e-06 -contains SortedDict_PyPy 1000 2.99999999998e-06 5.00000000003e-06 4e-06 4e-06 -contains SortedDict_PyPy 10000 1.7e-05 2.4e-05 2.4e-05 2.16e-05 -contains SortedDict_PyPy 100000 4.19999999999e-05 6.6e-05 4.2e-05 4.74e-05 -contains SortedDict_PyPy 1000000 0.00055 0.000767 0.00067 0.000645 -getitem SortedDict_PyPy 100 1.99999999939e-06 4.00000000012e-06 4.00000000012e-06 2.79999999995e-06 -getitem SortedDict_PyPy 1000 3.99999999967e-06 7.00000000009e-06 7.00000000009e-06 5.19999999993e-06 -getitem SortedDict_PyPy 10000 2.30000000001e-05 3.39999999999e-05 2.49999999999e-05 2.72000000001e-05 -getitem SortedDict_PyPy 100000 5.60000000003e-05 6.60000000003e-05 5.80000000001e-05 5.94000000001e-05 -getitem SortedDict_PyPy 1000000 0.000864 0.001122 0.000931 0.0009676 -setitem SortedDict_PyPy 100 3.99999999967e-06 7.00000000009e-06 4.99999999981e-06 4.9999999999e-06 -setitem SortedDict_PyPy 1000 4.19999999997e-05 4.30000000007e-05 4.19999999997e-05 4.26e-05 -setitem SortedDict_PyPy 10000 0.000815 0.00153 0.000815 0.0011954 -setitem SortedDict_PyPy 100000 0.000546999999999 0.003687 0.002975 0.0016874 -setitem SortedDict_PyPy 1000000 0.007769 0.007877 0.007793 0.0078218 -setitem_existing SortedDict_PyPy 100 1.99999999984e-06 4.00000000012e-06 4.00000000012e-06 2.99999999989e-06 -setitem_existing SortedDict_PyPy 1000 7.00000000009e-06 8.00000000023e-06 7.00000000009e-06 7.40000000006e-06 -setitem_existing SortedDict_PyPy 10000 5.1e-05 5.50000000001e-05 5.29999999999e-05 5.26e-05 -setitem_existing SortedDict_PyPy 100000 7.89999999999e-05 9.59999999997e-05 8.00000000001e-05 8.39999999998e-05 -setitem_existing SortedDict_PyPy 1000000 0.001257 0.001804 0.001756 0.0016722 -delitem SortedDict_PyPy 100 9.99999999962e-06 1.09999999998e-05 9.99999999962e-06 1.03999999995e-05 -delitem SortedDict_PyPy 1000 6.50000000002e-05 7e-05 6.50000000002e-05 6.70000000001e-05 -delitem SortedDict_PyPy 10000 0.000437999999999 0.001824 0.000448 0.000899 -delitem SortedDict_PyPy 100000 0.001699 0.01273 0.002245 0.0061762 -delitem SortedDict_PyPy 1000000 0.011757 0.02082 0.02082 0.0163916 -iter SortedDict_PyPy 100 6.00000000004e-05 6.30000000008e-05 6.00000000004e-05 6.12000000006e-05 -iter SortedDict_PyPy 1000 2.40000000007e-05 2.90000000014e-05 2.49999999999e-05 2.60000000004e-05 -iter SortedDict_PyPy 10000 0.000164 0.000178999999999 0.000165000000001 0.000169 -iter SortedDict_PyPy 100000 0.000805 0.003183 0.001919 0.0017134 -iter SortedDict_PyPy 1000000 0.007679 0.021442 0.008447 0.0116648 -init SortedDict_PyPy 100 5.60000000007e-05 6.10000000005e-05 6.10000000005e-05 5.86000000006e-05 -init SortedDict_PyPy 1000 0.000178999999999 0.00023 0.000219999999999 0.0002084 -init SortedDict_PyPy 10000 0.001861 0.002175 0.001946 0.0019552 -init SortedDict_PyPy 100000 0.026778 0.027275 0.027275 0.02699 -init SortedDict_PyPy 1000000 0.385859 0.430785 0.388576 0.4080534 +contains SortedDict_Py36 100 9.999999992515995e-07 2.9999999995311555e-06 2.000000000279556e-06 2.1999999997746046e-06 +contains SortedDict_Py36 1000 1.999999998503199e-06 7.000000000090267e-06 3.999999998782755e-06 3.999999999848569e-06 +contains SortedDict_Py36 10000 1.1999999999900979e-05 1.4000000000180535e-05 1.4000000000180535e-05 1.3400000000274304e-05 +contains SortedDict_Py36 100000 0.00024400000000035504 0.0002550000000010044 0.00024999999999941735 0.00024899999999981046 +contains SortedDict_Py36 1000000 0.004464000000000468 0.004535000000000622 0.004531000000000063 0.004510599999999698 +getitem SortedDict_Py36 100 9.999999992515995e-07 2.9999999995311555e-06 2.000000000279556e-06 2.1999999997746046e-06 +getitem SortedDict_Py36 1000 3.0000000013075123e-06 7.000000000090267e-06 4.000000000559112e-06 4.400000000259751e-06 +getitem SortedDict_Py36 10000 1.699999999971169e-05 1.8000000000739647e-05 1.799999999896329e-05 1.7599999999973194e-05 +getitem SortedDict_Py36 100000 0.00029199999999995896 0.00035100000000021225 0.00030800000000041905 0.0003136000000004913 +getitem SortedDict_Py36 1000000 0.004839999999999733 0.005180999999998548 0.005039000000000016 0.0049899999999997394 +setitem SortedDict_Py36 100 2.9999999995311555e-06 4.999999999810711e-06 3.0000000013075123e-06 3.8000000003535207e-06 +setitem SortedDict_Py36 1000 1.8999999999991246e-05 2.0000000001019203e-05 2.0000000001019203e-05 1.980000000045834e-05 +setitem SortedDict_Py36 10000 0.00016899999999964166 0.00018199999999879424 0.00017099999999992122 0.00017439999999950827 +setitem SortedDict_Py36 100000 0.0018310000000010263 0.0019559999999998468 0.0018560000000000798 0.0018852000000002533 +setitem SortedDict_Py36 1000000 0.021537999999999613 0.02164400000000022 0.021594000000000335 0.0215957999999997 +setitem_existing SortedDict_Py36 100 1.999999998503199e-06 2.9999999995311555e-06 2.000000000279556e-06 2.1999999997746046e-06 +setitem_existing SortedDict_Py36 1000 5.999999999062311e-06 7.000000000090267e-06 7.000000000090267e-06 6.799999999884676e-06 +setitem_existing SortedDict_Py36 10000 4.2000000000541604e-05 4.400000000082116e-05 4.2999999999793204e-05 4.3200000000354066e-05 +setitem_existing SortedDict_Py36 100000 0.0005500000000004945 0.0005889999999997286 0.0005559999999995568 0.000561400000000134 +setitem_existing SortedDict_Py36 1000000 0.007512999999999437 0.007789999999999964 0.007644000000000872 0.007649599999999879 +delitem SortedDict_Py36 100 4.9999999980343546e-06 9.999999999621423e-06 5.999999999062311e-06 6.400000000184036e-06 +delitem SortedDict_Py36 1000 2.1999999997746045e-05 2.3999999999801958e-05 2.200000000129876e-05 2.2599999999783905e-05 +delitem SortedDict_Py36 10000 0.0002080000000006521 0.00023200000000045407 0.0002099999999991553 0.00021380000000021938 +delitem SortedDict_Py36 100000 0.002481000000003064 0.0026849999999996044 0.0025690000000011537 0.0025802000000005876 +delitem SortedDict_Py36 1000000 0.03506000000000142 0.037675000000000125 0.035308999999998036 0.03593239999999938 +iter SortedDict_Py36 100 1.100000000064938e-05 1.2000000001677336e-05 1.1999999998124622e-05 1.1800000000050658e-05 +iter SortedDict_Py36 1000 9.400000000070463e-05 0.00010199999999827014 9.999999999976694e-05 9.859999999974888e-05 +iter SortedDict_Py36 10000 0.0009079999999990207 0.001018999999999437 0.0009100000000010766 0.0009522000000004027 +iter SortedDict_Py36 100000 0.009137000000002615 0.00927199999999928 0.009240999999999389 0.009227200000000834 +iter SortedDict_Py36 1000000 0.09188800000000086 0.09576599999999758 0.09300899999999857 0.09328799999999973 +init SortedDict_Py36 100 2.8999999997836312e-05 3.2999999998395424e-05 3.199999999736747e-05 3.139999999888232e-05 +init SortedDict_Py36 1000 0.0002879999999976235 0.00029100000000070736 0.0002899999999996794 0.00028979999999876325 +init SortedDict_Py36 10000 0.003515999999997632 0.003944999999998089 0.003623000000001042 0.003666799999999881 +init SortedDict_Py36 100000 0.047977000000003045 0.07303900000000141 0.04953199999999924 0.054270800000000466 +init SortedDict_Py36 1000000 0.8621279999999985 0.8992910000000016 0.8828409999999991 0.8804025999999994 +contains SortedDict_Py27 100 1.9999999985e-06 5.99999999906e-06 2.00000000028e-06 2.99999999953e-06 +contains SortedDict_Py27 1000 3.99999999878e-06 4.00000000056e-06 4.00000000056e-06 3.99999999985e-06 +contains SortedDict_Py27 10000 1.99999999992e-05 2.29999999988e-05 2.10000000003e-05 2.13999999996e-05 +contains SortedDict_Py27 100000 0.000340999999999 0.000440000000001 0.000427 0.0003988 +contains SortedDict_Py27 1000000 0.004256 0.004569 0.004336 0.0043648 +getitem SortedDict_Py27 100 2.00000000028e-06 5.00000000159e-06 2.99999999953e-06 3.20000000045e-06 +getitem SortedDict_Py27 1000 4.00000000056e-06 4.99999999981e-06 4.99999999981e-06 4.79999999996e-06 +getitem SortedDict_Py27 10000 2.49999999991e-05 2.90000000014e-05 2.60000000001e-05 2.64000000005e-05 +getitem SortedDict_Py27 100000 0.000379000000001 0.000435999999999 0.000411 0.0004104 +getitem SortedDict_Py27 1000000 0.004852 0.005294 0.004933 0.0050198 +setitem SortedDict_Py27 100 4.00000000056e-06 4.99999999981e-06 4.99999999981e-06 4.79999999996e-06 +setitem SortedDict_Py27 1000 2.60000000001e-05 2.79999999986e-05 2.69999999993e-05 2.69999999993e-05 +setitem SortedDict_Py27 10000 0.000251 0.000258000000001 0.000252 0.0002538 +setitem SortedDict_Py27 100000 0.002612 0.003072 0.002778 0.0028076 +setitem SortedDict_Py27 1000000 0.029978 0.030284 0.030136 0.0301412 +setitem_existing SortedDict_Py27 100 2.99999999953e-06 4.00000000056e-06 4.00000000056e-06 3.6000000005e-06 +setitem_existing SortedDict_Py27 1000 9.00000000037e-06 9.99999999962e-06 9.00000000037e-06 9.20000000022e-06 +setitem_existing SortedDict_Py27 10000 6.40000000001e-05 6.60000000003e-05 6.49999999993e-05 6.51999999999e-05 +setitem_existing SortedDict_Py27 100000 0.000758999999999 0.000826 0.000783 0.0007884 +setitem_existing SortedDict_Py27 1000000 0.008414 0.009144 0.008527 0.0086236 +delitem SortedDict_Py27 100 7.00000000009e-06 1.29999999992e-05 7.99999999757e-06 8.5999999996e-06 +delitem SortedDict_Py27 1000 3.20000000009e-05 3.59999999979e-05 3.39999999994e-05 3.37999999999e-05 +delitem SortedDict_Py27 10000 0.000299999999999 0.000303000000002 0.000302999999999 0.000301800000001 +delitem SortedDict_Py27 100000 0.003549 0.003754 0.003606 0.0036252 +delitem SortedDict_Py27 1000000 0.042739 0.044381 0.043285 0.0435418 +iter SortedDict_Py27 100 2.19999999977e-05 2.30000000023e-05 2.20000000013e-05 2.23999999996e-05 +iter SortedDict_Py27 1000 0.000192999999999 0.000197 0.000192999999999 0.000194 +iter SortedDict_Py27 10000 0.001802 0.001843 0.001815 0.0018204 +iter SortedDict_Py27 100000 0.018327 0.01856 0.018399 0.0184262 +iter SortedDict_Py27 1000000 0.187127 0.196897 0.190348 0.1912186 +init SortedDict_Py27 100 3.50000000005e-05 6.69999999978e-05 4.50000000001e-05 4.55999999993e-05 +init SortedDict_Py27 1000 0.000232 0.000235 0.000232999999998 0.000233 +init SortedDict_Py27 10000 0.00267 0.002751 0.002676 0.002694 +init SortedDict_Py27 100000 0.030033 0.033908 0.031628 0.0318284 +init SortedDict_Py27 1000000 0.537082 0.81733 0.55804 0.6065944 +contains SortedDict_PyPy 100 3.00000000009e-06 5.00000000003e-06 4e-06 4.00000000003e-06 +contains SortedDict_PyPy 1000 4e-06 6.00000000006e-06 5.99999999995e-06 5.59999999998e-06 +contains SortedDict_PyPy 10000 1.69999999999e-05 2.3e-05 1.7e-05 1.84e-05 +contains SortedDict_PyPy 100000 5e-05 8.50000000001e-05 5.70000000001e-05 6.1e-05 +contains SortedDict_PyPy 1000000 0.000682 0.000813 0.000712 0.0007302 +getitem SortedDict_PyPy 100 4.99999999981e-06 5.00000000025e-06 4.99999999981e-06 4.9999999999e-06 +getitem SortedDict_PyPy 1000 4.99999999981e-06 7.00000000009e-06 7.00000000009e-06 6.4000000001e-06 +getitem SortedDict_PyPy 10000 2.39999999998e-05 3.69999999998e-05 2.49999999999e-05 2.75999999999e-05 +getitem SortedDict_PyPy 100000 6.10000000001e-05 0.000121 0.000101 9.06000000001e-05 +getitem SortedDict_PyPy 1000000 0.000897 0.001037 0.000961 0.0009674 +setitem SortedDict_PyPy 100 8.00000000023e-06 9.00000000037e-06 8.99999999948e-06 8.59999999996e-06 +setitem SortedDict_PyPy 1000 5.49999999997e-05 5.60000000003e-05 5.59999999998e-05 5.58e-05 +setitem SortedDict_PyPy 10000 0.00055 0.002148 0.001093 0.0011664 +setitem SortedDict_PyPy 100000 0.000415 0.003171 0.000664 0.0014606 +setitem SortedDict_PyPy 1000000 0.005862 0.005968 0.005866 0.005889 +setitem_existing SortedDict_PyPy 100 5.99999999995e-06 7.00000000009e-06 6.00000000084e-06 6.20000000033e-06 +setitem_existing SortedDict_PyPy 1000 9.99999999962e-06 1.09999999998e-05 1.00000000005e-05 1.02000000002e-05 +setitem_existing SortedDict_PyPy 10000 5.59999999989e-05 7e-05 5.7e-05 5.97999999998e-05 +setitem_existing SortedDict_PyPy 100000 8.40000000002e-05 0.000136 9.5e-05 0.0001036 +setitem_existing SortedDict_PyPy 1000000 0.001281 0.001911 0.001403 0.0014884 +delitem SortedDict_PyPy 100 1.19999999999e-05 1.49999999985e-05 1.3e-05 1.33999999997e-05 +delitem SortedDict_PyPy 1000 6.69999999996e-05 6.89999999999e-05 6.70000000005e-05 6.77999999999e-05 +delitem SortedDict_PyPy 10000 0.000425000000001 0.001395 0.000433 0.0007126 +delitem SortedDict_PyPy 100000 0.000547 0.011392 0.001778 0.0048936 +delitem SortedDict_PyPy 1000000 0.008296 0.009502 0.009081 0.0090032 +iter SortedDict_PyPy 100 5.7e-05 6.19999999998e-05 5.80000000001e-05 5.87999999999e-05 +iter SortedDict_PyPy 1000 2.59999999992e-05 3.00000000006e-05 2.70000000002e-05 2.73999999999e-05 +iter SortedDict_PyPy 10000 0.000145999999999 0.000432 0.000149 0.000205 +iter SortedDict_PyPy 100000 0.000842 0.003561 0.001743 0.0020962 +iter SortedDict_PyPy 1000000 0.007654 0.008449 0.00797 0.008041 +init SortedDict_PyPy 100 5.79999999992e-05 6.19999999998e-05 6.00000000013e-05 5.99999999999e-05 +init SortedDict_PyPy 1000 0.000163000000001 0.000243000000001 0.000166999999999 0.0001814 +init SortedDict_PyPy 10000 0.00199 0.00223 0.002012 0.002071 +init SortedDict_PyPy 100000 0.025724 0.028434 0.026956 0.026963 +init SortedDict_PyPy 1000000 0.384995 0.428829 0.41671 0.4132286 diff -Nru sortedcontainers-1.5.9/tests/results_runtime_sortedlist.txt sortedcontainers-2.0.4/tests/results_runtime_sortedlist.txt --- sortedcontainers-1.5.9/tests/results_runtime_sortedlist.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/results_runtime_sortedlist.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,270 +1,270 @@ -add SortedList_Py27 100 1.99999999939e-06 2.00000000028e-06 2.00000000028e-06 1.99999999975e-06 -add SortedList_Py27 1000 1.39999999993e-05 1.50000000003e-05 1.50000000003e-05 1.43999999999e-05 -add SortedList_Py27 10000 0.000146 0.000153 0.000146 0.0001474 -add SortedList_Py27 100000 0.001727 0.001853 0.001853 0.0017564 -add SortedList_Py27 1000000 0.02308 0.025086 0.025086 0.024345 -update_small SortedList_Py27 100 1.29999999992e-05 2.39999999998e-05 1.50000000012e-05 1.66e-05 -update_small SortedList_Py27 1000 0.000138 0.000182000000001 0.00014 0.0001476 -update_small SortedList_Py27 10000 0.001476 0.001536 0.001476 0.0014924 -update_small SortedList_Py27 100000 0.016205 0.017196 0.016245 0.016533 -update_small SortedList_Py27 1000000 0.192767 0.195988 0.19556 0.194658 -update_large SortedList_Py27 100 2.19999999995e-05 2.40000000016e-05 2.30000000006e-05 2.28000000003e-05 -update_large SortedList_Py27 1000 0.000230999999999 0.000286000000001 0.000233 0.0002478 -update_large SortedList_Py27 10000 0.002838 0.002903 0.002842 0.0028618 -update_large SortedList_Py27 100000 0.037881 0.038077 0.037881 0.0379626 -update_large SortedList_Py27 1000000 0.607291 0.644236 0.644236 0.6309822 -contains SortedList_Py27 100 9.99999997475e-07 2.00000000206e-06 1.00000000103e-06 1.59999999951e-06 -contains SortedList_Py27 1000 8.99999999859e-06 9.99999999962e-06 8.99999999859e-06 9.20000000093e-06 -contains SortedList_Py27 10000 8.69999999971e-05 9.20000000022e-05 8.69999999971e-05 8.96000000004e-05 -contains SortedList_Py27 100000 0.001123 0.001169 0.001124 0.0011418 -contains SortedList_Py27 1000000 0.014592 0.015599 0.015063 0.0150724 -remove SortedList_Py27 100 1.9999999985e-06 4.00000000056e-06 2.99999999953e-06 3.19999999974e-06 -remove SortedList_Py27 1000 1.50000000012e-05 1.60000000022e-05 1.50000000012e-05 1.56000000011e-05 -remove SortedList_Py27 10000 0.000149 0.000152 0.000152 0.000151 -remove SortedList_Py27 100000 0.001761 0.0018 0.001768 0.001774 -remove SortedList_Py27 1000000 0.022812 0.02406 0.023349 0.023359 -delitem SortedList_Py27 100 1.9999999985e-06 5.00000000159e-06 2.99999999953e-06 3.60000000015e-06 -delitem SortedList_Py27 1000 1.99999999992e-05 2.10000000003e-05 1.99999999992e-05 2.01999999994e-05 -delitem SortedList_Py27 10000 0.000368999999999 0.000384999999998 0.000384999999998 0.000375999999999 -delitem SortedList_Py27 100000 0.004025 0.004038 0.00403 0.0040328 -delitem SortedList_Py27 1000000 0.048692 0.050585 0.050585 0.0495204 -bisect SortedList_Py27 100 1.00000000458e-06 3.00000000664e-06 1.99999999495e-06 2.20000000155e-06 -bisect SortedList_Py27 1000 1.00000000032e-05 1.10000000006e-05 1.00000000032e-05 1.02000000027e-05 -bisect SortedList_Py27 10000 0.000191000000001 0.000192999999996 0.000192999999996 0.000192199999999 -bisect SortedList_Py27 100000 0.002284 0.00232200000001 0.002295 0.0022992 -bisect SortedList_Py27 1000000 0.029627 0.030753 0.030303 0.0302368 -getitem SortedList_Py27 100 9.99999997475e-07 2.99999999953e-06 2.00000000206e-06 1.60000000022e-06 -getitem SortedList_Py27 1000 6.99999999654e-06 8.00000000112e-06 8.00000000112e-06 7.40000000121e-06 -getitem SortedList_Py27 10000 0.000195000000005 0.000197 0.000196000000003 0.000196200000002 -getitem SortedList_Py27 100000 0.002252 0.0023 0.0023 0.002271 -getitem SortedList_Py27 1000000 0.026014 0.026946 0.026946 0.0265132 -pop SortedList_Py27 100 9.99999997475e-07 2.99999999953e-06 2.00000000206e-06 2.20000000013e-06 -pop SortedList_Py27 1000 1.00000000032e-05 1.19999999981e-05 1.10000000006e-05 1.10000000006e-05 -pop SortedList_Py27 10000 9.00000000001e-05 9.10000000047e-05 9.10000000047e-05 9.06000000015e-05 -pop SortedList_Py27 100000 0.000894000000002 0.001028 0.001028 0.000922799999999 -pop SortedList_Py27 1000000 0.008924 0.00897 0.00897 0.0089472 -index SortedList_Py27 100 1.99999999495e-06 2.99999999953e-06 1.99999999495e-06 2.39999999962e-06 -index SortedList_Py27 1000 1.30000000027e-05 1.40000000002e-05 1.40000000002e-05 1.38000000007e-05 -index SortedList_Py27 10000 0.000230999999999 0.000245999999997 0.000233000000001 0.000235399999998 -index SortedList_Py27 100000 0.00261399999999 0.002727 0.00261399999999 0.0026562 -index SortedList_Py27 1000000 0.033227 0.035001 0.034363 0.0342068 -iter SortedList_Py27 100 8.00000000112e-06 9.0000000057e-06 8.00000000112e-06 8.80000000336e-06 -iter SortedList_Py27 1000 7.19999999959e-05 7.30000000004e-05 7.2000000003e-05 7.21999999996e-05 -iter SortedList_Py27 10000 0.000707999999996 0.000719000000004 0.000719000000004 0.000711200000001 -iter SortedList_Py27 100000 0.00708599999999 0.00733899999999 0.007193 0.0071662 -iter SortedList_Py27 1000000 0.073165 0.079495 0.075674 0.0750618 -count SortedList_Py27 100 2.00000000206e-06 3.99999999701e-06 2.00000000206e-06 2.60000000054e-06 -count SortedList_Py27 1000 1.50000000048e-05 1.60000000022e-05 1.60000000022e-05 1.56000000032e-05 -count SortedList_Py27 10000 0.000183 0.000197 0.000183 0.0001874 -count SortedList_Py27 100000 0.001983 0.002014 0.001984 0.0019976 -count SortedList_Py27 1000000 0.023503 0.023761 0.023761 0.0236322 -priorityqueue SortedList_Py27 100 1.99999999992e-05 2.20000000013e-05 2.20000000013e-05 2.12000000005e-05 -priorityqueue SortedList_Py27 1000 0.000192000000006 0.000204000000004 0.000202999999999 0.000199600000002 -priorityqueue SortedList_Py27 10000 0.002035 0.002084 0.002084 0.0020628 -priorityqueue SortedList_Py27 100000 0.021751 0.022041 0.021834 0.0218548 -priorityqueue SortedList_Py27 1000000 0.277069 0.28027 0.27856 0.2787842 -multiset SortedList_Py27 100 2.59999999983e-05 3.79999999964e-05 2.80000000004e-05 2.98000000001e-05 -multiset SortedList_Py27 1000 0.000174000000001 0.00018 0.00018 0.000176400000001 -multiset SortedList_Py27 10000 0.00215499999999 0.002214 0.00215499999999 0.002178 -multiset SortedList_Py27 100000 0.022982 0.023353 0.023085 0.0231264 -multiset SortedList_Py27 1000000 0.31357 0.320788 0.31357 0.3168842 -ranking SortedList_Py27 100 2.10000000038e-05 2.40000000105e-05 2.10000000038e-05 2.2400000006e-05 -ranking SortedList_Py27 1000 0.000195000000005 0.000201000000004 0.000201000000004 0.000197400000002 -ranking SortedList_Py27 10000 0.002967 0.00299799999999 0.002967 0.0029872 -ranking SortedList_Py27 100000 0.033656 0.033836 0.033747 0.033749 -ranking SortedList_Py27 1000000 0.437512 0.445007 0.440668 0.4405866 -neighbor SortedList_Py27 100 1.90000000089e-05 3.19999999903e-05 1.99999999921e-05 2.37999999968e-05 -neighbor SortedList_Py27 1000 0.000187999999994 0.000210999999993 0.000198999999995 0.000200999999998 -neighbor SortedList_Py27 10000 0.002792 0.002849 0.002792 0.0028184 -neighbor SortedList_Py27 100000 0.031813 0.032107 0.031813 0.0319406 -neighbor SortedList_Py27 1000000 0.426942 0.434189 0.434189 0.4301578 -intervals SortedList_Py27 100 2.20000000013e-05 2.89999999978e-05 2.49999999937e-05 2.49999999994e-05 -intervals SortedList_Py27 1000 0.000221999999994 0.000240000000005 0.000240000000005 0.000229999999999 -intervals SortedList_Py27 10000 0.003383 0.00345800000001 0.00339200000001 0.00342580000001 -intervals SortedList_Py27 100000 0.038797 0.03959 0.039476 0.039143 -intervals SortedList_Py27 1000000 0.509945 0.524971 0.509945 0.5162544 -init SortedList_Py27 100 1.39999999931e-05 1.69999999997e-05 1.39999999931e-05 1.47999999996e-05 -init SortedList_Py27 1000 0.000171000000009 0.000173000000004 0.000171999999992 0.0001722 -init SortedList_Py27 10000 0.002258 0.00235600000001 0.00235600000001 0.0023046 -init SortedList_Py27 100000 0.029977 0.034067 0.029977 0.0309782 -init SortedList_Py27 1000000 0.510697 0.549898 0.515173 0.5219856 -add SortedList_Py35 100 1.999999998503199e-06 3.0000000013075123e-06 2.000000000279556e-06 2.2000000001298757e-06 -add SortedList_Py35 1000 1.4999999999432134e-05 1.5000000001208491e-05 1.4999999999432134e-05 1.4999999999787405e-05 -add SortedList_Py35 10000 0.00014700000000011926 0.00015000000000142677 0.00015000000000142677 0.00014880000000019322 -add SortedList_Py35 100000 0.0017969999999998265 0.001979000000000397 0.0018200000000003769 0.0018489999999999895 -add SortedList_Py35 1000000 0.02474699999999963 0.025752999999999915 0.025752999999999915 0.025401599999999646 -update_small SortedList_Py35 100 1.2999999999152578e-05 1.4000000000180535e-05 1.2999999999152578e-05 1.359999999941408e-05 -update_small SortedList_Py35 1000 0.0001430000000013365 0.0001619999999995514 0.0001619999999995514 0.0001512000000001734 -update_small SortedList_Py35 10000 0.0015410000000013468 0.001606999999999914 0.001606999999999914 0.0015654000000004942 -update_small SortedList_Py35 100000 0.016993000000001146 0.01733199999999968 0.01715100000000014 0.01712220000000002 -update_small SortedList_Py35 1000000 0.21268500000000046 0.22328699999999913 0.2186060000000012 0.21659840000000016 -update_large SortedList_Py35 100 2.1000000000270802e-05 2.5000000000829914e-05 2.1999999997746045e-05 2.2400000000288854e-05 -update_large SortedList_Py35 1000 0.00025299999999717215 0.0002540000000017528 0.00025300000000072487 0.00025339999999971494 -update_large SortedList_Py35 10000 0.003185999999999467 0.003388999999998532 0.003209999999999269 0.0032381999999998357 -update_large SortedList_Py35 100000 0.04234399999999994 0.04285099999999886 0.04285099999999886 0.04269179999999935 -update_large SortedList_Py35 1000000 0.662039 0.6928869999999989 0.6928869999999989 0.6803721999999993 -contains SortedList_Py35 100 1.999999998503199e-06 3.000000003083869e-06 1.999999998503199e-06 2.4000000003354673e-06 -contains SortedList_Py35 1000 8.999999998593466e-06 9.999999999621423e-06 9.00000000214618e-06 9.200000000930686e-06 -contains SortedList_Py35 10000 9.400000000070463e-05 9.899999999873899e-05 9.400000000070463e-05 9.540000000001214e-05 -contains SortedList_Py35 100000 0.001245999999998304 0.0012640000000025964 0.0012549999999968975 0.001253399999999516 -contains SortedList_Py35 1000000 0.016658999999997093 0.017485999999998114 0.016853999999998592 0.016955999999998993 -remove SortedList_Py35 100 1.9999999949504854e-06 2.9999999995311555e-06 1.9999999949504854e-06 2.399999998203839e-06 -remove SortedList_Py35 1000 1.4999999997655777e-05 1.699999999971169e-05 1.599999999513102e-05 1.5999999999394276e-05 -remove SortedList_Py35 10000 0.00015799999999899228 0.00017300000000375348 0.00015899999999646752 0.00016199999999884086 -remove SortedList_Py35 100000 0.0018719999999987635 0.0019579999999947972 0.0019579999999947972 0.0019077999999979056 -remove SortedList_Py35 1000000 0.024742000000003372 0.025224999999998943 0.024742000000003372 0.024961199999999906 -delitem SortedList_Py35 100 2.9999999995311555e-06 5.000000001587068e-06 2.9999999995311555e-06 4.000000001269655e-06 -delitem SortedList_Py35 1000 2.199999999419333e-05 2.2999999998774e-05 2.2999999998774e-05 2.239999999886777e-05 -delitem SortedList_Py35 10000 0.0004400000000046589 0.00047399999999697684 0.00047399999999697684 0.0004584000000008359 -delitem SortedList_Py35 100000 0.005214999999999748 0.005378000000000327 0.005214999999999748 0.005267800000000022 -delitem SortedList_Py35 1000000 0.06655399999999645 0.07117099999999965 0.06655399999999645 0.06835639999999898 -bisect SortedList_Py35 100 9.999999974752427e-07 2.9999999995311555e-06 9.999999974752427e-07 1.7999999997186933e-06 -bisect SortedList_Py35 1000 9.999999996068709e-06 1.100000000064938e-05 1.0000000003174137e-05 1.02000000012481e-05 -bisect SortedList_Py35 10000 0.00021999999999877673 0.00022299999999830789 0.0002210000000033574 0.00022080000000102018 -bisect SortedList_Py35 100000 0.0028170000000002915 0.002828999999998416 0.0028220000000018786 0.0028221999999999527 -bisect SortedList_Py35 1000000 0.03916500000000411 0.039724000000006754 0.039622999999998854 0.03947140000000075 -getitem SortedList_Py35 100 9.999999974752427e-07 2.0000000020559128e-06 9.999999974752427e-07 1.5999999988025592e-06 -getitem SortedList_Py35 1000 5.999999999062311e-06 7.000000003642981e-06 7.000000003642981e-06 6.600000001810713e-06 -getitem SortedList_Py35 10000 0.00021699999999924557 0.00022199999999372722 0.00022199999999372722 0.00021959999999836554 -getitem SortedList_Py35 100000 0.002625999999999351 0.002636000000002525 0.002636000000002525 0.002630599999999106 -getitem SortedList_Py35 1000000 0.033166999999998836 0.03422400000000181 0.03422400000000181 0.03365019999999959 -pop SortedList_Py35 100 1.9999999949504854e-06 2.9999999995311555e-06 1.9999999949504854e-06 2.2000000001298757e-06 -pop SortedList_Py35 1000 1.1999999998124622e-05 1.3000000002705292e-05 1.1999999998124622e-05 1.2600000000873025e-05 -pop SortedList_Py35 10000 0.00011099999999686361 0.00011700000000303135 0.00011599999999845068 0.00011420000000015307 -pop SortedList_Py35 100000 0.001122999999999763 0.0011620000000007735 0.0011620000000007735 0.0011426000000000157 -pop SortedList_Py35 1000000 0.01130399999999554 0.011898000000002185 0.011898000000002185 0.011599599999999554 -index SortedList_Py35 100 1.9999999949504854e-06 2.9999999995311555e-06 2.0000000020559128e-06 2.1999999987087903e-06 -index SortedList_Py35 1000 1.2999999995599865e-05 1.7999999997186933e-05 1.2999999995599865e-05 1.479999999816073e-05 -index SortedList_Py35 10000 0.0002649999999988495 0.00027700000000407954 0.0002650000000059549 0.0002676000000036538 -index SortedList_Py35 100000 0.003234999999996546 0.003444999999999254 0.003239000000000658 0.003297399999999584 -index SortedList_Py35 1000000 0.043785999999997216 0.0449040000000025 0.043920999999997434 0.04428479999999837 -iter SortedList_Py35 100 8.999999998593466e-06 1.0000000003174137e-05 9.999999996068709e-06 9.39999999900465e-06 -iter SortedList_Py35 1000 8.79999999980896e-05 0.00010300000000285081 8.899999999556485e-05 9.140000000087411e-05 -iter SortedList_Py35 10000 0.0009110000000021046 0.0009250000000022851 0.0009239999999977044 0.0009214000000000056 -iter SortedList_Py35 100000 0.009164000000005501 0.009367999999994936 0.009367999999994936 0.009253600000000972 -iter SortedList_Py35 1000000 0.0929180000000045 0.0945689999999999 0.09436099999999925 0.09391740000000084 -count SortedList_Py35 100 1.9999999949504854e-06 3.999999997006398e-06 2.0000000020559128e-06 2.599999999119973e-06 -count SortedList_Py35 1000 1.4999999997655777e-05 1.699999999971169e-05 1.6000000002236447e-05 1.620000000031041e-05 -count SortedList_Py35 10000 0.00016099999999852344 0.0001639999999980546 0.00016300000000057935 0.00016239999999925203 -count SortedList_Py35 100000 0.0021959999999978663 0.0022670000000033497 0.0022030000000015093 0.0022298000000006367 -count SortedList_Py35 1000000 0.02600699999999989 0.027085999999997057 0.027085999999997057 0.026412799999998526 -priorityqueue SortedList_Py35 100 2.200000000129876e-05 2.500000000793534e-05 2.200000000129876e-05 2.320000000111122e-05 -priorityqueue SortedList_Py35 1000 0.00023000000000195087 0.0002340000000060627 0.0002340000000060627 0.00023220000000208075 -priorityqueue SortedList_Py35 10000 0.0023169999999907986 0.0024980000000027758 0.002375000000000682 0.002387600000000134 -priorityqueue SortedList_Py35 100000 0.024798000000004095 0.025096000000004892 0.025096000000004892 0.024944599999997763 -priorityqueue SortedList_Py35 1000000 0.31558700000000783 0.3238410000000016 0.32231500000000324 0.31948639999999956 -multiset SortedList_Py35 100 2.099999998961266e-05 2.7000000002885827e-05 2.1000000003823516e-05 2.2999999998774e-05 -multiset SortedList_Py35 1000 0.00020499999999401552 0.0002110000000072887 0.00020499999999401552 0.00020739999999932479 -multiset SortedList_Py35 10000 0.0025189999999923884 0.0025830000000013342 0.0025830000000013342 0.002546799999998939 -multiset SortedList_Py35 100000 0.02758699999999692 0.027872999999999593 0.027814000000006445 0.027789400000000342 -multiset SortedList_Py35 1000000 0.3712060000000008 0.374763999999999 0.3714249999999879 0.3727177999999981 -ranking SortedList_Py35 100 2.2999999998774e-05 2.3999999996249244e-05 2.3999999996249244e-05 2.3799999996754196e-05 -ranking SortedList_Py35 1000 0.0002230000000054133 0.00022900000000447562 0.0002230000000054133 0.000225799999998344 -ranking SortedList_Py35 10000 0.003554999999991537 0.0035759999999953607 0.003554999999991537 0.003561999999993759 -ranking SortedList_Py35 100000 0.04177699999999618 0.042031999999991854 0.04192399999999452 0.04191919999999527 -ranking SortedList_Py35 1000000 0.5537780000000083 0.5592180000000013 0.5559340000000077 0.5563062000000031 -neighbor SortedList_Py35 100 2.500000000793534e-05 3.499999999689862e-05 2.500000000793534e-05 2.9599999999163627e-05 -neighbor SortedList_Py35 1000 0.00020899999999812735 0.00023000000000195087 0.00020899999999812735 0.00021959999999978663 -neighbor SortedList_Py35 10000 0.003239999999991028 0.00329599999999175 0.00329599999999175 0.003270399999996698 -neighbor SortedList_Py35 100000 0.03857599999999195 0.03901500000000624 0.03901500000000624 0.03876340000000198 -neighbor SortedList_Py35 1000000 0.5330880000000064 0.5444839999999971 0.5330880000000064 0.5395860000000028 -intervals SortedList_Py35 100 2.7000000002885827e-05 3.499999999689862e-05 3.100000000699765e-05 3.1000000004155484e-05 -intervals SortedList_Py35 1000 0.00025300000000072487 0.0002660000000105356 0.00025300000000072487 0.000260200000005284 -intervals SortedList_Py35 10000 0.004027000000007774 0.004121999999995296 0.004027000000007774 0.00407639999999958 -intervals SortedList_Py35 100000 0.04798399999999958 0.04849000000000103 0.04847999999999786 0.04829980000000091 -intervals SortedList_Py35 1000000 0.6390430000000009 0.6477780000000024 0.6477780000000024 0.6445210000000003 -init SortedList_Py35 100 2.099999998961266e-05 2.2999999998774e-05 2.200000000129876e-05 2.179999999896154e-05 -init SortedList_Py35 1000 0.00018199999999524152 0.0002709999999979118 0.00018300000000692762 0.000212999999999397 -init SortedList_Py35 10000 0.0024959999999936144 0.0025289999999955626 0.0025289999999955626 0.002503999999996154 -init SortedList_Py35 100000 0.03330800000000522 0.03346700000000169 0.033363999999991734 0.03338319999999726 -init SortedList_Py35 1000000 0.5672869999999932 0.5698919999999958 0.5672869999999932 0.5688531999999981 -add SortedList_PyPy 100 5.99999999995e-06 8.00000000001e-06 8.00000000001e-06 7.6e-06 -add SortedList_PyPy 1000 5.59999999999e-05 6.10000000001e-05 6.10000000001e-05 5.76e-05 -add SortedList_PyPy 10000 0.000784 0.002173 0.000784 0.0013352 -add SortedList_PyPy 100000 0.001021 0.010176 0.002408 0.0048136 -add SortedList_PyPy 1000000 0.012943 0.0193 0.015221 0.0149464 -update_small SortedList_PyPy 100 2.79999999999e-05 3.09999999999e-05 2.90000000001e-05 2.9e-05 -update_small SortedList_PyPy 1000 0.00027 0.003837 0.00027 0.001004 -update_small SortedList_PyPy 10000 0.000646 0.009205 0.001168 0.0034728 -update_small SortedList_PyPy 100000 0.007265 0.007844 0.007379 0.0074482 -update_small SortedList_PyPy 1000000 0.080168 0.091348 0.080168 0.0843152 -update_large SortedList_PyPy 100 2.90000000001e-05 3.40000000003e-05 3.09999999999e-05 3.1e-05 -update_large SortedList_PyPy 1000 9.69999999998e-05 0.000105 9.89999999996e-05 9.93999999999e-05 -update_large SortedList_PyPy 10000 0.001019 0.00114 0.001057 0.0010808 -update_large SortedList_PyPy 100000 0.013712 0.014605 0.013742 0.0140776 -update_large SortedList_PyPy 1000000 0.168178 0.185454 0.168555 0.175858 -contains SortedList_PyPy 100 5.99999999995e-06 7.00000000009e-06 5.99999999995e-06 6.40000000001e-06 -contains SortedList_PyPy 1000 4.50000000001e-05 5.79999999992e-05 4.50000000001e-05 5.01999999999e-05 -contains SortedList_PyPy 10000 0.000259999999999 0.001084 0.000259999999999 0.0005556 -contains SortedList_PyPy 100000 0.000576999999999 0.006547 0.000799000000001 0.0029604 -contains SortedList_PyPy 1000000 0.008062 0.023568 0.008179 0.0112644 -remove SortedList_PyPy 100 4.99999999981e-06 8.00000000023e-06 4.99999999981e-06 6.19999999998e-06 -remove SortedList_PyPy 1000 2.89999999996e-05 2.99999999998e-05 2.99999999998e-05 2.95999999999e-05 -remove SortedList_PyPy 10000 0.000278 0.000282 0.000278 0.0002802 -remove SortedList_PyPy 100000 0.000730999999999 0.021385 0.000878 0.0069796 -remove SortedList_PyPy 1000000 0.009425 0.009698 0.009662 0.0095776 -delitem SortedList_PyPy 100 1.09999999998e-05 1.40000000002e-05 1.09999999998e-05 1.24e-05 -delitem SortedList_PyPy 1000 3.49999999996e-05 3.69999999998e-05 3.49999999996e-05 3.59999999997e-05 -delitem SortedList_PyPy 10000 0.000686 0.002063 0.00134 0.001535 -delitem SortedList_PyPy 100000 0.000933000000001 0.009339 0.001055 0.0027926 -delitem SortedList_PyPy 1000000 0.005902 0.016202 0.016202 0.0083546 -bisect SortedList_PyPy 100 3.00000000131e-06 4.99999999981e-06 3.00000000131e-06 4.40000000026e-06 -bisect SortedList_PyPy 1000 1.9e-05 2.10000000003e-05 1.9e-05 1.95999999999e-05 -bisect SortedList_PyPy 10000 0.000376000000001 0.001135 0.000543 0.000791400000001 -bisect SortedList_PyPy 100000 0.004512 0.011711 0.006605 0.007154 -bisect SortedList_PyPy 1000000 0.00901 0.009919 0.00901 0.0094596 -getitem SortedList_PyPy 100 2.99999999953e-06 5.00000000159e-06 2.99999999953e-06 3.99999999985e-06 -getitem SortedList_PyPy 1000 1.39999999984e-05 1.50000000012e-05 1.39999999984e-05 1.45999999997e-05 -getitem SortedList_PyPy 10000 0.000378999999999 0.000384 0.000380999999999 0.0003812 -getitem SortedList_PyPy 100000 0.00041 0.003983 0.000661999999998 0.0017266 -getitem SortedList_PyPy 1000000 0.002627 0.004545 0.002646 0.003075 -pop SortedList_PyPy 100 7.99999999934e-06 1.10000000006e-05 8.00000000112e-06 9.00000000001e-06 -pop SortedList_PyPy 1000 1.40000000002e-05 1.59999999987e-05 1.40000000002e-05 1.52e-05 -pop SortedList_PyPy 10000 0.000125000000001 0.000126999999999 0.000126 0.000126 -pop SortedList_PyPy 100000 7.09999999984e-05 8.1999999999e-05 7.69999999992e-05 7.73999999989e-05 -pop SortedList_PyPy 1000000 0.000335000000002 0.000342 0.000342 0.0003396 -index SortedList_PyPy 100 5.99999999906e-06 7.99999999934e-06 5.99999999906e-06 6.99999999973e-06 -index SortedList_PyPy 1000 3.50000000005e-05 3.89999999992e-05 3.60000000015e-05 3.67999999998e-05 -index SortedList_PyPy 10000 0.000338999999999 0.000702 0.000344999999999 0.0004148 -index SortedList_PyPy 100000 0.005257 0.014484 0.006602 0.0081542 -index SortedList_PyPy 1000000 0.00947 0.024897 0.010006 0.0157564 -iter SortedList_PyPy 100 5.79999999992e-05 6.09999999988e-05 5.90000000003e-05 5.91999999997e-05 -iter SortedList_PyPy 1000 2.19999999995e-05 2.60000000001e-05 2.30000000006e-05 2.32e-05 -iter SortedList_PyPy 10000 0.000157 0.000214 0.000159 0.000173 -iter SortedList_PyPy 100000 0.000861999999998 0.002206 0.000990999999999 0.0013344 -iter SortedList_PyPy 1000000 0.00837 0.022301 0.00839 0.0111664 -count SortedList_PyPy 100 4.00000000056e-06 7.00000000009e-06 4.00000000056e-06 5.00000000052e-06 -count SortedList_PyPy 1000 3.09999999999e-05 3.29999999984e-05 3.20000000009e-05 3.19999999999e-05 -count SortedList_PyPy 10000 0.000334000000001 0.000402000000001 0.000402000000001 0.0003496 -count SortedList_PyPy 100000 0.00143 0.010589 0.001548 0.004738 -count SortedList_PyPy 1000000 0.013473 0.024711 0.024711 0.0160448 -priorityqueue SortedList_PyPy 100 5.7e-05 6.40000000001e-05 6.40000000001e-05 6.00000000002e-05 -priorityqueue SortedList_PyPy 1000 0.000375999999999 0.000468 0.000468 0.0004258 -priorityqueue SortedList_PyPy 10000 0.005452 0.010537 0.010537 0.007599 -priorityqueue SortedList_PyPy 100000 0.005919 0.022708 0.007259 0.0132372 -priorityqueue SortedList_PyPy 1000000 0.070016 0.085033 0.085033 0.0735608 -multiset SortedList_PyPy 100 4.2999999998e-05 6.40000000001e-05 4.2999999998e-05 5.00000000002e-05 -multiset SortedList_PyPy 1000 0.000335999999999 0.000361999999999 0.000338999999999 0.0003448 -multiset SortedList_PyPy 10000 0.006342 0.017144 0.006342 0.011157 -multiset SortedList_PyPy 100000 0.007406 0.026427 0.007447 0.0140752 -multiset SortedList_PyPy 1000000 0.0934 0.108239 0.094489 0.1000254 -ranking SortedList_PyPy 100 3.8e-05 0.000128 3.8e-05 6.27999999992e-05 -ranking SortedList_PyPy 1000 0.000297000000003 0.000311999999997 0.000298000000001 0.000301 -ranking SortedList_PyPy 10000 0.005016 0.037465 0.009058 0.0148988 -ranking SortedList_PyPy 100000 0.008008 0.03375 0.008008 0.0148586 -ranking SortedList_PyPy 1000000 0.076823 0.101713 0.080128 0.0837594 -neighbor SortedList_PyPy 100 3.29999999984e-05 8.5999999996e-05 3.29999999984e-05 5.51999999992e-05 -neighbor SortedList_PyPy 1000 0.000272000000002 0.00115 0.000272000000002 0.000457600000001 -neighbor SortedList_PyPy 10000 0.007524 0.01566 0.010508 0.0119632 -neighbor SortedList_PyPy 100000 0.007944 0.024837 0.010369 0.0129744 -neighbor SortedList_PyPy 1000000 0.103828 0.119501 0.103828 0.1073606 -intervals SortedList_PyPy 100 4.20000000005e-05 7.10000000019e-05 5.30000000012e-05 5.62000000002e-05 -intervals SortedList_PyPy 1000 0.000347000000001 0.001147 0.000406000000002 0.000543600000001 -intervals SortedList_PyPy 10000 0.009282 0.023768 0.016939 0.0170828 -intervals SortedList_PyPy 100000 0.008643 0.046947 0.009032 0.0193428 -intervals SortedList_PyPy 1000000 0.082097 0.091598 0.091598 0.08727 -init SortedList_PyPy 100 1.80000000007e-05 2.20000000013e-05 1.90000000018e-05 1.9600000001e-05 -init SortedList_PyPy 1000 7.6e-05 7.79999999985e-05 7.7000000001e-05 7.65999999999e-05 -init SortedList_PyPy 10000 0.000844999999998 0.000920000000001 0.000920000000001 0.000863199999999 -init SortedList_PyPy 100000 0.010878 0.011866 0.011866 0.0112208 -init SortedList_PyPy 1000000 0.131761 0.158325 0.132763 0.1387614 +add SortedList_Py36 100 3.0000000013075123e-06 6.000000000838668e-06 4.000000000559112e-06 4.400000000259751e-06 +add SortedList_Py36 1000 1.799999999896329e-05 1.8999999999991246e-05 1.799999999896329e-05 1.8399999999374473e-05 +add SortedList_Py36 10000 0.0001650000000008589 0.00021499999999896602 0.0001650000000008589 0.00017540000000053623 +add SortedList_Py36 100000 0.0018770000000003506 0.0022479999999998057 0.0019119999999990256 0.00197579999999995 +add SortedList_Py36 1000000 0.025031000000000247 0.0275540000000003 0.025603000000000264 0.02588720000000002 +update_small SortedList_Py36 100 1.4999999999432134e-05 1.600000000046009e-05 1.4999999999432134e-05 1.5399999999488045e-05 +update_small SortedList_Py36 1000 0.00015499999999946112 0.00015900000000002024 0.00015600000000048908 0.00015660000000004005 +update_small SortedList_Py36 10000 0.0016479999999994277 0.0018250000000001876 0.0016899999999999693 0.0017056000000000183 +update_small SortedList_Py36 100000 0.01842000000000077 0.018912999999999514 0.018525000000000347 0.018599199999999882 +update_small SortedList_Py36 1000000 0.22294099999999872 0.22647800000000018 0.22482300000000066 0.22483739999999913 +update_large SortedList_Py36 100 2.1999999997746045e-05 2.3999999999801958e-05 2.200000000129876e-05 2.259999999907336e-05 +update_large SortedList_Py36 1000 0.000226999999998867 0.00023399999999895726 0.00022799999999989495 0.00022939999999920245 +update_large SortedList_Py36 10000 0.0030959999999993215 0.0031970000000001164 0.0031330000000018288 0.003133400000000108 +update_large SortedList_Py36 100000 0.039533999999999736 0.039965999999999724 0.039867000000000985 0.039783200000000817 +update_large SortedList_Py36 1000000 0.6101419999999997 0.6381559999999986 0.6262419999999977 0.6261335999999993 +contains SortedList_Py36 100 2.0000000020559128e-06 4.000000000559112e-06 2.9999999995311555e-06 3.000000000952241e-06 +contains SortedList_Py36 1000 9.999999999621423e-06 1.100000000064938e-05 1.0999999997096666e-05 1.0599999999527654e-05 +contains SortedList_Py36 10000 9.700000000023579e-05 0.00010200000000182285 9.800000000126374e-05 9.880000000066503e-05 +contains SortedList_Py36 100000 0.00122299999999953 0.0012970000000009918 0.001246999999999332 0.0012526000000001147 +contains SortedList_Py36 1000000 0.015520000000002199 0.01594599999999957 0.015700999999999965 0.015729400000000025 +remove SortedList_Py36 100 2.9999999995311555e-06 4.9999999980343546e-06 4.000000000559112e-06 3.999999999138026e-06 +remove SortedList_Py36 1000 1.8000000000739647e-05 2.8999999997836312e-05 1.9999999999242846e-05 2.119999999976585e-05 +remove SortedList_Py36 10000 0.00017500000000225668 0.0001889999999988845 0.00017600000000328464 0.0001806000000009078 +remove SortedList_Py36 100000 0.0019810000000006767 0.0021020000000007144 0.00198999999999927 0.0020194000000003597 +remove SortedList_Py36 1000000 0.025354999999997574 0.025956000000000756 0.025604000000001292 0.025616600000000746 +delitem SortedList_Py36 100 5.000000001587068e-06 6.999999996537554e-06 5.999999999062311e-06 5.799999999567262e-06 +delitem SortedList_Py36 1000 2.5999999998305157e-05 3.0999999999892225e-05 2.800000000036107e-05 2.8199999999856117e-05 +delitem SortedList_Py36 10000 0.000476999999996508 0.0005000000000023874 0.0004880000000042628 0.0004884000000004107 +delitem SortedList_Py36 100000 0.005493999999998778 0.005729999999999791 0.005639999999999645 0.005621599999999205 +delitem SortedList_Py36 1000000 0.06923900000000316 0.0708800000000025 0.06985999999999848 0.07008960000000002 +bisect SortedList_Py36 100 2.9999999995311555e-06 3.999999997006398e-06 2.9999999995311555e-06 3.3999999985212525e-06 +bisect SortedList_Py36 1000 1.100000000064938e-05 1.1999999998124622e-05 1.1999999998124622e-05 1.1599999999134525e-05 +bisect SortedList_Py36 10000 0.00021999999999877673 0.00022399999999578313 0.0002210000000033574 0.0002215999999975793 +bisect SortedList_Py36 100000 0.0027780000000063865 0.002805999999999642 0.002790999999994881 0.002790199999999743 +bisect SortedList_Py36 1000000 0.03744800000000481 0.038862999999999204 0.03832700000000244 0.03818520000000092 +getitem SortedList_Py36 100 1.9999999949504854e-06 2.9999999995311555e-06 2.0000000020559128e-06 2.399999998203839e-06 +getitem SortedList_Py36 1000 7.999999994012796e-06 9.999999996068709e-06 8.999999998593466e-06 8.799999999098419e-06 +getitem SortedList_Py36 10000 0.00023399999999895726 0.00023799999999596366 0.00023600000000101318 0.00023579999999867596 +getitem SortedList_Py36 100000 0.0027790000000038617 0.002950999999995929 0.0028190000000023474 0.002830400000000566 +getitem SortedList_Py36 1000000 0.03455799999999698 0.037029000000003975 0.034708999999999435 0.03527400000000114 +pop SortedList_Py36 100 2.9999999995311555e-06 5.999999999062311e-06 3.999999997006398e-06 4.199999999343618e-06 +pop SortedList_Py36 1000 1.4999999997655777e-05 1.6000000002236447e-05 1.5000000004761205e-05 1.5400000000909132e-05 +pop SortedList_Py36 10000 0.0001260000000016248 0.00013100000000321188 0.00012699999999910005 0.00012760000000184847 +pop SortedList_Py36 100000 0.0012459999999947513 0.0012940000000014606 0.0012490000000013879 0.001261999999998409 +pop SortedList_Py36 1000000 0.012709999999998445 0.013488999999999862 0.012872000000001549 0.01297919999999948 +index SortedList_Py36 100 2.9999999995311555e-06 4.0000000041118255e-06 2.9999999995311555e-06 3.399999999942338e-06 +index SortedList_Py36 1000 1.5000000004761205e-05 1.6000000002236447e-05 1.6000000002236447e-05 1.5800000001320312e-05 +index SortedList_Py36 10000 0.0002610000000018431 0.0002769999999969741 0.0002649999999988495 0.0002667999999985682 +index SortedList_Py36 100000 0.0031409999999993943 0.0033670000000043387 0.003327000000005853 0.0032654000000022164 +index SortedList_Py36 1000000 0.04185199999999867 0.0427309999999963 0.04242500000000149 0.04237899999999968 +iter SortedList_Py36 100 9.999999996068709e-06 1.4000000000180535e-05 1.100000000064938e-05 1.160000000055561e-05 +iter SortedList_Py36 1000 8.899999999556485e-05 9.399999999715192e-05 8.900000000267028e-05 9.07999999995468e-05 +iter SortedList_Py36 10000 0.0009080000000025734 0.0009820000000004825 0.0009090000000000487 0.000932400000002076 +iter SortedList_Py36 100000 0.009134000000003084 0.009698000000000206 0.00938899999999876 0.009386400000001061 +iter SortedList_Py36 1000000 0.0916080000000008 0.0944640000000021 0.09226199999999807 0.09256060000000162 +count SortedList_Py36 100 2.9999999995311555e-06 4.999999994481641e-06 2.9999999995311555e-06 3.599999998016301e-06 +count SortedList_Py36 1000 1.599999999513102e-05 1.7999999997186933e-05 1.699999999971169e-05 1.6999999998290606e-05 +count SortedList_Py36 10000 0.00016300000000057935 0.00017099999999459214 0.00016300000000057935 0.00016479999999887695 +count SortedList_Py36 100000 0.0021209999999953766 0.002195000000000391 0.0021459999999962065 0.0021481999999977573 +count SortedList_Py36 1000000 0.02433300000000571 0.02506999999999948 0.024588999999998862 0.024653000000000702 +priorityqueue SortedList_Py36 100 2.5999999998305157e-05 2.9999999995311555e-05 2.7000000002885827e-05 2.7599999999949886e-05 +priorityqueue SortedList_Py36 1000 0.0002589999999997872 0.0002649999999988495 0.00026199999999931833 0.0002622000000002345 +priorityqueue SortedList_Py36 10000 0.002605000000002633 0.002670999999999424 0.002653999999999712 0.0026474000000007436 +priorityqueue SortedList_Py36 100000 0.02757800000000543 0.03581799999999902 0.027949999999997033 0.029419400000001872 +priorityqueue SortedList_Py36 1000000 0.3430259999999947 0.3477409999999992 0.3446819999999917 0.34540199999999854 +multiset SortedList_Py36 100 2.3999999996249244e-05 2.7000000002885827e-05 2.4999999993724487e-05 2.5199999998903878e-05 +multiset SortedList_Py36 1000 0.00022299999999120246 0.0002309999999994261 0.00022400000000288856 0.00022600000000068122 +multiset SortedList_Py36 10000 0.0026519999999976562 0.0027050000000059526 0.0026519999999976562 0.0026719999999983203 +multiset SortedList_Py36 100000 0.028645999999994842 0.02928900000000567 0.029002999999988788 0.029025799999993752 +multiset SortedList_Py36 1000000 0.387605999999991 0.38980800000000215 0.38816599999999823 0.38830059999999944 +ranking SortedList_Py36 100 2.800000000036107e-05 3.699999999184911e-05 3.000000000952241e-05 3.1400000000303405e-05 +ranking SortedList_Py36 1000 0.0002559999999931506 0.00032099999999957163 0.0002589999999997872 0.000271799999995892 +ranking SortedList_Py36 10000 0.0037889999999976 0.0039439999999899555 0.003862999999995509 0.0038547999999934746 +ranking SortedList_Py36 100000 0.043925000000001546 0.04416299999999751 0.04400599999999599 0.044036599999998316 +ranking SortedList_Py36 1000000 0.5705609999999979 0.5750240000000133 0.5745830000000041 0.5735228000000063 +neighbor SortedList_Py36 100 2.2999999998774e-05 3.100000000699765e-05 2.7000000002885827e-05 2.640000000155851e-05 +neighbor SortedList_Py36 1000 0.00023399999999185184 0.0002539999999982001 0.00024399999999502597 0.00024379999999553094 +neighbor SortedList_Py36 10000 0.003401999999994132 0.003448000000005891 0.0034139999999922566 0.0034225999999989653 +neighbor SortedList_Py36 100000 0.03961200000000531 0.040716000000003305 0.03989900000000546 0.04009700000000009 +neighbor SortedList_Py36 1000000 0.5418409999999909 0.5505160000000018 0.5442249999999973 0.5456599999999951 +intervals SortedList_Py36 100 2.9999999995311555e-05 3.8000000003535206e-05 3.499999999689862e-05 3.4399999998413476e-05 +intervals SortedList_Py36 1000 0.0002789999999919246 0.0002910000000042601 0.00028700000000014825 0.0002857999999974936 +intervals SortedList_Py36 10000 0.004247000000006551 0.004334999999997535 0.0042839999999984 0.004291399999999612 +intervals SortedList_Py36 100000 0.05050799999999356 0.050981999999990535 0.05068500000000142 0.05072739999999669 +intervals SortedList_Py36 1000000 0.6593579999999974 0.683441000000002 0.6675359999999984 0.6695738000000006 +init SortedList_Py36 100 1.4000000007285962e-05 1.6000000002236447e-05 1.5000000004761205e-05 1.5000000001919033e-05 +init SortedList_Py36 1000 0.000160999999991418 0.00016499999999552983 0.00016300000000057935 0.00016279999999824213 +init SortedList_Py36 10000 0.0022149999999925285 0.002466999999995778 0.002220999999991591 0.0022759999999948377 +init SortedList_Py36 100000 0.030724000000006413 0.031018999999986363 0.03082899999999711 0.030850399999999924 +init SortedList_Py36 1000000 0.5280719999999945 0.541955999999999 0.5355090000000047 0.5349019999999995 +add SortedList_Py27 100 4.99999999981e-06 6.00000000084e-06 5.99999999906e-06 5.60000000007e-06 +add SortedList_Py27 1000 2.89999999996e-05 3.00000000006e-05 2.89999999996e-05 2.91999999998e-05 +add SortedList_Py27 10000 0.000229000000001 0.000234000000001 0.000231999999999 0.0002316 +add SortedList_Py27 100000 0.002509 0.002706 0.002556 0.0025776 +add SortedList_Py27 1000000 0.032215 0.034093 0.032678 0.0329566 +update_small SortedList_Py27 100 2.30000000006e-05 2.39999999998e-05 2.39999999998e-05 2.36000000001e-05 +update_small SortedList_Py27 1000 0.000219000000001 0.000220000000001 0.000220000000001 0.000219800000001 +update_small SortedList_Py27 10000 0.002258 0.002306 0.002269 0.002281 +update_small SortedList_Py27 100000 0.024072 0.024972 0.024232 0.0243512 +update_small SortedList_Py27 1000000 0.268289 0.271479 0.271169 0.2705138 +update_large SortedList_Py27 100 2.39999999998e-05 2.50000000008e-05 2.39999999998e-05 2.42e-05 +update_large SortedList_Py27 1000 0.000207000000003 0.000209000000002 0.000208999999998 0.000208400000001 +update_large SortedList_Py27 10000 0.002549 0.002598 0.002554 0.002569 +update_large SortedList_Py27 100000 0.034275 0.034641 0.034454 0.0344408 +update_large SortedList_Py27 1000000 0.564191 0.580027 0.569077 0.5712914 +contains SortedList_Py27 100 2.99999999953e-06 4.00000000056e-06 4.00000000056e-06 3.60000000086e-06 +contains SortedList_Py27 1000 1.40000000002e-05 1.60000000022e-05 1.49999999977e-05 1.49999999998e-05 +contains SortedList_Py27 10000 0.000129999999999 0.000131 0.000131 0.0001306 +contains SortedList_Py27 100000 0.001509 0.001582 0.001538 0.0015384 +contains SortedList_Py27 1000000 0.019152 0.019535 0.01926 0.0193272 +remove SortedList_Py27 100 4.99999999803e-06 5.99999999906e-06 5.00000000159e-06 5.39999999916e-06 +remove SortedList_Py27 1000 2.69999999993e-05 2.90000000014e-05 2.80000000004e-05 2.79999999997e-05 +remove SortedList_Py27 10000 0.000261000000002 0.000343999999998 0.000263 0.0002786 +remove SortedList_Py27 100000 0.002811 0.003039 0.002821 0.0028828 +remove SortedList_Py27 1000000 0.035495 0.036264 0.035858 0.0358468 +delitem SortedList_Py27 100 5.99999999906e-06 8.00000000112e-06 6.99999999654e-06 6.99999999938e-06 +delitem SortedList_Py27 1000 3.79999999964e-05 3.9000000001e-05 3.80000000035e-05 3.82000000002e-05 +delitem SortedList_Py27 10000 0.000787000000003 0.000828000000006 0.000810999999999 0.000807400000002 +delitem SortedList_Py27 100000 0.009636 0.010017 0.009796 0.0098078 +delitem SortedList_Py27 1000000 0.12118 0.122962 0.121622 0.1218906 +bisect SortedList_Py27 100 4.00000000411e-06 5.00000000159e-06 4.00000000411e-06 4.40000000168e-06 +bisect SortedList_Py27 1000 1.60000000022e-05 1.80000000043e-05 1.79999999972e-05 1.74000000001e-05 +bisect SortedList_Py27 10000 0.000329999999998 0.000336999999995 0.000333000000005 0.0003334 +bisect SortedList_Py27 100000 0.004142 0.00422200000001 0.004167 0.0041744 +bisect SortedList_Py27 1000000 0.055886 0.059278 0.057515 0.0575404 +getitem SortedList_Py27 100 2.99999999953e-06 5.00000000159e-06 3.99999999701e-06 3.79999999893e-06 +getitem SortedList_Py27 1000 1.30000000027e-05 1.49999999977e-05 1.40000000002e-05 1.40000000002e-05 +getitem SortedList_Py27 10000 0.000450000000001 0.000481000000001 0.000452000000003 0.000457200000001 +getitem SortedList_Py27 100000 0.005599 0.005682 0.00566000000001 0.0056416 +getitem SortedList_Py27 1000000 0.06932 0.069762 0.069544 0.0695746 +pop SortedList_Py27 100 5.00000000159e-06 5.99999999906e-06 5.00000000159e-06 5.40000000058e-06 +pop SortedList_Py27 1000 2.40000000034e-05 2.59999999983e-05 2.50000000008e-05 2.51999999989e-05 +pop SortedList_Py27 10000 0.000208999999998 0.000211 0.000210000000003 0.000209800000002 +pop SortedList_Py27 100000 0.002057 0.002107 0.002066 0.0020782 +pop SortedList_Py27 1000000 0.020965 0.021649 0.021187 0.0212316 +index SortedList_Py27 100 4.99999999448e-06 5.99999999906e-06 5.00000000159e-06 5.19999999824e-06 +index SortedList_Py27 1000 2.69999999958e-05 2.80000000004e-05 2.69999999958e-05 2.71999999981e-05 +index SortedList_Py27 10000 0.000450999999998 0.000458000000002 0.000453999999998 0.0004544 +index SortedList_Py27 100000 0.005233 0.005312 0.005278 0.0052754 +index SortedList_Py27 1000000 0.067246 0.069132 0.068308 0.0682764 +iter SortedList_Py27 100 2.09999999967e-05 2.29999999988e-05 2.20000000013e-05 2.2199999998e-05 +iter SortedList_Py27 1000 0.000183 0.000184000000004 0.000183 0.000183400000002 +iter SortedList_Py27 10000 0.001803 0.001881 0.001805 0.0018284 +iter SortedList_Py27 100000 0.018057 0.018134 0.018101 0.018101 +iter SortedList_Py27 1000000 0.183864 0.187691 0.186797 0.1859794 +count SortedList_Py27 100 3.99999999701e-06 5.99999999906e-06 3.99999999701e-06 4.39999999884e-06 +count SortedList_Py27 1000 2.29999999988e-05 4.20000000005e-05 2.30000000059e-05 2.6800000002e-05 +count SortedList_Py27 10000 0.000253999999998 0.00029 0.000254999999996 0.0002618 +count SortedList_Py27 100000 0.002563 0.002799 0.00259 0.0026518 +count SortedList_Py27 1000000 0.029672 0.031056 0.030678 0.030532 +priorityqueue SortedList_Py27 100 3.9000000001e-05 5.49999999961e-05 3.9000000001e-05 4.41999999993e-05 +priorityqueue SortedList_Py27 1000 0.000349999999997 0.000396000000002 0.000366999999997 0.0003688 +priorityqueue SortedList_Py27 10000 0.003615 0.003835 0.003696 0.0037028 +priorityqueue SortedList_Py27 100000 0.038076 0.038656 0.038242 0.0382858 +priorityqueue SortedList_Py27 1000000 0.444885 0.451387 0.447218 0.4478082 +multiset SortedList_Py27 100 4.60000000118e-05 6.10000000023e-05 4.80000000067e-05 5.06000000058e-05 +multiset SortedList_Py27 1000 0.000282999999996 0.000298000000001 0.000288000000012 0.000290600000002 +multiset SortedList_Py27 10000 0.003523 0.003641 0.00359899999999 0.0035918 +multiset SortedList_Py27 100000 0.038571 0.039055 0.038848 0.0388484 +multiset SortedList_Py27 1000000 0.488409 0.493714 0.491175 0.490903 +ranking SortedList_Py27 100 3.9000000001e-05 6.79999999988e-05 3.99999999985e-05 4.56000000014e-05 +ranking SortedList_Py27 1000 0.000351999999992 0.000358000000006 0.000353000000004 0.000353999999999 +ranking SortedList_Py27 10000 0.005747 0.00604299999999 0.00578 0.0058214 +ranking SortedList_Py27 100000 0.069696 0.070031 0.069721 0.0697842 +ranking SortedList_Py27 1000000 0.873583 0.876656 0.87445 0.8748472 +neighbor SortedList_Py27 100 3.30000000019e-05 5.60000000007e-05 4.59999999975e-05 4.33999999984e-05 +neighbor SortedList_Py27 1000 0.000323999999992 0.000386999999989 0.000349 0.000357599999995 +neighbor SortedList_Py27 10000 0.00517599999999 0.005368 0.00521500000001 0.005238 +neighbor SortedList_Py27 100000 0.062371 0.063121 0.06252 0.0626844 +neighbor SortedList_Py27 1000000 0.788003 0.801527 0.789127 0.7920806 +intervals SortedList_Py27 100 5.80000000099e-05 7.39999999979e-05 6.30000000115e-05 6.46000000074e-05 +intervals SortedList_Py27 1000 0.000377999999998 0.000406999999996 0.000389000000013 0.000389600000003 +intervals SortedList_Py27 10000 0.00639899999999 0.00653899999999 0.006471 0.0064582 +intervals SortedList_Py27 100000 0.080056 0.081116 0.08034 0.0805066 +intervals SortedList_Py27 1000000 1.015942 1.041253 1.019577 1.0234238 +init SortedList_Py27 100 1.50000000048e-05 1.80000000114e-05 1.69999999997e-05 1.64000000041e-05 +init SortedList_Py27 1000 0.000146000000001 0.000147000000013 0.000146999999998 0.000146800000002 +init SortedList_Py27 10000 0.001938 0.001948 0.00193899999999 0.0019404 +init SortedList_Py27 100000 0.025872 0.026131 0.025927 0.0259662 +init SortedList_Py27 1000000 0.460304 0.48284 0.46602 0.4690878 +add SortedList_PyPy 100 2e-05 2.4e-05 2.1e-05 2.18e-05 +add SortedList_PyPy 1000 0.000133 0.000135 0.000134 0.000134 +add SortedList_PyPy 10000 0.001022 0.002126 0.001826 0.001624 +add SortedList_PyPy 100000 0.000706 0.009444 0.002507 0.0043316 +add SortedList_PyPy 1000000 0.009677 0.013601 0.010685 0.0114206 +update_small SortedList_PyPy 100 2.90000000005e-05 3.2e-05 3.09999999999e-05 3.08000000001e-05 +update_small SortedList_PyPy 1000 0.00025 0.002246 0.00025 0.0006496 +update_small SortedList_PyPy 10000 0.000601000000001 0.007728 0.002228 0.002908 +update_small SortedList_PyPy 100000 0.004942 0.005732 0.005086 0.0052524 +update_small SortedList_PyPy 1000000 0.053145 0.055807 0.053472 0.0540052 +update_large SortedList_PyPy 100 2.79999999995e-05 3.2e-05 2.80000000004e-05 2.92000000001e-05 +update_large SortedList_PyPy 1000 0.000109 0.000118 0.000112 0.0001132 +update_large SortedList_PyPy 10000 0.001132 0.001342 0.001182 0.0012196 +update_large SortedList_PyPy 100000 0.014781 0.01531 0.015231 0.0151286 +update_large SortedList_PyPy 1000000 0.16877 0.192279 0.180976 0.1807552 +contains SortedList_PyPy 100 7.99999999934e-06 8.99999999948e-06 8.00000000023e-06 8.1999999999e-06 +contains SortedList_PyPy 1000 5.09999999991e-05 5.80000000001e-05 5.1e-05 5.23999999999e-05 +contains SortedList_PyPy 10000 0.000243999999999 0.000928999999999 0.000253000000001 0.0004676 +contains SortedList_PyPy 100000 0.000354 0.005398 0.00052 0.0023216 +contains SortedList_PyPy 1000000 0.004624 0.016136 0.004914 0.0071716 +remove SortedList_PyPy 100 7.99999999934e-06 9.99999999962e-06 8.00000000023e-06 8.59999999996e-06 +remove SortedList_PyPy 1000 3.00000000006e-05 3.30000000002e-05 3.2e-05 3.18000000002e-05 +remove SortedList_PyPy 10000 0.000265 0.000319 0.000271000000001 0.0002882 +remove SortedList_PyPy 100000 0.000667000000001 0.00839 0.000680999999999 0.0032728 +remove SortedList_PyPy 1000000 0.00629 0.007187 0.006537 0.0066546 +delitem SortedList_PyPy 100 1.50000000003e-05 1.79999999999e-05 1.59999999987e-05 1.59999999999e-05 +delitem SortedList_PyPy 1000 3.99999999994e-05 4.10000000004e-05 4.10000000004e-05 4.06000000002e-05 +delitem SortedList_PyPy 10000 0.001285 0.001794 0.001549 0.0015572 +delitem SortedList_PyPy 100000 0.000939 0.00493 0.001022 0.0018358 +delitem SortedList_PyPy 1000000 0.005838 0.006354 0.005934 0.0059872 +bisect SortedList_PyPy 100 5.99999999906e-06 7.99999999934e-06 7.00000000009e-06 6.8000000006e-06 +bisect SortedList_PyPy 1000 1.9e-05 2.10000000003e-05 1.99999999992e-05 2e-05 +bisect SortedList_PyPy 10000 0.000354999999999 0.001159 0.000520999999999 0.000653599999999 +bisect SortedList_PyPy 100000 0.004009 0.008369 0.005833 0.005961 +bisect SortedList_PyPy 1000000 0.006263 0.018023 0.006812 0.0088896 +getitem SortedList_PyPy 100 5.99999999906e-06 7.00000000187e-06 7.00000000009e-06 6.60000000039e-06 +getitem SortedList_PyPy 1000 1.69999999997e-05 1.9e-05 1.80000000007e-05 1.8e-05 +getitem SortedList_PyPy 10000 0.000372 0.000442999999999 0.000382 0.0003928 +getitem SortedList_PyPy 100000 0.000413000000002 0.002891 0.00043 0.000956200000001 +getitem SortedList_PyPy 1000000 0.002756 0.005646 0.003225 0.0036866 +pop SortedList_PyPy 100 1.00000000014e-05 1.30000000009e-05 1.19999999999e-05 1.16000000009e-05 +pop SortedList_PyPy 1000 1.69999999997e-05 1.9e-05 1.80000000007e-05 1.80000000004e-05 +pop SortedList_PyPy 10000 0.000128 0.000130000000002 0.000129999999999 0.0001294 +pop SortedList_PyPy 100000 5.40000000004e-05 7.69999999992e-05 7.19999999994e-05 6.95999999998e-05 +pop SortedList_PyPy 1000000 0.000293000000001 0.000385999999999 0.000295000000001 0.000313599999999 +index SortedList_PyPy 100 8.00000000112e-06 9.99999999962e-06 9.00000000037e-06 9.00000000037e-06 +index SortedList_PyPy 1000 3.39999999994e-05 3.70000000007e-05 3.59999999997e-05 3.56e-05 +index SortedList_PyPy 10000 0.000332999999999 0.000383000000001 0.000335999999999 0.0003448 +index SortedList_PyPy 100000 0.0043 0.012273 0.005926 0.006998 +index SortedList_PyPy 1000000 0.006096 0.00675 0.006308 0.0064298 +iter SortedList_PyPy 100 5.20000000002e-05 5.29999999994e-05 5.29999999994e-05 5.25999999997e-05 +iter SortedList_PyPy 1000 2.39999999998e-05 2.80000000021e-05 2.49999999991e-05 2.58000000002e-05 +iter SortedList_PyPy 10000 0.000138999999999 0.000149000000002 0.000141999999999 0.0001432 +iter SortedList_PyPy 100000 0.000913000000001 0.00214 0.000940000000002 0.0011834 +iter SortedList_PyPy 1000000 0.007549 0.019922 0.007949 0.0102208 +count SortedList_PyPy 100 5.99999999906e-06 8.00000000112e-06 7.00000000009e-06 6.99999999973e-06 +count SortedList_PyPy 1000 2.60000000001e-05 2.80000000004e-05 2.69999999993e-05 2.7e-05 +count SortedList_PyPy 10000 0.000288999999999 0.000329000000001 0.000292000000002 0.0003012 +count SortedList_PyPy 100000 0.000884999999998 0.0096 0.001132 0.0042446 +count SortedList_PyPy 1000000 0.007248 0.008226 0.007941 0.0077634 +priorityqueue SortedList_PyPy 100 5.60000000007e-05 6.09999999988e-05 5.79999999992e-05 5.84e-05 +priorityqueue SortedList_PyPy 1000 0.000350000000001 0.000440000000001 0.000375999999999 0.000382400000001 +priorityqueue SortedList_PyPy 10000 0.004105 0.021281 0.007609 0.0093112 +priorityqueue SortedList_PyPy 100000 0.004337 0.013837 0.004639 0.0079218 +priorityqueue SortedList_PyPy 1000000 0.050885 0.06712 0.053608 0.0565932 +multiset SortedList_PyPy 100 4.50000000001e-05 6.60000000003e-05 4.90000000006e-05 5.16000000005e-05 +multiset SortedList_PyPy 1000 0.000328 0.000384 0.000337000000002 0.000343399999999 +multiset SortedList_PyPy 10000 0.004974 0.012581 0.009395 0.0094512 +multiset SortedList_PyPy 100000 0.004687 0.014691 0.005036 0.0068866 +multiset SortedList_PyPy 1000000 0.055817 0.073237 0.056152 0.0594666 +ranking SortedList_PyPy 100 3.50000000005e-05 6.00000000013e-05 4.20000000005e-05 4.44000000009e-05 +ranking SortedList_PyPy 1000 0.000289000000002 0.000339 0.000298000000001 0.000306000000001 +ranking SortedList_PyPy 10000 0.005964 0.015123 0.008949 0.00982 +ranking SortedList_PyPy 100000 0.006003 0.018609 0.007412 0.0103096 +ranking SortedList_PyPy 1000000 0.05422 0.067642 0.055228 0.0575034 +neighbor SortedList_PyPy 100 3.39999999994e-05 7.50000000025e-05 6.00000000013e-05 5.28000000017e-05 +neighbor SortedList_PyPy 1000 0.000254999999999 0.001009 0.000271999999995 0.000414000000001 +neighbor SortedList_PyPy 10000 0.005966 0.024879 0.011225 0.0129864 +neighbor SortedList_PyPy 100000 0.005918 0.021443 0.008365 0.0101428 +neighbor SortedList_PyPy 1000000 0.066036 0.067726 0.067034 0.066825 +intervals SortedList_PyPy 100 4.99999999981e-05 8.10000000016e-05 7.19999999994e-05 6.82000000005e-05 +intervals SortedList_PyPy 1000 0.000392000000002 0.001018 0.000415 0.000533400000001 +intervals SortedList_PyPy 10000 0.008771 0.018332 0.014984 0.0141918 +intervals SortedList_PyPy 100000 0.007077 0.036983 0.008231 0.0140156 +intervals SortedList_PyPy 1000000 0.063993 0.074863 0.069252 0.0693392 +init SortedList_PyPy 100 1.99999999992e-05 2.50000000008e-05 2.10000000003e-05 2.16000000002e-05 +init SortedList_PyPy 1000 9.00000000037e-05 9.29999999961e-05 9.20000000022e-05 9.16000000011e-05 +init SortedList_PyPy 10000 0.000955000000001 0.001045 0.000962999999999 0.000977400000001 +init SortedList_PyPy 100000 0.011811 0.014879 0.012164 0.0125856 +init SortedList_PyPy 1000000 0.143197 0.164691 0.156464 0.1554872 diff -Nru sortedcontainers-1.5.9/tests/results_runtime_sortedset.txt sortedcontainers-2.0.4/tests/results_runtime_sortedset.txt --- sortedcontainers-1.5.9/tests/results_runtime_sortedset.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/results_runtime_sortedset.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,570 +1,570 @@ -contains SortedSet_Py27 100 9.99999999252e-07 2.00000000028e-06 1.00000000014e-06 1.40000000002e-06 -contains SortedSet_Py27 1000 2.99999999953e-06 4.00000000056e-06 3.00000000042e-06 3.60000000015e-06 -contains SortedSet_Py27 10000 1.59999999996e-05 1.9e-05 1.60000000005e-05 1.68e-05 -contains SortedSet_Py27 100000 0.000238 0.000249 0.000238 0.0002436 -contains SortedSet_Py27 1000000 0.003095 0.004027 0.003095 0.0034184 -iter SortedSet_Py27 100 8.00000000112e-06 1.9e-05 9.00000000037e-06 1.12000000001e-05 -iter SortedSet_Py27 1000 7.30000000004e-05 7.7000000001e-05 7.39999999997e-05 7.50000000004e-05 -iter SortedSet_Py27 10000 0.00071 0.000725999999998 0.000724 0.000716599999999 -iter SortedSet_Py27 100000 0.007101 0.00724 0.007111 0.0071444 -iter SortedSet_Py27 1000000 0.073348 0.074226 0.07341 0.0735724 -add SortedSet_Py27 100 2.00000000028e-06 4.00000000056e-06 2.00000000028e-06 3.19999999974e-06 -add SortedSet_Py27 1000 1.99999999992e-05 2.10000000003e-05 1.99999999992e-05 2.02000000002e-05 -add SortedSet_Py27 10000 0.000182000000001 0.000184000000001 0.000183999999999 0.0001834 -add SortedSet_Py27 100000 0.002077 0.002309 0.00213 0.0022226 -add SortedSet_Py27 1000000 0.021286 0.022539 0.021386 0.0217806 -update_tiny SortedSet_Py27 100 1.69999999997e-05 1.90000000018e-05 1.89999999982e-05 1.77999999998e-05 -update_tiny SortedSet_Py27 1000 1.50000000012e-05 1.69999999997e-05 1.59999999987e-05 1.58000000006e-05 -update_tiny SortedSet_Py27 10000 1.69999999997e-05 2.10000000003e-05 1.80000000007e-05 1.88000000009e-05 -update_tiny SortedSet_Py27 100000 2.90000000014e-05 3.20000000009e-05 2.90000000014e-05 3.02000000005e-05 -update_tiny SortedSet_Py27 1000000 3.99999999985e-05 7.00000000009e-05 4.20000000005e-05 4.73999999997e-05 -update_small SortedSet_Py27 100 1.40000000002e-05 1.70000000033e-05 1.40000000002e-05 1.50000000012e-05 -update_small SortedSet_Py27 1000 0.000126000000002 0.000129000000001 0.000126000000002 0.0001276 -update_small SortedSet_Py27 10000 0.001314 0.001332 0.001319 0.0013244 -update_small SortedSet_Py27 100000 0.012882 0.013012 0.012902 0.0129514 -update_small SortedSet_Py27 1000000 0.163944 0.165587 0.163944 0.1645032 -update_medium SortedSet_Py27 100 9.99999999962e-06 1.10000000006e-05 9.99999999962e-06 1.06000000002e-05 -update_medium SortedSet_Py27 1000 5.90000000003e-05 6.09999999988e-05 5.90000000003e-05 6.01999999986e-05 -update_medium SortedSet_Py27 10000 0.000502999999998 0.000575000000001 0.000503999999999 0.000519199999999 -update_medium SortedSet_Py27 100000 0.005424 0.005462 0.00545 0.0054412 -update_medium SortedSet_Py27 1000000 0.103913 0.138911 0.103913 0.11567 -update_large SortedSet_Py27 100 1.29999999956e-05 1.59999999951e-05 1.40000000002e-05 1.41999999983e-05 -update_large SortedSet_Py27 1000 7.89999999995e-05 0.000108999999995 7.89999999995e-05 8.5399999999e-05 -update_large SortedSet_Py27 10000 0.000758000000005 0.000788999999997 0.000785 0.00077 -update_large SortedSet_Py27 100000 0.009057 0.010113 0.009057 0.009483 -update_large SortedSet_Py27 1000000 0.144785 0.196284 0.144785 0.1662908 -union_tiny SortedSet_Py27 100 2.39999999962e-05 2.80000000004e-05 2.50000000008e-05 2.55999999993e-05 -union_tiny SortedSet_Py27 1000 7.09999999984e-05 7.29999999933e-05 7.09999999984e-05 7.15999999983e-05 -union_tiny SortedSet_Py27 10000 0.000612000000004 0.000683000000002 0.000613999999999 0.000630600000001 -union_tiny SortedSet_Py27 100000 0.006953 0.007048 0.006961 0.0069762 -union_tiny SortedSet_Py27 1000000 0.119972 0.154844 0.137821 0.13374 -union_small SortedSet_Py27 100 2.09999999967e-05 3.09999999999e-05 2.39999999962e-05 2.58000000002e-05 -union_small SortedSet_Py27 1000 7.9999999997e-05 8.79999999981e-05 7.9999999997e-05 8.2399999998e-05 -union_small SortedSet_Py27 10000 0.000701000000007 0.000715 0.000715 0.0007086 -union_small SortedSet_Py27 100000 0.008003 0.008167 0.008009 0.0080466 -union_small SortedSet_Py27 1000000 0.144642 0.180596 0.144642 0.1520664 -union_medium SortedSet_Py27 100 2.29999999988e-05 2.59999999983e-05 2.29999999988e-05 2.40000000005e-05 -union_medium SortedSet_Py27 1000 0.000116999999996 0.000118999999998 0.000117000000003 0.000117599999997 -union_medium SortedSet_Py27 10000 0.000954 0.00105 0.000954 0.000983199999999 -union_medium SortedSet_Py27 100000 0.012667 0.012875 0.012875 0.0127352 -union_medium SortedSet_Py27 1000000 0.208333 0.27926 0.27926 0.2322144 -union_large SortedSet_Py27 100 2.39999999962e-05 2.80000000004e-05 2.40000000034e-05 2.56000000007e-05 -union_large SortedSet_Py27 1000 0.000138 0.000143000000001 0.000139000000004 0.000139600000003 -union_large SortedSet_Py27 10000 0.001078 0.001171 0.00107999999999 0.0010996 -union_large SortedSet_Py27 100000 0.017702 0.019353 0.017747 0.0180642 -union_large SortedSet_Py27 1000000 0.292642 0.382645 0.293696 0.3151522 -remove SortedSet_Py27 100 2.99999999953e-06 4.00000000411e-06 2.99999999953e-06 3.40000000136e-06 -remove SortedSet_Py27 1000 1.80000000043e-05 1.90000000018e-05 1.89999999947e-05 1.88000000009e-05 -remove SortedSet_Py27 10000 0.000177000000001 0.000184999999995 0.000184999999995 0.000180399999999 -remove SortedSet_Py27 100000 0.002075 0.002149 0.00208 0.0020924 -remove SortedSet_Py27 1000000 0.027615 0.029844 0.027615 0.0285994 -difference_tiny SortedSet_Py27 100 1.19999999981e-05 1.39999999931e-05 1.29999999956e-05 1.27999999989e-05 -difference_tiny SortedSet_Py27 1000 3.79999999893e-05 3.99999999985e-05 3.80000000035e-05 3.83999999997e-05 -difference_tiny SortedSet_Py27 10000 0.000309000000001 0.000313000000006 0.000310999999996 0.000310400000001 -difference_tiny SortedSet_Py27 100000 0.003158 0.003176 0.00316199999999 0.00316559999999 -difference_tiny SortedSet_Py27 1000000 0.064524 0.091947 0.065741 0.0708456 -difference_small SortedSet_Py27 100 1.19999999981e-05 1.40000000073e-05 1.19999999981e-05 1.28000000018e-05 -difference_small SortedSet_Py27 1000 3.79999999893e-05 4.80000000067e-05 4.80000000067e-05 4.11999999983e-05 -difference_small SortedSet_Py27 10000 0.000315999999998 0.000366999999997 0.000316999999995 0.000327000000001 -difference_small SortedSet_Py27 100000 0.00325100000001 0.003603 0.003603 0.0034452 -difference_small SortedSet_Py27 1000000 0.064432 0.087648 0.064432 0.0730044 -difference_medium SortedSet_Py27 100 1.19999999981e-05 1.30000000098e-05 1.19999999981e-05 1.24e-05 -difference_medium SortedSet_Py27 1000 4.50000000001e-05 4.79999999925e-05 4.50000000001e-05 4.63999999994e-05 -difference_medium SortedSet_Py27 10000 0.000365000000002 0.000402999999991 0.000370000000004 0.000375 -difference_medium SortedSet_Py27 100000 0.003799 0.003843 0.00381899999999 0.0038172 -difference_medium SortedSet_Py27 1000000 0.049668 0.054362 0.054362 0.052336 -difference_large SortedSet_Py27 100 1.40000000073e-05 1.79999999972e-05 1.40000000073e-05 1.64000000012e-05 -difference_large SortedSet_Py27 1000 4.899999999e-05 5.09999999991e-05 4.99999999874e-05 4.9999999996e-05 -difference_large SortedSet_Py27 10000 0.000396000000009 0.000450999999998 0.000450999999998 0.000407999999999 -difference_large SortedSet_Py27 100000 0.003985 0.00406199999999 0.00398800000001 0.004003 -difference_large SortedSet_Py27 1000000 0.053281 0.055372 0.054839 0.0546956 -difference_update_tiny SortedSet_Py27 100 1.79999999972e-05 1.99999999921e-05 1.79999999972e-05 1.9199999997e-05 -difference_update_tiny SortedSet_Py27 1000 2.00000000063e-05 2.20000000013e-05 2.10000000038e-05 2.08000000015e-05 -difference_update_tiny SortedSet_Py27 10000 2.20000000013e-05 3.20000000045e-05 2.29999999988e-05 2.46000000004e-05 -difference_update_tiny SortedSet_Py27 100000 3.59999999944e-05 3.70000000061e-05 3.70000000061e-05 3.6399999999e-05 -difference_update_tiny SortedSet_Py27 1000000 4.899999999e-05 6.19999999998e-05 6.19999999998e-05 5.35999999954e-05 -difference_update_small SortedSet_Py27 100 1.79999999972e-05 2.10000000038e-05 1.90000000089e-05 1.92000000027e-05 -difference_update_small SortedSet_Py27 1000 0.000170999999995 0.000174000000001 0.000170999999995 0.000172399999997 -difference_update_small SortedSet_Py27 10000 0.00171300000001 0.001756 0.001756 0.0017368 -difference_update_small SortedSet_Py27 100000 0.017968 0.018047 0.018047 0.018011 -difference_update_small SortedSet_Py27 1000000 0.187702 0.195629 0.192477 0.1908462 -difference_update_medium SortedSet_Py27 100 9.0000000057e-06 1.20000000123e-05 1.00000000032e-05 1.00000000032e-05 -difference_update_medium SortedSet_Py27 1000 4.6999999995e-05 4.90000000042e-05 4.6999999995e-05 4.80000000039e-05 -difference_update_medium SortedSet_Py27 10000 0.000336000000004 0.000368999999992 0.000338999999997 0.000345399999998 -difference_update_medium SortedSet_Py27 100000 0.003711 0.003992 0.003992 0.0037866 -difference_update_medium SortedSet_Py27 1000000 0.05296 0.059285 0.053253 0.0547608 -difference_update_large SortedSet_Py27 100 1.10000000006e-05 1.29999999956e-05 1.10000000006e-05 1.17999999986e-05 -difference_update_large SortedSet_Py27 1000 5.99999999906e-05 6.29999999973e-05 5.99999999906e-05 6.13999999985e-05 -difference_update_large SortedSet_Py27 10000 0.000493000000006 0.000574999999998 0.000574999999998 0.0005122 -difference_update_large SortedSet_Py27 100000 0.00602500000001 0.006112 0.00603700000001 0.0060636 -difference_update_large SortedSet_Py27 1000000 0.076035 0.085144 0.084634 0.0816398 -intersection_tiny SortedSet_Py27 100 1.00000000032e-05 1.19999999981e-05 1.00000000032e-05 1.04000000022e-05 -intersection_tiny SortedSet_Py27 1000 1.10000000006e-05 1.20000000123e-05 1.20000000123e-05 1.18000000015e-05 -intersection_tiny SortedSet_Py27 10000 1.29999999956e-05 1.79999999972e-05 1.69999999997e-05 1.52000000014e-05 -intersection_tiny SortedSet_Py27 100000 3.09999999928e-05 3.30000000019e-05 3.20000000045e-05 3.19999999959e-05 -intersection_tiny SortedSet_Py27 1000000 5.09999999991e-05 5.80000000099e-05 5.09999999991e-05 5.38000000063e-05 -intersection_small SortedSet_Py27 100 1.10000000006e-05 1.29999999956e-05 1.19999999981e-05 1.17999999986e-05 -intersection_small SortedSet_Py27 1000 1.89999999947e-05 2.40000000105e-05 1.89999999947e-05 2.00000000035e-05 -intersection_small SortedSet_Py27 10000 7.40000000121e-05 7.89999999995e-05 7.70000000045e-05 7.64000000032e-05 -intersection_small SortedSet_Py27 100000 0.000663000000003 0.000726 0.000663000000003 0.000689400000005 -intersection_small SortedSet_Py27 1000000 0.00738199999999 0.008533 0.008503 0.0080388 -intersection_medium SortedSet_Py27 100 1.10000000006e-05 1.30000000098e-05 1.19999999981e-05 1.22000000033e-05 -intersection_medium SortedSet_Py27 1000 4.40000000026e-05 4.80000000067e-05 4.40000000026e-05 4.54000000047e-05 -intersection_medium SortedSet_Py27 10000 0.000288999999995 0.000375000000005 0.000317999999993 0.000312 -intersection_medium SortedSet_Py27 100000 0.00296999999999 0.00352100000001 0.00296999999999 0.003158 -intersection_medium SortedSet_Py27 1000000 0.039545 0.047973 0.039624 0.0423438 -intersection_large SortedSet_Py27 100 1.19999999981e-05 1.40000000073e-05 1.19999999981e-05 1.30000000041e-05 -intersection_large SortedSet_Py27 1000 4.79999999925e-05 5.09999999991e-05 4.80000000067e-05 4.8799999999e-05 -intersection_large SortedSet_Py27 10000 0.000331000000003 0.000366 0.000333000000012 0.0003398 -intersection_large SortedSet_Py27 100000 0.00344200000001 0.003513 0.003462 0.003481 -intersection_large SortedSet_Py27 1000000 0.044356 0.050543 0.050543 0.047724 -intersection_update_tiny SortedSet_Py27 100 5.99999999906e-06 7.99999999401e-06 6.99999999654e-06 7.39999999553e-06 -intersection_update_tiny SortedSet_Py27 1000 8.99999999149e-06 1.10000000006e-05 1.10000000006e-05 9.79999999799e-06 -intersection_update_tiny SortedSet_Py27 10000 3.59999999944e-05 3.80000000035e-05 3.69999999918e-05 3.70000000004e-05 -intersection_update_tiny SortedSet_Py27 100000 0.00075799999999 0.000785000000008 0.000785000000008 0.000767999999999 -intersection_update_tiny SortedSet_Py27 1000000 0.006845 0.007375 0.007375 0.0072106 -intersection_update_small SortedSet_Py27 100 5.99999999906e-06 9.0000000057e-06 6.99999999654e-06 7.20000000172e-06 -intersection_update_small SortedSet_Py27 1000 1.49999999906e-05 1.69999999997e-05 1.60000000022e-05 1.59999999994e-05 -intersection_update_small SortedSet_Py27 10000 8.90000000027e-05 0.00011099999999 8.90000000027e-05 9.39999999986e-05 -intersection_update_small SortedSet_Py27 100000 0.00128099999999 0.001378 0.001363 0.0013486 -intersection_update_small SortedSet_Py27 1000000 0.013188 0.016409 0.016409 0.014735 -intersection_update_medium SortedSet_Py27 100 9.0000000057e-06 1.00000000032e-05 9.0000000057e-06 9.40000000469e-06 -intersection_update_medium SortedSet_Py27 1000 3.9000000001e-05 4.0999999996e-05 4.0999999996e-05 3.95999999995e-05 -intersection_update_medium SortedSet_Py27 10000 0.000293999999997 0.000343999999998 0.000343999999998 0.000305799999995 -intersection_update_medium SortedSet_Py27 100000 0.00315400000001 0.003494 0.003337 0.0033458 -intersection_update_medium SortedSet_Py27 1000000 0.041921 0.045953 0.045169 0.0441794 -intersection_update_large SortedSet_Py27 100 9.0000000057e-06 1.00000000032e-05 9.0000000057e-06 9.20000000519e-06 -intersection_update_large SortedSet_Py27 1000 4.30000000051e-05 4.40000000026e-05 4.30000000051e-05 4.32000000046e-05 -intersection_update_large SortedSet_Py27 10000 0.000339999999994 0.000384999999994 0.000342999999987 0.000350999999995 -intersection_update_large SortedSet_Py27 100000 0.00376799999998 0.00387000000001 0.00379799999999 0.00380299999999 -intersection_update_large SortedSet_Py27 1000000 0.04601 0.051753 0.050568 0.0499528 -symmetric_difference_tiny SortedSet_Py27 100 1.39999999931e-05 1.70000000139e-05 1.40000000215e-05 1.48000000081e-05 -symmetric_difference_tiny SortedSet_Py27 1000 4.30000000051e-05 4.59999999975e-05 4.50000000001e-05 4.44000000016e-05 -symmetric_difference_tiny SortedSet_Py27 10000 0.000372999999996 0.000439999999998 0.000372999999996 0.000389199999995 -symmetric_difference_tiny SortedSet_Py27 100000 0.00403799999998 0.00416300000001 0.00403799999998 0.0041062 -symmetric_difference_tiny SortedSet_Py27 1000000 0.0794 0.090203 0.080032 0.0837218 -symmetric_difference_small SortedSet_Py27 100 1.29999999956e-05 1.49999999906e-05 1.29999999956e-05 1.35999999941e-05 -symmetric_difference_small SortedSet_Py27 1000 4.59999999975e-05 4.80000000209e-05 4.80000000209e-05 4.70000000064e-05 -symmetric_difference_small SortedSet_Py27 10000 0.000387999999987 0.000454000000019 0.000397000000021 0.000406600000002 -symmetric_difference_small SortedSet_Py27 100000 0.00459800000002 0.00477700000002 0.00465399999999 0.00466260000001 -symmetric_difference_small SortedSet_Py27 1000000 0.082007 0.097368 0.097368 0.0870624 -symmetric_difference_medium SortedSet_Py27 100 1.3000000024e-05 2.39999999962e-05 1.39999999931e-05 1.66000000092e-05 -symmetric_difference_medium SortedSet_Py27 1000 5.00000000159e-05 5.40000000058e-05 5.10000000133e-05 5.16000000005e-05 -symmetric_difference_medium SortedSet_Py27 10000 0.000423000000012 0.000497999999993 0.000423999999981 0.000438999999994 -symmetric_difference_medium SortedSet_Py27 100000 0.00451999999999 0.00465800000001 0.004527 0.00457339999999 -symmetric_difference_medium SortedSet_Py27 1000000 0.061567 0.061782 0.061721 0.061684 -symmetric_difference_large SortedSet_Py27 100 1.69999999855e-05 2.09999999754e-05 1.70000000139e-05 1.79999999943e-05 -symmetric_difference_large SortedSet_Py27 1000 7.89999999995e-05 8.80000000052e-05 8.09999999944e-05 8.17999999981e-05 -symmetric_difference_large SortedSet_Py27 10000 0.000554000000022 0.000636000000014 0.000636000000014 0.000573200000008 -symmetric_difference_large SortedSet_Py27 100000 0.00613800000002 0.00625600000001 0.00613800000002 0.00618700000001 -symmetric_difference_large SortedSet_Py27 1000000 0.130288 0.150755 0.131048 0.1389228 -symmetric_difference_update_tiny SortedSet_Py27 100 8.99999997728e-06 1.10000000006e-05 1.10000000006e-05 9.5999999985e-06 -symmetric_difference_update_tiny SortedSet_Py27 1000 2.59999999912e-05 2.70000000171e-05 2.69999999887e-05 2.64000000016e-05 -symmetric_difference_update_tiny SortedSet_Py27 10000 0.000208000000015 0.000209000000012 0.000209000000012 0.000208600000002 -symmetric_difference_update_tiny SortedSet_Py27 100000 0.002095 0.002544 0.002544 0.0021892 -symmetric_difference_update_tiny SortedSet_Py27 1000000 0.037243 0.046936 0.037528 0.0394966 -symmetric_difference_update_small SortedSet_Py27 100 6.99999998233e-06 1.00000000032e-05 9.0000000057e-06 8.40000000153e-06 -symmetric_difference_update_small SortedSet_Py27 1000 2.9000000012e-05 3.1000000007e-05 2.99999999811e-05 3.02000000033e-05 -symmetric_difference_update_small SortedSet_Py27 10000 0.000236000000001 0.000326999999999 0.000237999999996 0.000257599999998 -symmetric_difference_update_small SortedSet_Py27 100000 0.002386 0.00244799999999 0.002386 0.0024122 -symmetric_difference_update_small SortedSet_Py27 1000000 0.041609 0.055799 0.045395 0.0461606 -symmetric_difference_update_medium SortedSet_Py27 100 8.00000000822e-06 1.00000000032e-05 9.0000000057e-06 9.0000000057e-06 -symmetric_difference_update_medium SortedSet_Py27 1000 4.19999999792e-05 4.50000000001e-05 4.29999999767e-05 4.33999999871e-05 -symmetric_difference_update_medium SortedSet_Py27 10000 0.000337999999999 0.000394999999997 0.000338999999997 0.000350199999997 -symmetric_difference_update_medium SortedSet_Py27 100000 0.00399899999999 0.004097 0.00403600000001 0.004047 -symmetric_difference_update_medium SortedSet_Py27 1000000 0.046141 0.054959 0.046852 0.0504278 -symmetric_difference_update_large SortedSet_Py27 100 1.10000000006e-05 1.19999999981e-05 1.10000000006e-05 1.12000000001e-05 -symmetric_difference_update_large SortedSet_Py27 1000 6.69999999729e-05 6.89999999963e-05 6.79999999988e-05 6.75999999942e-05 -symmetric_difference_update_large SortedSet_Py27 10000 0.000558000000012 0.000564999999995 0.000564999999995 0.000561600000003 -symmetric_difference_update_large SortedSet_Py27 100000 0.00655600000002 0.00668200000001 0.006575 0.0065948 -symmetric_difference_update_large SortedSet_Py27 1000000 0.097993 0.114406 0.114406 0.1047632 -pop SortedSet_Py27 100 2.00000002337e-06 3.00000002085e-06 2.99999999243e-06 2.8000000043e-06 -pop SortedSet_Py27 1000 1.29999999956e-05 1.39999999931e-05 1.29999999956e-05 1.32000000008e-05 -pop SortedSet_Py27 10000 0.000112999999999 0.00011600000002 0.00011600000002 0.000114600000001 -pop SortedSet_Py27 100000 0.001114 0.00112100000001 0.001114 0.0011182 -pop SortedSet_Py27 1000000 0.011071 0.0128 0.0128 0.011501 -init SortedSet_Py27 100 1.00000000032e-05 1.49999999906e-05 1.19999999981e-05 1.21999999976e-05 -init SortedSet_Py27 1000 5.29999999799e-05 5.50000000032e-05 5.30000000083e-05 5.35999999954e-05 -init SortedSet_Py27 10000 0.000610000000023 0.00067199999998 0.00061500000001 0.000626199999999 -init SortedSet_Py27 100000 0.00809900000002 0.00865899999999 0.00809900000002 0.00829940000001 -init SortedSet_Py27 1000000 0.167634 0.171799 0.171799 0.1687934 -contains SortedSet_Py35 100 9.999999992515995e-07 2.9999999995311555e-06 2.000000000279556e-06 1.6000000002236448e-06 -contains SortedSet_Py35 1000 2.000000000279556e-06 4.000000000559112e-06 2.000000000279556e-06 2.600000000185787e-06 -contains SortedSet_Py35 10000 1.4999999999432134e-05 1.699999999971169e-05 1.699999999971169e-05 1.58000000002545e-05 -contains SortedSet_Py35 100000 0.00024800000000091416 0.0002510000000004453 0.0002489999999983894 0.000249600000000072 -contains SortedSet_Py35 1000000 0.0033919999999998396 0.004115000000000535 0.004115000000000535 0.003715000000000046 -iter SortedSet_Py35 100 8.999999998593466e-06 1.100000000064938e-05 9.999999999621423e-06 1.0199999999471743e-05 -iter SortedSet_Py35 1000 9.199999999864872e-05 9.200000000042508e-05 9.200000000042508e-05 9.200000000006981e-05 -iter SortedSet_Py35 10000 0.0009239999999994808 0.0009479999999992827 0.0009479999999992827 0.0009347999999999246 -iter SortedSet_Py35 100000 0.009268000000000498 0.009497999999998896 0.009435999999999112 0.009429399999999432 -iter SortedSet_Py35 1000000 0.09396699999999925 0.09789400000000015 0.09531499999999937 0.09562719999999984 -add SortedSet_Py35 100 2.9999999995311555e-06 5.000000001587068e-06 2.9999999995311555e-06 3.999999999138026e-06 -add SortedSet_Py35 1000 2.5000000000829914e-05 2.600000000185787e-05 2.5000000000829914e-05 2.5400000000530555e-05 -add SortedSet_Py35 10000 0.00021800000000027353 0.00022600000000139175 0.0002250000000003638 0.00022420000000096253 -add SortedSet_Py35 100000 0.002147000000000787 0.0025300000000001432 0.0021510000000013463 0.0022280000000002077 -add SortedSet_Py35 1000000 0.022459999999998814 0.023842000000001917 0.022459999999998814 0.02301440000000028 -update_tiny SortedSet_Py35 100 1.8000000000739647e-05 2.1000000000270802e-05 1.8000000000739647e-05 1.920000000055211e-05 -update_tiny SortedSet_Py35 1000 1.5999999998683734e-05 1.7999999997186933e-05 1.5999999998683734e-05 1.67999999995061e-05 -update_tiny SortedSet_Py35 10000 1.699999999971169e-05 2.1000000000270802e-05 1.8000000000739647e-05 1.8599999999935336e-05 -update_tiny SortedSet_Py35 100000 2.999999999886427e-05 3.500000000045134e-05 3.2999999998395424e-05 3.239999999919974e-05 -update_tiny SortedSet_Py35 1000000 4.900000000063187e-05 5.499999999969418e-05 5.300000000119098e-05 5.239999999986367e-05 -update_small SortedSet_Py35 100 1.7999999997186933e-05 2.000000000279556e-05 1.899999999821489e-05 1.900000000034652e-05 -update_small SortedSet_Py35 1000 0.00013399999999919032 0.0001619999999995514 0.00013500000000021828 0.00014019999999987932 -update_small SortedSet_Py35 10000 0.001429000000001679 0.0015329999999984523 0.0014450000000003627 0.0014569999999999085 -update_small SortedSet_Py35 100000 0.01403399999999877 0.014165999999999457 0.01411200000000079 0.014104599999998867 -update_small SortedSet_Py35 1000000 0.18227600000000166 0.18543299999999618 0.18258300000000105 0.18321299999999924 -update_medium SortedSet_Py35 100 1.100000000064938e-05 1.200000000523005e-05 1.1999999998124622e-05 1.1800000000050658e-05 -update_medium SortedSet_Py35 1000 6.600000000389628e-05 6.799999999884676e-05 6.700000000137152e-05 6.680000000187647e-05 -update_medium SortedSet_Py35 10000 0.000514000000002568 0.0005340000000018108 0.0005150000000000432 0.0005198000000007141 -update_medium SortedSet_Py35 100000 0.005908999999995501 0.0059979999999981715 0.005935999999998387 0.005952799999997182 -update_medium SortedSet_Py35 1000000 0.11262299999999925 0.1190780000000018 0.11522599999999983 0.11624520000000019 -update_large SortedSet_Py35 100 1.4999999997655777e-05 1.699999999971169e-05 1.699999999971169e-05 1.5799999999899228e-05 -update_large SortedSet_Py35 1000 8.79999999980896e-05 9.000000000014552e-05 9.000000000014552e-05 8.879999999891197e-05 -update_large SortedSet_Py35 10000 0.0008030000000047721 0.0009080000000025734 0.0008059999999971978 0.0008260000000021251 -update_large SortedSet_Py35 100000 0.011210999999995863 0.011479999999998824 0.011219000000004087 0.011296600000000013 -update_large SortedSet_Py35 1000000 0.16230200000000394 0.17990100000000098 0.16261800000000193 0.16933260000000275 -union_tiny SortedSet_Py35 100 2.5000000000829914e-05 2.7000000002885827e-05 2.7000000002885827e-05 2.6199999999221292e-05 -union_tiny SortedSet_Py35 1000 7.300000000043383e-05 7.500000000248974e-05 7.300000000043383e-05 7.360000000034006e-05 -union_tiny SortedSet_Py35 10000 0.0006219999999999004 0.000664000000000442 0.0006319999999959691 0.0006367999999994823 -union_tiny SortedSet_Py35 100000 0.006702000000004205 0.007044000000000494 0.007004000000002009 0.006919200000002945 -union_tiny SortedSet_Py35 1000000 0.11631200000000064 0.12442800000000176 0.12200599999999895 0.12094520000000131 -union_small SortedSet_Py35 100 2.5000000000829914e-05 2.900000000494174e-05 2.5999999998305157e-05 2.7000000001464743e-05 -union_small SortedSet_Py35 1000 8.299999999650254e-05 8.499999999855845e-05 8.499999999855845e-05 8.380000000016708e-05 -union_small SortedSet_Py35 10000 0.0007039999999989277 0.0007349999999988199 0.0007349999999988199 0.0007145999999977448 -union_small SortedSet_Py35 100000 0.00773099999999971 0.007753999999998484 0.007753000000001009 0.007745399999998881 -union_small SortedSet_Py35 1000000 0.13989199999999613 0.15269999999999584 0.14167100000000232 0.1430275999999992 -union_medium SortedSet_Py35 100 2.400000000335467e-05 2.5000000000829914e-05 2.400000000335467e-05 2.460000000041873e-05 -union_medium SortedSet_Py35 1000 0.00011899999999798183 0.00012100000000003774 0.0001200000000025625 0.00012020000000063646 -union_medium SortedSet_Py35 10000 0.0009250000000022851 0.0009409999999974161 0.0009259999999997603 0.00093000000000103 -union_medium SortedSet_Py35 100000 0.012219999999999231 0.012599000000001581 0.012435000000003527 0.012375000000000113 -union_medium SortedSet_Py35 1000000 0.21132200000000267 0.648298000000004 0.648298000000004 0.29928939999999926 -union_large SortedSet_Py35 100 2.5000000000829914e-05 2.8999999997836312e-05 2.5999999998305157e-05 2.6599999998211388e-05 -union_large SortedSet_Py35 1000 0.00014200000000386126 0.0001469999999983429 0.0001469999999983429 0.000144400000000644 -union_large SortedSet_Py35 10000 0.001218999999998971 0.001333000000002471 0.0012460000000018567 0.0012504000000021164 -union_large SortedSet_Py35 100000 0.017944999999997435 0.01834500000000361 0.018123000000002776 0.01816300000000126 -union_large SortedSet_Py35 1000000 0.2561399999999878 0.27121599999999546 0.25923699999999883 0.2620323999999954 -remove SortedSet_Py35 100 3.000000006636583e-06 5.000000001587068e-06 4.0000000041118255e-06 3.800000001774606e-06 -remove SortedSet_Py35 1000 1.8999999994662176e-05 2.0000000006348273e-05 1.900000000887303e-05 1.9400000002178786e-05 -remove SortedSet_Py35 10000 0.00018700000001103945 0.00019900000000916407 0.00019900000000916407 0.00019080000000428753 -remove SortedSet_Py35 100000 0.00215400000000443 0.002291999999997074 0.00215400000000443 0.0021936000000010837 -remove SortedSet_Py35 1000000 0.02865500000000054 0.032402000000004705 0.029166000000003578 0.03020520000000033 -difference_tiny SortedSet_Py35 100 1.1999999998124622e-05 1.4000000007285962e-05 1.300000000981072e-05 1.3000000004126378e-05 -difference_tiny SortedSet_Py35 1000 3.699999999184911e-05 3.999999999848569e-05 3.999999999848569e-05 3.800000000069304e-05 -difference_tiny SortedSet_Py35 10000 0.00030500000001154604 0.000309000000001447 0.0003070000000064965 0.0003072000000031494 -difference_tiny SortedSet_Py35 100000 0.003223000000005527 0.0033209999999996853 0.003223000000005527 0.0032516000000015312 -difference_tiny SortedSet_Py35 1000000 0.057257000000007 0.06307800000000441 0.05781000000000347 0.05873060000000123 -difference_small SortedSet_Py35 100 1.1999999998124622e-05 1.4000000007285962e-05 1.1999999998124622e-05 1.2400000005641233e-05 -difference_small SortedSet_Py35 1000 3.799999998932435e-05 3.999999999848569e-05 3.999999999848569e-05 3.899999999816828e-05 -difference_small SortedSet_Py35 10000 0.0003150000000005093 0.0003709999999870206 0.0003150000000005093 0.000327399999997624 -difference_small SortedSet_Py35 100000 0.0032429999999976644 0.003315000000000623 0.0032479999999992515 0.0032744000000036523 -difference_small SortedSet_Py35 1000000 0.058582000000001244 0.06746299999998939 0.06425799999999526 0.06289679999999578 -difference_medium SortedSet_Py35 100 1.4000000007285962e-05 1.699999999971169e-05 1.6000000002236447e-05 1.560000000040418e-05 -difference_medium SortedSet_Py35 1000 5.000000000165983e-05 5.199999999661031e-05 5.199999999661031e-05 5.100000000197724e-05 -difference_medium SortedSet_Py35 10000 0.0004059999999981301 0.00047800000000108867 0.0004100000000022419 0.0004220000000003665 -difference_medium SortedSet_Py35 100000 0.004181000000002655 0.004305999999999699 0.004205999999996379 0.0042159999999995534 -difference_medium SortedSet_Py35 1000000 0.05378399999999317 0.05767500000000325 0.054111000000006015 0.0555702000000025 -difference_large SortedSet_Py35 100 1.6000000002236447e-05 2.0000000006348273e-05 1.699999999971169e-05 1.7400000001543958e-05 -difference_large SortedSet_Py35 1000 5.999999999062311e-05 6.100000000230921e-05 6.100000000230921e-05 6.039999999529755e-05 -difference_large SortedSet_Py35 10000 0.0004979999999932261 0.0005400000000008731 0.0005400000000008731 0.000509000000002402 -difference_large SortedSet_Py35 100000 0.005023999999991702 0.005076999999999998 0.005023999999991702 0.005048199999998814 -difference_large SortedSet_Py35 1000000 0.06370199999999215 0.06697299999999018 0.06697299999999018 0.06460679999999286 -difference_update_tiny SortedSet_Py35 100 2.3999999996249244e-05 2.500000000793534e-05 2.500000000793534e-05 2.439999999808151e-05 -difference_update_tiny SortedSet_Py35 1000 2.1999999987087904e-05 2.3999999996249244e-05 2.1999999987087904e-05 2.2599999999783905e-05 -difference_update_tiny SortedSet_Py35 10000 2.40000000104601e-05 2.599999999119973e-05 2.40000000104601e-05 2.479999999991378e-05 -difference_update_tiny SortedSet_Py35 100000 3.5999999994373866e-05 3.8000000003535206e-05 3.699999999184911e-05 3.719999999418633e-05 -difference_update_tiny SortedSet_Py35 1000000 4.6999999995023245e-05 6.0000000004833964e-05 5.199999999661031e-05 5.179999999995744e-05 -difference_update_small SortedSet_Py35 100 2.2999999998774e-05 2.500000000793534e-05 2.3000000012984856e-05 2.3800000005280707e-05 -difference_update_small SortedSet_Py35 1000 0.00018099999999776628 0.000183999999990192 0.00018099999999776628 0.00018259999999372666 -difference_update_small SortedSet_Py35 10000 0.001806999999999448 0.0027639999999991005 0.0027639999999991005 0.0020726000000024667 -difference_update_small SortedSet_Py35 100000 0.019112999999990166 0.019519000000002507 0.019373999999999114 0.019361799999998652 -difference_update_small SortedSet_Py35 1000000 0.20486199999999144 0.20655200000000207 0.20486199999999144 0.20554579999999872 -difference_update_medium SortedSet_Py35 100 8.999999991488039e-06 1.100000000064938e-05 1.100000000064938e-05 1.0399999996479892e-05 -difference_update_medium SortedSet_Py35 1000 5.2999999994085556e-05 5.600000000072214e-05 5.2999999994085556e-05 5.4399999999077406e-05 -difference_update_medium SortedSet_Py35 10000 0.00042499999999279225 0.00042799999999942884 0.0004270000000019536 0.00042660000000012134 -difference_update_medium SortedSet_Py35 100000 0.00510699999999531 0.005169999999992569 0.005169999999992569 0.0051455999999973304 -difference_update_medium SortedSet_Py35 1000000 0.06697600000001103 0.06806999999999164 0.06769900000000462 0.0676290000000023 -difference_update_large SortedSet_Py35 100 1.1999999998124622e-05 1.2999999995599865e-05 1.1999999998124622e-05 1.2200000000461841e-05 -difference_update_large SortedSet_Py35 1000 6.799999999884676e-05 6.900000001053286e-05 6.900000001053286e-05 6.860000000017408e-05 -difference_update_large SortedSet_Py35 10000 0.000614000000012993 0.0006800000000026785 0.0006800000000026785 0.0006314000000060104 -difference_update_large SortedSet_Py35 100000 0.007763999999994553 0.008347000000000548 0.008347000000000548 0.008086400000001959 -difference_update_large SortedSet_Py35 1000000 0.10025399999999252 0.10306099999999674 0.10257599999999911 0.10222799999999665 -intersection_tiny SortedSet_Py35 100 1.0000000003174137e-05 1.300000000981072e-05 1.100000000064938e-05 1.100000000349155e-05 -intersection_tiny SortedSet_Py35 1000 1.1999999998124622e-05 1.300000000981072e-05 1.1999999998124622e-05 1.239999999995689e-05 -intersection_tiny SortedSet_Py35 10000 1.3999999993075107e-05 2.200000000129876e-05 2.200000000129876e-05 1.6400000001226543e-05 -intersection_tiny SortedSet_Py35 100000 2.9999999995311555e-05 3.699999999184911e-05 3.2000000004472895e-05 3.2999999996263794e-05 -intersection_tiny SortedSet_Py35 1000000 4.400000000259752e-05 5.199999999661031e-05 4.6999999995023245e-05 4.8400000000015095e-05 -intersection_small SortedSet_Py35 100 1.1999999998124622e-05 1.3999999993075107e-05 1.3999999993075107e-05 1.2799999998946987e-05 -intersection_small SortedSet_Py35 1000 1.9999999992137418e-05 2.2999999998774e-05 2.1000000003823516e-05 2.159999999662432e-05 -intersection_small SortedSet_Py35 10000 8.400000000108321e-05 0.00010400000000743148 8.50000000127693e-05 8.880000000317523e-05 -intersection_small SortedSet_Py35 100000 0.0008290000000101827 0.0008470000000073696 0.0008330000000000837 0.000835400000005393 -intersection_small SortedSet_Py35 1000000 0.010768999999996254 0.010876999999993586 0.010801000000000727 0.01080559999999764 -intersection_medium SortedSet_Py35 100 1.2000000012335477e-05 1.5000000004761205e-05 1.5000000004761205e-05 1.3600000002611523e-05 -intersection_medium SortedSet_Py35 1000 5.000000000165983e-05 7.80000000020209e-05 5.000000000165983e-05 6.0800000002814156e-05 -intersection_medium SortedSet_Py35 10000 0.00038099999999019474 0.0004069999999956053 0.0004069999999956053 0.00039019999999823085 -intersection_medium SortedSet_Py35 100000 0.004525999999998476 0.004596000000006484 0.0045939999999973224 0.004570799999999054 -intersection_medium SortedSet_Py35 1000000 0.05343299999999829 0.05831200000000081 0.05372500000000002 0.05450559999999882 -intersection_large SortedSet_Py35 100 1.2999999995599865e-05 1.6000000002236447e-05 1.2999999995599865e-05 1.3599999999769351e-05 -intersection_large SortedSet_Py35 1000 6.0000000004833964e-05 9.1999999995096e-05 6.500000000642103e-05 6.879999999966912e-05 -intersection_large SortedSet_Py35 10000 0.0004650000000054888 0.0004690000000096006 0.0004650000000054888 0.0004672000000027765 -intersection_large SortedSet_Py35 100000 0.005431999999998993 0.006067000000001599 0.005451000000007866 0.005606199999999717 -intersection_large SortedSet_Py35 1000000 0.06297600000002035 0.07135900000000106 0.063414999999992 0.0663374000000033 -intersection_update_tiny SortedSet_Py35 100 7.000000010748408e-06 8.999999977277184e-06 8.999999977277184e-06 8.00000000253931e-06 -intersection_update_tiny SortedSet_Py35 1000 9.000000005698894e-06 1.100000000064938e-05 1.0000000003174137e-05 1.0000000003174137e-05 -intersection_update_tiny SortedSet_Py35 10000 3.499999999689862e-05 3.799999998932435e-05 3.5999999994373866e-05 3.6399999999048305e-05 -intersection_update_tiny SortedSet_Py35 100000 0.0007619999999803895 0.0008029999999905613 0.0007799999999917873 0.0007769999999936772 -intersection_update_tiny SortedSet_Py35 1000000 0.0074799999999868305 0.00812100000001692 0.007962999999989506 0.0077993999999989684 -intersection_update_small SortedSet_Py35 100 5.999999984851456e-06 9.000000005698894e-06 7.000000010748408e-06 6.9999999993797244e-06 -intersection_update_small SortedSet_Py35 1000 1.7000000013922545e-05 1.900000000887303e-05 1.8000000011397788e-05 1.8000000005713444e-05 -intersection_update_small SortedSet_Py35 10000 0.00010699999998564635 0.00014300000000844193 0.0001079999999831216 0.0001148000000000593 -intersection_update_small SortedSet_Py35 100000 0.0015510000000062973 0.0015920000000164691 0.0015520000000037726 0.0015662000000077115 -intersection_update_small SortedSet_Py35 1000000 0.016378000000003112 0.017910999999998012 0.016378000000003112 0.017184399999996457 -intersection_update_medium SortedSet_Py35 100 9.000000005698894e-06 1.100000000064938e-05 9.000000005698894e-06 9.600000004184039e-06 -intersection_update_medium SortedSet_Py35 1000 4.500000000007276e-05 4.900000001839544e-05 4.500000000007276e-05 4.640000000222244e-05 -intersection_update_medium SortedSet_Py35 10000 0.0003719999999987067 0.0005510000000015225 0.00043500000001017725 0.00044520000000147775 -intersection_update_medium SortedSet_Py35 100000 0.004506000000020549 0.004716000000001941 0.004621000000014419 0.004606600000005301 -intersection_update_medium SortedSet_Py35 1000000 0.05480099999999766 0.06128399999997214 0.059854000000001406 0.05797739999999294 -intersection_update_large SortedSet_Py35 100 9.000000005698894e-06 1.0000000003174137e-05 1.0000000003174137e-05 9.599999998499698e-06 -intersection_update_large SortedSet_Py35 1000 5.199999998239946e-05 5.300000000829641e-05 5.199999998239946e-05 5.259999999793763e-05 -intersection_update_large SortedSet_Py35 10000 0.0004409999999950287 0.0004619999999988522 0.0004619999999988522 0.0004457999999999629 -intersection_update_large SortedSet_Py35 100000 0.005345000000005484 0.00543500000000563 0.005401000000006206 0.005384200000003147 -intersection_update_large SortedSet_Py35 1000000 0.06552600000000552 0.06601200000000063 0.06577699999999709 0.06584200000000351 -symmetric_difference_tiny SortedSet_Py35 100 1.6000000016447302e-05 1.900000000887303e-05 1.8000000011397788e-05 1.7800000006218396e-05 -symmetric_difference_tiny SortedSet_Py35 1000 4.899999998997373e-05 5.0999999984924216e-05 4.899999998997373e-05 4.9399999988963826e-05 -symmetric_difference_tiny SortedSet_Py35 10000 0.0004360000000076525 0.0005560000000173204 0.0005560000000173204 0.0004650000000026466 -symmetric_difference_tiny SortedSet_Py35 100000 0.004688999999984844 0.004801999999983764 0.004757999999981166 0.004739399999988336 -symmetric_difference_tiny SortedSet_Py35 1000000 0.08704000000000178 0.09109499999999571 0.08749699999998484 0.08808119999999349 -symmetric_difference_small SortedSet_Py35 100 1.3999999993075107e-05 1.6000000016447302e-05 1.500000001897206e-05 1.4800000013792668e-05 -symmetric_difference_small SortedSet_Py35 1000 6.19999999855736e-05 6.400000000894579e-05 6.19999999855736e-05 6.299999999441752e-05 -symmetric_difference_small SortedSet_Py35 10000 0.0004589999999780048 0.0005409999999983484 0.0004590000000064265 0.000477399999994077 -symmetric_difference_small SortedSet_Py35 100000 0.0046360000000049695 0.004743999999988091 0.004660999999998694 0.004696599999999762 -symmetric_difference_small SortedSet_Py35 1000000 0.0911830000000009 0.11300200000002292 0.09188100000000077 0.09663600000000656 -symmetric_difference_medium SortedSet_Py35 100 1.499999999055035e-05 1.7999999982976078e-05 1.500000001897206e-05 1.560000000608852e-05 -symmetric_difference_medium SortedSet_Py35 1000 6.19999999855736e-05 6.299999998304884e-05 6.299999998304884e-05 6.220000000212167e-05 -symmetric_difference_medium SortedSet_Py35 10000 0.000572000000005346 0.0006590000000130658 0.0006590000000130658 0.0005960000000015953 -symmetric_difference_medium SortedSet_Py35 100000 0.0057150000000092405 0.006279000000006363 0.005797999999998638 0.005861400000003414 -symmetric_difference_medium SortedSet_Py35 1000000 0.07469900000000962 0.08321699999999055 0.07597499999999968 0.07689439999999763 -symmetric_difference_large SortedSet_Py35 100 1.500000001897206e-05 1.900000000887303e-05 1.6000000016447302e-05 1.620000001025801e-05 -symmetric_difference_large SortedSet_Py35 1000 8.900000000267028e-05 9.1999999995096e-05 9.000000000014552e-05 9.019999999964057e-05 -symmetric_difference_large SortedSet_Py35 10000 0.0007070000000055643 0.0007530000000031123 0.0007530000000031123 0.0007252000000050884 -symmetric_difference_large SortedSet_Py35 100000 0.008359999999981937 0.008510000000001128 0.008359999999981937 0.008436599999993178 -symmetric_difference_large SortedSet_Py35 1000000 0.1456309999999803 0.16753299999999172 0.14644100000001004 0.15094080000000076 -symmetric_difference_update_tiny SortedSet_Py35 100 7.999999979801942e-06 9.000000005698894e-06 7.999999979801942e-06 8.600000001024455e-06 -symmetric_difference_update_tiny SortedSet_Py35 1000 2.6999999988674972e-05 2.9000000012047167e-05 2.9000000012047167e-05 2.8199999997013946e-05 -symmetric_difference_update_tiny SortedSet_Py35 10000 0.0002340000000060627 0.0002660000000105356 0.0002660000000105356 0.00024160000000392757 -symmetric_difference_update_tiny SortedSet_Py35 100000 0.0022570000000143864 0.0024290000000064538 0.0023989999999969314 0.002374600000001692 -symmetric_difference_update_tiny SortedSet_Py35 1000000 0.03489200000001347 0.03606800000000021 0.03600699999998369 0.03552540000000022 -symmetric_difference_update_small SortedSet_Py35 100 8.000000008223651e-06 1.0000000003174137e-05 8.000000008223651e-06 8.800000000519503e-06 -symmetric_difference_update_small SortedSet_Py35 1000 3.100000000699765e-05 3.300000000194814e-05 3.1999999976051186e-05 3.21999999982836e-05 -symmetric_difference_update_small SortedSet_Py35 10000 0.0002599999999972624 0.00031099999998218664 0.0002599999999972624 0.0002762000000018361 -symmetric_difference_update_small SortedSet_Py35 100000 0.0026799999999980173 0.002788999999978614 0.0027730000000190103 0.0027234000000021298 -symmetric_difference_update_small SortedSet_Py35 1000000 0.0423099999999863 0.045667000000008784 0.04455700000002594 0.04411499999999933 -symmetric_difference_update_medium SortedSet_Py35 100 1.2999999995599865e-05 1.5999999988025593e-05 1.3999999993075107e-05 1.4199999992570155e-05 -symmetric_difference_update_medium SortedSet_Py35 1000 6.500000000642103e-05 7.300000001464468e-05 7.200000001716944e-05 7.040000000984037e-05 -symmetric_difference_update_medium SortedSet_Py35 10000 0.0004000000000132786 0.00040300000000570435 0.00040100000001075387 0.0004015999999978703 -symmetric_difference_update_medium SortedSet_Py35 100000 0.004674999999991769 0.004756999999983691 0.004675000000020191 0.004706399999992073 -symmetric_difference_update_medium SortedSet_Py35 1000000 0.05897200000001135 0.05963600000001179 0.05955899999997882 0.05933939999999893 -symmetric_difference_update_large SortedSet_Py35 100 1.100000000064938e-05 1.4000000021496817e-05 1.2999999995599865e-05 1.2400000008483402e-05 -symmetric_difference_update_large SortedSet_Py35 1000 7.600000000707041e-05 7.80000000020209e-05 7.80000000020209e-05 7.659999999987122e-05 -symmetric_difference_update_large SortedSet_Py35 10000 0.0006740000000036162 0.0007349999999917145 0.0007349999999917145 0.0006985999999983506 -symmetric_difference_update_large SortedSet_Py35 100000 0.007993999999996504 0.008080000000006748 0.008022000000011076 0.008026200000000473 -symmetric_difference_update_large SortedSet_Py35 1000000 0.12113700000000449 0.13236100000000306 0.13236100000000306 0.12511420000000725 -pop SortedSet_Py35 100 2.999999992425728e-06 4.00000001832268e-06 2.999999992425728e-06 3.399999997100167e-06 -pop SortedSet_Py35 1000 1.3999999993075107e-05 1.5999999988025593e-05 1.499999999055035e-05 1.5199999995729741e-05 -pop SortedSet_Py35 10000 0.00013000000001284207 0.00013699999999516876 0.00013400000000274304 0.00013299999999958346 -pop SortedSet_Py35 100000 0.0012739999999951124 0.0015559999999936736 0.0015559999999936736 0.0013749999999959073 -pop SortedSet_Py35 1000000 0.01302599999999643 0.013351000000000113 0.013254999999986694 0.01321399999999926 -init SortedSet_Py35 100 1.100000000064938e-05 1.1999999998124622e-05 1.1999999998124622e-05 1.1599999999134525e-05 -init SortedSet_Py35 1000 5.5000000003246896e-05 5.699999999819738e-05 5.5000000003246896e-05 5.620000000021719e-05 -init SortedSet_Py35 10000 0.0006429999999966185 0.0006459999999890442 0.0006440000000225155 0.000643800000000283 -init SortedSet_Py35 100000 0.008838000000025659 0.009105000000005248 0.008991000000008853 0.00897140000000718 -init SortedSet_Py35 1000000 0.15200200000001018 0.183037000000013 0.17352500000001214 0.1687058000000093 -contains SortedSet_PyPy 100 1.99999999995e-06 4.00000000012e-06 1.99999999995e-06 2.60000000001e-06 -contains SortedSet_PyPy 1000 1.39999999998e-05 1.6e-05 1.6e-05 1.46e-05 -contains SortedSet_PyPy 10000 3.99999999999e-05 5e-05 4.3e-05 4.44e-05 -contains SortedSet_PyPy 100000 5.59999999999e-05 6.80000000001e-05 5.7e-05 6.2e-05 -contains SortedSet_PyPy 1000000 0.000391 0.000467 0.000395 0.0004164 -iter SortedSet_PyPy 100 6.09999999996e-05 6.49999999998e-05 6.49999999998e-05 6.27999999999e-05 -iter SortedSet_PyPy 1000 2.60000000001e-05 2.80000000004e-05 2.70000000002e-05 2.72000000002e-05 -iter SortedSet_PyPy 10000 0.000167 0.00017 0.000169 0.0001686 -iter SortedSet_PyPy 100000 0.000963 0.002767 0.001401 0.001665 -iter SortedSet_PyPy 1000000 0.007557 0.008538 0.008026 0.00811 -add SortedSet_PyPy 100 7.99999999979e-06 1.00000000001e-05 9.99999999962e-06 9.39999999989e-06 -add SortedSet_PyPy 1000 6.59999999995e-05 6.79999999997e-05 6.59999999999e-05 6.65999999999e-05 -add SortedSet_PyPy 10000 0.00082 0.001926 0.000886 0.0013722 -add SortedSet_PyPy 100000 0.00088 0.001768 0.001768 0.00119 -add SortedSet_PyPy 1000000 0.008346 0.009118 0.00888 0.0086368 -update_tiny SortedSet_PyPy 100 4.50000000001e-05 4.60000000011e-05 4.59999999993e-05 4.58e-05 -update_tiny SortedSet_PyPy 1000 4.69999999995e-05 4.70000000004e-05 4.69999999995e-05 4.7e-05 -update_tiny SortedSet_PyPy 10000 5.19999999993e-05 0.000523000000001 5.59999999998e-05 0.0001492 -update_tiny SortedSet_PyPy 100000 7.60000000009e-05 8.09999999998e-05 7.60000000009e-05 7.97999999998e-05 -update_tiny SortedSet_PyPy 1000000 8.20000000008e-05 9.49999999991e-05 8.20000000008e-05 8.56000000001e-05 -update_small SortedSet_PyPy 100 4.19999999997e-05 4.3999999999e-05 4.29999999998e-05 4.29999999994e-05 -update_small SortedSet_PyPy 1000 0.00028 0.001872 0.000284 0.000613 -update_small SortedSet_PyPy 10000 0.000331 0.000414000000001 0.000409000000001 0.000383800000001 -update_small SortedSet_PyPy 100000 0.003636 0.005069 0.003665 0.0041294 -update_small SortedSet_PyPy 1000000 0.049306 0.053625 0.049306 0.0511016 -update_medium SortedSet_PyPy 100 2.49999999991e-05 2.79999999986e-05 2.60000000001e-05 2.61999999999e-05 -update_medium SortedSet_PyPy 1000 4.99999999999e-05 5.10000000009e-05 4.99999999999e-05 5.08e-05 -update_medium SortedSet_PyPy 10000 0.000387 0.002713 0.000387 0.00094 -update_medium SortedSet_PyPy 100000 0.005273 0.007236 0.00626 0.006396 -update_medium SortedSet_PyPy 1000000 0.1044 0.117257 0.117257 0.109271 -update_large SortedSet_PyPy 100 2.99999999989e-05 3.30000000002e-05 3.00000000006e-05 3.10000000002e-05 -update_large SortedSet_PyPy 1000 6.89999999999e-05 0.000107999999999 6.89999999999e-05 7.77999999993e-05 -update_large SortedSet_PyPy 10000 0.000655 0.001567 0.001567 0.0009042 -update_large SortedSet_PyPy 100000 0.013832 0.015413 0.015413 0.0143866 -update_large SortedSet_PyPy 1000000 0.172391 0.180433 0.17914 0.176718 -union_tiny SortedSet_PyPy 100 6.2999999999e-05 0.001022 6.40000000001e-05 0.0002564 -union_tiny SortedSet_PyPy 1000 9.79999999995e-05 0.000176 0.000107 0.0001188 -union_tiny SortedSet_PyPy 10000 0.000542999999999 0.001081 0.000692000000001 0.0007148 -union_tiny SortedSet_PyPy 100000 0.007463 0.009759 0.009759 0.008308 -union_tiny SortedSet_PyPy 1000000 0.112208 0.114967 0.114309 0.113921 -union_small SortedSet_PyPy 100 5.90000000003e-05 6.10000000023e-05 5.90000000003e-05 5.96000000002e-05 -union_small SortedSet_PyPy 1000 9.50000000017e-05 0.000839000000003 0.000839000000003 0.0002464 -union_small SortedSet_PyPy 10000 0.000581000000004 0.000644000000001 0.000581000000004 0.000597000000002 -union_small SortedSet_PyPy 100000 0.009052 0.017706 0.009052 0.0109458 -union_small SortedSet_PyPy 1000000 0.133507 0.143063 0.143063 0.1368048 -union_medium SortedSet_PyPy 100 5.99999999977e-05 6.30000000008e-05 6.10000000023e-05 6.12000000004e-05 -union_medium SortedSet_PyPy 1000 0.000114 0.000139999999998 0.000114 0.0001198 -union_medium SortedSet_PyPy 10000 0.000745999999999 0.002088 0.000748999999999 0.0010442 -union_medium SortedSet_PyPy 100000 0.012041 0.016254 0.012041 0.0144016 -union_medium SortedSet_PyPy 1000000 0.176377 0.213456 0.191699 0.1951174 -union_large SortedSet_PyPy 100 7.00000000009e-05 7.40000000015e-05 7.09999999948e-05 7.13999999988e-05 -union_large SortedSet_PyPy 1000 0.000120999999996 0.000124 0.000123999999996 0.000122599999999 -union_large SortedSet_PyPy 10000 0.000873000000002 0.004614 0.000873000000002 0.0016588 -union_large SortedSet_PyPy 100000 0.015745 0.02253 0.018531 0.0190292 -union_large SortedSet_PyPy 1000000 0.217838 0.241393 0.241393 0.2304892 -remove SortedSet_PyPy 100 9.99999999962e-06 1.10000000006e-05 9.99999999962e-06 1.04000000007e-05 -remove SortedSet_PyPy 1000 6.49999999993e-05 6.70000000014e-05 6.49999999993e-05 6.55999999992e-05 -remove SortedSet_PyPy 10000 0.000447000000001 0.001807 0.000458999999996 0.0009438 -remove SortedSet_PyPy 100000 0.000813000000004 0.011276 0.000813000000004 0.0050584 -remove SortedSet_PyPy 1000000 0.011096 0.036689 0.036689 0.016523 -difference_tiny SortedSet_PyPy 100 3.79999999964e-05 4.30000000016e-05 3.9000000001e-05 3.96000000002e-05 -difference_tiny SortedSet_PyPy 1000 4.30000000016e-05 4.69999999986e-05 4.50000000001e-05 4.44000000002e-05 -difference_tiny SortedSet_PyPy 10000 0.000111999999998 0.000199000000002 0.000199000000002 0.0001564 -difference_tiny SortedSet_PyPy 100000 0.000897999999999 0.002478 0.001425 0.0016788 -difference_tiny SortedSet_PyPy 1000000 0.017683 0.026461 0.018269 0.0210436 -difference_small SortedSet_PyPy 100 3.09999999999e-05 3.29999999984e-05 3.09999999999e-05 3.13999999996e-05 -difference_small SortedSet_PyPy 1000 4.30000000016e-05 4.3999999999e-05 4.3999999999e-05 4.37999999988e-05 -difference_small SortedSet_PyPy 10000 0.000137999999996 0.000208999999998 0.000183999999997 0.000180999999998 -difference_small SortedSet_PyPy 100000 0.001164 0.007196 0.003375 0.003267 -difference_small SortedSet_PyPy 1000000 0.023078 0.050529 0.023078 0.0333102 -difference_medium SortedSet_PyPy 100 3.6999999999e-05 3.9000000001e-05 3.6999999999e-05 3.77999999998e-05 -difference_medium SortedSet_PyPy 1000 5.49999999961e-05 0.000309000000001 5.60000000007e-05 0.0001062 -difference_medium SortedSet_PyPy 10000 0.000256999999998 0.012651 0.000306999999999 0.002761 -difference_medium SortedSet_PyPy 100000 0.003609 0.007409 0.003609 0.0054068 -difference_medium SortedSet_PyPy 1000000 0.056132 0.073797 0.056968 0.0614896 -difference_large SortedSet_PyPy 100 3.39999999959e-05 3.50000000005e-05 3.39999999959e-05 3.41999999989e-05 -difference_large SortedSet_PyPy 1000 6.29999999973e-05 0.000228999999997 6.69999999978e-05 9.79999999977e-05 -difference_large SortedSet_PyPy 10000 0.000363999999998 0.024597 0.000506000000001 0.0060836 -difference_large SortedSet_PyPy 100000 0.006289 0.008693 0.006289 0.0076278 -difference_large SortedSet_PyPy 1000000 0.100591 0.109137 0.104905 0.105357 -difference_update_tiny SortedSet_PyPy 100 6.89999999963e-05 7.00000000009e-05 7.00000000009e-05 6.93999999996e-05 -difference_update_tiny SortedSet_PyPy 1000 3.6999999999e-05 4.00000000056e-05 4.00000000056e-05 3.76000000003e-05 -difference_update_tiny SortedSet_PyPy 10000 4.2999999998e-05 4.79999999996e-05 4.30000000051e-05 4.56e-05 -difference_update_tiny SortedSet_PyPy 100000 5.70000000053e-05 7.89999999995e-05 7.19999999959e-05 7.15999999997e-05 -difference_update_tiny SortedSet_PyPy 1000000 7.50000000025e-05 7.9999999997e-05 7.6e-05 7.76000000016e-05 -difference_update_small SortedSet_PyPy 100 6.49999999922e-05 6.60000000039e-05 6.49999999993e-05 6.51999999988e-05 -difference_update_small SortedSet_PyPy 1000 0.000253000000001 0.000263999999994 0.000257999999995 0.000259599999997 -difference_update_small SortedSet_PyPy 10000 0.000579000000002 0.00347599999999 0.000605 0.0011824 -difference_update_small SortedSet_PyPy 100000 0.005569 0.006691 0.006691 0.0062322 -difference_update_small SortedSet_PyPy 1000000 0.063351 0.07197 0.068617 0.0676036 -difference_update_medium SortedSet_PyPy 100 2.80000000004e-05 2.89999999978e-05 2.80000000004e-05 2.81999999999e-05 -difference_update_medium SortedSet_PyPy 1000 4.39999999955e-05 0.000122000000005 4.40000000026e-05 5.98000000011e-05 -difference_update_medium SortedSet_PyPy 10000 0.000203999999997 0.000267999999998 0.000203999999997 0.000217999999998 -difference_update_medium SortedSet_PyPy 100000 0.00263 0.005427 0.003524 0.0036812 -difference_update_medium SortedSet_PyPy 1000000 0.049721 0.065736 0.049721 0.055734 -difference_update_large SortedSet_PyPy 100 2.89999999978e-05 3.19999999974e-05 2.99999999953e-05 3.01999999976e-05 -difference_update_large SortedSet_PyPy 1000 5.90000000003e-05 6.00000000048e-05 6.00000000048e-05 5.98000000011e-05 -difference_update_large SortedSet_PyPy 10000 0.000334000000002 0.000562000000002 0.000346999999998 0.000408599999999 -difference_update_large SortedSet_PyPy 100000 0.006263 0.007094 0.006623 0.0065868 -difference_update_large SortedSet_PyPy 1000000 0.100938 0.106611 0.102877 0.1031026 -intersection_tiny SortedSet_PyPy 100 2.89999999978e-05 3.19999999974e-05 2.99999999953e-05 3.05999999981e-05 -intersection_tiny SortedSet_PyPy 1000 3.09999999928e-05 3.30000000019e-05 3.09999999928e-05 3.17999999965e-05 -intersection_tiny SortedSet_PyPy 10000 3.6999999999e-05 5.50000000032e-05 5.50000000032e-05 4.50000000015e-05 -intersection_tiny SortedSet_PyPy 100000 6.90000000034e-05 8.70000000006e-05 6.90000000034e-05 8.11999999996e-05 -intersection_tiny SortedSet_PyPy 1000000 9.00000000073e-05 0.000101000000008 9.40000000043e-05 9.60000000035e-05 -intersection_small SortedSet_PyPy 100 2.99999999953e-05 3.09999999999e-05 3.09999999999e-05 3.05999999981e-05 -intersection_small SortedSet_PyPy 1000 3.60000000015e-05 3.9000000001e-05 3.6999999999e-05 3.74000000022e-05 -intersection_small SortedSet_PyPy 10000 7.79999999949e-05 0.000221000000003 7.8000000002e-05 0.000107600000001 -intersection_small SortedSet_PyPy 100000 0.000776999999999 0.001523 0.001523 0.0012772 -intersection_small SortedSet_PyPy 1000000 0.012728 0.016141 0.013004 0.0143384 -intersection_medium SortedSet_PyPy 100 3.30000000019e-05 4.59999999975e-05 3.39999999994e-05 3.77999999998e-05 -intersection_medium SortedSet_PyPy 1000 5.19999999966e-05 5.90000000003e-05 5.90000000003e-05 5.66000000006e-05 -intersection_medium SortedSet_PyPy 10000 0.000250999999999 0.000323999999992 0.000250999999999 0.000286799999998 -intersection_medium SortedSet_PyPy 100000 0.00523700000001 0.00650399999999 0.00581699999999 0.0059356 -intersection_medium SortedSet_PyPy 1000000 0.087589 0.113395 0.091815 0.094521 -intersection_large SortedSet_PyPy 100 3.49999999969e-05 3.69999999918e-05 3.69999999918e-05 3.60000000001e-05 -intersection_large SortedSet_PyPy 1000 6.20000000069e-05 7.30000000004e-05 7.09999999984e-05 6.84000000021e-05 -intersection_large SortedSet_PyPy 10000 0.000385000000001 0.000776999999999 0.000389000000006 0.000492600000001 -intersection_large SortedSet_PyPy 100000 0.008187 0.009666 0.00939700000001 0.0089444 -intersection_large SortedSet_PyPy 1000000 0.113438 0.133269 0.12219 0.123406 -intersection_update_tiny SortedSet_PyPy 100 2.39999999962e-05 2.70000000029e-05 2.59999999983e-05 2.55999999993e-05 -intersection_update_tiny SortedSet_PyPy 1000 2.50000000008e-05 2.70000000029e-05 2.59999999983e-05 2.60000000011e-05 -intersection_update_tiny SortedSet_PyPy 10000 3.00000000095e-05 0.000100000000003 7.9999999997e-05 6.00000000006e-05 -intersection_update_tiny SortedSet_PyPy 100000 4.79999999996e-05 6.50000000064e-05 4.79999999996e-05 5.96000000002e-05 -intersection_update_tiny SortedSet_PyPy 1000000 6.29999999973e-05 7.00000000009e-05 7.00000000009e-05 6.73999999989e-05 -intersection_update_small SortedSet_PyPy 100 2.29999999988e-05 2.50000000008e-05 2.39999999962e-05 2.42000000014e-05 -intersection_update_small SortedSet_PyPy 1000 2.99999999953e-05 3.19999999974e-05 3.00000000024e-05 3.03999999986e-05 -intersection_update_small SortedSet_PyPy 10000 6.89999999963e-05 0.000119999999995 7.2000000003e-05 8.17999999981e-05 -intersection_update_small SortedSet_PyPy 100000 0.000709000000001 0.00146 0.001135 0.0011352 -intersection_update_small SortedSet_PyPy 1000000 0.012883 0.017365 0.012883 0.0145084 -intersection_update_medium SortedSet_PyPy 100 2.69999999958e-05 2.80000000075e-05 2.70000000029e-05 2.7200000001e-05 -intersection_update_medium SortedSet_PyPy 1000 4.6999999995e-05 5.60000000007e-05 5.30000000012e-05 5.13999999981e-05 -intersection_update_medium SortedSet_PyPy 10000 0.000239000000001 0.000312000000001 0.00027 0.0002706 -intersection_update_medium SortedSet_PyPy 100000 0.004872 0.030346 0.004872 0.0109612 -intersection_update_medium SortedSet_PyPy 1000000 0.084194 0.09936 0.088178 0.090604 -intersection_update_large SortedSet_PyPy 100 2.70000000029e-05 2.90000000049e-05 2.90000000049e-05 2.81999999999e-05 -intersection_update_large SortedSet_PyPy 1000 5.50000000032e-05 5.90000000003e-05 5.90000000003e-05 5.75999999995e-05 -intersection_update_large SortedSet_PyPy 10000 0.000362000000003 0.000734000000008 0.000429999999994 0.000465000000001 -intersection_update_large SortedSet_PyPy 100000 0.00811599999999 0.009448 0.009448 0.0087906 -intersection_update_large SortedSet_PyPy 1000000 0.118093 0.138507 0.119067 0.125736 -symmetric_difference_tiny SortedSet_PyPy 100 3.49999999969e-05 3.60000000015e-05 3.49999999969e-05 3.53999999987e-05 -symmetric_difference_tiny SortedSet_PyPy 1000 5.90000000074e-05 0.000503999999992 5.99999999977e-05 0.000148799999999 -symmetric_difference_tiny SortedSet_PyPy 10000 0.000391 0.000588000000008 0.000410000000002 0.0004502 -symmetric_difference_tiny SortedSet_PyPy 100000 0.006461 0.008456 0.007462 0.0072016 -symmetric_difference_tiny SortedSet_PyPy 1000000 0.088779 0.109266 0.10646 0.1016432 -symmetric_difference_small SortedSet_PyPy 100 3.20000000045e-05 3.49999999969e-05 3.39999999994e-05 3.38000000013e-05 -symmetric_difference_small SortedSet_PyPy 1000 5.50000000032e-05 0.000354999999999 5.69999999982e-05 0.0001164 -symmetric_difference_small SortedSet_PyPy 10000 0.000325999999994 0.00109399999999 0.000328999999994 0.000488199999998 -symmetric_difference_small SortedSet_PyPy 100000 0.005904 0.006739 0.00623600000001 0.0062784 -symmetric_difference_small SortedSet_PyPy 1000000 0.09325 0.104901 0.10286 0.1014402 -symmetric_difference_medium SortedSet_PyPy 100 3.49999999969e-05 3.6999999999e-05 3.59999999944e-05 3.59999999972e-05 -symmetric_difference_medium SortedSet_PyPy 1000 5.50000000032e-05 7.70000000045e-05 5.50000000032e-05 5.98000000025e-05 -symmetric_difference_medium SortedSet_PyPy 10000 0.000369999999997 0.000870999999997 0.000369999999997 0.0005004 -symmetric_difference_medium SortedSet_PyPy 100000 0.00571299999999 0.006545 0.006526 0.0063372 -symmetric_difference_medium SortedSet_PyPy 1000000 0.081383 0.099214 0.090428 0.0916844 -symmetric_difference_large SortedSet_PyPy 100 3.69999999918e-05 3.80000000035e-05 3.69999999918e-05 3.76000000017e-05 -symmetric_difference_large SortedSet_PyPy 1000 7.70000000045e-05 0.000215999999995 0.000215999999995 0.000109799999996 -symmetric_difference_large SortedSet_PyPy 10000 0.000502000000012 0.002574 0.000502000000012 0.000952400000003 -symmetric_difference_large SortedSet_PyPy 100000 0.011939 0.012886 0.012886 0.0123774 -symmetric_difference_large SortedSet_PyPy 1000000 0.16574 0.185739 0.167749 0.1738596 -symmetric_difference_update_tiny SortedSet_PyPy 100 2.39999999962e-05 2.60000000054e-05 2.39999999962e-05 2.48000000056e-05 -symmetric_difference_update_tiny SortedSet_PyPy 1000 5.39999999916e-05 0.000239000000008 5.40000000058e-05 9.28000000044e-05 -symmetric_difference_update_tiny SortedSet_PyPy 10000 0.000400000000013 0.001177 0.000522000000004 0.000640000000001 -symmetric_difference_update_tiny SortedSet_PyPy 100000 0.00649199999999 0.00955699999999 0.008561 0.008013 -symmetric_difference_update_tiny SortedSet_PyPy 1000000 0.088036 0.121479 0.10258 0.1089328 -symmetric_difference_update_small SortedSet_PyPy 100 3.00000000095e-05 3.09999999928e-05 3.00000000095e-05 3.02000000062e-05 -symmetric_difference_update_small SortedSet_PyPy 1000 5.20000000108e-05 0.000908999999993 5.39999999916e-05 0.000224800000001 -symmetric_difference_update_small SortedSet_PyPy 10000 0.000312000000008 0.000945999999999 0.000330000000005 0.000446200000002 -symmetric_difference_update_small SortedSet_PyPy 100000 0.005698 0.00661200000002 0.00661200000002 0.00612020000001 -symmetric_difference_update_small SortedSet_PyPy 1000000 0.093864 0.105822 0.093864 0.1016328 -symmetric_difference_update_medium SortedSet_PyPy 100 2.80000000004e-05 2.99999999953e-05 2.99999999953e-05 2.93999999968e-05 -symmetric_difference_update_medium SortedSet_PyPy 1000 5.09999999991e-05 5.20000000108e-05 5.19999999966e-05 5.18e-05 -symmetric_difference_update_medium SortedSet_PyPy 10000 0.000330000000005 0.000439 0.000333000000012 0.000354600000003 -symmetric_difference_update_medium SortedSet_PyPy 100000 0.00584400000001 0.006778 0.006778 0.00623900000001 -symmetric_difference_update_medium SortedSet_PyPy 1000000 0.087018 0.114371 0.092306 0.0989636 -symmetric_difference_update_large SortedSet_PyPy 100 3.1000000007e-05 3.39999999852e-05 3.30000000019e-05 3.25999999944e-05 -symmetric_difference_update_large SortedSet_PyPy 1000 7.39999999979e-05 0.000231999999997 0.000231999999997 0.000108 -symmetric_difference_update_large SortedSet_PyPy 10000 0.000529999999998 0.00339500000001 0.000564999999995 0.0011348 -symmetric_difference_update_large SortedSet_PyPy 100000 0.011256 0.012961 0.012005 0.0121306 -symmetric_difference_update_large SortedSet_PyPy 1000000 0.166393 0.178974 0.166393 0.1735736 -pop SortedSet_PyPy 100 1.00000000032e-05 1.29999999956e-05 1.00000000032e-05 1.12000000001e-05 -pop SortedSet_PyPy 1000 1.99999999921e-05 2.10000000038e-05 2.10000000038e-05 2.07999999958e-05 -pop SortedSet_PyPy 10000 0.000169 0.001013 0.000173000000004 0.000339999999997 -pop SortedSet_PyPy 100000 8.7999999991e-05 0.000104000000007 0.000101999999998 9.79999999998e-05 -pop SortedSet_PyPy 1000000 0.000467999999998 0.00057000000001 0.000467999999998 0.0005022 -init SortedSet_PyPy 100 2.79999999862e-05 3.1000000007e-05 2.80000000004e-05 2.87999999983e-05 -init SortedSet_PyPy 1000 0.000106000000002 0.000388000000001 0.000388000000001 0.000163800000007 -init SortedSet_PyPy 10000 0.001152 0.002439 0.002439 0.0014696 -init SortedSet_PyPy 100000 0.017997 0.019131 0.018067 0.018362 -init SortedSet_PyPy 1000000 0.2502 0.264978 0.2502 0.2587122 +contains SortedSet_Py36 100 2.000000000279556e-06 4.000000000559112e-06 3.0000000013075123e-06 2.8000000007466497e-06 +contains SortedSet_Py36 1000 2.9999999995311555e-06 4.999999999810711e-06 4.000000000559112e-06 3.999999999848569e-06 +contains SortedSet_Py36 10000 1.799999999896329e-05 1.8999999999991246e-05 1.8999999999991246e-05 1.8599999999935336e-05 +contains SortedSet_Py36 100000 0.00022899999999914655 0.0002589999999997872 0.00023200000000045407 0.00023640000000000328 +contains SortedSet_Py36 1000000 0.003106999999999971 0.0034849999999995163 0.0033530000000006055 0.003312599999999932 +iter SortedSet_Py36 100 1.0999999998873022e-05 1.100000000064938e-05 1.100000000064938e-05 1.0999999999938837e-05 +iter SortedSet_Py36 1000 9.000000000014552e-05 9.200000000042508e-05 9.099999999939712e-05 9.100000000010766e-05 +iter SortedSet_Py36 10000 0.0009109999999985519 0.0009540000000001214 0.0009150000000008873 0.000922599999999818 +iter SortedSet_Py36 100000 0.00918100000000166 0.009399999999999409 0.009249999999999758 0.009270200000000627 +iter SortedSet_Py36 1000000 0.09183699999999817 0.09753399999999957 0.09185199999999938 0.09318579999999983 +add SortedSet_Py36 100 4.000000000559112e-06 7.000000000090267e-06 6.000000002615025e-06 5.6000000007827564e-06 +add SortedSet_Py36 1000 2.2999999998774e-05 2.400000000335467e-05 2.2999999998774e-05 2.3399999999895726e-05 +add SortedSet_Py36 10000 0.0002080000000006521 0.0002589999999997872 0.0002099999999991553 0.00022799999999989495 +add SortedSet_Py36 100000 0.002266999999999797 0.002321999999999491 0.0022719999999978313 0.0022835999999990973 +add SortedSet_Py36 1000000 0.023755000000001303 0.024059000000001163 0.023910000000000764 0.023893000000001052 +update_tiny SortedSet_Py36 100 1.8000000000739647e-05 2.1000000000270802e-05 1.9999999999242846e-05 1.9400000000047157e-05 +update_tiny SortedSet_Py36 1000 1.8000000000739647e-05 1.9000000001767603e-05 1.9000000001767603e-05 1.8800000000851468e-05 +update_tiny SortedSet_Py36 10000 2.1000000000270802e-05 2.200000000129876e-05 2.200000000129876e-05 2.1600000000887575e-05 +update_tiny SortedSet_Py36 100000 3.200000000092018e-05 3.499999999689862e-05 3.2999999998395424e-05 3.299999999910597e-05 +update_tiny SortedSet_Py36 1000000 4.2000000000541604e-05 5.3999999998666226e-05 4.700000000212867e-05 4.66000000002964e-05 +update_small SortedSet_Py36 100 1.699999999971169e-05 1.9000000001767603e-05 1.8000000000739647e-05 1.8200000000234694e-05 +update_small SortedSet_Py36 1000 0.00014999999999787406 0.00015300000000095793 0.00015199999999992997 0.00015160000000022933 +update_small SortedSet_Py36 10000 0.0015590000000003101 0.001573999999997966 0.0015660000000004004 0.0015666000000003066 +update_small SortedSet_Py36 100000 0.015166000000000679 0.01673600000000164 0.015235000000000554 0.015513599999999883 +update_small SortedSet_Py36 1000000 0.19200599999999923 0.1946489999999983 0.1925220000000003 0.19312580000000068 +update_medium SortedSet_Py36 100 1.3000000002705292e-05 1.4000000000180535e-05 1.4000000000180535e-05 1.3800000000685487e-05 +update_medium SortedSet_Py36 1000 6.199999999978445e-05 6.49999999993156e-05 6.399999999473494e-05 6.359999999858701e-05 +update_medium SortedSet_Py36 10000 0.0004920000000012692 0.0005139999999954625 0.0004920000000012692 0.0004977999999994154 +update_medium SortedSet_Py36 100000 0.005670000000002062 0.005789000000000044 0.005686000000004299 0.005704200000002402 +update_medium SortedSet_Py36 1000000 0.10908399999999574 0.11300299999999908 0.11158399999999347 0.11138119999999674 +update_large SortedSet_Py36 100 1.599999999513102e-05 1.7999999997186933e-05 1.6000000002236447e-05 1.6399999998384375e-05 +update_large SortedSet_Py36 1000 8.200000000613272e-05 9.500000000173259e-05 8.400000000108321e-05 8.580000000222299e-05 +update_large SortedSet_Py36 10000 0.000717000000001633 0.0007799999999988927 0.0007189999999965835 0.0007341999999994186 +update_large SortedSet_Py36 100000 0.010499000000002923 0.011372999999998967 0.010717999999997119 0.010785799999999313 +update_large SortedSet_Py36 1000000 0.15167900000000145 0.15487600000000157 0.15412800000000004 0.15379020000000027 +union_tiny SortedSet_Py36 100 2.1000000003823516e-05 2.400000000335467e-05 2.200000000129876e-05 2.240000000170994e-05 +union_tiny SortedSet_Py36 1000 6.599999999679085e-05 6.600000000389628e-05 6.600000000389628e-05 6.600000000247518e-05 +union_tiny SortedSet_Py36 10000 0.0005419999999958236 0.0005649999999945976 0.0005450000000024602 0.0005499999999969418 +union_tiny SortedSet_Py36 100000 0.005622999999999934 0.005856999999998891 0.0057770000000019195 0.005754000000000303 +union_tiny SortedSet_Py36 1000000 0.100518000000001 0.11282800000000037 0.10228000000000037 0.10416740000000005 +union_small SortedSet_Py36 100 2.2999999998774e-05 2.5999999998305157e-05 2.400000000335467e-05 2.4200000000007547e-05 +union_small SortedSet_Py36 1000 7.300000000043383e-05 7.399999999790907e-05 7.300000000043383e-05 7.339999999942393e-05 +union_small SortedSet_Py36 10000 0.0005899999999954275 0.0006699999999995043 0.0005930000000020641 0.0006079999999997199 +union_small SortedSet_Py36 100000 0.006326000000001386 0.006484999999997854 0.006385999999999115 0.006410799999999028 +union_small SortedSet_Py36 1000000 0.12465199999999754 0.12694199999999967 0.12529500000000127 0.12564160000000016 +union_medium SortedSet_Py36 100 2.3999999996249244e-05 2.6000000005410584e-05 2.400000000335467e-05 2.4400000002344767e-05 +union_medium SortedSet_Py36 1000 0.00010699999999985721 0.0001089999999948077 0.00010799999999733245 0.00010799999999875354 +union_medium SortedSet_Py36 10000 0.0008079999999992538 0.0009000000000014552 0.0008100000000013097 0.0008276000000009276 +union_medium SortedSet_Py36 100000 0.010640999999999678 0.010700999999997407 0.01068300000000022 0.010678799999999456 +union_medium SortedSet_Py36 1000000 0.1916089999999997 0.24346599999999796 0.19323099999999727 0.20363479999999753 +union_large SortedSet_Py36 100 2.5999999998305157e-05 2.800000000036107e-05 2.69999999957804e-05 2.6799999997706436e-05 +union_large SortedSet_Py36 1000 0.00012699999999910005 0.00012900000000115597 0.00012899999999405054 0.00012839999999840755 +union_large SortedSet_Py36 10000 0.001041999999998211 0.0011259999999992942 0.001046999999999798 0.0010627999999996973 +union_large SortedSet_Py36 100000 0.0157610000000048 0.015945000000002096 0.015790000000002635 0.01583540000000312 +union_large SortedSet_Py36 1000000 0.23243099999999828 0.2616419999999948 0.24432600000000093 0.24414439999999898 +remove SortedSet_Py36 100 5.000000001587068e-06 5.999999999062311e-06 5.999999999062311e-06 5.6000000000722135e-06 +remove SortedSet_Py36 1000 2.1000000003823516e-05 2.2999999998774e-05 2.200000000129876e-05 2.200000000129876e-05 +remove SortedSet_Py36 10000 0.00020500000000822638 0.0002190000000013015 0.00020700000000317686 0.00020880000000431665 +remove SortedSet_Py36 100000 0.002311000000005947 0.002415999999996643 0.002323000000004072 0.0023427999999995563 +remove SortedSet_Py36 1000000 0.030073999999999046 0.03226399999999785 0.030356999999995082 0.030798599999999964 +difference_tiny SortedSet_Py36 100 1.2999999995599865e-05 1.6000000002236447e-05 1.3999999993075107e-05 1.3999999995917279e-05 +difference_tiny SortedSet_Py36 1000 3.900000000101045e-05 4.0000000012696546e-05 3.900000000101045e-05 3.940000000284272e-05 +difference_tiny SortedSet_Py36 10000 0.00030800000000397176 0.0003279999999961092 0.000309000000001447 0.0003126000000008844 +difference_tiny SortedSet_Py36 100000 0.0033140000000031478 0.003968000000000416 0.0034320000000036543 0.00352020000000266 +difference_tiny SortedSet_Py36 1000000 0.05844199999999944 0.06961599999999635 0.05894399999999678 0.06096919999999954 +difference_small SortedSet_Py36 100 1.3999999993075107e-05 1.499999999055035e-05 1.499999999055035e-05 1.4599999994402424e-05 +difference_small SortedSet_Py36 1000 4.100000001017179e-05 4.5999999997548e-05 4.200000000764703e-05 4.2800000002785055e-05 +difference_small SortedSet_Py36 10000 0.0003279999999961092 0.0003859999999917818 0.00034999999999740794 0.00035299999999836016 +difference_small SortedSet_Py36 100000 0.0033629999999931215 0.003494000000003439 0.00337000000000387 0.003416599999999903 +difference_small SortedSet_Py36 1000000 0.05931499999999801 0.07024099999999578 0.05996399999999369 0.06265799999999615 +difference_medium SortedSet_Py36 100 1.2999999995599865e-05 1.4000000007285962e-05 1.300000000981072e-05 1.3400000005958645e-05 +difference_medium SortedSet_Py36 1000 4.799999999249849e-05 4.899999998997373e-05 4.800000000670934e-05 4.820000000052005e-05 +difference_medium SortedSet_Py36 10000 0.00038499999999430656 0.00043200000000354066 0.0003870000000034679 0.0003957999999983031 +difference_medium SortedSet_Py36 100000 0.004094000000009146 0.004200999999994792 0.004127999999994358 0.004133199999998283 +difference_medium SortedSet_Py36 1000000 0.04697099999999921 0.04856700000000558 0.047242999999994595 0.04743939999999895 +difference_large SortedSet_Py36 100 1.2999999995599865e-05 1.5000000004761205e-05 1.3999999993075107e-05 1.3999999998759449e-05 +difference_large SortedSet_Py36 1000 5.699999999819738e-05 5.899999999314787e-05 5.7999999995672624e-05 5.779999999617757e-05 +difference_large SortedSet_Py36 10000 0.00048100000000772525 0.0005290000000002237 0.000484000000000151 0.0004970000000042773 +difference_large SortedSet_Py36 100000 0.004860000000007858 0.005376000000012482 0.004875999999995884 0.005008400000002666 +difference_large SortedSet_Py36 1000000 0.05714800000001219 0.05862999999999374 0.05752300000000332 0.05767320000000211 +difference_update_tiny SortedSet_Py36 100 2.2999999998774e-05 2.4999999993724487e-05 2.3999999996249244e-05 2.3799999996754196e-05 +difference_update_tiny SortedSet_Py36 1000 2.599999999119973e-05 2.7000000002885827e-05 2.6000000005410584e-05 2.6199999999221292e-05 +difference_update_tiny SortedSet_Py36 10000 2.7000000002885827e-05 2.8999999997836312e-05 2.800000000036107e-05 2.800000000036107e-05 +difference_update_tiny SortedSet_Py36 100000 3.900000000101045e-05 4.0999999995960934e-05 3.900000000101045e-05 3.9599999999495596e-05 +difference_update_tiny SortedSet_Py36 1000000 4.9000000004184585e-05 5.400000000577165e-05 5.099999999913507e-05 5.120000000431446e-05 +difference_update_small SortedSet_Py36 100 2.2999999998774e-05 2.500000000793534e-05 2.3999999996249244e-05 2.3799999999596368e-05 +difference_update_small SortedSet_Py36 1000 0.00019999999999242846 0.00020100000000411455 0.0002000000000066393 0.0002003999999971029 +difference_update_small SortedSet_Py36 10000 0.001983000000009838 0.0020540000000011105 0.001996000000005438 0.00200500000000261 +difference_update_small SortedSet_Py36 100000 0.020722000000006346 0.020955000000000723 0.02089300000000094 0.020853000000002453 +difference_update_small SortedSet_Py36 1000000 0.22054700000001048 0.22748799999999392 0.2211149999999975 0.22258300000000303 +difference_update_medium SortedSet_Py36 100 1.1999999998124622e-05 2.1000000003823516e-05 1.2000000012335477e-05 1.400000000160162e-05 +difference_update_medium SortedSet_Py36 1000 4.9000000004184585e-05 6.700000000137152e-05 6.500000000642103e-05 5.9800000002496745e-05 +difference_update_medium SortedSet_Py36 10000 0.00039599999999495594 0.00043399999999849115 0.0003969999999924312 0.0004041999999969903 +difference_update_medium SortedSet_Py36 100000 0.0046870000000041045 0.0051149999999893225 0.004763999999994439 0.004821599999999648 +difference_update_medium SortedSet_Py36 1000000 0.05687799999999754 0.05886499999999728 0.057165999999995165 0.05758919999999819 +difference_update_large SortedSet_Py36 100 1.1999999998124622e-05 1.4000000007285962e-05 1.2999999995599865e-05 1.2799999998946987e-05 +difference_update_large SortedSet_Py36 1000 6.199999999978445e-05 6.299999999725969e-05 6.199999999978445e-05 6.239999999877455e-05 +difference_update_large SortedSet_Py36 10000 0.0005409999999983484 0.0007679999999936626 0.0005419999999958236 0.0005871999999953915 +difference_update_large SortedSet_Py36 100000 0.007141000000004283 0.007441999999997506 0.007282000000003563 0.0072810000000004035 +difference_update_large SortedSet_Py36 1000000 0.08699599999999919 0.09773300000000518 0.08746100000000467 0.08949820000000272 +intersection_tiny SortedSet_Py36 100 9.999999988963282e-06 1.1999999998124622e-05 1.100000000064938e-05 1.1199999997302257e-05 +intersection_tiny SortedSet_Py36 1000 1.1999999998124622e-05 1.3999999993075107e-05 1.2000000012335477e-05 1.2600000002294109e-05 +intersection_tiny SortedSet_Py36 10000 1.4000000007285962e-05 1.7999999997186933e-05 1.5000000004761205e-05 1.560000000040418e-05 +intersection_tiny SortedSet_Py36 100000 3.100000000699765e-05 3.500000001110948e-05 3.300000000194814e-05 3.300000000194814e-05 +intersection_tiny SortedSet_Py36 1000000 4.0999999995960934e-05 4.799999999249849e-05 4.399999998838666e-05 4.3999999996913174e-05 +intersection_small SortedSet_Py36 100 1.100000000064938e-05 1.3999999993075107e-05 1.1999999998124622e-05 1.219999999761967e-05 +intersection_small SortedSet_Py36 1000 2.200000000129876e-05 2.500000000793534e-05 2.2999999998774e-05 2.3000000001616173e-05 +intersection_small SortedSet_Py36 10000 8.099999999444663e-05 9.1999999995096e-05 8.199999999192187e-05 8.359999999925094e-05 +intersection_small SortedSet_Py36 100000 0.0007860000000050604 0.0008910000000099672 0.0007910000000066475 0.000815200000005234 +intersection_small SortedSet_Py36 1000000 0.009716999999994869 0.010061000000007425 0.009895999999997684 0.009875399999998535 +intersection_medium SortedSet_Py36 100 1.300000000981072e-05 1.5000000004761205e-05 1.4000000007285962e-05 1.4200000001096668e-05 +intersection_medium SortedSet_Py36 1000 4.800000000670934e-05 5.000000000165983e-05 4.9000000004184585e-05 4.9200000003679636e-05 +intersection_medium SortedSet_Py36 10000 0.0003470000000049822 0.00036199999999553256 0.0003489999999999327 0.00035260000000221227 +intersection_medium SortedSet_Py36 100000 0.004418000000001143 0.004570000000001073 0.004493999999994003 0.004495000000000004 +intersection_medium SortedSet_Py36 1000000 0.05121499999999912 0.05524300000000437 0.051995999999988385 0.052595999999999775 +intersection_large SortedSet_Py36 100 1.6000000002236447e-05 1.699999999971169e-05 1.6000000002236447e-05 1.6200000001731495e-05 +intersection_large SortedSet_Py36 1000 5.7999999995672624e-05 6.0000000004833964e-05 5.899999999314787e-05 5.8999999995990035e-05 +intersection_large SortedSet_Py36 10000 0.0004330000000010159 0.0005220000000036862 0.00043700000000512773 0.0004560000000026321 +intersection_large SortedSet_Py36 100000 0.005076999999999998 0.005390000000005557 0.005169999999992569 0.005209800000000086 +intersection_large SortedSet_Py36 1000000 0.060156000000006316 0.061664999999990755 0.061029000000004885 0.060972399999999996 +intersection_update_tiny SortedSet_Py36 100 7.999999994012796e-06 8.000000008223651e-06 8.000000008223651e-06 8.00000000253931e-06 +intersection_update_tiny SortedSet_Py36 1000 1.0000000003174137e-05 1.1999999998124622e-05 1.100000000064938e-05 1.1200000000144427e-05 +intersection_update_tiny SortedSet_Py36 10000 3.900000000101045e-05 5.200000001082117e-05 3.999999999848569e-05 4.2400000000952784e-05 +intersection_update_tiny SortedSet_Py36 100000 0.0006230000000044811 0.0006280000000060681 0.0006250000000136424 0.0006254000000069481 +intersection_update_tiny SortedSet_Py36 1000000 0.006872999999998797 0.0069179999999988695 0.006901999999996633 0.006898999999998523 +intersection_update_small SortedSet_Py36 100 6.999999996537554e-06 9.000000005698894e-06 8.000000008223651e-06 7.80000000304426e-06 +intersection_update_small SortedSet_Py36 1000 1.7999999997186933e-05 1.8999999994662176e-05 1.7999999997186933e-05 1.839999999617703e-05 +intersection_update_small SortedSet_Py36 10000 9.900000000584441e-05 0.0001010000000007949 9.900000000584441e-05 9.98000000038246e-05 +intersection_update_small SortedSet_Py36 100000 0.0012609999999995125 0.0012700000000052114 0.0012669999999985748 0.0012661999999977525 +intersection_update_small SortedSet_Py36 1000000 0.015464000000008582 0.016472999999990634 0.015579000000002452 0.015733799999998153 +intersection_update_medium SortedSet_Py36 100 9.000000005698894e-06 1.0000000003174137e-05 9.000000005698894e-06 9.400000004688991e-06 +intersection_update_medium SortedSet_Py36 1000 4.3000000005122274e-05 4.400000000259752e-05 4.400000000259752e-05 4.3800000003102466e-05 +intersection_update_medium SortedSet_Py36 10000 0.0003440000000125565 0.0004000000000132786 0.00034599999997908526 0.00035620000000449183 +intersection_update_medium SortedSet_Py36 100000 0.00395599999998808 0.004290999999994938 0.004128999999977623 0.0041329999999959455 +intersection_update_medium SortedSet_Py36 1000000 0.051510000000007494 0.053095000000013215 0.05166199999999321 0.051948400000003406 +intersection_update_large SortedSet_Py36 100 9.000000005698894e-06 1.100000000064938e-05 1.0000000003174137e-05 1.0000000003174137e-05 +intersection_update_large SortedSet_Py36 1000 5.1000000013345925e-05 5.29999999798747e-05 5.199999998239946e-05 5.179999999995744e-05 +intersection_update_large SortedSet_Py36 10000 0.00041899999999372994 0.00044499999998492967 0.0004220000000145774 0.0004263999999977841 +intersection_update_large SortedSet_Py36 100000 0.00471400000000699 0.005170999999990045 0.004808999999994512 0.004848399999997355 +intersection_update_large SortedSet_Py36 1000000 0.06204199999999105 0.06297000000000708 0.06271200000000476 0.06257439999999974 +symmetric_difference_tiny SortedSet_Py36 100 1.5999999988025593e-05 1.6000000016447302e-05 1.5999999988025593e-05 1.5999999993709936e-05 +symmetric_difference_tiny SortedSet_Py36 1000 4.6999999995023245e-05 4.899999998997373e-05 4.799999999249849e-05 4.819999999199354e-05 +symmetric_difference_tiny SortedSet_Py36 10000 0.0004130000000088785 0.00045800000000895125 0.00041699999999877946 0.0004242000000033386 +symmetric_difference_tiny SortedSet_Py36 100000 0.0045009999999763295 0.004779999999982465 0.004531999999983327 0.004575999999985925 +symmetric_difference_tiny SortedSet_Py36 1000000 0.07470499999999447 0.07665199999999572 0.07580500000000256 0.07565459999999576 +symmetric_difference_small SortedSet_Py36 100 1.499999999055035e-05 1.7000000013922545e-05 1.5999999988025593e-05 1.5999999993709936e-05 +symmetric_difference_small SortedSet_Py36 1000 5.999999999062311e-05 6.099999998809835e-05 6.099999998809835e-05 6.05999999947926e-05 +symmetric_difference_small SortedSet_Py36 10000 0.0004179999999962547 0.00048800000001847366 0.00042099999998868043 0.0004428000000075372 +symmetric_difference_small SortedSet_Py36 100000 0.004449999999991405 0.005024999999989177 0.004472000000021126 0.00463460000000282 +symmetric_difference_small SortedSet_Py36 1000000 0.08676199999999312 0.08854900000000043 0.08747700000000691 0.08762859999999364 +symmetric_difference_medium SortedSet_Py36 100 1.499999999055035e-05 1.6000000016447302e-05 1.499999999055035e-05 1.5200000001414083e-05 +symmetric_difference_medium SortedSet_Py36 1000 5.600000000072214e-05 5.699999999819738e-05 5.600000000072214e-05 5.6399999999712235e-05 +symmetric_difference_medium SortedSet_Py36 10000 0.0005130000000121981 0.000552999999996473 0.0005150000000071486 0.0005220000000065283 +symmetric_difference_medium SortedSet_Py36 100000 0.005281999999994014 0.005560000000002674 0.005393999999995458 0.005410999999998012 +symmetric_difference_medium SortedSet_Py36 1000000 0.06967799999998192 0.07737900000000764 0.07029499999998734 0.07160759999999869 +symmetric_difference_large SortedSet_Py36 100 1.6999999985500835e-05 1.7999999982976078e-05 1.7000000013922545e-05 1.7399999995859618e-05 +symmetric_difference_large SortedSet_Py36 1000 8.800000000519503e-05 9.099999999762076e-05 8.900000000267028e-05 8.920000000216533e-05 +symmetric_difference_large SortedSet_Py36 10000 0.0006649999999979173 0.0006890000000225882 0.0006669999999928677 0.0006724000000019714 +symmetric_difference_large SortedSet_Py36 100000 0.007954999999981283 0.008123999999980924 0.008003999999999678 0.008018399999991743 +symmetric_difference_large SortedSet_Py36 1000000 0.1382080000000201 0.16006600000000049 0.13888800000000856 0.14353400000000532 +symmetric_difference_update_tiny SortedSet_Py36 100 9.000000005698894e-06 1.0000000003174137e-05 1.0000000003174137e-05 9.799999997994745e-06 +symmetric_difference_update_tiny SortedSet_Py36 1000 3.099999997857594e-05 3.100000000699765e-05 3.099999997857594e-05 3.099999998994463e-05 +symmetric_difference_update_tiny SortedSet_Py36 10000 0.00024299999998333988 0.00024899999999661304 0.00024500000000671207 0.0002457999999933236 +symmetric_difference_update_tiny SortedSet_Py36 100000 0.002491000000020449 0.0025789999999972224 0.0024960000000078253 0.0025220000000047093 +symmetric_difference_update_tiny SortedSet_Py36 1000000 0.03814199999999346 0.03859400000001756 0.03841299999999137 0.03840159999999741 +symmetric_difference_update_small SortedSet_Py36 100 9.000000005698894e-06 1.1999999998124622e-05 1.0000000003174137e-05 1.0199999996984843e-05 +symmetric_difference_update_small SortedSet_Py36 1000 3.300000000194814e-05 3.499999999689862e-05 3.399999999942338e-05 3.419999999891843e-05 +symmetric_difference_update_small SortedSet_Py36 10000 0.00026700000000801083 0.0002940000000251075 0.0002690000000029613 0.0002738000000078955 +symmetric_difference_update_small SortedSet_Py36 100000 0.00273799999999369 0.0028709999999989577 0.0027510000000177115 0.0027884000000028665 +symmetric_difference_update_small SortedSet_Py36 1000000 0.0418149999999855 0.04510999999999399 0.042479000000014366 0.04288139999999885 +symmetric_difference_update_medium SortedSet_Py36 100 1.2999999995599865e-05 1.500000001897206e-05 1.4000000021496817e-05 1.4000000010128134e-05 +symmetric_difference_update_medium SortedSet_Py36 1000 5.8000000024094334e-05 6.000000001904482e-05 5.999999999062311e-05 5.940000000350665e-05 +symmetric_difference_update_medium SortedSet_Py36 10000 0.00039799999998990643 0.0004549999999881038 0.0003999999999848569 0.00041239999999334034 +symmetric_difference_update_medium SortedSet_Py36 100000 0.0045769999999834 0.004667000000011967 0.004629999999991696 0.004621599999995851 +symmetric_difference_update_medium SortedSet_Py36 1000000 0.05703099999999495 0.062460000000015725 0.057249000000012984 0.059215200000005554 +symmetric_difference_update_large SortedSet_Py36 100 1.1999999998124622e-05 1.3999999993075107e-05 1.1999999998124622e-05 1.2599999996609767e-05 +symmetric_difference_update_large SortedSet_Py36 1000 7.80000000020209e-05 7.999999999697138e-05 7.80000000020209e-05 7.860000000050604e-05 +symmetric_difference_update_large SortedSet_Py36 10000 0.0006549999999947431 0.0008609999999862339 0.0006970000000023902 0.000735599999995884 +symmetric_difference_update_large SortedSet_Py36 100000 0.007234000000011065 0.008128999999996722 0.007833000000005086 0.007774399999999559 +symmetric_difference_update_large SortedSet_Py36 1000000 0.11378400000000966 0.12706099999999765 0.11403100000001132 0.11671660000001224 +pop SortedSet_Py36 100 4.9999999873762135e-06 6.000000013273166e-06 4.9999999873762135e-06 5.3999999920506525e-06 +pop SortedSet_Py36 1000 1.7999999982976078e-05 2.0000000006348273e-05 1.8000000011397788e-05 1.8599999998514248e-05 +pop SortedSet_Py36 10000 0.0001420000000109667 0.0001469999999983429 0.00014500000000339242 0.00014459999999871798 +pop SortedSet_Py36 100000 0.0014299999999991542 0.0014930000000106247 0.0014409999999998035 0.0014488000000028479 +pop SortedSet_Py36 1000000 0.014795000000020764 0.019193999999998823 0.014992000000006556 0.015787400000004937 +init SortedSet_Py36 100 1.1999999998124622e-05 1.3999999993075107e-05 1.2999999995599865e-05 1.2999999995599865e-05 +init SortedSet_Py36 1000 4.999999998744897e-05 5.1000000013345925e-05 5.0999999984924216e-05 5.060000000298714e-05 +init SortedSet_Py36 10000 0.0005809999999826232 0.0006099999999946704 0.0006030000000123437 0.0005966000000000804 +init SortedSet_Py36 100000 0.0072119999999813444 0.007978000000008478 0.007873999999986836 0.007752999999991061 +init SortedSet_Py36 1000000 0.14299099999999498 0.16222799999999893 0.15913299999999708 0.1540655999999899 +contains SortedSet_Py27 100 1.9999999985e-06 3.99999999878e-06 2.99999999953e-06 2.79999999933e-06 +contains SortedSet_Py27 1000 5.99999999906e-06 6.00000000084e-06 5.99999999906e-06 5.99999999977e-06 +contains SortedSet_Py27 10000 3.00000000006e-05 3.10000000017e-05 3.09999999999e-05 3.08000000004e-05 +contains SortedSet_Py27 100000 0.000359 0.000363 0.000362000000001 0.0003612 +contains SortedSet_Py27 1000000 0.004623 0.005374 0.00467 0.004809 +iter SortedSet_Py27 100 2.29999999988e-05 2.39999999998e-05 2.30000000006e-05 2.33999999995e-05 +iter SortedSet_Py27 1000 0.00019 0.00019 0.00019 0.00019 +iter SortedSet_Py27 10000 0.002363 0.002454 0.002373 0.0023928 +iter SortedSet_Py27 100000 0.018046 0.01837 0.018107 0.0181624 +iter SortedSet_Py27 1000000 0.183445 0.190668 0.183781 0.1853854 +add SortedSet_Py27 100 5.99999999906e-06 8.00000000112e-06 8.00000000112e-06 7.2000000003e-06 +add SortedSet_Py27 1000 3.50000000005e-05 3.60000000015e-05 3.50000000005e-05 3.52000000007e-05 +add SortedSet_Py27 10000 0.000292999999999 0.000295999999999 0.000293000000003 0.000294 +add SortedSet_Py27 100000 0.00312 0.003153 0.003139 0.0031348 +add SortedSet_Py27 1000000 0.032228 0.032632 0.032564 0.032486 +update_tiny SortedSet_Py27 100 2.99999999989e-05 3.20000000009e-05 3.00000000024e-05 3.07999999997e-05 +update_tiny SortedSet_Py27 1000 3.00000000024e-05 3.29999999984e-05 3.09999999999e-05 3.12000000008e-05 +update_tiny SortedSet_Py27 10000 3.09999999999e-05 3.20000000009e-05 3.09999999999e-05 3.13999999996e-05 +update_tiny SortedSet_Py27 100000 4.30000000016e-05 4.3999999999e-05 4.3999999999e-05 4.37999999995e-05 +update_tiny SortedSet_Py27 1000000 5.40000000022e-05 6.80000000024e-05 5.60000000007e-05 5.84000000018e-05 +update_small SortedSet_Py27 100 2.89999999978e-05 3.00000000024e-05 2.90000000014e-05 2.93999999997e-05 +update_small SortedSet_Py27 1000 0.000242 0.000250000000001 0.000245 0.0002456 +update_small SortedSet_Py27 10000 0.002454 0.002648 0.002471 0.0025148 +update_small SortedSet_Py27 100000 0.024567 0.025034 0.02485 0.024797 +update_small SortedSet_Py27 1000000 0.275897 0.278125 0.277222 0.277002 +update_medium SortedSet_Py27 100 1.49999999977e-05 1.60000000022e-05 1.50000000048e-05 1.54000000009e-05 +update_medium SortedSet_Py27 1000 6.49999999993e-05 7.50000000025e-05 6.69999999943e-05 6.80000000003e-05 +update_medium SortedSet_Py27 10000 0.000486000000002 0.000502000000004 0.000489000000002 0.0004912 +update_medium SortedSet_Py27 100000 0.004888 0.00507500000001 0.004969 0.0049786 +update_medium SortedSet_Py27 1000000 0.105556 0.140121 0.106602 0.1139584 +update_large SortedSet_Py27 100 1.69999999997e-05 1.90000000018e-05 1.69999999997e-05 1.74000000001e-05 +update_large SortedSet_Py27 1000 8.10000000016e-05 0.000109000000002 8.20000000061e-05 9.22000000017e-05 +update_large SortedSet_Py27 10000 0.000713999999995 0.000864 0.000717999999999 0.000745799999999 +update_large SortedSet_Py27 100000 0.008882 0.009358 0.008968 0.0090736 +update_large SortedSet_Py27 1000000 0.142424 0.166635 0.144658 0.1522674 +union_tiny SortedSet_Py27 100 2.89999999978e-05 3.39999999994e-05 3.00000000024e-05 3.08000000004e-05 +union_tiny SortedSet_Py27 1000 7.69999999974e-05 7.89999999995e-05 7.79999999949e-05 7.79999999978e-05 +union_tiny SortedSet_Py27 10000 0.000601000000003 0.000734999999999 0.000605999999998 0.000651599999998 +union_tiny SortedSet_Py27 100000 0.00627100000001 0.006842 0.006334 0.0064454 +union_tiny SortedSet_Py27 1000000 0.115892 0.117292 0.117084 0.1168304 +union_small SortedSet_Py27 100 2.80000000004e-05 3.19999999974e-05 3.00000000024e-05 2.98000000001e-05 +union_small SortedSet_Py27 1000 8.40000000011e-05 8.60000000031e-05 8.50000000057e-05 8.52000000023e-05 +union_small SortedSet_Py27 10000 0.000663000000003 0.000861 0.000698999999997 0.000722599999999 +union_small SortedSet_Py27 100000 0.007032 0.007584 0.00711 0.0072124 +union_small SortedSet_Py27 1000000 0.140198 0.143336 0.14121 0.1415658 +union_medium SortedSet_Py27 100 3.09999999999e-05 3.30000000019e-05 3.09999999999e-05 3.14000000003e-05 +union_medium SortedSet_Py27 1000 0.000121 0.000123000000002 0.000123000000002 0.000122400000001 +union_medium SortedSet_Py27 10000 0.000886999999999 0.001099 0.000889999999998 0.000954799999998 +union_medium SortedSet_Py27 100000 0.010979 0.011338 0.011064 0.0111006 +union_medium SortedSet_Py27 1000000 0.204699 0.240903 0.205378 0.2122438 +union_large SortedSet_Py27 100 3.29999999948e-05 3.59999999944e-05 3.39999999994e-05 3.39999999966e-05 +union_large SortedSet_Py27 1000 0.000147000000005 0.000198999999995 0.000149999999998 0.0001598 +union_large SortedSet_Py27 10000 0.00122 0.001269 0.00122500000001 0.0012352 +union_large SortedSet_Py27 100000 0.015492 0.017834 0.01583 0.0161792 +union_large SortedSet_Py27 1000000 0.237836 0.241 0.239192 0.2392684 +remove SortedSet_Py27 100 5.99999999906e-06 7.00000000364e-06 6.00000000617e-06 6.40000000089e-06 +remove SortedSet_Py27 1000 3.20000000045e-05 3.40000000065e-05 3.30000000019e-05 3.32000000029e-05 +remove SortedSet_Py27 10000 0.000301999999998 0.000395000000005 0.000304 0.0003248 +remove SortedSet_Py27 100000 0.003311 0.003396 0.003369 0.0033614 +remove SortedSet_Py27 1000000 0.041089 0.041976 0.041333 0.0414656 +difference_tiny SortedSet_Py27 100 1.79999999972e-05 2.00000000063e-05 1.79999999972e-05 1.84000000019e-05 +difference_tiny SortedSet_Py27 1000 4.29999999909e-05 5.60000000007e-05 4.40000000026e-05 4.60000000004e-05 +difference_tiny SortedSet_Py27 10000 0.000326000000001 0.000333999999995 0.000332 0.0003308 +difference_tiny SortedSet_Py27 100000 0.003248 0.003443 0.003309 0.0033168 +difference_tiny SortedSet_Py27 1000000 0.066127 0.07723 0.075872 0.072511 +difference_small SortedSet_Py27 100 1.69999999997e-05 1.89999999947e-05 1.79999999972e-05 1.79999999972e-05 +difference_small SortedSet_Py27 1000 4.40000000026e-05 4.59999999975e-05 4.50000000001e-05 4.50000000001e-05 +difference_small SortedSet_Py27 10000 0.000336999999988 0.000339000000011 0.000337999999999 0.000337999999996 +difference_small SortedSet_Py27 100000 0.003286 0.003349 0.003298 0.0033074 +difference_small SortedSet_Py27 1000000 0.064271 0.073431 0.065263 0.0666918 +difference_medium SortedSet_Py27 100 1.69999999997e-05 1.80000000114e-05 1.79999999972e-05 1.7600000001e-05 +difference_medium SortedSet_Py27 1000 4.90000000042e-05 5.00000000017e-05 5.00000000017e-05 4.97999999993e-05 +difference_medium SortedSet_Py27 10000 0.00035299999999 0.000388999999998 0.000353999999987 0.000362399999997 +difference_medium SortedSet_Py27 100000 0.00362700000001 0.00394200000001 0.003857 0.0037998 +difference_medium SortedSet_Py27 1000000 0.047003 0.053001 0.047232 0.0493392 +difference_large SortedSet_Py27 100 1.89999999947e-05 2.00000000063e-05 1.90000000089e-05 1.92000000027e-05 +difference_large SortedSet_Py27 1000 5.29999999941e-05 6.50000000064e-05 5.39999999916e-05 5.61999999974e-05 +difference_large SortedSet_Py27 10000 0.000393000000003 0.000433000000001 0.000395999999995 0.000403000000003 +difference_large SortedSet_Py27 100000 0.00396500000001 0.004274 0.004053 0.004084 +difference_large SortedSet_Py27 1000000 0.051214 0.052124 0.051805 0.0516558 +difference_update_tiny SortedSet_Py27 100 3.49999999969e-05 3.60000000086e-05 3.49999999969e-05 3.54000000016e-05 +difference_update_tiny SortedSet_Py27 1000 3.60000000086e-05 3.70000000061e-05 3.60000000086e-05 3.64000000076e-05 +difference_update_tiny SortedSet_Py27 10000 3.9000000001e-05 5.19999999966e-05 3.99999999985e-05 4.23999999981e-05 +difference_update_tiny SortedSet_Py27 100000 5.19999999966e-05 6.49999999922e-05 5.19999999966e-05 5.49999999976e-05 +difference_update_tiny SortedSet_Py27 1000000 6.19999999998e-05 7.60000000071e-05 6.59999999897e-05 6.71999999952e-05 +difference_update_small SortedSet_Py27 100 3.59999999944e-05 3.70000000061e-05 3.60000000086e-05 3.62000000052e-05 +difference_update_small SortedSet_Py27 1000 0.000304 0.000310000000013 0.000304 0.000305600000002 +difference_update_small SortedSet_Py27 10000 0.003011 0.00330200000001 0.00307400000001 0.0031062 +difference_update_small SortedSet_Py27 100000 0.031664 0.032028 0.03184 0.0318518 +difference_update_small SortedSet_Py27 1000000 0.319529 0.322695 0.321109 0.3210356 +difference_update_medium SortedSet_Py27 100 1.29999999956e-05 1.49999999906e-05 1.29999999956e-05 1.35999999969e-05 +difference_update_medium SortedSet_Py27 1000 5.20000000108e-05 5.30000000083e-05 5.29999999941e-05 5.28000000031e-05 +difference_update_medium SortedSet_Py27 10000 0.000382000000002 0.000464000000008 0.000382999999999 0.000399200000004 +difference_update_medium SortedSet_Py27 100000 0.003823 0.003839 0.003829 0.003831 +difference_update_medium SortedSet_Py27 1000000 0.051229 0.055509 0.051687 0.0528536 +difference_update_large SortedSet_Py27 100 1.50000000048e-05 1.69999999997e-05 1.60000000022e-05 1.60000000022e-05 +difference_update_large SortedSet_Py27 1000 6.10000000023e-05 9.99999999891e-05 6.29999999973e-05 6.99999999966e-05 +difference_update_large SortedSet_Py27 10000 0.000495999999998 0.000602000000001 0.000503000000009 0.000530400000002 +difference_update_large SortedSet_Py27 100000 0.005387 0.00570699999999 0.005533 0.005553 +difference_update_large SortedSet_Py27 1000000 0.071701 0.082357 0.072165 0.0741436 +intersection_tiny SortedSet_Py27 100 1.5999999988e-05 1.69999999997e-05 1.60000000022e-05 1.61999999989e-05 +intersection_tiny SortedSet_Py27 1000 1.5999999988e-05 1.69999999997e-05 1.69999999997e-05 1.65999999979e-05 +intersection_tiny SortedSet_Py27 10000 1.69999999997e-05 2.39999999962e-05 1.89999999947e-05 1.93999999993e-05 +intersection_tiny SortedSet_Py27 100000 3.39999999994e-05 3.99999999985e-05 3.59999999944e-05 3.6399999999e-05 +intersection_tiny SortedSet_Py27 1000000 5.09999999991e-05 5.30000000083e-05 5.19999999966e-05 5.20000000023e-05 +intersection_small SortedSet_Py27 100 1.39999999931e-05 1.69999999997e-05 1.50000000048e-05 1.52000000014e-05 +intersection_small SortedSet_Py27 1000 2.49999999937e-05 2.50000000079e-05 2.49999999937e-05 2.49999999994e-05 +intersection_small SortedSet_Py27 10000 7.89999999995e-05 8.29999999894e-05 8.10000000087e-05 8.10000000001e-05 +intersection_small SortedSet_Py27 100000 0.000816999999998 0.000849000000002 0.000828000000013 0.000833400000005 +intersection_small SortedSet_Py27 1000000 0.007722 0.009255 0.00851300000001 0.008446 +intersection_medium SortedSet_Py27 100 1.79999999972e-05 2.00000000063e-05 1.80000000114e-05 1.86000000014e-05 +intersection_medium SortedSet_Py27 1000 5.00000000017e-05 7.40000000121e-05 6.60000000039e-05 6.14000000041e-05 +intersection_medium SortedSet_Py27 10000 0.000330999999989 0.000351999999992 0.000332 0.000335799999996 +intersection_medium SortedSet_Py27 100000 0.003213 0.00325699999999 0.003218 0.0032246 +intersection_medium SortedSet_Py27 1000000 0.039084 0.044595 0.039402 0.0405954 +intersection_large SortedSet_Py27 100 1.79999999972e-05 1.90000000089e-05 1.89999999947e-05 1.88000000009e-05 +intersection_large SortedSet_Py27 1000 5.29999999941e-05 5.80000000099e-05 5.50000000032e-05 5.52000000027e-05 +intersection_large SortedSet_Py27 10000 0.000386000000006 0.000469999999993 0.000388999999998 0.000407000000001 +intersection_large SortedSet_Py27 100000 0.00402 0.004085 0.00403 0.0040474 +intersection_large SortedSet_Py27 1000000 0.042978 0.043396 0.043218 0.0432042 +intersection_update_tiny SortedSet_Py27 100 9.0000000057e-06 1.19999999981e-05 1.00000000032e-05 1.04000000022e-05 +intersection_update_tiny SortedSet_Py27 1000 1.29999999956e-05 1.40000000073e-05 1.39999999931e-05 1.36000000026e-05 +intersection_update_tiny SortedSet_Py27 10000 3.9000000001e-05 5.09999999991e-05 3.99999999985e-05 4.2000000002e-05 +intersection_update_tiny SortedSet_Py27 100000 0.000565999999992 0.000614999999996 0.000573000000003 0.000584599999999 +intersection_update_tiny SortedSet_Py27 1000000 0.00615500000001 0.006404 0.006227 0.0062544 +intersection_update_small SortedSet_Py27 100 1.00000000032e-05 1.19999999981e-05 1.10000000006e-05 1.10000000006e-05 +intersection_update_small SortedSet_Py27 1000 1.99999999921e-05 2.10000000038e-05 2.00000000063e-05 2.04000000025e-05 +intersection_update_small SortedSet_Py27 10000 9.29999999926e-05 9.49999999875e-05 9.29999999926e-05 9.35999999939e-05 +intersection_update_small SortedSet_Py27 100000 0.001169 0.001226 0.001175 0.0011848 +intersection_update_small SortedSet_Py27 1000000 0.012953 0.013667 0.013135 0.0132662 +intersection_update_medium SortedSet_Py27 100 1.10000000006e-05 1.29999999956e-05 1.19999999981e-05 1.18000000015e-05 +intersection_update_medium SortedSet_Py27 1000 4.30000000051e-05 5.79999999957e-05 5.09999999991e-05 5.06000000001e-05 +intersection_update_medium SortedSet_Py27 10000 0.00031899999999 0.000331999999986 0.000320000000002 0.000322399999993 +intersection_update_medium SortedSet_Py27 100000 0.00312799999999 0.003135 0.00313 0.0031312 +intersection_update_medium SortedSet_Py27 1000000 0.040461 0.045419 0.041098 0.0418866 +intersection_update_large SortedSet_Py27 100 1.19999999981e-05 1.39999999931e-05 1.19999999981e-05 1.25999999966e-05 +intersection_update_large SortedSet_Py27 1000 4.50000000001e-05 4.70000000092e-05 4.6999999995e-05 4.62000000027e-05 +intersection_update_large SortedSet_Py27 10000 0.000357999999991 0.000427999999999 0.000360000000001 0.0003728 +intersection_update_large SortedSet_Py27 100000 0.00354799999999 0.00358899999999 0.00355599999999 0.00356239999999 +intersection_update_large SortedSet_Py27 1000000 0.044688 0.050869 0.045457 0.0463872 +symmetric_difference_tiny SortedSet_Py27 100 1.89999999805e-05 2.10000000038e-05 1.90000000089e-05 1.9599999996e-05 +symmetric_difference_tiny SortedSet_Py27 1000 4.79999999925e-05 5.00000000159e-05 4.899999999e-05 4.90000000013e-05 +symmetric_difference_tiny SortedSet_Py27 10000 0.000380999999976 0.000434999999982 0.000382000000002 0.000395399999996 +symmetric_difference_tiny SortedSet_Py27 100000 0.00402200000002 0.00412800000001 0.00409099999999 0.0040768 +symmetric_difference_tiny SortedSet_Py27 1000000 0.079321 0.090929 0.079403 0.0820136 +symmetric_difference_small SortedSet_Py27 100 1.99999999779e-05 2.29999999988e-05 2.10000000038e-05 2.13999999971e-05 +symmetric_difference_small SortedSet_Py27 1000 5.20000000108e-05 7.50000000096e-05 5.39999999773e-05 5.75999999967e-05 +symmetric_difference_small SortedSet_Py27 10000 0.000400999999982 0.000533999999988 0.000410999999986 0.000435599999992 +symmetric_difference_small SortedSet_Py27 100000 0.00426899999999 0.00451800000002 0.00428300000002 0.00435360000001 +symmetric_difference_small SortedSet_Py27 1000000 0.080703 0.082265 0.081507 0.0814692 +symmetric_difference_medium SortedSet_Py27 100 1.80000000114e-05 1.90000000089e-05 1.89999999805e-05 1.87999999923e-05 +symmetric_difference_medium SortedSet_Py27 1000 5.50000000032e-05 5.60000000007e-05 5.60000000007e-05 5.56000000017e-05 +symmetric_difference_medium SortedSet_Py27 10000 0.000440999999995 0.000534999999985 0.000457000000011 0.0004682 +symmetric_difference_medium SortedSet_Py27 100000 0.00463500000001 0.005439 0.00468600000002 0.00483400000001 +symmetric_difference_medium SortedSet_Py27 1000000 0.057638 0.062435 0.058028 0.0589886 +symmetric_difference_large SortedSet_Py27 100 1.99999999779e-05 2.20000000013e-05 1.99999999779e-05 2.03999999826e-05 +symmetric_difference_large SortedSet_Py27 1000 8.49999999843e-05 9.70000000109e-05 8.89999999742e-05 8.91999999908e-05 +symmetric_difference_large SortedSet_Py27 10000 0.000606000000005 0.000732999999997 0.000609999999995 0.000633799999997 +symmetric_difference_large SortedSet_Py27 100000 0.00625299999999 0.00639699999999 0.00630200000001 0.0063148 +symmetric_difference_large SortedSet_Py27 1000000 0.123149 0.124088 0.123753 0.1236794 +symmetric_difference_update_tiny SortedSet_Py27 100 1.19999999981e-05 1.39999999931e-05 1.29999999956e-05 1.27999999961e-05 +symmetric_difference_update_tiny SortedSet_Py27 1000 3.00000000095e-05 3.1000000007e-05 3.1000000007e-05 3.08000000075e-05 +symmetric_difference_update_tiny SortedSet_Py27 10000 0.000226999999995 0.000248999999997 0.00022899999999 0.000234999999998 +symmetric_difference_update_tiny SortedSet_Py27 100000 0.002172 0.002205 0.002182 0.00218740000001 +symmetric_difference_update_tiny SortedSet_Py27 1000000 0.038917 0.044917 0.039574 0.0405982 +symmetric_difference_update_small SortedSet_Py27 100 1.10000000006e-05 1.29999999956e-05 1.29999999956e-05 1.23999999971e-05 +symmetric_difference_update_small SortedSet_Py27 1000 3.19999999761e-05 3.49999999969e-05 3.39999999994e-05 3.37999999942e-05 +symmetric_difference_update_small SortedSet_Py27 10000 0.000249000000025 0.000267999999977 0.000250000000023 0.000253400000008 +symmetric_difference_update_small SortedSet_Py27 100000 0.002464 0.00255799999999 0.002476 0.0024904 +symmetric_difference_update_small SortedSet_Py27 1000000 0.0413 0.048617 0.042341 0.0432434 +symmetric_difference_update_medium SortedSet_Py27 100 1.29999999956e-05 1.40000000215e-05 1.3000000024e-05 1.3400000006e-05 +symmetric_difference_update_medium SortedSet_Py27 1000 4.20000000076e-05 5.19999999824e-05 4.40000000026e-05 4.51999999996e-05 +symmetric_difference_update_medium SortedSet_Py27 10000 0.000316999999995 0.000337999999999 0.000317000000024 0.000321400000001 +symmetric_difference_update_medium SortedSet_Py27 100000 0.00351499999999 0.00403200000002 0.00401299999999 0.0039178 +symmetric_difference_update_medium SortedSet_Py27 1000000 0.044002 0.052146 0.04553 0.046695 +symmetric_difference_update_large SortedSet_Py27 100 1.39999999931e-05 1.5999999988e-05 1.49999999906e-05 1.49999999962e-05 +symmetric_difference_update_large SortedSet_Py27 1000 6.30000000115e-05 6.59999999755e-05 6.50000000064e-05 6.48000000012e-05 +symmetric_difference_update_large SortedSet_Py27 10000 0.000518 0.00058199999998 0.000526000000008 0.000535999999994 +symmetric_difference_update_large SortedSet_Py27 100000 0.005798 0.00702800000002 0.00581200000002 0.0060714 +symmetric_difference_update_large SortedSet_Py27 1000000 0.094951 0.110471 0.106582 0.1037584 +pop SortedSet_Py27 100 5.99999998485e-06 6.99999998233e-06 5.99999998485e-06 6.19999999003e-06 +pop SortedSet_Py27 1000 2.69999999887e-05 2.80000000146e-05 2.70000000171e-05 2.74000000047e-05 +pop SortedSet_Py27 10000 0.000237999999996 0.000241000000017 0.000239999999991 0.000239599999998 +pop SortedSet_Py27 100000 0.002343 0.002408 0.00236100000001 0.0023674 +pop SortedSet_Py27 1000000 0.023763 0.02405 0.023872 0.0238928 +init SortedSet_Py27 100 1.49999999906e-05 1.70000000139e-05 1.60000000164e-05 1.62000000046e-05 +init SortedSet_Py27 1000 5.60000000007e-05 5.79999999957e-05 5.60000000007e-05 5.63999999997e-05 +init SortedSet_Py27 10000 0.000596000000002 0.000630000000001 0.000601999999986 0.000607600000001 +init SortedSet_Py27 100000 0.00771 0.00814 0.00778100000002 0.007827 +init SortedSet_Py27 1000000 0.161955 0.178029 0.162649 0.1669736 +contains SortedSet_PyPy 100 5.00000000003e-06 5.99999999995e-06 5.00000000003e-06 5.20000000002e-06 +contains SortedSet_PyPy 1000 1.2e-05 1.89999999999e-05 1.8e-05 1.68e-05 +contains SortedSet_PyPy 10000 3.8e-05 5.19999999999e-05 4.6e-05 4.54e-05 +contains SortedSet_PyPy 100000 6.29999999999e-05 7.49999999999e-05 6.99999999999e-05 6.94e-05 +contains SortedSet_PyPy 1000000 0.000474 0.000528 0.000487 0.0004926 +iter SortedSet_PyPy 100 5.80000000001e-05 6.10000000005e-05 5.99999999995e-05 5.96e-05 +iter SortedSet_PyPy 1000 2.69999999998e-05 3.09999999999e-05 2.69999999998e-05 2.79999999998e-05 +iter SortedSet_PyPy 10000 0.000146 0.000178 0.000149 0.0001566 +iter SortedSet_PyPy 100000 0.000903000000001 0.002115 0.001375 0.0014282 +iter SortedSet_PyPy 1000000 0.007539 0.008432 0.007953 0.0079866 +add SortedSet_PyPy 100 1.19999999999e-05 1.20000000008e-05 1.19999999999e-05 1.20000000003e-05 +add SortedSet_PyPy 1000 6.79999999997e-05 6.89999999999e-05 6.80000000006e-05 6.84e-05 +add SortedSet_PyPy 10000 0.000701 0.001263 0.001155 0.0010224 +add SortedSet_PyPy 100000 0.000688999999999 0.006665 0.000753 0.0020274 +add SortedSet_PyPy 1000000 0.005873 0.006259 0.006203 0.0061386 +update_tiny SortedSet_PyPy 100 4.70000000004e-05 4.99999999999e-05 4.80000000005e-05 4.82000000003e-05 +update_tiny SortedSet_PyPy 1000 4.89999999989e-05 5.00000000008e-05 4.90000000006e-05 4.94e-05 +update_tiny SortedSet_PyPy 10000 5.30000000003e-05 6.50000000002e-05 5.40000000004e-05 5.68000000003e-05 +update_tiny SortedSet_PyPy 100000 7.70000000001e-05 0.000477 8.40000000011e-05 0.0001664 +update_tiny SortedSet_PyPy 1000000 7.89999999995e-05 8.30000000001e-05 8.29999999992e-05 8.15999999997e-05 +update_small SortedSet_PyPy 100 4.39999999999e-05 4.70000000004e-05 4.50000000001e-05 4.54e-05 +update_small SortedSet_PyPy 1000 0.000275 0.000911 0.000322000000001 0.0004224 +update_small SortedSet_PyPy 10000 0.000318 0.000522 0.000377 0.0003968 +update_small SortedSet_PyPy 100000 0.002756 0.003415 0.002837 0.002925 +update_small SortedSet_PyPy 1000000 0.03608 0.046728 0.036962 0.039413 +update_medium SortedSet_PyPy 100 2.69999999993e-05 4.00000000003e-05 2.89999999996e-05 3.09999999995e-05 +update_medium SortedSet_PyPy 1000 5.29999999994e-05 6.40000000001e-05 5.49999999997e-05 5.64000000001e-05 +update_medium SortedSet_PyPy 10000 0.000576000000001 0.000729 0.000591999999999 0.0006176 +update_medium SortedSet_PyPy 100000 0.007468 0.010733 0.00811 0.00875 +update_medium SortedSet_PyPy 1000000 0.100712 0.113253 0.104547 0.1062844 +update_large SortedSet_PyPy 100 2.89999999978e-05 3.09999999999e-05 3.09999999981e-05 3.03999999989e-05 +update_large SortedSet_PyPy 1000 7.2000000003e-05 7.89999999995e-05 7.39999999997e-05 7.44000000001e-05 +update_large SortedSet_PyPy 10000 0.000627999999999 0.001969 0.000756000000001 0.0009732 +update_large SortedSet_PyPy 100000 0.012223 0.017555 0.016855 0.0159444 +update_large SortedSet_PyPy 1000000 0.180086 0.185386 0.181239 0.1822394 +union_tiny SortedSet_PyPy 100 6.2999999999e-05 0.000550999999998 8.59999999996e-05 0.000244199999999 +union_tiny SortedSet_PyPy 1000 9.80000000013e-05 0.000133999999999 0.000108000000001 0.000114200000001 +union_tiny SortedSet_PyPy 10000 0.000612 0.000967000000001 0.000797000000002 0.000766800000001 +union_tiny SortedSet_PyPy 100000 0.008592 0.026443 0.011463 0.0146432 +union_tiny SortedSet_PyPy 1000000 0.128392 0.143635 0.133114 0.1356498 +union_small SortedSet_PyPy 100 6.49999999993e-05 6.89999999999e-05 6.60000000003e-05 6.67999999997e-05 +union_small SortedSet_PyPy 1000 9.59999999992e-05 0.000108000000001 9.90000000023e-05 0.000101400000001 +union_small SortedSet_PyPy 10000 0.000663000000003 0.000951000000001 0.000875000000001 0.000838800000001 +union_small SortedSet_PyPy 100000 0.009494 0.032461 0.009864 0.0143304 +union_small SortedSet_PyPy 1000000 0.132622 0.133962 0.132819 0.1331458 +union_medium SortedSet_PyPy 100 6.00000000013e-05 6.10000000023e-05 6.09999999988e-05 6.08e-05 +union_medium SortedSet_PyPy 1000 0.000113000000002 0.00027 0.000115000000001 0.000147800000001 +union_medium SortedSet_PyPy 10000 0.000928000000002 0.001202 0.001042 0.0010556 +union_medium SortedSet_PyPy 100000 0.01365 0.019968 0.016619 0.016625 +union_medium SortedSet_PyPy 1000000 0.159531 0.207724 0.160058 0.1734108 +union_large SortedSet_PyPy 100 6.30000000008e-05 6.80000000024e-05 6.39999999983e-05 6.44000000015e-05 +union_large SortedSet_PyPy 1000 0.000128999999998 0.000189999999996 0.000131000000003 0.000143199999999 +union_large SortedSet_PyPy 10000 0.00108 0.004335 0.001325 0.0018482 +union_large SortedSet_PyPy 100000 0.018482 0.026044 0.021454 0.0221342 +union_large SortedSet_PyPy 1000000 0.211149 0.267422 0.262163 0.253526 +remove SortedSet_PyPy 100 1.29999999992e-05 1.40000000002e-05 1.30000000027e-05 1.34000000003e-05 +remove SortedSet_PyPy 1000 6.60000000003e-05 6.89999999999e-05 6.80000000024e-05 6.76000000006e-05 +remove SortedSet_PyPy 10000 0.000416000000001 0.00138 0.000420999999999 0.0006916 +remove SortedSet_PyPy 100000 0.000630000000001 0.010016 0.0052 0.004685 +remove SortedSet_PyPy 1000000 0.008404 0.009317 0.008743 0.008819 +difference_tiny SortedSet_PyPy 100 3.39999999994e-05 3.6999999999e-05 3.59999999979e-05 3.55999999989e-05 +difference_tiny SortedSet_PyPy 1000 4.09999999995e-05 4.20000000005e-05 4.20000000005e-05 4.18000000003e-05 +difference_tiny SortedSet_PyPy 10000 0.000171999999999 0.001394 0.000197 0.0004346 +difference_tiny SortedSet_PyPy 100000 0.000826 0.003741 0.003313 0.0025872 +difference_tiny SortedSet_PyPy 1000000 0.015294 0.031493 0.018189 0.0203604 +difference_small SortedSet_PyPy 100 3.30000000019e-05 3.50000000005e-05 3.49999999969e-05 3.44000000005e-05 +difference_small SortedSet_PyPy 1000 4.3999999999e-05 4.69999999986e-05 4.60000000011e-05 4.58000000002e-05 +difference_small SortedSet_PyPy 10000 0.000121999999998 0.000216999999999 0.000197999999997 0.000186199999999 +difference_small SortedSet_PyPy 100000 0.00111 0.00343 0.00283 0.0025946 +difference_small SortedSet_PyPy 1000000 0.023952 0.036767 0.031179 0.030782 +difference_medium SortedSet_PyPy 100 3.79999999964e-05 3.9000000001e-05 3.80000000035e-05 3.84000000004e-05 +difference_medium SortedSet_PyPy 1000 5.69999999982e-05 8.90000000027e-05 5.79999999992e-05 6.40000000004e-05 +difference_medium SortedSet_PyPy 10000 0.000304 0.000505999999998 0.000316999999999 0.000373799999999 +difference_medium SortedSet_PyPy 100000 0.004836 0.007573 0.006322 0.0064862 +difference_medium SortedSet_PyPy 1000000 0.056428 0.081614 0.071122 0.0706004 +difference_large SortedSet_PyPy 100 3.80000000035e-05 3.99999999985e-05 3.89999999939e-05 3.88000000001e-05 +difference_large SortedSet_PyPy 1000 6.90000000034e-05 7.30000000004e-05 7.00000000009e-05 7.08000000017e-05 +difference_large SortedSet_PyPy 10000 0.000377999999998 0.000645999999996 0.000573000000003 0.000542199999998 +difference_large SortedSet_PyPy 100000 0.007176 0.010108 0.007849 0.0085228 +difference_large SortedSet_PyPy 1000000 0.090303 0.111684 0.103069 0.1028624 +difference_update_tiny SortedSet_PyPy 100 6.39999999947e-05 7.19999999959e-05 6.49999999993e-05 6.63999999972e-05 +difference_update_tiny SortedSet_PyPy 1000 3.6999999999e-05 3.99999999985e-05 3.80000000035e-05 3.83999999997e-05 +difference_update_tiny SortedSet_PyPy 10000 4.30000000051e-05 5.90000000003e-05 4.59999999975e-05 4.8000000001e-05 +difference_update_tiny SortedSet_PyPy 100000 7.09999999984e-05 7.70000000045e-05 7.39999999979e-05 7.38000000013e-05 +difference_update_tiny SortedSet_PyPy 1000000 6.99999999938e-05 7.8000000002e-05 7.39999999979e-05 7.42000000002e-05 +difference_update_small SortedSet_PyPy 100 5.99999999977e-05 6.30000000044e-05 6.10000000023e-05 6.12000000004e-05 +difference_update_small SortedSet_PyPy 1000 0.000241000000003 0.000247000000002 0.000245000000007 0.000244400000004 +difference_update_small SortedSet_PyPy 10000 0.000368000000002 0.003155 0.000408 0.000944799999999 +difference_update_small SortedSet_PyPy 100000 0.003623 0.00426099999999 0.004096 0.0040632 +difference_update_small SortedSet_PyPy 1000000 0.04115 0.057797 0.048171 0.0478254 +difference_update_medium SortedSet_PyPy 100 2.89999999978e-05 3.59999999944e-05 3.19999999974e-05 3.25999999959e-05 +difference_update_medium SortedSet_PyPy 1000 5.00000000017e-05 5.30000000083e-05 5.19999999966e-05 5.19999999995e-05 +difference_update_medium SortedSet_PyPy 10000 0.000220000000006 0.000343999999998 0.000226999999995 0.0002478 +difference_update_medium SortedSet_PyPy 100000 0.002687 0.004246 0.003147 0.0033056 +difference_update_medium SortedSet_PyPy 1000000 0.05214 0.063599 0.057174 0.0586908 +difference_update_large SortedSet_PyPy 100 3.09999999999e-05 3.30000000019e-05 3.19999999974e-05 3.17999999993e-05 +difference_update_large SortedSet_PyPy 1000 6.29999999973e-05 0.000691999999994 6.49999999922e-05 0.000189799999998 +difference_update_large SortedSet_PyPy 10000 0.000449000000003 0.000526000000001 0.000472000000002 0.000485000000002 +difference_update_large SortedSet_PyPy 100000 0.00664100000001 0.01937 0.007047 0.0095846 +difference_update_large SortedSet_PyPy 1000000 0.08007 0.099818 0.083523 0.0884594 +intersection_tiny SortedSet_PyPy 100 3.29999999948e-05 3.59999999944e-05 3.39999999994e-05 3.41999999975e-05 +intersection_tiny SortedSet_PyPy 1000 3.59999999944e-05 3.89999999939e-05 3.6999999999e-05 3.71999999984e-05 +intersection_tiny SortedSet_PyPy 10000 3.90000000081e-05 5.60000000078e-05 4.30000000051e-05 4.62000000041e-05 +intersection_tiny SortedSet_PyPy 100000 8.19999999919e-05 9.00000000073e-05 8.60000000031e-05 8.58000000008e-05 +intersection_tiny SortedSet_PyPy 1000000 8.5999999996e-05 0.000107 9.40000000043e-05 9.42000000009e-05 +intersection_small SortedSet_PyPy 100 3.49999999969e-05 4.20000000005e-05 4.0999999996e-05 3.98000000018e-05 +intersection_small SortedSet_PyPy 1000 4.0999999996e-05 0.000788999999997 4.20000000005e-05 0.0001914 +intersection_small SortedSet_PyPy 10000 7.8000000002e-05 0.000334999999993 7.9999999997e-05 0.000173599999999 +intersection_small SortedSet_PyPy 100000 0.000735999999996 0.00143 0.00121699999999 0.0011132 +intersection_small SortedSet_PyPy 1000000 0.015518 0.023704 0.016306 0.017989 +intersection_medium SortedSet_PyPy 100 3.60000000015e-05 3.9000000001e-05 3.79999999964e-05 3.74000000008e-05 +intersection_medium SortedSet_PyPy 1000 6.10000000023e-05 8.29999999965e-05 6.49999999993e-05 6.89999999977e-05 +intersection_medium SortedSet_PyPy 10000 0.000253999999998 0.000259000000007 0.000255999999993 0.000256000000002 +intersection_medium SortedSet_PyPy 100000 0.006551 0.007462 0.007012 0.0069586 +intersection_medium SortedSet_PyPy 1000000 0.087899 0.114459 0.096149 0.0987982 +intersection_large SortedSet_PyPy 100 3.6999999999e-05 4.10000000031e-05 3.99999999985e-05 3.89999999996e-05 +intersection_large SortedSet_PyPy 1000 6.90000000034e-05 0.000253999999998 7.09999999984e-05 0.000107 +intersection_large SortedSet_PyPy 10000 0.000398000000004 0.000996999999998 0.000481000000001 0.000565999999999 +intersection_large SortedSet_PyPy 100000 0.00999299999999 0.010855 0.010461 0.0104892 +intersection_large SortedSet_PyPy 1000000 0.127033 0.137589 0.13598 0.1330914 +intersection_update_tiny SortedSet_PyPy 100 2.59999999983e-05 2.89999999978e-05 2.69999999958e-05 2.71999999981e-05 +intersection_update_tiny SortedSet_PyPy 1000 2.79999999933e-05 3.00000000024e-05 2.80000000004e-05 2.87999999983e-05 +intersection_update_tiny SortedSet_PyPy 10000 3.00000000024e-05 3.30000000019e-05 3.19999999974e-05 3.15999999998e-05 +intersection_update_tiny SortedSet_PyPy 100000 5.70000000053e-05 6.99999999938e-05 5.90000000003e-05 6.16000000022e-05 +intersection_update_tiny SortedSet_PyPy 1000000 6.30000000044e-05 7.19999999959e-05 6.89999999963e-05 6.79999999988e-05 +intersection_update_small SortedSet_PyPy 100 2.59999999983e-05 2.80000000004e-05 2.69999999958e-05 2.67999999991e-05 +intersection_update_small SortedSet_PyPy 1000 3.19999999974e-05 0.000185000000002 3.20000000045e-05 6.29999999987e-05 +intersection_update_small SortedSet_PyPy 10000 7.09999999984e-05 0.000497000000003 7.2000000003e-05 0.000174199999999 +intersection_update_small SortedSet_PyPy 100000 0.000574999999998 0.001462 0.00125 0.0010494 +intersection_update_small SortedSet_PyPy 1000000 0.015576 0.016634 0.015775 0.0159312 +intersection_update_medium SortedSet_PyPy 100 2.80000000004e-05 2.99999999953e-05 2.90000000049e-05 2.90000000007e-05 +intersection_update_medium SortedSet_PyPy 1000 4.99999999946e-05 5.50000000032e-05 5.0999999992e-05 5.15999999976e-05 +intersection_update_medium SortedSet_PyPy 10000 0.000251999999996 0.000381000000004 0.000302999999995 0.000311599999999 +intersection_update_medium SortedSet_PyPy 100000 0.00448100000001 0.01091 0.006542 0.0069824 +intersection_update_medium SortedSet_PyPy 1000000 0.086158 0.103043 0.098325 0.0950186 +intersection_update_large SortedSet_PyPy 100 2.80000000004e-05 3.9000000001e-05 3.60000000086e-05 3.40000000008e-05 +intersection_update_large SortedSet_PyPy 1000 6.29999999973e-05 6.40000000018e-05 6.29999999973e-05 6.33999999977e-05 +intersection_update_large SortedSet_PyPy 10000 0.000368000000002 0.000508999999994 0.000475999999999 0.000462399999999 +intersection_update_large SortedSet_PyPy 100000 0.009681 0.011412 0.010347 0.0103482 +intersection_update_large SortedSet_PyPy 1000000 0.127151 0.135519 0.130921 0.1307158 +symmetric_difference_tiny SortedSet_PyPy 100 3.40000000065e-05 3.70000000061e-05 3.49999999969e-05 3.52000000021e-05 +symmetric_difference_tiny SortedSet_PyPy 1000 6.49999999993e-05 6.70000000014e-05 6.69999999943e-05 6.65999999981e-05 +symmetric_difference_tiny SortedSet_PyPy 10000 0.000422 0.000792999999994 0.000464999999998 0.000524799999998 +symmetric_difference_tiny SortedSet_PyPy 100000 0.00784899999999 0.011281 0.009581 0.0093726 +symmetric_difference_tiny SortedSet_PyPy 1000000 0.096587 0.120513 0.096983 0.1043722 +symmetric_difference_small SortedSet_PyPy 100 3.99999999985e-05 4.2999999998e-05 4.00000000056e-05 4.08000000022e-05 +symmetric_difference_small SortedSet_PyPy 1000 6.09999999952e-05 6.59999999968e-05 6.29999999973e-05 6.33999999962e-05 +symmetric_difference_small SortedSet_PyPy 10000 0.000371000000008 0.00047 0.000443999999987 0.0004244 +symmetric_difference_small SortedSet_PyPy 100000 0.006552 0.007181 0.007002 0.0069392 +symmetric_difference_small SortedSet_PyPy 1000000 0.096406 0.114186 0.104765 0.1047194 +symmetric_difference_medium SortedSet_PyPy 100 3.39999999994e-05 3.70000000061e-05 3.59999999944e-05 3.58000000006e-05 +symmetric_difference_medium SortedSet_PyPy 1000 6.10000000023e-05 0.000239999999991 6.19999999998e-05 9.72000000019e-05 +symmetric_difference_medium SortedSet_PyPy 10000 0.000428000000014 0.000762000000009 0.000439 0.000519200000005 +symmetric_difference_medium SortedSet_PyPy 100000 0.00674000000001 0.00757 0.007216 0.0071896 +symmetric_difference_medium SortedSet_PyPy 1000000 0.092944 0.111655 0.097797 0.0998434 +symmetric_difference_large SortedSet_PyPy 100 3.79999999893e-05 3.99999999843e-05 3.80000000035e-05 3.85999999992e-05 +symmetric_difference_large SortedSet_PyPy 1000 8.30000000036e-05 0.000238999999993 8.80000000052e-05 0.000116800000004 +symmetric_difference_large SortedSet_PyPy 10000 0.000551000000002 0.000740999999991 0.000603999999996 0.000637799999996 +symmetric_difference_large SortedSet_PyPy 100000 0.01396 0.01603 0.01474 0.01485 +symmetric_difference_large SortedSet_PyPy 1000000 0.175215 0.184517 0.180241 0.1800944 +symmetric_difference_update_tiny SortedSet_PyPy 100 3.39999999994e-05 3.70000000061e-05 3.49999999969e-05 3.51999999992e-05 +symmetric_difference_update_tiny SortedSet_PyPy 1000 5.50000000032e-05 5.69999999982e-05 5.60000000007e-05 5.61999999974e-05 +symmetric_difference_update_tiny SortedSet_PyPy 10000 0.000422999999998 0.000757000000007 0.000426000000004 0.000493400000002 +symmetric_difference_update_tiny SortedSet_PyPy 100000 0.006884 0.020171 0.010591 0.0113934 +symmetric_difference_update_tiny SortedSet_PyPy 1000000 0.085876 0.098906 0.096632 0.0941644 +symmetric_difference_update_small SortedSet_PyPy 100 2.69999999887e-05 2.89999999978e-05 2.80000000004e-05 2.79999999975e-05 +symmetric_difference_update_small SortedSet_PyPy 1000 5.29999999941e-05 5.50000000032e-05 5.40000000058e-05 5.38000000034e-05 +symmetric_difference_update_small SortedSet_PyPy 10000 0.000376000000003 0.001085 0.000450999999998 0.000549199999998 +symmetric_difference_update_small SortedSet_PyPy 100000 0.006316 0.00729799999999 0.006844 0.0068072 +symmetric_difference_update_small SortedSet_PyPy 1000000 0.092939 0.103813 0.095812 0.0969358 +symmetric_difference_update_medium SortedSet_PyPy 100 2.80000000004e-05 3.99999999985e-05 2.80000000004e-05 3.04e-05 +symmetric_difference_update_medium SortedSet_PyPy 1000 5.39999999916e-05 0.000210999999993 5.40000000058e-05 8.5599999997e-05 +symmetric_difference_update_medium SortedSet_PyPy 10000 0.000435999999993 0.000743 0.00052500000001 0.000541000000001 +symmetric_difference_update_medium SortedSet_PyPy 100000 0.006832 0.007901 0.00730499999999 0.00735 +symmetric_difference_update_medium SortedSet_PyPy 1000000 0.089056 0.11972 0.095613 0.1026518 +symmetric_difference_update_large SortedSet_PyPy 100 3.19999999903e-05 3.59999999944e-05 3.39999999994e-05 3.37999999999e-05 +symmetric_difference_update_large SortedSet_PyPy 1000 7.59999999929e-05 0.000556000000003 7.8000000002e-05 0.0001732 +symmetric_difference_update_large SortedSet_PyPy 10000 0.000591999999997 0.000636 0.000602999999998 0.0006124 +symmetric_difference_update_large SortedSet_PyPy 100000 0.013958 0.014941 0.014438 0.014487 +symmetric_difference_update_large SortedSet_PyPy 1000000 0.161382 0.186149 0.179852 0.1745448 +pop SortedSet_PyPy 100 1.29999999956e-05 1.50000000048e-05 1.29999999956e-05 1.34000000003e-05 +pop SortedSet_PyPy 1000 2.20000000013e-05 2.50000000079e-05 2.29999999988e-05 2.34000000034e-05 +pop SortedSet_PyPy 10000 0.000169999999997 0.000285000000005 0.000175999999996 0.000198600000002 +pop SortedSet_PyPy 100000 8.60000000102e-05 0.000108999999995 0.000100000000003 9.97999999981e-05 +pop SortedSet_PyPy 1000000 0.000441000000009 0.000446999999994 0.000444999999999 0.000444600000003 +init SortedSet_PyPy 100 2.89999999978e-05 3.30000000019e-05 2.99999999953e-05 3.04e-05 +init SortedSet_PyPy 1000 0.000115000000008 0.000432000000004 0.000118999999998 0.000180600000004 +init SortedSet_PyPy 10000 0.001186 0.00178 0.00138 0.001413 +init SortedSet_PyPy 100000 0.02061 0.043781 0.021157 0.0266008 +init SortedSet_PyPy 1000000 0.262383 0.285513 0.277406 0.2753632 diff -Nru sortedcontainers-1.5.9/tests/results_sorteddict.txt sortedcontainers-2.0.4/tests/results_sorteddict.txt --- sortedcontainers-1.5.9/tests/results_sorteddict.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/results_sorteddict.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,263 +1,232 @@ -contains SortedDict 100 1.00000000014e-06 5.99999999995e-06 5.99999999995e-06 2.60000000019e-06 -contains SortedDict 1000 1.99999999939e-06 3.00000000042e-06 1.99999999939e-06 2.59999999983e-06 -contains SortedDict 10000 1.40000000002e-05 2.40000000007e-05 2.30000000006e-05 2.14000000001e-05 -contains SortedDict 100000 0.000196 0.000222 0.000196 0.0002094 -contains SortedDict 1000000 0.003435 0.004088 0.003438 0.0035766 -contains rbtree 100 1.00000000014e-06 2.00000000028e-06 1.00000000014e-06 1.60000000005e-06 -contains rbtree 1000 5.99999999995e-06 1.20000000008e-05 8.00000000023e-06 8.20000000026e-06 -contains rbtree 10000 4.99999999999e-05 5.49999999997e-05 5.20000000002e-05 5.24e-05 -contains rbtree 100000 0.001324 0.001508 0.001508 0.0014202 -contains rbtree 1000000 0.017855 0.019976 0.018291 0.0185912 -contains blist.sorteddict 100 9.99999999252e-07 2.00000000028e-06 1.00000000103e-06 1.59999999987e-06 -contains blist.sorteddict 1000 4.99999999981e-06 7.00000000009e-06 7.00000000009e-06 6.20000000033e-06 -contains blist.sorteddict 10000 5.10000000009e-05 6.19999999998e-05 5.10000000009e-05 5.48000000002e-05 -contains blist.sorteddict 100000 0.000675999999999 0.000757999999998 0.000724000000002 0.0007252 -contains blist.sorteddict 1000000 0.00730800000001 0.0087 0.00730800000001 0.0080858 -contains FastAVLTree 100 9.99999997475e-07 1.99999999495e-06 9.99999997475e-07 1.19999999697e-06 -contains FastAVLTree 1000 5.0000000158e-06 1.49999999906e-05 1.49999999906e-05 8.39999999585e-06 -contains FastAVLTree 10000 6.09999999881e-05 7.09999999913e-05 6.09999999881e-05 6.47999999956e-05 -contains FastAVLTree 100000 0.00140999999999 0.00174800000002 0.00142299999999 0.0015246 -contains FastAVLTree 1000000 0.017626 0.020954 0.017626 0.0190708 -contains FastRBTree 100 9.99999997475e-07 2.00000002337e-06 9.99999997475e-07 1.60000000164e-06 -contains FastRBTree 1000 5.99999998485e-06 7.00000001075e-06 7.00000001075e-06 6.60000000039e-06 -contains FastRBTree 10000 6.2999999983e-05 6.60000000039e-05 6.60000000039e-05 6.51999999945e-05 -contains FastRBTree 100000 0.00150000000002 0.00166199999998 0.00166199999998 0.00156000000001 -contains FastRBTree 1000000 0.018199 0.021299 0.019142 0.0193946 -contains SkipListDict 100 4.99999998738e-06 6.99999998233e-06 4.99999998738e-06 5.80000000241e-06 -contains SkipListDict 1000 3.49999999969e-05 4.59999999975e-05 3.60000000228e-05 3.83999999997e-05 -contains SkipListDict 10000 0.000440999999995 0.000481000000008 0.000463999999994 0.000462200000004 -contains SkipListDict 100000 0.007023 0.007408 0.007023 0.0071544 -contains SkipListDict 1000000 0.09291 0.096615 0.09458 0.0949046 -contains banyan.SortedDict 100 1.99999999495e-06 4.99999998738e-06 3.9999999899e-06 3.59999999091e-06 -contains banyan.SortedDict 1000 5.99999998485e-06 7.9999999798e-06 6.99999998233e-06 6.79999998283e-06 -contains banyan.SortedDict 10000 7.09999999913e-05 7.89999999711e-05 7.09999999913e-05 7.37999999956e-05 -contains banyan.SortedDict 100000 0.001712 0.00240500000001 0.001712 0.0018792 -contains banyan.SortedDict 1000000 0.02262 0.026926 0.026126 0.0253886 -getitem SortedDict 100 9.99999997475e-07 1.99999999495e-06 9.99999997475e-07 1.19999999697e-06 -getitem SortedDict 1000 9.99999997475e-07 2.99999999243e-06 1.99999999495e-06 1.99999999495e-06 -getitem SortedDict 10000 1.5000000019e-05 2.59999999912e-05 1.5000000019e-05 1.76000000124e-05 -getitem SortedDict 100000 0.000227999999993 0.000239000000022 0.000227999999993 0.000234400000011 -getitem SortedDict 1000000 0.003942 0.004592 0.00455399999998 0.00434779999999 -getitem rbtree 100 9.99999997475e-07 2.99999999243e-06 1.99999999495e-06 1.59999999596e-06 -getitem rbtree 1000 5.99999998485e-06 7.00000003917e-06 6.99999998233e-06 6.59999999471e-06 -getitem rbtree 10000 6.30000000115e-05 6.99999999938e-05 6.30000000115e-05 6.59999999925e-05 -getitem rbtree 100000 0.001485 0.00163199999997 0.001485 0.00154679999999 -getitem rbtree 1000000 0.0184839999999 0.019002 0.018643 0.0186442 -getitem blist.sorteddict 100 9.99999997475e-07 2.99999999243e-06 2.00000005179e-06 1.60000000733e-06 -getitem blist.sorteddict 1000 2.99999999243e-06 4.99999998738e-06 2.99999999243e-06 3.9999999899e-06 -getitem blist.sorteddict 10000 2.49999999937e-05 4.50000000001e-05 2.49999999937e-05 3.03999999915e-05 -getitem blist.sorteddict 100000 0.000487000000021 0.000545999999986 0.000516000000005 0.000518800000009 -getitem blist.sorteddict 1000000 0.00514600000002 0.006011 0.005651 0.00568960000001 -getitem treap 100 1.99999999495e-06 3.9999999899e-06 1.99999999495e-06 2.79999999293e-06 -getitem treap 1000 1.70000000139e-05 2.10000000038e-05 2.10000000038e-05 1.94000000079e-05 -getitem treap 10000 0.000220000000013 0.000263000000018 0.000237000000027 0.000238600000023 -getitem treap 100000 0.00425999999999 0.00439699999998 0.00439699999998 0.00432859999999 -getitem treap 1000000 0.0519899999999 0.054837 0.0519899999999 0.053087 -getitem FastAVLTree 100 9.99999997475e-07 9.99999997475e-07 9.99999997475e-07 9.99999997475e-07 -getitem FastAVLTree 1000 7.00000009601e-06 9.00000009096e-06 7.9999999798e-06 8.20000002477e-06 -getitem FastAVLTree 10000 8.10000000229e-05 0.000104000000078 8.10000000229e-05 8.71999999845e-05 -getitem FastAVLTree 100000 0.00156200000004 0.00185900000008 0.00177900000006 0.00171180000002 -getitem FastAVLTree 1000000 0.019532 0.020969 0.020117 0.020221 -getitem FastRBTree 100 1.99999999495e-06 1.99999999495e-06 1.99999999495e-06 1.99999999495e-06 -getitem FastRBTree 1000 7.9999999798e-06 9.99999997475e-06 8.99999997728e-06 8.99999997728e-06 -getitem FastRBTree 10000 8.30000000178e-05 8.50000000128e-05 8.39999999016e-05 8.41999999693e-05 -getitem FastRBTree 100000 0.00174400000003 0.00189799999998 0.00174400000003 0.00180240000002 -getitem FastRBTree 1000000 0.0199679999999 0.021881 0.021157 0.0210722 -getitem SkipListDict 100 3.9999999899e-06 5.99999998485e-06 4.99999998738e-06 4.99999998738e-06 -getitem SkipListDict 1000 3.20000000329e-05 3.70000000203e-05 3.50000000253e-05 3.52000000248e-05 -getitem SkipListDict 10000 0.000411999999983 0.00043299999993 0.000411999999983 0.000422799999956 -getitem SkipListDict 100000 0.0065689999999 0.00725799999998 0.0065689999999 0.0068882 -getitem SkipListDict 1000000 0.0903420000001 0.0939960000001 0.0926770000001 0.0926192 -getitem banyan.SortedDict 100 9.99999997475e-07 1.99999999495e-06 9.99999997475e-07 1.19999999697e-06 -getitem banyan.SortedDict 1000 4.99999998738e-06 5.99999998485e-06 5.99999998485e-06 5.59999998586e-06 -getitem banyan.SortedDict 10000 7.29999999294e-05 7.7000000033e-05 7.30000000431e-05 7.50000000153e-05 -getitem banyan.SortedDict 100000 0.00165500000003 0.00190399999997 0.00166899999999 0.00171740000001 -getitem banyan.SortedDict 1000000 0.023608 0.0278510000001 0.0275820000001 0.0264044 -setitem SortedDict 100 1.99999999495e-06 3.9999999899e-06 2.99999999243e-06 2.79999999293e-06 -setitem SortedDict 1000 1.49999999621e-05 1.60000000733e-05 1.49999999621e-05 1.52000000071e-05 -setitem SortedDict 10000 0.00014299999998 0.000148999999965 0.000145999999972 0.000146399999971 -setitem SortedDict 100000 0.00155199999995 0.00156400000003 0.00155599999994 0.00155699999998 -setitem SortedDict 1000000 0.019343 0.0198710000001 0.019714 0.019545 -setitem rbtree 100 9.99999997475e-07 1.99999999495e-06 9.99999997475e-07 1.19999999697e-06 -setitem rbtree 1000 2.99999999243e-06 3.9999999899e-06 3.9999999899e-06 3.59999999091e-06 -setitem rbtree 10000 4.10000000102e-05 4.899999999e-05 4.30000000051e-05 4.34000000041e-05 -setitem rbtree 100000 0.000534000000016 0.000633999999991 0.000535000000013 0.000556200000005 -setitem rbtree 1000000 0.00741700000003 0.00754800000004 0.00754800000004 0.00749500000002 -setitem blist.sorteddict 100 3.9999999899e-06 5.99999998485e-06 3.9999999899e-06 4.79999998788e-06 -setitem blist.sorteddict 1000 4.79999999925e-05 5.10000000986e-05 4.899999999e-05 4.98000000107e-05 -setitem blist.sorteddict 10000 0.000670000000014 0.000672000000009 0.000670000000014 0.000670800000012 -setitem blist.sorteddict 100000 0.00954000000002 0.00965299999996 0.00956100000008 0.00959260000002 -setitem blist.sorteddict 1000000 0.156131 0.161508 0.156169 0.157271 -setitem treap 100 1.99999999495e-06 2.99999999243e-06 1.99999999495e-06 2.39999999394e-06 -setitem treap 1000 2.59999999344e-05 3.10000000354e-05 2.8000000043e-05 2.8999999995e-05 -setitem treap 10000 0.000409999999988 0.000460000000089 0.000415999999973 0.000422800000001 -setitem treap 100000 0.00623900000005 0.010507 0.010507 0.00720960000001 -setitem treap 1000000 0.0824229999999 0.083607 0.083111 0.0830672 -setitem FastAVLTree 100 9.99999997475e-07 1.99999999495e-06 9.99999997475e-07 1.39999999647e-06 -setitem FastAVLTree 1000 5.99999998485e-06 8.00000009349e-06 6.99999998233e-06 6.80000000557e-06 -setitem FastAVLTree 10000 6.60000000607e-05 6.70000000582e-05 6.60000000607e-05 6.66000000138e-05 -setitem FastAVLTree 100000 0.000803000000019 0.000813999999991 0.0008049999999 0.000806399999988 -setitem FastAVLTree 1000000 0.0104289999999 0.010519 0.010504 0.0104794 -setitem FastRBTree 100 0.0 9.99999997475e-07 0.0 7.9999999798e-07 -setitem FastRBTree 1000 5.99999998485e-06 6.99999998233e-06 5.99999998485e-06 6.40000000658e-06 -setitem FastRBTree 10000 6.00000000759e-05 6.20000000708e-05 6.00000000759e-05 6.12000000274e-05 -setitem FastRBTree 100000 0.000754000000029 0.000758000000019 0.000754000000029 0.000755400000025 -setitem FastRBTree 1000000 0.00986799999998 0.010004 0.00986799999998 0.00994559999999 -setitem SkipListDict 100 3.9999999899e-06 6.00000009854e-06 3.9999999899e-06 5.20000000961e-06 -setitem SkipListDict 1000 3.90000000152e-05 4.40000000026e-05 4.20000000076e-05 4.16000000087e-05 -setitem SkipListDict 10000 0.000449000000003 0.000476999999933 0.000472999999943 0.00046739999998 -setitem SkipListDict 100000 0.00520200000005 0.00542599999994 0.00520200000005 0.0053224 -setitem SkipListDict 1000000 0.0635609999999 0.06637 0.06637 0.0650754 -setitem banyan.SortedDict 100 0.0 1.99999999495e-06 0.0 7.9999999798e-07 -setitem banyan.SortedDict 1000 1.99999999495e-06 3.00000010611e-06 3.00000010611e-06 2.60000001617e-06 -setitem banyan.SortedDict 10000 3.09999999217e-05 3.19999999192e-05 3.19999999192e-05 3.17999999197e-05 -setitem banyan.SortedDict 100000 0.000408000000107 0.000421000000074 0.000408000000107 0.000411600000029 -setitem banyan.SortedDict 1000000 0.00726099999997 0.00744899999995 0.00740300000007 0.00736399999998 -setitem_existing SortedDict 100 9.99999997475e-07 2.99999999243e-06 2.99999999243e-06 1.99999999495e-06 -setitem_existing SortedDict 1000 4.99999998738e-06 5.99999998485e-06 4.99999998738e-06 5.4000000091e-06 -setitem_existing SortedDict 10000 3.79999999041e-05 4.10000000102e-05 4.10000000102e-05 3.91999999692e-05 -setitem_existing SortedDict 100000 0.000479999999925 0.000506999999971 0.000491000000011 0.000491799999986 -setitem_existing SortedDict 1000000 0.00611399999991 0.00708399999996 0.00654599999996 0.00646039999995 -setitem_existing rbtree 100 9.99999997475e-07 1.99999999495e-06 9.99999997475e-07 1.39999999647e-06 -setitem_existing rbtree 1000 5.99999998485e-06 9.99999997475e-06 5.99999998485e-06 7.59999998081e-06 -setitem_existing rbtree 10000 6.49999999496e-05 0.000111000000061 7.5000000038e-05 7.74000000092e-05 -setitem_existing rbtree 100000 0.001394 0.001485 0.001485 0.001451 -setitem_existing rbtree 1000000 0.0184009999999 0.0189449999999 0.018926 0.0186556 -setitem_existing blist.sorteddict 100 9.99999997475e-07 2.99999999243e-06 1.99999999495e-06 1.79999999546e-06 -setitem_existing blist.sorteddict 1000 3.9999999899e-06 5.99999998485e-06 4.99999998738e-06 5.39999998637e-06 -setitem_existing blist.sorteddict 10000 3.50000000253e-05 5.69999999698e-05 3.69999999066e-05 4.01999999895e-05 -setitem_existing blist.sorteddict 100000 0.000635999999986 0.000667999999905 0.000667999999905 0.000651799999969 -setitem_existing blist.sorteddict 1000000 0.00658400000009 0.00767600000006 0.007653 0.00733260000002 -setitem_existing treap 100 2.99999999243e-06 7.9999999798e-06 5.99999998485e-06 5.19999998687e-06 -setitem_existing treap 1000 4.30000000051e-05 5.49999999748e-05 5.19999999824e-05 5.11999999844e-05 -setitem_existing treap 10000 0.000659999999925 0.000815999999986 0.000659999999925 0.000718199999983 -setitem_existing treap 100000 0.0102899999999 0.0108620000001 0.0108210000001 0.010616 -setitem_existing treap 1000000 0.130232 0.133096 0.130232 0.1319894 -setitem_existing FastAVLTree 100 9.99999997475e-07 2.99999999243e-06 1.99999999495e-06 1.99999999495e-06 -setitem_existing FastAVLTree 1000 7.9999999798e-06 8.99999997728e-06 8.00000009349e-06 8.60000000102e-06 -setitem_existing FastAVLTree 10000 9.00000000001e-05 9.99999999749e-05 9.19999999951e-05 9.4399999989e-05 -setitem_existing FastAVLTree 100000 0.00185999999997 0.00201800000002 0.00201800000002 0.00192979999999 -setitem_existing FastAVLTree 1000000 0.020976 0.024735 0.020976 0.0223504 -setitem_existing FastRBTree 100 9.99999997475e-07 2.99999999243e-06 1.99999999495e-06 1.79999999546e-06 -setitem_existing FastRBTree 1000 7.9999999798e-06 9.99999997475e-06 8.99999997728e-06 8.99999997728e-06 -setitem_existing FastRBTree 10000 9.29999999926e-05 9.399999999e-05 9.29999999926e-05 9.33999999916e-05 -setitem_existing FastRBTree 100000 0.00155600000005 0.00165400000003 0.00162799999998 0.00161720000001 -setitem_existing FastRBTree 1000000 0.0193310000001 0.021078 0.0193310000001 0.0200002 -setitem_existing SkipListDict 100 3.9999999899e-06 4.99999998738e-06 4.99999998738e-06 4.59999998839e-06 -setitem_existing SkipListDict 1000 3.50000000253e-05 3.90000000152e-05 3.50000000253e-05 3.69999999975e-05 -setitem_existing SkipListDict 10000 0.000439000000028 0.000512999999955 0.000450000000001 0.000456200000008 -setitem_existing SkipListDict 100000 0.00711899999999 0.00840500000004 0.0071539999999 0.00752539999996 -setitem_existing SkipListDict 1000000 0.092967 0.105282 0.092967 0.099018 -setitem_existing banyan.SortedDict 100 9.99999883788e-07 1.99999999495e-06 1.99999999495e-06 1.4000000192e-06 -setitem_existing banyan.SortedDict 1000 4.99999987369e-06 7.00000009601e-06 4.99999987369e-06 5.59999998586e-06 -setitem_existing banyan.SortedDict 10000 7.9999999798e-05 9.00000000001e-05 8.90000001164e-05 8.53999999435e-05 -setitem_existing banyan.SortedDict 100000 0.00187400000004 0.00216999999998 0.00196000000005 0.00197040000003 -setitem_existing banyan.SortedDict 1000000 0.0245200000002 0.0297310000001 0.0297310000001 0.026006 -delitem SortedDict 100 2.99999987874e-06 1.30000000809e-05 3.9999999899e-06 5.80000000809e-06 -delitem SortedDict 1000 1.80000001819e-05 1.99999999495e-05 1.89999998383e-05 1.93999999738e-05 -delitem SortedDict 10000 0.000187000000096 0.00019999999995 0.000189999999975 0.000192800000013 -delitem SortedDict 100000 0.00221299999998 0.00232299999993 0.00221299999998 0.00224519999997 -delitem SortedDict 1000000 0.0291910000001 0.030724 0.0291910000001 0.0298049999999 -delitem rbtree 100 9.99999883788e-07 1.99999999495e-06 9.99999883788e-07 1.39999997373e-06 -delitem rbtree 1000 7.9999999798e-06 9.99999997475e-06 7.9999999798e-06 9.00000004549e-06 -delitem rbtree 10000 9.399999999e-05 0.00010999999995 9.79999999799e-05 0.000101200000017 -delitem rbtree 100000 0.00153299999988 0.00166200000012 0.00153299999988 0.00159819999999 -delitem rbtree 1000000 0.024275 0.0270499999999 0.0270499999999 0.025381 -delitem blist.sorteddict 100 4.99999987369e-06 5.99999998485e-06 4.99999987369e-06 5.79999996262e-06 -delitem blist.sorteddict 1000 6.49999999496e-05 6.70000001719e-05 6.49999999496e-05 6.60000000153e-05 -delitem blist.sorteddict 10000 0.000941999999895 0.00100299999986 0.000941999999895 0.000968399999965 -delitem blist.sorteddict 100000 0.0131439999998 0.0135359999999 0.0135359999999 0.0133467999999 -delitem blist.sorteddict 1000000 0.187845 0.190672 0.188354 0.188761 -delitem treap 100 3.9999999899e-06 5.00000010106e-06 5.00000010106e-06 4.79999994241e-06 -delitem treap 1000 4.899999999e-05 5.99999998485e-05 5.80000000809e-05 5.5599999996e-05 -delitem treap 10000 0.000643000000082 0.000821999999971 0.000660999999809 0.000697799999898 -delitem treap 100000 0.00945999999999 0.0102509999999 0.00971400000003 0.00976399999995 -delitem treap 1000000 0.116649 0.128928 0.120946 0.1206452 -delitem FastAVLTree 100 1.99999999495e-06 3.00000010611e-06 1.99999999495e-06 2.60000001617e-06 -delitem FastAVLTree 1000 8.99999986359e-06 1.00000002021e-05 9.00000009096e-06 9.40000004448e-06 -delitem FastAVLTree 10000 9.99999999749e-05 0.000115000000051 9.99999999749e-05 0.000104799999963 -delitem FastAVLTree 100000 0.00177500000018 0.00194499999998 0.00177500000018 0.00182160000008 -delitem FastAVLTree 1000000 0.0240840000001 0.027214 0.026918 0.025816 -delitem FastRBTree 100 1.99999999495e-06 3.9999999899e-06 1.99999999495e-06 2.79999994746e-06 -delitem FastRBTree 1000 1.29999998535e-05 1.59999999596e-05 1.50000000758e-05 1.43999999636e-05 -delitem FastRBTree 10000 0.000140999999985 0.000188999999864 0.000148999999965 0.00015899999994 -delitem FastRBTree 100000 0.001935 0.00205500000015 0.001935 0.00199940000002 -delitem FastRBTree 1000000 0.0255809999999 0.0267260000001 0.0255809999999 0.0263366 -delitem SkipListDict 100 4.99999987369e-06 7.00000009601e-06 6.99999986864e-06 6.19999996161e-06 -delitem SkipListDict 1000 4.59999998839e-05 5.00000001011e-05 5.00000001011e-05 4.84000000597e-05 -delitem SkipListDict 10000 0.00052699999992 0.00082099999986 0.000573999999915 0.000607999999966 -delitem SkipListDict 100000 0.00819499999989 0.00891900000011 0.00848599999995 0.00852840000002 -delitem SkipListDict 1000000 0.10887 0.11657 0.10887 0.1123462 -delitem banyan.SortedDict 100 9.99999883788e-07 3.00000010611e-06 1.99999999495e-06 1.99999999495e-06 -delitem banyan.SortedDict 1000 8.99999986359e-06 1.29999998535e-05 8.99999986359e-06 1.03999999283e-05 -delitem banyan.SortedDict 10000 0.000126000000137 0.000181999999995 0.000127999999904 0.000148600000011 -delitem banyan.SortedDict 100000 0.00206099999991 0.00253100000009 0.00227900000004 0.0022704 -delitem banyan.SortedDict 1000000 0.0279840000001 0.030313 0.028143 0.0292448 -iter SortedDict 100 8.99999986359e-06 1.09999998585e-05 8.99999986359e-06 9.39999990806e-06 -iter SortedDict 1000 7.29999999294e-05 7.40000000405e-05 7.40000000405e-05 7.34000000193e-05 -iter SortedDict 10000 0.000716000000011 0.000724999999875 0.00071899999989 0.000718999999935 -iter SortedDict 100000 0.007206 0.00741200000016 0.007206 0.00729360000005 -iter SortedDict 1000000 0.0751990000001 0.076513 0.0754300000001 0.07581 -iter rbtree 100 2.19999999445e-05 2.40000001668e-05 2.19999999445e-05 2.34000000546e-05 -iter rbtree 1000 0.00019999999995 0.000201999999945 0.00019999999995 0.00020099999997 -iter rbtree 10000 0.00199099999986 0.00219300000003 0.00199099999986 0.00207219999998 -iter rbtree 100000 0.0212899999999 0.0227640000001 0.021722 0.0220433999999 -iter rbtree 1000000 0.213431 0.221499 0.213431 0.2176966 -iter blist.sorteddict 100 8.60000000102e-05 9.00000000001e-05 8.80000000052e-05 8.78000000284e-05 -iter blist.sorteddict 1000 0.000844000000143 0.000846000000138 0.000844000000143 0.00084520000014 -iter blist.sorteddict 10000 0.00838799999997 0.00840599999992 0.00838799999997 0.00839919999994 -iter blist.sorteddict 100000 0.0855509999999 0.086088 0.085816 0.085798 -iter blist.sorteddict 1000000 0.852696 0.858104 0.853845 0.8548042 -iter treap 100 0.00017200000002 0.000187000000096 0.00018399999999 0.000179399999979 -iter treap 1000 0.00166899999999 0.00173900000004 0.00173900000004 0.00169580000002 -iter treap 10000 0.0166119999999 0.016787 0.016658 0.0166828 -iter treap 100000 0.168166 0.171826 0.169974 0.1700214 -iter treap 1000000 1.680846 1.688499 1.680846 1.6858614 -iter FastAVLTree 100 1.99999999495e-05 2.19999999445e-05 1.99999999495e-05 2.06000000162e-05 -iter FastAVLTree 1000 0.000178999999889 0.00018 0.000179000000117 0.000179400000025 -iter FastAVLTree 10000 0.0017519999999 0.00185600000009 0.0017519999999 0.00179659999999 -iter FastAVLTree 100000 0.0197700000001 0.0210009999998 0.0210009999998 0.0204488 -iter FastAVLTree 1000000 0.18952 0.207699 0.207699 0.1984896 -iter FastRBTree 100 1.79999999546e-05 2.09999998333e-05 1.90000000657e-05 1.93999999738e-05 -iter FastRBTree 1000 0.000181000000111 0.000183000000106 0.000183000000106 0.000182400000085 -iter FastRBTree 10000 0.00181299999986 0.00188200000002 0.00182199999995 0.00183779999998 -iter FastRBTree 100000 0.0199069999999 0.024091 0.0213759999999 0.0213896 -iter FastRBTree 1000000 0.192101 0.199305 0.196479 0.1963026 -iter SkipListDict 100 3.0999999808e-05 3.19999999192e-05 3.10000000354e-05 3.13999999435e-05 -iter SkipListDict 1000 0.000258999999915 0.000271999999995 0.000259000000142 0.000261999999975 -iter SkipListDict 10000 0.00251000000003 0.00259200000005 0.00251900000012 0.00254420000006 -iter SkipListDict 100000 0.0263129999998 0.0281600000001 0.027431 0.0272926 -iter SkipListDict 1000000 0.26678 0.271177 0.268051 0.2688464 -iter banyan.SortedDict 100 7.9999999798e-06 1.00000002021e-05 8.99999986359e-06 9.399999999e-06 -iter banyan.SortedDict 1000 7.19999998182e-05 7.49999999243e-05 7.49999999243e-05 7.33999999284e-05 -iter banyan.SortedDict 10000 0.000720000000001 0.00074799999993 0.000729000000092 0.0007294 -iter banyan.SortedDict 100000 0.00804300000004 0.0113979999999 0.00895700000001 0.00951639999998 -iter banyan.SortedDict 1000000 0.073396 0.0839550000001 0.073396 0.0763278000001 -init SortedDict 100 2.19999999445e-05 2.59999999344e-05 2.20000001718e-05 2.30000000101e-05 -init SortedDict 1000 0.000127999999904 0.000153000000182 0.000129000000015 0.000136400000019 -init SortedDict 10000 0.00144899999987 0.00173800000016 0.00169400000004 0.00166320000003 -init SortedDict 100000 0.0201940000002 0.0381149999998 0.022074 0.0248924 -init SortedDict 1000000 0.421048 0.498277 0.433332 0.4515328 -init blist.sorteddict 100 0.000692999999956 0.000727999999981 0.000696000000062 0.000702000000047 -init blist.sorteddict 1000 0.00983100000008 0.00990000000002 0.00987400000008 0.00986260000009 -init blist.sorteddict 10000 0.158151 0.173061 0.161912 0.1622018 -init blist.sorteddict 100000 2.230114 2.565272 2.230114 2.3077768 -init FastAVLTree 100 4.79999998788e-05 5.09999999849e-05 4.79999998788e-05 4.87999999677e-05 -init FastAVLTree 1000 0.000547999999981 0.000563000000056 0.000549999999976 0.000552599999992 -init FastAVLTree 10000 0.0070659999999 0.00732399999993 0.00709600000005 0.00714199999998 -init FastAVLTree 100000 0.104917 0.107 0.105278 0.105695 -init FastAVLTree 1000000 1.753358 1.812715 1.812715 1.7817526 -init FastRBTree 100 4.29999997777e-05 4.80000001062e-05 4.30000000051e-05 4.43999999334e-05 -init FastRBTree 1000 0.000508999999965 0.000515999999834 0.000510000000077 0.000511199999937 -init FastRBTree 10000 0.00662800000009 0.00687300000004 0.00666299999989 0.00670579999996 -init FastRBTree 100000 0.0982180000001 0.108863 0.0982180000001 0.1004968 -init FastRBTree 1000000 1.601909 1.675145 1.63291 1.6332164 -init SkipListDict 100 0.00049399999989 0.000536000000011 0.00049399999989 0.000516599999946 -init SkipListDict 1000 0.00541899999985 0.00584700000013 0.00566900000013 0.00566480000007 -init SkipListDict 10000 0.065517 0.0692350000002 0.0679270000001 0.0675122 -init SkipListDict 100000 1.540816 2.106294 1.540816 1.6798086 -init banyan.SortedDict 100 5.29999999799e-05 5.50000002022e-05 5.4000000091e-05 5.440000009e-05 -init banyan.SortedDict 1000 0.000596999999971 0.000600999999961 0.000600999999961 0.000598799999943 -init banyan.SortedDict 10000 0.00785700000006 0.00812099999985 0.00798000000009 0.00799339999999 -init banyan.SortedDict 100000 0.137531 0.149368 0.139586 0.1410618 -init banyan.SortedDict 1000000 2.519208 2.786425 2.521411 2.6145052 +contains SortedDict 100 9.999999992515995e-07 2.9999999995311555e-06 2.9999999995311555e-06 2.3999999996249244e-06 +contains SortedDict 1000 2.000000000279556e-06 9.000000000369823e-06 3.999999998782755e-06 4.399999999549209e-06 +contains SortedDict 10000 1.8999999999991246e-05 2.3999999999801958e-05 2.1000000000270802e-05 2.099999999991553e-05 +contains SortedDict 100000 0.00027599999999949887 0.00030300000000060834 0.0002890000000004278 0.0002880000000001104 +contains SortedDict 1000000 0.004478000000000648 0.005143999999999593 0.004971000000001169 0.004915000000000091 +contains B-Tree 100 2.000000000279556e-06 2.9999999995311555e-06 2.9999999995311555e-06 2.7999999996808357e-06 +contains B-Tree 1000 7.999999999341867e-06 9.000000000369823e-06 7.999999999341867e-06 8.399999999397777e-06 +contains B-Tree 10000 5.200000000016303e-05 6.30000000008124e-05 5.500000000147054e-05 5.640000000042278e-05 +contains B-Tree 100000 0.0007979999999996323 0.0008830000000017435 0.0008340000000011116 0.0008338000000009061 +contains B-Tree 1000000 0.00861600000000351 0.009587999999993713 0.009123999999985699 0.009088199999993662 +contains AVL-Tree 100 9.999999974752427e-07 2.999999992425728e-06 2.999999992425728e-06 2.3999999939405824e-06 +contains AVL-Tree 1000 6.999999982326699e-06 8.000000008223651e-06 7.999999979801942e-06 7.599999997864871e-06 +contains AVL-Tree 10000 6.600000000389628e-05 7.199999998874773e-05 6.799999999884676e-05 6.85999999973319e-05 +contains AVL-Tree 100000 0.0014669999999910033 0.0015800000000183445 0.0014740000000017517 0.0015017999999997755 +contains AVL-Tree 1000000 0.0201669999999865 0.022442000000012285 0.02085200000001919 0.020918800000004012 +contains RB-Tree 100 1.9999999949504854e-06 2.999999992425728e-06 2.999999992425728e-06 2.599999999119973e-06 +contains RB-Tree 1000 7.000000010748408e-06 1.8000000011397788e-05 8.000000008223651e-06 9.80000000936343e-06 +contains RB-Tree 10000 7.099999999127249e-05 8.199999999192187e-05 7.80000000020209e-05 7.699999999886132e-05 +contains RB-Tree 100000 0.0019160000000226773 0.002260000000006812 0.0021050000000002456 0.0020944000000042706 +contains RB-Tree 1000000 0.027782999999999447 0.03112400000000548 0.029455000000012888 0.029230200000006333 +contains Skip-List 100 5.000000015797923e-06 5.999999984851456e-06 5.999999984851456e-06 5.599999997230043e-06 +contains Skip-List 1000 4.100000001017179e-05 5.8000000024094334e-05 4.5999999997548e-05 4.680000000121254e-05 +contains Skip-List 10000 0.0005519999999989977 0.0005820000000085201 0.0005600000000072214 0.0005661999999972522 +contains Skip-List 100000 0.007697000000007392 0.008657999999996946 0.0077339999999992415 0.008044000000001005 +contains Skip-List 1000000 0.09685400000000755 0.1037820000000238 0.1007150000000081 0.1008570000000077 +contains std::map 100 1.9999999949504854e-06 2.999999992425728e-06 2.0000000517939043e-06 2.4000000053092664e-06 +contains std::map 1000 4.9999999873762135e-06 6.000000041694875e-06 5.000000044219632e-06 5.400000009103678e-06 +contains std::map 10000 5.199999998239946e-05 7.999999996854967e-05 5.499999997482519e-05 5.959999998594867e-05 +contains std::map 100000 0.00153499999998985 0.001630999999974847 0.00159600000000637 0.0015913999999952466 +contains std::map 1000000 0.022501999999974487 0.023435000000006312 0.023000000000024556 0.02298600000000306 +getitem SortedDict 100 1.9999999949504854e-06 2.999999992425728e-06 2.999999992425728e-06 2.6000000048043146e-06 +getitem SortedDict 1000 2.999999992425728e-06 5.000000044219632e-06 3.999999989900971e-06 3.800000001774606e-06 +getitem SortedDict 10000 1.8000000011397788e-05 2.8999999983625457e-05 1.899999995202961e-05 2.059999998209605e-05 +getitem SortedDict 100000 0.0002870000000143591 0.0003600000000005821 0.00030899999995881444 0.00031219999999620995 +getitem SortedDict 1000000 0.004939000000035776 0.00565199999999777 0.0051149999999893225 0.005200800000000072 +getitem B-Tree 100 1.9999999949504854e-06 3.999999989900971e-06 1.9999999949504854e-06 2.599999993435631e-06 +getitem B-Tree 1000 5.999999984851456e-06 7.999999979801942e-06 6.000000041694875e-06 6.600000017442653e-06 +getitem B-Tree 10000 3.69999999634274e-05 4.899999998997373e-05 4.0000000012696546e-05 4.09999999988031e-05 +getitem B-Tree 100000 0.0006290000000035434 0.0008000000000265572 0.0006609999999795946 0.0006907999999953063 +getitem B-Tree 1000000 0.006688999999994394 0.007536000000015974 0.0068090000000324835 0.006930400000010195 +getitem AVL-Tree 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 3.199999991920777e-06 +getitem AVL-Tree 1000 7.999999979801942e-06 1.2000000026546331e-05 8.999999977277184e-06 9.199999988140917e-06 +getitem AVL-Tree 10000 7.899999997107443e-05 8.700000000771979e-05 8.100000002286833e-05 8.19999999976062e-05 +getitem AVL-Tree 100000 0.0016780000000267137 0.0018779999999765096 0.001702000000022963 0.0017336000000113927 +getitem AVL-Tree 1000000 0.02107899999998608 0.023500000000012733 0.022537999999997282 0.0222945999999979 +getitem RB-Tree 100 1.9999999949504854e-06 2.999999992425728e-06 2.999999992425728e-06 2.599999993435631e-06 +getitem RB-Tree 1000 7.999999979801942e-06 8.00000003664536e-06 7.999999979801942e-06 7.999999991170625e-06 +getitem RB-Tree 10000 7.500000003801688e-05 9.599999998499698e-05 7.999999996854967e-05 8.259999999609136e-05 +getitem RB-Tree 100000 0.002349999999978536 0.002586000000007971 0.00249500000001035 0.0024679999999989376 +getitem RB-Tree 1000000 0.02917599999994991 0.032126000000005206 0.029530000000022483 0.030217400000003634 +getitem Skip-List 100 4.9999999873762135e-06 7.000000039170118e-06 6.999999982326699e-06 6.399999995210237e-06 +getitem Skip-List 1000 3.8999999958377884e-05 5.499999997482519e-05 4.0000000012696546e-05 4.400000000259752e-05 +getitem Skip-List 10000 0.00045800000003737296 0.0005349999999566535 0.0005090000000222972 0.0005030000000033396 +getitem Skip-List 100000 0.007285000000024411 0.008259000000009564 0.0076029999999605025 0.007676800000001549 +getitem Skip-List 1000000 0.09630700000002435 0.10069999999996071 0.09639599999997017 0.09790520000000243 +getitem std::map 100 1.9999999949504854e-06 2.999999992425728e-06 2.000000108637323e-06 2.40000001667795e-06 +getitem std::map 1000 6.999999982326699e-06 6.999999982326699e-06 6.999999982326699e-06 6.999999982326699e-06 +getitem std::map 10000 5.700000008346251e-05 6.200000007083872e-05 5.99999999622014e-05 5.96000000314234e-05 +getitem std::map 100000 0.001644000000055712 0.0017249999999648935 0.0016829999999572465 0.0016786000000138302 +getitem std::map 1000000 0.023200999999971827 0.024525000000039654 0.02339300000005551 0.02369940000000952 +getitem Treap 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 2.999999992425728e-06 +getitem Treap 1000 1.1000000085914508e-05 1.3999999964653398e-05 1.200000008338975e-05 1.2400000014167744e-05 +getitem Treap 10000 0.00012800000001789158 0.00015900000005331094 0.00013599999999769352 0.00014320000000225263 +getitem Treap 100000 0.002563000000009197 0.0031520000000000437 0.0027250000000549335 0.002835000000004584 +getitem Treap 1000000 0.03305799999998271 0.03577200000006542 0.03347499999995307 0.033884199999988596 +setitem SortedDict 100 3.000000106112566e-06 3.999999989900971e-06 3.999999989900971e-06 3.80000001314329e-06 +setitem SortedDict 1000 1.799999995455437e-05 1.9999999949504854e-05 1.900000006571645e-05 1.8999999997504347e-05 +setitem SortedDict 10000 0.00016299999992952507 0.00017399999990175274 0.0001630000000432119 0.00016599999994468818 +setitem SortedDict 100000 0.0018519999999853098 0.002004000000056294 0.001912000000061198 0.0019294000000172674 +setitem SortedDict 1000000 0.02151800000001458 0.02233000000001084 0.021907000000055632 0.021893400000021757 +setitem B-Tree 100 4.9999999873762135e-06 5.999999984851456e-06 5.999999984851456e-06 5.599999985861359e-06 +setitem B-Tree 1000 5.3999999977349944e-05 5.499999997482519e-05 5.499999997482519e-05 5.459999999857246e-05 +setitem B-Tree 10000 0.0007140000000163127 0.0007689999999911379 0.0007140000000163127 0.0007252000000107728 +setitem B-Tree 100000 0.010659000000032393 0.010919999999941865 0.010704000000032465 0.010735399999998663 +setitem B-Tree 1000000 0.17792500000007294 0.17872699999998076 0.17854099999999562 0.17835240000001704 +setitem AVL-Tree 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 2.999999992425728e-06 +setitem AVL-Tree 1000 6.999999982326699e-06 8.999999977277184e-06 6.999999982326699e-06 7.599999980811844e-06 +setitem AVL-Tree 10000 6.499999994957761e-05 6.700000005821494e-05 6.500000006326445e-05 6.560000001627486e-05 +setitem AVL-Tree 100000 0.0007329999999683423 0.000757000000021435 0.000735999999960768 0.0007401999999729014 +setitem AVL-Tree 1000000 0.009490999999911764 0.009651999999960026 0.00958299999990686 0.009581199999934143 +setitem RB-Tree 100 9.999999974752427e-07 3.000000106112566e-06 1.9999999949504854e-06 1.8000000181928044e-06 +setitem RB-Tree 1000 3.999999989900971e-06 4.9999999873762135e-06 3.999999989900971e-06 4.1999999893960195e-06 +setitem RB-Tree 10000 3.299999991668301e-05 3.400000002784509e-05 3.399999991415825e-05 3.3599999983380255e-05 +setitem RB-Tree 100000 0.00040300000000570435 0.000463999999965381 0.0004069999999956053 0.0004173999999920852 +setitem RB-Tree 1000000 0.00770799999997962 0.007940000000075997 0.007740000000012515 0.007790799999997944 +setitem Skip-List 100 5.999999984851456e-06 8.00000009348878e-06 6.999999982326699e-06 7.000000027801434e-06 +setitem Skip-List 1000 4.3000000005122274e-05 4.799999999249849e-05 4.5999999997548e-05 4.5399999999062855e-05 +setitem Skip-List 10000 0.0004920000000083746 0.0005320000000210712 0.0005180000000564178 0.0005160000000159926 +setitem Skip-List 100000 0.00580200000001696 0.006801999999993313 0.006107000000042717 0.006168800000023111 +setitem Skip-List 1000000 0.07189100000005055 0.07584499999995842 0.0741170000000011 0.07414240000000519 +setitem std::map 100 9.999999974752427e-07 2.999999992425728e-06 1.9999999949504854e-06 1.799999995455437e-06 +setitem std::map 1000 3.999999989900971e-06 5.000000101063051e-06 3.999999989900971e-06 4.400000011628435e-06 +setitem std::map 10000 3.500000002532033e-05 7.400000004054164e-05 4.5999999997548e-05 4.7600000038983124e-05 +setitem std::map 100000 0.0004249999999501597 0.0004279999999425854 0.00042500000006384653 0.00042579999999361464 +setitem std::map 1000000 0.006056999999941581 0.006345000000010259 0.0061210000000073705 0.006181199999991805 +setitem Treap 100 1.9999999949504854e-06 2.999999992425728e-06 1.9999999949504854e-06 2.3999999939405824e-06 +setitem Treap 1000 1.1999999969702912e-05 1.8000000068241206e-05 1.4000000078340236e-05 1.440000000911823e-05 +setitem Treap 10000 0.00020300000005590846 0.00021900000001551234 0.00020599999993464735 0.00020900000001802254 +setitem Treap 100000 0.003012000000012449 0.0033570000000509026 0.003183000000035463 0.0031782000000248447 +setitem Treap 1000000 0.04306999999994332 0.04516799999998966 0.04390200000000277 0.043929800000000796 +setitem_existing SortedDict 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 2.7999999929306794e-06 +setitem_existing SortedDict 1000 5.999999984851456e-06 6.999999982326699e-06 6.999999982326699e-06 6.79999998283165e-06 +setitem_existing SortedDict 10000 4.3000000005122274e-05 4.6999999995023245e-05 4.400000000259752e-05 4.420000000209257e-05 +setitem_existing SortedDict 100000 0.0005409999999983484 0.0005879999999933716 0.00056100000006154 0.0005615999999918131 +setitem_existing SortedDict 1000000 0.007835999999997512 0.0085550000000012 0.008225000000038563 0.008219800000006217 +setitem_existing B-Tree 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 2.7999999929306794e-06 +setitem_existing B-Tree 1000 6.000000098538294e-06 7.999999979801942e-06 6.999999982326699e-06 7.000000005064067e-06 +setitem_existing B-Tree 10000 4.6999999995023245e-05 8.900000000267028e-05 4.999999998744897e-05 5.799999998998828e-05 +setitem_existing B-Tree 100000 0.0007269999999834909 0.0008020000000215077 0.0007460000000492073 0.0007610000000340733 +setitem_existing B-Tree 1000000 0.008327000000008411 0.009230999999999767 0.008690000000001419 0.008705399999985274 +setitem_existing AVL-Tree 100 1.9999999949504854e-06 2.999999992425728e-06 2.999999992425728e-06 2.7999999929306794e-06 +setitem_existing AVL-Tree 1000 9.999999974752427e-06 1.600000007329072e-05 1.200000008338975e-05 1.2400000014167744e-05 +setitem_existing AVL-Tree 10000 8.50000000127693e-05 0.00014299999998002022 0.0001129999999420761 0.00011039999999411521 +setitem_existing AVL-Tree 100000 0.001822999999944841 0.001981999999998152 0.0019170000000485743 0.0019014000000197484 +setitem_existing AVL-Tree 1000000 0.023958999999990738 0.025220999999987725 0.024021000000061576 0.024368000000004032 +setitem_existing RB-Tree 100 1.9999999949504854e-06 2.999999992425728e-06 2.999999992425728e-06 2.599999993435631e-06 +setitem_existing RB-Tree 1000 8.999999977277184e-06 1.1999999969702912e-05 9.999999974752427e-06 9.999999997489795e-06 +setitem_existing RB-Tree 10000 7.599999992180528e-05 8.100000002286833e-05 8.000000002539309e-05 7.900000000518048e-05 +setitem_existing RB-Tree 100000 0.002360000000066975 0.002681000000052336 0.0025190000000065993 0.0025086000000328567 +setitem_existing RB-Tree 1000000 0.029585999999994783 0.031532999999967615 0.031447999999954845 0.030805199999986144 +setitem_existing Skip-List 100 5.999999984851456e-06 7.000000096013537e-06 6.000000098538294e-06 6.400000029316289e-06 +setitem_existing Skip-List 1000 3.700000002027082e-05 7.39999999268548e-05 4.3000000005122274e-05 4.7199999994518296e-05 +setitem_existing Skip-List 10000 0.0004720000000588698 0.0005060000000867149 0.0004990000001043882 0.0004916000000775966 +setitem_existing Skip-List 100000 0.007415999999921041 0.008733000000006541 0.007880999999997584 0.007945199999994657 +setitem_existing Skip-List 1000000 0.09411600000009912 0.10161300000004303 0.09705299999995987 0.0979757999999947 +setitem_existing std::map 100 1.9999999949504854e-06 3.000000106112566e-06 2.999999992425728e-06 2.6000000161729986e-06 +setitem_existing std::map 1000 6.999999982326699e-06 7.999999979801942e-06 7.999999979801942e-06 7.799999980306894e-06 +setitem_existing std::map 10000 6.899999993947858e-05 8.400000001529406e-05 7.39999999268548e-05 7.439999997131963e-05 +setitem_existing std::map 100000 0.001632000000086009 0.0017230000000836299 0.0016460000000506625 0.001659000000040578 +setitem_existing std::map 1000000 0.02048099999990427 0.022391999999967993 0.021806999999967047 0.02166999999994914 +setitem_existing Treap 100 2.999999992425728e-06 5.000000101063051e-06 4.9999999873762135e-06 4.400000011628435e-06 +setitem_existing Treap 1000 2.9000000040468876e-05 3.6000000022795575e-05 3.2000000032894604e-05 3.199999998741987e-05 +setitem_existing Treap 10000 0.00036399999999048305 0.0004209999999602587 0.00038000000006377377 0.00038539999998192797 +setitem_existing Treap 100000 0.005992999999989479 0.006763999999975567 0.006311999999979889 0.006325199999992037 +setitem_existing Treap 1000000 0.07346799999993436 0.07670599999994465 0.07473900000002232 0.07479980000000523 +delitem SortedDict 100 4.9999999873762135e-06 5.999999984851456e-06 4.9999999873762135e-06 5.199999986871262e-06 +delitem SortedDict 1000 2.300000005561742e-05 2.4000000053092663e-05 2.3999999939405825e-05 2.3799999985385513e-05 +delitem SortedDict 10000 0.00021599999990939978 0.00026000000002568413 0.0002160000000230866 0.00022480000000086876 +delitem SortedDict 100000 0.0026000000000294676 0.0028089999999565407 0.0027119999999740685 0.0027104000000008456 +delitem SortedDict 1000000 0.03516300000001138 0.041299999999978354 0.03625299999998788 0.03684819999998581 +delitem B-Tree 100 6.999999982326699e-06 7.000000096013537e-06 6.999999982326699e-06 7.000000005064067e-06 +delitem B-Tree 1000 8.100000002286833e-05 8.50000000127693e-05 8.200000002034358e-05 8.220000001983863e-05 +delitem B-Tree 10000 0.0011050000000523141 0.0013480000000072323 0.0011719999999968422 0.0011897999999973762 +delitem B-Tree 100000 0.016020000000025902 0.01747100000000046 0.016478000000006432 0.016629599999987477 +delitem B-Tree 1000000 0.22048899999992955 0.23885600000005525 0.22797200000013618 0.23055680000002213 +delitem AVL-Tree 100 1.9999999949504854e-06 3.999999989900971e-06 3.000000106112566e-06 3.0000000151630956e-06 +delitem AVL-Tree 1000 1.1000000085914508e-05 1.1999999969702912e-05 1.1999999969702912e-05 1.179999999294523e-05 +delitem AVL-Tree 10000 0.00010899999983848829 0.00015099999995982216 0.00012100000003556488 0.0001231999999617983 +delitem AVL-Tree 100000 0.001939999999876818 0.0020939999999427528 0.0020490000001700537 0.002040999999962878 +delitem AVL-Tree 1000000 0.024695000000065193 0.025319999999965148 0.025012000000060652 0.02501620000002731 +delitem RB-Tree 100 2.9999998787388904e-06 3.999999989900971e-06 3.999999989900971e-06 3.7999999676685547e-06 +delitem RB-Tree 1000 7.999999979801942e-06 1.0000000202126103e-05 7.999999979801942e-06 8.60000004649919e-06 +delitem RB-Tree 10000 0.00010699999984353781 0.00018100000011145312 0.00015200000007098424 0.0001471999999921536 +delitem RB-Tree 100000 0.002430000000003929 0.0027489999999943393 0.002668000000085158 0.0026144000000385857 +delitem RB-Tree 1000000 0.036516000000119675 0.03839700000003177 0.036914999999908105 0.03730199999999968 +delitem Skip-List 100 5.999999984851456e-06 7.999999979801942e-06 7.000000096013537e-06 7.000000005064067e-06 +delitem Skip-List 1000 5.600000008598727e-05 8.499999989908247e-05 5.799999985356408e-05 6.339999999909196e-05 +delitem Skip-List 10000 0.0006209999999100546 0.0006410000000869331 0.0006310000001121807 0.000629800000024261 +delitem Skip-List 100000 0.009461999999984982 0.010339000000158194 0.009756000000152198 0.009887800000069547 +delitem Skip-List 1000000 0.11957600000005186 0.12951999999995678 0.1220130000001518 0.12310539999998582 +delitem std::map 100 1.9999999949504854e-06 3.000000106112566e-06 1.9999999949504854e-06 2.3999999939405824e-06 +delitem std::map 1000 9.999999974752427e-06 1.1000000085914508e-05 1.0999999858540832e-05 1.0799999927257886e-05 +delitem std::map 10000 9.599999998499698e-05 0.00010799999995469989 9.999999997489795e-05 0.00010179999999309075 +delitem std::map 100000 0.002253999999993539 0.002430000000003929 0.002312999999958265 0.0023210000000290164 +delitem std::map 1000000 0.031178000000181783 0.03389900000001944 0.031626999999843974 0.03200000000001637 +delitem Treap 100 3.999999989900971e-06 5.999999984851456e-06 4.999999873689376e-06 5.000000010113581e-06 +delitem Treap 1000 2.3999999939405825e-05 2.700000004551839e-05 2.5000000050567905e-05 2.540000000408327e-05 +delitem Treap 10000 0.000289000000066153 0.0003030000000308064 0.00029599999993479287 0.0002959999999802676 +delitem Treap 100000 0.004460000000108266 0.004915999999866472 0.004666000000042914 0.004676000000063141 +delitem Treap 1000000 0.056872999999995955 0.06324100000006183 0.05848799999989751 0.05933220000001711 +iter SortedDict 100 1.0999999858540832e-05 1.1999999969702912e-05 1.1999999969702912e-05 1.1799999947470497e-05 +iter SortedDict 1000 9.1999999995096e-05 9.1999999995096e-05 9.1999999995096e-05 9.1999999995096e-05 +iter SortedDict 10000 0.0009159999999610591 0.0010680000000320433 0.000945000000001528 0.0009649999999965075 +iter SortedDict 100000 0.009967999999844324 0.010144000000082087 0.010072000000036496 0.010052399999995031 +iter SortedDict 1000000 0.0950070000001233 0.10334199999988414 0.10248699999988276 0.10117259999997259 +iter B-Tree 100 0.00010099999985868635 0.00010700000007091148 0.0001059999999597494 0.0001045999999405467 +iter B-Tree 1000 0.0010299999999006104 0.0011190000000169675 0.0010310000000117725 0.0010489999999663269 +iter B-Tree 10000 0.010507999999845197 0.010780000000067957 0.010534000000006927 0.010582199999953445 +iter B-Tree 100000 0.10495399999990696 0.10745599999995648 0.10693900000001122 0.1066711999999825 +iter B-Tree 1000000 1.0693269999999302 1.106771000000208 1.0829469999998764 1.0847090000000208 +iter AVL-Tree 100 2.1000000060666935e-05 2.300000005561742e-05 2.199999994445534e-05 2.220000001216249e-05 +iter AVL-Tree 1000 0.00020599999993464735 0.00020799999992959783 0.00020700000004580943 0.00020679999997810227 +iter AVL-Tree 10000 0.0020719999999982974 0.002323000000160391 0.0021810000000641594 0.0021760000000085713 +iter AVL-Tree 100000 0.024139999999988504 0.02477099999987331 0.024237000000084663 0.024387800000022254 +iter AVL-Tree 1000000 0.22909600000002683 0.25783099999989645 0.2423949999999877 0.2422153999999864 +iter RB-Tree 100 1.1999999969702912e-05 1.3000000080864993e-05 1.2999999853491317e-05 1.259999994545069e-05 +iter RB-Tree 1000 9.399999999004649e-05 9.500000010120857e-05 9.399999999004649e-05 9.42000000122789e-05 +iter RB-Tree 10000 0.0009589999999661813 0.0010339999998905114 0.0009889999998904386 0.0009879999999611755 +iter RB-Tree 100000 0.012505000000146538 0.01322400000003654 0.013045000000147411 0.01298400000005131 +iter RB-Tree 1000000 0.09979099999986829 0.10383999999999105 0.10205900000005386 0.10156040000001668 +iter Skip-List 100 3.799999990405922e-05 4.0000000126383384e-05 3.899999978784763e-05 3.8799999992988886e-05 +iter Skip-List 1000 0.00032699999997021223 0.000367999999980384 0.0003289999999651627 0.00034259999997630073 +iter Skip-List 10000 0.00327900000002046 0.0035570000000006985 0.003363000000035754 0.0033728000000337486 +iter Skip-List 100000 0.03502600000001621 0.038463999999976295 0.03723300000001473 0.03721040000004905 +iter std::map 100 1.0999999858540832e-05 1.3000000080864993e-05 1.2999999853491317e-05 1.239999996869301e-05 +iter std::map 1000 0.00010199999996984843 0.0001059999999597494 0.000105000000075961 0.00010440000000926375 +iter std::map 10000 0.0011020000001735752 0.0011569999999210268 0.001132999999981621 0.0011292000000139523 +iter std::map 100000 0.01199899999983245 0.012611999999990076 0.01245599999992919 0.012383199999931094 +iter std::map 1000000 0.1213110000001052 0.12951399999997193 0.12742400000001908 0.1263756000000285 +iter Treap 100 0.00010999999994965037 0.00011300000005576294 0.00011100000006081245 0.00011140000005980256 +iter Treap 1000 0.0010059999999612046 0.0011160000001382286 0.0010200000001532317 0.001035600000022896 +iter Treap 10000 0.010009000000081869 0.010140000000092186 0.01007700000013756 0.010070800000085001 +iter Treap 100000 0.10484900000005837 0.11132799999995768 0.10646199999996497 0.10759640000001128 +iter Treap 1000000 1.0330220000000736 1.0778619999998682 1.0435730000001513 1.0466788000000178 +init SortedDict 100 3.399999991415825e-05 4.3000000005122274e-05 3.90000000152213e-05 3.839999999399879e-05 +init SortedDict 1000 0.00029599999993479287 0.0003309999999601132 0.0003019999999196443 0.0003081999999722029 +init SortedDict 10000 0.0036109999998643616 0.003750999999965643 0.0037399999998797284 0.0037063999999190854 +init SortedDict 100000 0.054587999999966996 0.07811600000013641 0.05747700000006262 0.06079740000004676 +init SortedDict 1000000 0.9022019999999884 1.2130870000000868 0.9439800000000105 0.9875149999999848 +init B-Tree 100 0.0007889999999406427 0.0008970000001227163 0.0008159999999861611 0.0008374000000003434 +init B-Tree 1000 0.011497999999846797 0.012258999999858133 0.011874000000034357 0.011829999999963547 +init B-Tree 10000 0.18014199999993252 0.1889600000001792 0.18054099999994833 0.18217719999997825 +init B-Tree 100000 2.538876000000073 2.602837000000136 2.5711479999999938 2.5732760000000328 +init AVL-Tree 100 4.6999999995023245e-05 5.000000010113581e-05 4.799999987881165e-05 4.8000000015235854e-05 +init AVL-Tree 1000 0.0005280000000311702 0.0005510000000867876 0.0005289999999149586 0.0005331999999725667 +init AVL-Tree 10000 0.006892999999990934 0.007406999999830077 0.007258999999976368 0.0072237999999742895 +init AVL-Tree 100000 0.10475599999995211 0.1205729999999221 0.11246600000004037 0.11217780000001767 +init AVL-Tree 1000000 1.9722659999999905 2.0744790000001103 1.983850000000075 2.010124799999994 +init RB-Tree 100 5.3999999863663106e-05 6.399999983841553e-05 5.699999996977567e-05 5.739999996876577e-05 +init RB-Tree 1000 0.0005529999998543644 0.000559999999950378 0.0005539999999655265 0.0005552000000079715 +init RB-Tree 10000 0.00810900000010406 0.008475000000089494 0.008246999999983018 0.008266800000046714 +init RB-Tree 100000 0.15378199999986464 0.15723099999991064 0.15470600000003287 0.15501899999994748 +init RB-Tree 1000000 2.9428800000000592 3.042794999999842 2.9786139999998795 2.986961199999996 +init Skip-List 100 0.000550999999859414 0.0006129999999302527 0.0005810000000110449 0.0005797999999231252 +init Skip-List 1000 0.0060960000000704895 0.006555000000162181 0.006287000000156695 0.00628460000002633 +init Skip-List 10000 0.0709030000000439 0.07433299999979681 0.07292499999994106 0.07295059999996738 +init Skip-List 100000 0.9541440000000421 1.627112999999781 1.4481379999999717 1.3780723999999736 +init std::map 100 3.299999980299617e-05 3.399999991415825e-05 3.300000003036985e-05 3.339999993841047e-05 +init std::map 1000 0.00039399999991474033 0.00045999999997548 0.0003959999999096908 0.0004079999999703432 +init std::map 10000 0.004998999999997977 0.005239999999957945 0.005132000000003245 0.005125400000042646 +init std::map 100000 0.08449999999993452 0.08656800000017029 0.08473999999978332 0.08506539999998494 +init std::map 1000000 1.7519649999999274 1.8263170000000173 1.784351999999899 1.7838747999999214 diff -Nru sortedcontainers-1.5.9/tests/results_sortedlist.txt sortedcontainers-2.0.4/tests/results_sortedlist.txt --- sortedcontainers-1.5.9/tests/results_sortedlist.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/results_sortedlist.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,441 +1,351 @@ -add SortedList 100 1.99999999939e-06 3.00000000042e-06 2.00000000028e-06 2.40000000016e-06 -add SortedList 1000 1.39999999993e-05 1.50000000003e-05 1.49999999994e-05 1.45999999997e-05 -add SortedList 10000 0.000145 0.000159 0.000147 0.000149 -add SortedList 100000 0.001709 0.002058 0.001709 0.0018434 -add SortedList 1000000 0.023192 0.026262 0.023998 0.0242678 -add SortedListWithKey 100 2.00000000028e-06 5.00000000159e-06 4.00000000056e-06 3.80000000035e-06 -add SortedListWithKey 1000 2.19999999995e-05 3.09999999999e-05 3.09999999999e-05 2.46000000001e-05 -add SortedListWithKey 10000 0.000217000000001 0.000364000000001 0.000260000000001 0.0002562 -add SortedListWithKey 100000 0.002626 0.002822 0.002689 0.0027154 -add SortedListWithKey 1000000 0.033742 0.038945 0.033742 0.0357902 -add blist.sortedlist 100 9.99999999962e-06 1.10000000006e-05 9.99999999962e-06 1.02000000002e-05 -add blist.sortedlist 1000 5.7e-05 6.40000000001e-05 6.10000000005e-05 6.06000000001e-05 -add blist.sortedlist 10000 0.000796999999999 0.000800999999999 0.000798 0.000798799999999 -add blist.sortedlist 100000 0.010696 0.011329 0.010726 0.0108472 -add blist.sortedlist 1000000 0.154557 0.156917 0.156025 0.1557932 -add blist.sortedlist(key=identity) 100 4.00000000411e-06 5.00000000159e-06 5.00000000159e-06 4.80000000209e-06 -add blist.sortedlist(key=identity) 1000 6.10000000023e-05 6.39999999947e-05 6.19999999998e-05 6.25999999983e-05 -add blist.sortedlist(key=identity) 10000 0.000861 0.000872999999999 0.000867 0.000866000000002 -add blist.sortedlist(key=identity) 100000 0.01313 0.013214 0.013203 0.0131776 -add blist.sortedlist(key=identity) 1000000 0.186505 0.189237 0.187103 0.1872352 -add sortedcollection 100 1.99999999495e-06 2.99999999243e-06 2.99999999243e-06 2.59999999344e-06 -add sortedcollection 1000 1.39999999931e-05 1.39999999931e-05 1.39999999931e-05 1.39999999931e-05 -add sortedcollection 10000 0.000500999999986 0.000503000000009 0.000500999999986 0.00050159999999 -add sortedcollection 100000 0.042021 0.043938 0.042021 0.0428626 -add sortedcollection 1000000 4.565293 4.756613 4.59229 4.6318082 -update_small SortedList 100 1.29999999956e-05 1.39999999931e-05 1.29999999956e-05 1.34000000003e-05 -update_small SortedList 1000 0.000137999999993 0.000140000000016 0.000137999999993 0.000139000000007 -update_small SortedList 10000 0.00147999999999 0.001553 0.00147999999999 0.001503 -update_small SortedList 100000 0.016304 0.016533 0.016312 0.01638 -update_small SortedList 1000000 0.189534 0.194939 0.194939 0.1917528 -update_small SortedListWithKey 100 1.90000000089e-05 2.10000000038e-05 2.00000000063e-05 2.02000000002e-05 -update_small SortedListWithKey 1000 0.000216999999992 0.000220000000013 0.00021799999999 0.0002184 -update_small SortedListWithKey 10000 0.00227699999999 0.00232399999999 0.00232399999999 0.0022886 -update_small SortedListWithKey 100000 0.024896 0.02531 0.02531 0.0250746 -update_small SortedListWithKey 1000000 0.30133 0.307569 0.301722 0.304039 -update_small blist.sortedlist 100 3.30000000019e-05 3.40000000278e-05 3.40000000278e-05 3.36000000061e-05 -update_small blist.sortedlist 1000 0.000547999999981 0.000598999999994 0.000550000000004 0.000564399999996 -update_small blist.sortedlist 10000 0.007971 0.00876099999999 0.007971 0.0081958 -update_small blist.sortedlist 100000 0.106515 0.108619 0.107961 0.1074304 -update_small blist.sortedlist 1000000 1.578257 1.588443 1.578257 1.5844832 -update_small blist.sortedlist(key=identity) 100 3.70000000203e-05 3.90000000152e-05 3.79999999609e-05 3.7999999995e-05 -update_small blist.sortedlist(key=identity) 1000 0.000605000000007 0.000612999999987 0.000605999999948 0.000607599999989 -update_small blist.sortedlist(key=identity) 10000 0.00862600000005 0.00865200000004 0.00865200000004 0.00864080000003 -update_small blist.sortedlist(key=identity) 100000 0.126375 0.562908 0.126375 0.2937956 -update_small blist.sortedlist(key=identity) 1000000 1.895038 1.916691 1.895038 1.904264 -update_small sortedcollection 100 1.00000000316e-05 1.20000000265e-05 1.00000000316e-05 1.08000000182e-05 -update_small sortedcollection 1000 0.000133000000005 0.000135 0.000134000000003 0.000133800000003 -update_small sortedcollection 10000 0.004772 0.00481000000002 0.00479999999999 0.0047898 -update_small sortedcollection 100000 0.42171 0.430256 0.423831 0.424664 -update_large SortedList 100 2.10000000038e-05 2.29999999988e-05 2.20000000013e-05 2.16000000023e-05 -update_large SortedList 1000 0.000225999999998 0.000227999999993 0.000225999999998 0.000227200000006 -update_large SortedList 10000 0.002838 0.00286500000004 0.00283999999999 0.00284820000002 -update_large SortedList 100000 0.036267 0.037826 0.036267 0.037101 -update_large SortedList 1000000 0.609846 0.643979 0.610813 0.6178834 -update_large SortedListWithKey 100 7.09999999913e-05 7.29999999862e-05 7.09999999913e-05 7.13999999903e-05 -update_large SortedListWithKey 1000 0.000708999999972 0.000752999999975 0.000712000000021 0.000723200000004 -update_large SortedListWithKey 10000 0.00797 0.00830000000002 0.00806200000005 0.00807960000001 -update_large SortedListWithKey 100000 0.103717 0.10459 0.104217 0.1042056 -update_large SortedListWithKey 1000000 1.893683 2.476305 1.893683 2.0634412 -update_large blist.sortedlist 100 0.000346999999977 0.000348000000031 0.000348000000031 0.000347399999998 -update_large blist.sortedlist 1000 0.00586700000002 0.00588499999998 0.005876 0.0058752 -update_large blist.sortedlist 10000 0.088319 0.089254 0.088421 0.088697 -update_large blist.sortedlist 100000 1.205933 1.214792 1.213524 1.2114044 -update_large blist.sortedlist 1000000 17.81668 17.853222 17.81668 17.8346362 -update_large blist.sortedlist(key=identity) 100 0.000392000000033 0.000394999999912 0.000393000000031 0.000393000000008 -update_large blist.sortedlist(key=identity) 1000 0.00641299999995 0.00649600000008 0.006483 0.00645140000001 -update_large blist.sortedlist(key=identity) 10000 0.096527 0.10176 0.097954 0.0981446 -update_large blist.sortedlist(key=identity) 100000 1.412919 1.424619 1.414781 1.4194372 -update_large blist.sortedlist(key=identity) 1000000 21.134753 21.2518 21.145563 21.1778132 -update_large sortedcollection 100 9.70000000962e-05 9.79999999799e-05 9.79999999799e-05 9.78000000032e-05 -update_large sortedcollection 1000 0.00148300000001 0.00150399999995 0.00148300000001 0.00148799999999 -update_large sortedcollection 10000 0.0653080000001 0.065456 0.065456 0.0653712 -update_large sortedcollection 100000 5.900986 6.102801 5.900986 5.9693176 -contains SortedList 100 9.99999997475e-07 2.99999999243e-06 9.99999997475e-07 1.99999999495e-06 -contains SortedList 1000 8.99999997728e-06 1.00000000884e-05 8.99999997728e-06 9.399999999e-06 -contains SortedList 10000 8.80000000052e-05 8.90000000027e-05 8.80000000052e-05 8.84000000042e-05 -contains SortedList 100000 0.00115599999992 0.00120000000004 0.00116200000002 0.0011698 -contains SortedList 1000000 0.015349 0.015464 0.015374 0.0154022 -contains SortedListWithKey 100 1.99999999495e-06 3.00000010611e-06 1.99999999495e-06 2.40000001668e-06 -contains SortedListWithKey 1000 1.29999999672e-05 1.39999999647e-05 1.30000000809e-05 1.31999999894e-05 -contains SortedListWithKey 10000 0.000123000000031 0.000124000000028 0.000124000000028 0.000123800000028 -contains SortedListWithKey 100000 0.00156100000004 0.00158600000009 0.00158600000009 0.00157040000001 -contains SortedListWithKey 1000000 0.0214410000001 0.0224069999999 0.0214410000001 0.0217704 -contains blist.sortedlist 100 3.9999999899e-06 4.99999998738e-06 3.9999999899e-06 4.1999999894e-06 -contains blist.sortedlist 1000 4.79999999925e-05 4.99999999874e-05 4.99999999874e-05 4.87999999905e-05 -contains blist.sortedlist 10000 0.000578000000019 0.000585000000001 0.000581000000011 0.00058140000001 -contains blist.sortedlist 100000 0.00709000000006 0.00711999999999 0.00711799999999 0.007107 -contains blist.sortedlist 1000000 0.0912509999999 0.09146 0.091408 0.0913472 -contains blist.sortedlist(key=identity) 100 3.9999999899e-06 5.99999998485e-06 5.00000010106e-06 5.00000003285e-06 -contains blist.sortedlist(key=identity) 1000 5.30000000936e-05 5.49999999748e-05 5.49999999748e-05 5.40000000228e-05 -contains blist.sortedlist(key=identity) 10000 0.000640999999973 0.000644999999963 0.000641999999971 0.000642199999993 -contains blist.sortedlist(key=identity) 100000 0.00884700000006 0.00893399999995 0.00889300000006 0.00889820000002 -contains blist.sortedlist(key=identity) 1000000 0.1092 0.109458 0.1092 0.1093434 -contains sortedcollection 100 9.99999997475e-07 2.99999999243e-06 9.99999997475e-07 1.99999999495e-06 -contains sortedcollection 1000 1.09999999722e-05 2.30000000556e-05 2.30000000556e-05 1.40000000101e-05 -contains sortedcollection 10000 0.000124999999912 0.00013100000001 0.000124999999912 0.000127199999997 -contains sortedcollection 100000 0.001665 0.00190199999997 0.001665 0.00180699999994 -contains sortedcollection 1000000 0.0256439999998 0.0286229999999 0.0286229999999 0.0270911999999 -remove SortedList 100 1.99999999495e-06 2.99999987874e-06 1.99999999495e-06 2.19999997171e-06 -remove SortedList 1000 1.49999998484e-05 1.6000000187e-05 1.50000000758e-05 1.54000000293e-05 -remove SortedList 10000 0.000149999999849 0.00016299999993 0.00016299999993 0.000153599999931 -remove SortedList 100000 0.00177099999996 0.00178099999994 0.00177599999984 0.00177599999993 -remove SortedList 1000000 0.022745 0.0235109999999 0.022956 0.0230732 -remove SortedListWithKey 100 2.99999987874e-06 5.00000010106e-06 3.9999999899e-06 3.80000001314e-06 -remove SortedListWithKey 1000 1.99999999495e-05 2.10000000607e-05 1.99999999495e-05 2.0399999994e-05 -remove SortedListWithKey 10000 0.000201999999945 0.000214000000142 0.000201999999945 0.000205000000005 -remove SortedListWithKey 100000 0.00240200000007 0.00262700000007 0.00246400000015 0.00248620000007 -remove SortedListWithKey 1000000 0.0323210000001 0.033056 0.033056 0.0326278 -remove blist.sortedlist 100 4.99999987369e-06 5.00000010106e-06 5.00000010106e-06 5.00000005559e-06 -remove blist.sortedlist 1000 6.49999999496e-05 6.69999999445e-05 6.49999999496e-05 6.5799999993e-05 -remove blist.sortedlist 10000 0.000933999999916 0.000981999999794 0.000937999999906 0.000953599999912 -remove blist.sortedlist 100000 0.012461 0.016464 0.012461 0.0133308 -remove blist.sortedlist 1000000 0.181834 0.183721 0.183271 0.1828152 -remove blist.sortedlist(key=identity) 100 5.00000010106e-06 5.99999998485e-06 5.99999998485e-06 5.80000000809e-06 -remove blist.sortedlist(key=identity) 1000 7.09999999344e-05 7.30000001568e-05 7.09999999344e-05 7.16000000466e-05 -remove blist.sortedlist(key=identity) 10000 0.00101300000006 0.00103000000013 0.00101900000004 0.00102140000004 -remove blist.sortedlist(key=identity) 100000 0.0150720000001 0.0153819999998 0.015267 0.015211 -remove blist.sortedlist(key=identity) 1000000 0.218401 0.221033 0.220112 0.21988 -remove sortedcollection 100 1.99999999495e-06 2.99999987874e-06 2.99999987874e-06 2.59999992522e-06 -remove sortedcollection 1000 1.80000001819e-05 1.90000000657e-05 1.80000001819e-05 1.8800000089e-05 -remove sortedcollection 10000 0.000405000000001 0.000408000000107 0.000408000000107 0.000406999999996 -remove sortedcollection 100000 0.032618 0.0329469999999 0.032768 0.0327762 -remove sortedcollection 1000000 4.136607 4.172249 4.144538 4.1517446 -delitem SortedList 100 3.00000010611e-06 5.99999998485e-06 3.00000010611e-06 4.00000003538e-06 -delitem SortedList 1000 1.90000000657e-05 2.00000001769e-05 1.99999999495e-05 1.98000000182e-05 -delitem SortedList 10000 0.000365000000102 0.000373999999965 0.000369999999975 0.000370199999998 -delitem SortedList 100000 0.00406700000008 0.00415699999985 0.00408899999979 0.00411479999993 -delitem SortedList 1000000 0.049992 0.0518160000001 0.050436 0.0506428 -delitem SortedListWithKey 100 3.00000010611e-06 5.00000010106e-06 5.00000010106e-06 4.20000005761e-06 -delitem SortedListWithKey 1000 2.19999999445e-05 2.39999999394e-05 2.19999999445e-05 2.24000000344e-05 -delitem SortedListWithKey 10000 0.000395000000026 0.000515999999834 0.000395000000026 0.000424799999973 -delitem SortedListWithKey 100000 0.00437699999998 0.00455099999999 0.0044519999999 0.00448639999995 -delitem SortedListWithKey 1000000 0.0559679999999 0.0569439999999 0.0565379999998 0.0565208 -delitem blist.sortedlist 100 1.00000011116e-06 3.00000010611e-06 1.99999999495e-06 2.00000004043e-06 -delitem blist.sortedlist 1000 1.10000000859e-05 1.39999999647e-05 1.30000000809e-05 1.24000000142e-05 -delitem blist.sortedlist 10000 0.000140000000101 0.00018799999998 0.000168999999914 0.000166600000011 -delitem blist.sortedlist 100000 0.00125700000012 0.00148000000013 0.00138199999992 0.0013414 -delitem blist.sortedlist 1000000 0.0160390000001 0.020381 0.0166749999999 0.0171642 -delitem blist.sortedlist(key=identity) 100 1.99999999495e-06 3.00000010611e-06 1.99999999495e-06 2.5999999707e-06 -delitem blist.sortedlist(key=identity) 1000 1.19999999697e-05 1.49999998484e-05 1.30000000809e-05 1.33999999889e-05 -delitem blist.sortedlist(key=identity) 10000 0.000124000000142 0.000154000000066 0.000124000000142 0.000131200000078 -delitem blist.sortedlist(key=identity) 100000 0.00180100000011 0.00197099999991 0.00185600000009 0.00188660000003 -delitem blist.sortedlist(key=identity) 1000000 0.025842 0.029035 0.025842 0.0269456 -delitem sortedcollection 100 1.00000011116e-06 3.00000010611e-06 1.00000011116e-06 2.00000004043e-06 -delitem sortedcollection 1000 9.99999997475e-06 1.19999999697e-05 1.09999998585e-05 1.0999999995e-05 -delitem sortedcollection 10000 0.000279000000091 0.000307999999904 0.000300999999808 0.000297199999932 -delitem sortedcollection 100000 0.0307310000001 0.0318299999999 0.0316 0.0311608 -delitem sortedcollection 1000000 4.105276 4.257078 4.200534 4.1767604 -bisect SortedList 100 1.99999999495e-06 3.00000010611e-06 2.99999987874e-06 2.5999999707e-06 -bisect SortedList 1000 9.99999997475e-06 1.10000000859e-05 9.99999997475e-06 1.02000000425e-05 -bisect SortedList 10000 0.000193000000081 0.00019599999996 0.000195000000076 0.000194600000032 -bisect SortedList 100000 0.002385 0.00244299999986 0.00241499999993 0.00240839999997 -bisect SortedList 1000000 0.0309630000002 0.031804 0.0311120000001 0.0312686000001 -bisect SortedListWithKey 100 1.99999999495e-06 3.00000010611e-06 3.00000010611e-06 2.39999999394e-06 -bisect SortedListWithKey 1000 1.20000001971e-05 1.39999999647e-05 1.20000001971e-05 1.28000000586e-05 -bisect SortedListWithKey 10000 0.000216999999793 0.000223000000005 0.000218000000132 0.00021899999997 -bisect SortedListWithKey 100000 0.00266899999997 0.00273399999992 0.00271599999996 0.00270659999996 -bisect SortedListWithKey 1000000 0.0344299999999 0.0374389999999 0.0344299999999 0.0352596 -bisect blist.sortedlist 100 3.9999999899e-06 5.00000010106e-06 3.9999999899e-06 4.40000003437e-06 -bisect blist.sortedlist 1000 4.1999999894e-05 4.30000000051e-05 4.30000000051e-05 4.24000000294e-05 -bisect blist.sortedlist 10000 0.000516999999945 0.000522000000046 0.000522000000046 0.000519799999984 -bisect blist.sortedlist 100000 0.00671899999998 0.00709800000004 0.00678700000003 0.0068886 -bisect blist.sortedlist 1000000 0.086264 0.0911410000001 0.086264 0.087673 -bisect blist.sortedlist(key=identity) 100 3.9999999899e-06 5.00000010106e-06 4.99999987369e-06 4.39999998889e-06 -bisect blist.sortedlist(key=identity) 1000 4.59999998839e-05 4.6999999995e-05 4.59999998839e-05 4.6199999997e-05 -bisect blist.sortedlist(key=identity) 10000 0.000571000000036 0.000592999999981 0.000571000000036 0.000578799999994 -bisect blist.sortedlist(key=identity) 100000 0.00832000000014 0.00867700000003 0.00834099999997 0.00846280000005 -bisect blist.sortedlist(key=identity) 1000000 0.104495 0.109307 0.104632 0.10558 -bisect sortedcollection 100 9.99999883788e-07 1.99999999495e-06 1.00000011116e-06 1.39999997373e-06 -bisect sortedcollection 1000 6.99999986864e-06 7.9999999798e-06 6.99999986864e-06 7.39999995858e-06 -bisect sortedcollection 10000 6.80000000557e-05 6.89999999395e-05 6.80000000557e-05 6.82000000324e-05 -bisect sortedcollection 100000 0.00105499999995 0.00115800000003 0.00110999999993 0.0011058 -bisect sortedcollection 1000000 0.015862 0.018687 0.015862 0.0174276 -getitem SortedList 100 9.99999883788e-07 3.00000010611e-06 3.00000010611e-06 2.20000001718e-06 -getitem SortedList 1000 7.9999999798e-06 9.99999997475e-06 9.99999997475e-06 9.00000000001e-06 -getitem SortedList 10000 0.000194999999849 0.00019999999995 0.000194999999849 0.000196399999959 -getitem SortedList 100000 0.00227599999994 0.00364000000013 0.00233600000001 0.00257340000003 -getitem SortedList 1000000 0.0268350000001 0.0287820000001 0.0287820000001 0.0278372 -getitem SortedListWithKey 100 1.00000011116e-06 1.99999999495e-06 1.99999999495e-06 1.80000001819e-06 -getitem SortedListWithKey 1000 6.99999986864e-06 9.00000009096e-06 7.9999999798e-06 7.59999998081e-06 -getitem SortedListWithKey 10000 0.000194999999849 0.000199000000066 0.00019599999996 0.000196400000004 -getitem SortedListWithKey 100000 0.00227700000005 0.00234599999999 0.00227700000005 0.00230879999999 -getitem SortedListWithKey 1000000 0.0269059999998 0.027519 0.027519 0.0272133999999 -getitem blist.sortedlist 100 9.99999883788e-07 1.99999999495e-06 1.99999999495e-06 1.4000000192e-06 -getitem blist.sortedlist 1000 6.99999986864e-06 8.99999986359e-06 6.99999986864e-06 7.9999999798e-06 -getitem blist.sortedlist 10000 6.89999999395e-05 9.70000000962e-05 8.29999999041e-05 7.91999999819e-05 -getitem blist.sortedlist 100000 0.000835000000052 0.000933000000032 0.000859000000219 0.000865600000088 -getitem blist.sortedlist 1000000 0.0109729999999 0.0114899999999 0.0111569999999 0.0112007999999 -getitem blist.sortedlist(key=identity) 100 9.99999883788e-07 3.00000010611e-06 1.99999999495e-06 1.99999999495e-06 -getitem blist.sortedlist(key=identity) 1000 7.9999999798e-06 9.00000009096e-06 8.99999986359e-06 8.60000000102e-06 -getitem blist.sortedlist(key=identity) 10000 7.59999998081e-05 9.19999999951e-05 7.70000001467e-05 8.01999999567e-05 -getitem blist.sortedlist(key=identity) 100000 0.00110500000005 0.00128800000016 0.00111800000013 0.00116020000009 -getitem blist.sortedlist(key=identity) 1000000 0.0143229999999 0.0145170000001 0.014336 0.0144008 -getitem sortedcollection 100 9.99999883788e-07 1.00000011116e-06 1.00000011116e-06 9.99999974738e-07 -getitem sortedcollection 1000 1.99999999495e-06 3.9999999899e-06 2.99999987874e-06 2.79999994746e-06 -getitem sortedcollection 10000 1.50000000758e-05 1.6000000187e-05 1.6000000187e-05 1.5600000097e-05 -getitem sortedcollection 100000 0.000344000000041 0.000476000000162 0.000432000000046 0.000410800000009 -getitem sortedcollection 1000000 0.00418300000001 0.00553500000001 0.00526500000001 0.00499479999999 -pop SortedList 100 1.99999999495e-06 3.00000010611e-06 1.99999999495e-06 2.5999999707e-06 -pop SortedList 1000 1.00000002021e-05 1.19999999697e-05 1.09999998585e-05 1.11999999717e-05 -pop SortedList 10000 9.00000000001e-05 9.19999999951e-05 9.00000000001e-05 9.09999999749e-05 -pop SortedList 100000 0.000900000000001 0.000909999999976 0.000901999999996 0.000904799999989 -pop SortedList 1000000 0.00919900000008 0.0097159999998 0.00944600000003 0.00945879999999 -pop SortedListWithKey 100 1.99999999495e-06 2.99999987874e-06 1.99999999495e-06 2.19999997171e-06 -pop SortedListWithKey 1000 1.09999998585e-05 1.19999999697e-05 1.19999999697e-05 1.1399999994e-05 -pop SortedListWithKey 10000 0.00010199999997 0.000130000000127 0.00010199999997 0.000109199999997 -pop SortedListWithKey 100000 0.000999000000093 0.00110599999994 0.00110599999994 0.0010546 -pop SortedListWithKey 1000000 0.0101029999998 0.010538 0.010125 0.0102429999999 -pop blist.sortedlist 100 1.99999999495e-06 3.00000010611e-06 1.99999999495e-06 2.20000001718e-06 -pop blist.sortedlist 1000 1.19999999697e-05 2.50000000506e-05 1.19999999697e-05 1.57999999828e-05 -pop blist.sortedlist 10000 0.000126999999793 0.000204000000167 0.000129999999899 0.000143799999933 -pop blist.sortedlist 100000 0.00135399999999 0.00156800000013 0.00135399999999 0.00143400000002 -pop blist.sortedlist 1000000 0.0147129999998 0.0157280000001 0.01476 0.0149686 -pop blist.sortedlist(key=identity) 100 1.99999999495e-06 3.00000010611e-06 1.99999999495e-06 2.20000001718e-06 -pop blist.sortedlist(key=identity) 1000 1.29999998535e-05 1.39999999647e-05 1.29999998535e-05 1.37999999424e-05 -pop blist.sortedlist(key=identity) 10000 0.00013100000001 0.000152999999955 0.000152999999955 0.000139799999988 -pop blist.sortedlist(key=identity) 100000 0.0013550000001 0.0014799999999 0.00137100000006 0.00141320000002 -pop blist.sortedlist(key=identity) 1000000 0.0149260000001 0.0170840000001 0.0150760000001 0.0154512000001 -pop sortedcollection 100 9.99999883788e-07 1.99999999495e-06 1.99999999495e-06 1.59999999596e-06 -pop sortedcollection 1000 3.9999999899e-06 5.00000010106e-06 3.9999999899e-06 4.6000000566e-06 -pop sortedcollection 10000 3.69999997929e-05 3.80000001314e-05 3.70000000203e-05 3.7199999997e-05 -pop sortedcollection 100000 0.00036799999998 0.000389999999925 0.000389999999925 0.000373599999966 -pop sortedcollection 1000000 0.00362700000005 0.00378000000001 0.00372100000004 0.0037182 -index SortedList 100 1.99999999495e-06 3.9999999899e-06 1.99999999495e-06 2.79999999293e-06 -index SortedList 1000 1.29999998535e-05 1.39999999647e-05 1.29999998535e-05 1.32000000121e-05 -index SortedList 10000 0.000230000000101 0.000232000000096 0.000230999999985 0.000230800000054 -index SortedList 100000 0.00275399999987 0.00283599999989 0.00283599999989 0.00278399999997 -index SortedList 1000000 0.0345829999999 0.0368839999999 0.0360459999999 0.0355857999999 -index SortedListWithKey 100 1.99999999495e-06 3.9999999899e-06 2.99999987874e-06 3.39999996868e-06 -index SortedListWithKey 1000 1.69999998434e-05 1.79999999546e-05 1.79999999546e-05 1.73999999788e-05 -index SortedListWithKey 10000 0.000268000000005 0.000271999999995 0.000268000000005 0.000269799999978 -index SortedListWithKey 100000 0.00307599999996 0.00325899999984 0.00320499999998 0.00319379999996 -index SortedListWithKey 1000000 0.0399229999998 0.046235 0.046235 0.0421608 -index blist.sortedlist 100 3.9999999899e-06 5.00000010106e-06 3.9999999899e-06 4.60000001112e-06 -index blist.sortedlist 1000 4.79999998788e-05 5.00000001011e-05 5.00000001011e-05 4.91999999667e-05 -index blist.sortedlist 10000 0.0005799999999 0.000606000000062 0.000606000000062 0.000586799999974 -index blist.sortedlist 100000 0.00741300000004 0.00783999999999 0.00755200000003 0.00754319999996 -index blist.sortedlist 1000000 0.0951989999999 0.0971019999999 0.0971019999999 0.0957673999999 -index blist.sortedlist(key=identity) 100 4.99999987369e-06 6.00000021223e-06 6.00000021223e-06 5.40000010005e-06 -index blist.sortedlist(key=identity) 1000 5.39999996363e-05 5.49999999748e-05 5.49999999748e-05 5.45999999304e-05 -index blist.sortedlist(key=identity) 10000 0.000645999999961 0.000737999999728 0.000727000000097 0.000702000000001 -index blist.sortedlist(key=identity) 100000 0.00911200000019 0.00941299999977 0.00913799999989 0.00926079999999 -index blist.sortedlist(key=identity) 1000000 0.112368 0.116407 0.113155 0.1144712 -index sortedcollection 100 1.99999976758e-06 3.00000010611e-06 1.99999976758e-06 2.40000008489e-06 -index sortedcollection 1000 1.30000003082e-05 2.39999999394e-05 2.39999999394e-05 1.58000001647e-05 -index sortedcollection 10000 0.000148999999965 0.00019199999997 0.000148999999965 0.000161200000002 -index sortedcollection 100000 0.00211000000036 0.00245800000039 0.00245800000039 0.0022890000002 -index sortedcollection 1000000 0.0290749999999 0.0333600000004 0.0290749999999 0.0307666000002 -iter SortedList 100 9.00000031834e-06 9.99999974738e-06 9.00000031834e-06 9.59999997576e-06 -iter SortedList 1000 7.19999998182e-05 8.29999999041e-05 7.2000000273e-05 7.62000000577e-05 -iter SortedList 10000 0.000708000000031 0.000814999999875 0.000708000000031 0.000739800000065 -iter SortedList 100000 0.00738500000034 0.00759700000026 0.00738500000034 0.00751040000014 -iter SortedList 1000000 0.0742060000002 0.0819309999997 0.0819309999997 0.0777026000001 -iter SortedListWithKey 100 8.99999986359e-06 1.00000002021e-05 9.99999974738e-06 9.39999990806e-06 -iter SortedListWithKey 1000 7.19999998182e-05 9.89999998637e-05 7.19999998182e-05 7.77999999627e-05 -iter SortedListWithKey 10000 0.000708000000031 0.000793000000158 0.000749999999698 0.000733599999967 -iter SortedListWithKey 100000 0.00725200000034 0.00729899999988 0.00725200000034 0.00726920000006 -iter SortedListWithKey 1000000 0.0752130000001 0.0796479999999 0.0789090000003 0.0784110000001 -iter blist.sortedlist 100 2.79999999293e-05 3.00000001516e-05 2.99999996969e-05 2.8999999995e-05 -iter blist.sortedlist 1000 0.000256000000263 0.000256999999692 0.000256000000263 0.000256400000035 -iter blist.sortedlist 10000 0.00254099999984 0.00260799999978 0.00254099999984 0.00258779999986 -iter blist.sortedlist 100000 0.025873 0.030581 0.025873 0.0269188 -iter blist.sortedlist 1000000 0.261297 0.267594 0.261297 0.2654922 -iter blist.sortedlist(key=identity) 100 2.99999996969e-05 4.10000002375e-05 3.2000000374e-05 3.38000000738e-05 -iter blist.sortedlist(key=identity) 1000 0.000278999999864 0.000317999999879 0.000281000000086 0.000287200000002 -iter blist.sortedlist(key=identity) 10000 0.00279600000022 0.00300900000002 0.00293800000009 0.0029098 -iter blist.sortedlist(key=identity) 100000 0.0290449999998 0.0308749999999 0.0290449999998 0.029669 -iter blist.sortedlist(key=identity) 1000000 0.297068 0.304963 0.297068 0.301493 -iter sortedcollection 100 7.00000009601e-06 7.9999999798e-06 7.9999999798e-06 7.80000000304e-06 -iter sortedcollection 1000 6.60000000607e-05 6.70000003993e-05 6.69999999445e-05 6.6600000082e-05 -iter sortedcollection 10000 0.00065799999993 0.000678999999764 0.000678999999764 0.000667399999929 -iter sortedcollection 100000 0.00687100000005 0.00700300000017 0.00696700000026 0.00694840000006 -iter sortedcollection 1000000 0.0702329999999 0.0771329999998 0.0771329999998 0.0736163999999 -count SortedList 100 1.99999976758e-06 3.00000010611e-06 1.99999976758e-06 2.19999983528e-06 -count SortedList 1000 1.4000000192e-05 1.50000000758e-05 1.50000000758e-05 1.48000000991e-05 -count SortedList 10000 0.000181999999768 0.000195000000076 0.000195000000076 0.000184799999988 -count SortedList 100000 0.00202300000001 0.00211899999977 0.00205899999992 0.00205699999997 -count SortedList 1000000 0.0236 0.0286940000001 0.0239799999999 0.0253996 -count SortedListWithKey 100 1.99999976758e-06 3.00000010611e-06 1.99999976758e-06 2.5999999707e-06 -count SortedListWithKey 1000 1.29999998535e-05 1.50000000758e-05 1.4000000192e-05 1.42000000778e-05 -count SortedListWithKey 10000 0.000136000000111 0.000208999999813 0.000136000000111 0.000151000000005 -count SortedListWithKey 100000 0.00175500000023 0.00184099999979 0.00176499999998 0.00178820000001 -count SortedListWithKey 1000000 0.0234739999996 0.027114 0.025427 0.0253416 -count blist.sortedlist 100 5.00000032844e-06 7.00000009601e-06 7.00000009601e-06 6.20000009803e-06 -count blist.sortedlist 1000 5.89999999647e-05 6.09999997323e-05 6.09999997323e-05 5.99999998485e-05 -count blist.sortedlist 10000 0.000690999999733 0.00077999999985 0.000690999999733 0.000714399999924 -count blist.sortedlist 100000 0.00838199999998 0.00867699999981 0.00867699999981 0.00851619999994 -count blist.sortedlist 1000000 0.105226 0.109895 0.106671 0.1069876 -count blist.sortedlist(key=identity) 100 5.99999975748e-06 7.00000009601e-06 7.00000009601e-06 6.39999989289e-06 -count blist.sortedlist(key=identity) 1000 6.79999998283e-05 9.399999999e-05 6.90000001669e-05 7.40000000405e-05 -count blist.sortedlist(key=identity) 10000 0.000804000000244 0.00088199999982 0.000804000000244 0.000826799999959 -count blist.sortedlist(key=identity) 100000 0.0106049999999 0.0110959999997 0.0106329999999 0.0107451999998 -count blist.sortedlist(key=identity) 1000000 0.126782 0.134493 0.127662 0.1302942 -count sortedcollection 100 1.99999976758e-06 2.99999965137e-06 2.00000022232e-06 2.19999992623e-06 -count sortedcollection 1000 1.19999999697e-05 1.4000000192e-05 1.39999997373e-05 1.31999999212e-05 -count sortedcollection 10000 0.000131000000238 0.000152000000071 0.000133000000005 0.000135800000044 -count sortedcollection 100000 0.00191799999993 0.00221599999986 0.00211899999977 0.00205719999994 -count sortedcollection 1000000 0.0272870000003 0.0303490000001 0.0299369999998 0.0290136 -priorityqueue SortedList 100 2.19999997171e-05 2.39999999394e-05 2.30000000556e-05 2.27999999879e-05 -priorityqueue SortedList 1000 0.000192999999854 0.00020399999994 0.00020399999994 0.000200000000041 -priorityqueue SortedList 10000 0.00212300000021 0.00237599999991 0.00212800000008 0.00217979999998 -priorityqueue SortedList 100000 0.0222020000001 0.0227100000002 0.0222059999996 0.0223537999999 -priorityqueue SortedList 1000000 0.287109 0.299446 0.291013 0.2927008 -priorityqueue SortedListWithKey 100 2.40000003942e-05 5.70000001971e-05 2.49999998232e-05 3.14000000799e-05 -priorityqueue SortedListWithKey 1000 0.000227999999879 0.000243999999839 0.00024300000041 0.000239200000033 -priorityqueue SortedListWithKey 10000 0.00244900000007 0.00255800000014 0.00255800000014 0.0025114 -priorityqueue SortedListWithKey 100000 0.0274039999999 0.0318890000003 0.0318890000003 0.0292758 -priorityqueue SortedListWithKey 1000000 0.363336 0.389875 0.368979 0.3724866 -priorityqueue blist.sortedlist 100 3.19999999192e-05 6.29999999546e-05 3.59999999091e-05 4.07999999879e-05 -priorityqueue blist.sortedlist 1000 0.000408999999763 0.000536999999895 0.000489000000016 0.000489800000014 -priorityqueue blist.sortedlist 10000 0.00664899999992 0.00678400000015 0.00664899999992 0.00671540000003 -priorityqueue blist.sortedlist 100000 0.085411 0.0916910000001 0.085411 0.08962 -priorityqueue blist.sortedlist 1000000 1.220337 1.25983 1.230735 1.2358432 -priorityqueue blist.sortedlist(key=identity) 100 3.50000000253e-05 4.40000003437e-05 3.80000001314e-05 3.92000000829e-05 -priorityqueue blist.sortedlist(key=identity) 1000 0.000489000000016 0.000650999999834 0.000524999999925 0.000546599999961 -priorityqueue blist.sortedlist(key=identity) 10000 0.00718400000005 0.00750400000015 0.00741100000005 0.00736079999997 -priorityqueue blist.sortedlist(key=identity) 100000 0.101635 0.106594 0.105304 0.1038582 -priorityqueue blist.sortedlist(key=identity) 1000000 1.457473 1.499691 1.457473 1.4707334 -priorityqueue sortedcollection 100 1.69999998434e-05 2.09999998333e-05 1.90000000657e-05 1.86000000213e-05 -priorityqueue sortedcollection 1000 0.000166999999692 0.000191000000086 0.00018799999998 0.000183199999901 -priorityqueue sortedcollection 10000 0.0034169999999 0.00356899999997 0.00345800000014 0.00348699999995 -priorityqueue sortedcollection 100000 0.209713 0.224386 0.222181 0.2173774 -multiset SortedList 100 1.8999999611e-05 2.90000002678e-05 1.8999999611e-05 2.11999999919e-05 -multiset SortedList 1000 0.000175000000127 0.000199000000066 0.000181999999768 0.000183000000015 -multiset SortedList 10000 0.00218300000006 0.00230699999975 0.00218300000006 0.00223260000002 -multiset SortedList 100000 0.0239160000001 0.0242600000001 0.0239160000001 0.0240542000001 -multiset SortedList 1000000 0.325313 0.345541 0.345541 0.3360458 -multiset SortedListWithKey 100 2.30000000556e-05 3.30000002577e-05 2.39999999394e-05 2.54000000496e-05 -multiset SortedListWithKey 1000 0.000211000000036 0.000263999999788 0.000225999999657 0.000226399999974 -multiset SortedListWithKey 10000 0.00261100000034 0.00267399999984 0.00267299999996 0.002657 -multiset SortedListWithKey 100000 0.0287229999999 0.029575 0.0287229999999 0.0289358000001 -multiset SortedListWithKey 1000000 0.397508 0.411215 0.400468 0.402258 -multiset blist.sortedlist 100 4.30000000051e-05 5.30000002072e-05 4.60000001112e-05 4.76000000162e-05 -multiset blist.sortedlist 1000 0.000574000000142 0.000662000000375 0.000662000000375 0.000606000000153 -multiset blist.sortedlist 10000 0.00915799999984 0.0117400000004 0.00915799999984 0.00978560000012 -multiset blist.sortedlist 100000 0.125223 0.131759 0.131759 0.1288406 -multiset blist.sortedlist 1000000 1.790808 1.864297 1.864297 1.8217402 -multiset blist.sortedlist(key=identity) 100 4.90000002173e-05 8.90000001164e-05 5.00000001011e-05 5.92000001234e-05 -multiset blist.sortedlist(key=identity) 1000 0.000613000000158 0.000696000000062 0.00065799999993 0.000648000000092 -multiset blist.sortedlist(key=identity) 10000 0.00975699999981 0.0131610000003 0.0131610000003 0.0108156 -multiset blist.sortedlist(key=identity) 100000 0.141948 0.155011 0.143817 0.146387 -multiset blist.sortedlist(key=identity) 1000000 2.099359 2.114631 2.102085 2.1061094 -multiset sortedcollection 100 2.20000001718e-05 4.19999996666e-05 2.79999999293e-05 3.03999999232e-05 -multiset sortedcollection 1000 0.00019999999995 0.00020799999993 0.00020799999993 0.000203800000054 -multiset sortedcollection 10000 0.0027799999998 0.00318799999968 0.00318799999968 0.0029121999999 -multiset sortedcollection 100000 0.096348 0.103196 0.097976 0.0988362000001 -ranking SortedList 100 2.09999998333e-05 2.70000000455e-05 2.19999997171e-05 2.27999999879e-05 -ranking SortedList 1000 0.000196999999844 0.000202999999601 0.000202999999601 0.000199399999929 -ranking SortedList 10000 0.00298799999973 0.00314600000002 0.00306999999975 0.00305719999988 -ranking SortedList 100000 0.0349389999997 0.0352170000001 0.0349670000001 0.0350823999999 -ranking SortedList 1000000 0.458618 0.475072 0.475072 0.464629 -ranking SortedListWithKey 100 2.39999999394e-05 3.10000000354e-05 2.60000001617e-05 2.64000000243e-05 -ranking SortedListWithKey 1000 0.000217000000248 0.000229999999647 0.000229999999647 0.000223600000027 -ranking SortedListWithKey 10000 0.00327000000016 0.00338699999975 0.00327000000016 0.00332120000003 -ranking SortedListWithKey 100000 0.0383339999998 0.0430669999996 0.0385449999999 0.0394989999999 -ranking SortedListWithKey 1000000 0.513505 0.526138 0.51653 0.5205738 -ranking blist.sortedlist 100 3.19999999192e-05 5.99999998485e-05 3.59999999091e-05 4.19999999394e-05 -ranking blist.sortedlist 1000 0.000412999999753 0.000684999999976 0.000684999999976 0.000494399999934 -ranking blist.sortedlist 10000 0.00676199999998 0.00716999999986 0.00676199999998 0.00693139999994 -ranking blist.sortedlist 100000 0.0868189999997 0.0917300000001 0.0868189999997 0.0885928 -ranking blist.sortedlist 1000000 1.227477 1.247538 1.233283 1.234323 -ranking blist.sortedlist(key=identity) 100 3.70000002476e-05 5.99999998485e-05 3.9999999899e-05 4.45999999101e-05 -ranking blist.sortedlist(key=identity) 1000 0.000450000000001 0.000582000000122 0.000582000000122 0.000503200000094 -ranking blist.sortedlist(key=identity) 10000 0.00722399999995 0.0074410000002 0.00722399999995 0.00732980000002 -ranking blist.sortedlist(key=identity) 100000 0.099631 0.105944 0.100917 0.1023692 -ranking blist.sortedlist(key=identity) 1000000 1.426196 1.483593 1.449065 1.457005 -ranking sortedcollection 100 1.80000001819e-05 3.2999999803e-05 2.79999999293e-05 2.59999999798e-05 -ranking sortedcollection 1000 0.000180999999884 0.00018799999998 0.00018799999998 0.000184199999967 -ranking sortedcollection 10000 0.0025340000002 0.00264399999969 0.00262099999964 0.00260299999991 -ranking sortedcollection 100000 0.0927150000002 0.0999819999997 0.099299 0.09671 -neighbor SortedList 100 2.5999999707e-05 4.00000003538e-05 2.60000001617e-05 3.02000000374e-05 -neighbor SortedList 1000 0.000185999999758 0.000209000000268 0.00019599999996 0.000200199999927 -neighbor SortedList 10000 0.00278000000026 0.00292800000034 0.00278000000026 0.00287080000007 -neighbor SortedList 100000 0.0338739999997 0.0341840000001 0.0338739999997 0.0339993999999 -neighbor SortedList 1000000 0.439388 0.47459 0.444174 0.4507382 -neighbor SortedListWithKey 100 2.30000000556e-05 3.9999999899e-05 3.50000000253e-05 3.13999999889e-05 -neighbor SortedListWithKey 1000 0.000230999999985 0.000255999999808 0.000248999999712 0.000243999999839 -neighbor SortedListWithKey 10000 0.00312500000018 0.00326499999983 0.00321900000017 0.00321060000006 -neighbor SortedListWithKey 100000 0.0370279999997 0.0375819999999 0.0371340000002 0.0372026 -neighbor SortedListWithKey 1000000 0.497439 0.516339 0.497439 0.5049428 -neighbor blist.sortedlist 100 3.90000000152e-05 7.09999999344e-05 4.10000002375e-05 5.50000000658e-05 -neighbor blist.sortedlist 1000 0.000563000000056 0.00075199999992 0.000654999999824 0.000648599999931 -neighbor blist.sortedlist 10000 0.0096309999999 0.00977699999976 0.0096309999999 0.00969459999997 -neighbor blist.sortedlist 100000 0.127687 0.135087 0.128409 0.1296568 -neighbor blist.sortedlist 1000000 1.803472 1.854692 1.854692 1.8200996 -neighbor blist.sortedlist(key=identity) 100 4.49999997727e-05 7.80000000304e-05 4.49999997727e-05 6.11999999819e-05 -neighbor blist.sortedlist(key=identity) 1000 0.000634999999875 0.000725999999759 0.000684999999976 0.000686599999972 -neighbor blist.sortedlist(key=identity) 10000 0.010389 0.0109979999997 0.010389 0.0107538 -neighbor blist.sortedlist(key=identity) 100000 0.145823 0.158185 0.151041 0.1498764 -neighbor blist.sortedlist(key=identity) 1000000 2.101318 2.159231 2.110298 2.1257514 -neighbor sortedcollection 100 1.59999999596e-05 2.89999998131e-05 1.59999999596e-05 2.05999999707e-05 -neighbor sortedcollection 1000 0.000162999999702 0.000187000000096 0.000177999999778 0.000177399999939 -neighbor sortedcollection 10000 0.00242200000002 0.00262299999986 0.00243100000034 0.00251180000005 -neighbor sortedcollection 100000 0.0922 0.100587 0.0946779999999 0.0967836 -intervals SortedList 100 2.19999997171e-05 3.19999999192e-05 2.5999999707e-05 2.59999997979e-05 -intervals SortedList 1000 0.000222000000122 0.000291999999718 0.000291999999718 0.000250399999913 -intervals SortedList 10000 0.00342000000001 0.00357100000019 0.00345900000002 0.00348780000004 -intervals SortedList 100000 0.0398850000001 0.0431800000001 0.0399910000001 0.040782 -intervals SortedList 1000000 0.523538 0.544638 0.543903 0.5349324 -intervals SortedListWithKey 100 2.5999999707e-05 3.40000001415e-05 2.89999998131e-05 2.8999999995e-05 -intervals SortedListWithKey 1000 0.000253000000157 0.00027 0.00027 0.000259000000005 -intervals SortedListWithKey 10000 0.00377900000012 0.00383099999999 0.00379799999973 0.00380320000004 -intervals SortedListWithKey 100000 0.043795 0.045059 0.043795 0.0441898000001 -intervals SortedListWithKey 1000000 0.582356 0.612756 0.584706 0.5981748 -intervals blist.sortedlist 100 3.30000002577e-05 5.20000003235e-05 3.90000000152e-05 3.88000002204e-05 -intervals blist.sortedlist 1000 0.000410000000102 0.000508999999965 0.000473000000056 0.000458600000002 -intervals blist.sortedlist 10000 0.00626700000021 0.0066139999999 0.00626700000021 0.00644279999997 -intervals blist.sortedlist 100000 0.0818989999998 0.088401 0.0824210000001 0.0844534 -intervals blist.sortedlist 1000000 1.156225 1.182645 1.164893 1.167089 -intervals blist.sortedlist(key=identity) 100 3.50000000253e-05 6.60000000607e-05 3.70000002476e-05 4.40000001618e-05 -intervals blist.sortedlist(key=identity) 1000 0.000434000000041 0.000493000000006 0.000487999999677 0.000464999999986 -intervals blist.sortedlist(key=identity) 10000 0.00660900000003 0.00870900000018 0.00672399999985 0.0070796 -intervals blist.sortedlist(key=identity) 100000 0.0958029999997 0.104634 0.097534 0.099612 -intervals blist.sortedlist(key=identity) 1000000 1.401982 1.425798 1.401982 1.4139194 -intervals sortedcollection 100 1.79999997272e-05 2.39999999394e-05 1.90000000657e-05 2.02000000172e-05 -intervals sortedcollection 1000 0.000180999999884 0.000201999999717 0.000201999999717 0.0001871999998 -intervals sortedcollection 10000 0.00280099999964 0.00297999999975 0.00296799999978 0.00292419999987 -intervals sortedcollection 100000 0.146645 0.16051 0.146645 0.1532592 -init SortedList 100 1.39999997373e-05 1.59999999596e-05 1.4000000192e-05 1.43999999636e-05 -init SortedList 1000 0.000166000000263 0.000168999999914 0.000167000000147 0.000167200000124 -init SortedList 10000 0.00224299999991 0.00233500000013 0.00224299999991 0.00229719999998 -init SortedList 100000 0.0307629999998 0.0492419999996 0.0332450000001 0.0352605999999 -init SortedList 1000000 0.536392 0.543013 0.536392 0.5385498 -init SortedListWithKey 100 3.80000001314e-05 4.20000001213e-05 3.80000001314e-05 3.94000000597e-05 -init SortedListWithKey 1000 0.000377999999728 0.00039199999992 0.000380000000405 0.00038140000006 -init SortedListWithKey 10000 0.00480099999959 0.00508099999979 0.00489400000015 0.00492979999981 -init SortedListWithKey 100000 0.0734160000002 0.0741200000002 0.073954 0.0737956000001 -init SortedListWithKey 1000000 1.527157 1.588165 1.562737 1.560913 -init blist.sortedlist 100 0.000274999999874 0.000349999999798 0.000349999999798 0.000295599999936 -init blist.sortedlist 1000 0.00444100000004 0.00461099999984 0.00444199999993 0.00451099999991 -init blist.sortedlist 10000 0.0716350000002 0.0760249999998 0.0716350000002 0.0725434000001 -init blist.sortedlist 100000 1.05021 1.086699 1.086699 1.0653294 -init blist.sortedlist(key=identity) 100 0.00027399999999 0.000295000000278 0.000274999999874 0.000278400000025 -init blist.sortedlist(key=identity) 1000 0.00446899999997 0.00451599999997 0.00447699999995 0.00448739999993 -init blist.sortedlist(key=identity) 10000 0.0716120000002 0.0721370000001 0.0719730000001 0.0719176000001 -init blist.sortedlist(key=identity) 100000 1.050614 1.095682 1.062138 1.06327 -init sortedcollection 100 4.6999999995e-05 4.79999998788e-05 4.6999999995e-05 4.73999999485e-05 -init sortedcollection 1000 0.000562000000173 0.000586000000112 0.000562000000173 0.000568000000112 -init sortedcollection 10000 0.00926500000014 0.0093280000001 0.00929599999972 0.00928880000001 -init sortedcollection 100000 0.139704 0.145819 0.142738 0.142595 -init sortedcollection 1000000 2.180484 2.280514 2.24764 2.2328942 +add SortedList 100 2.9999999995311555e-06 4.999999999810711e-06 4.000000000559112e-06 3.7999999999982492e-06 +add SortedList 1000 1.699999999971169e-05 1.799999999896329e-05 1.7000000001488047e-05 1.73999999997676e-05 +add SortedList 10000 0.0001610000000002998 0.00017200000000094917 0.00016399999999983095 0.00016520000000035394 +add SortedList 100000 0.0018679999999999808 0.0021250000000012648 0.0018890000000002516 0.00197340000000068 +add SortedList 1000000 0.02581900000000026 0.02787800000000118 0.027188999999999908 0.027018000000000698 +add SortedKeyList 100 4.999999999810711e-06 5.000000001587068e-06 4.999999999810711e-06 5.0000000001659824e-06 +add SortedKeyList 1000 2.6000000000081513e-05 2.6999999999333113e-05 2.6999999999333113e-05 2.6599999999632472e-05 +add SortedKeyList 10000 0.00023799999999951638 0.0002949999999994901 0.0002420000000000755 0.00025119999999994035 +add SortedKeyList 100000 0.0027410000000003265 0.0029729999999990042 0.0027720000000002187 0.0028097999999999955 +add SortedKeyList 1000000 0.036452000000000595 0.038634000000001834 0.0368700000000004 0.0372312000000008 +add B-Tree 100 4.9999999980343546e-06 7.000000000090267e-06 5.999999999062311e-06 5.999999999062311e-06 +add B-Tree 1000 6.400000000184036e-05 7.899999999949614e-05 6.69999999978188e-05 6.859999999946354e-05 +add B-Tree 10000 0.0008860000000012747 0.0008949999999998681 0.0008879999999997779 0.0008890000000000952 +add B-Tree 100000 0.012153999999998888 0.012917999999999097 0.012225000000000819 0.012359599999999915 +add B-Tree 1000000 0.1771930000000026 0.180018000000004 0.17890400000000284 0.1788406000000009 +add List 100 1.9999999949504854e-06 4.0000000041118255e-06 3.000000006636583e-06 3.000000003794412e-06 +add List 1000 1.6000000002236447e-05 1.699999999971169e-05 1.6000000002236447e-05 1.6200000001731495e-05 +add List 10000 0.00045899999999221563 0.000641000000001668 0.0004590000000064265 0.0004955999999992855 +add List 100000 0.042512000000002104 0.04546200000000056 0.04505899999999485 0.04414320000000203 +add List 1000000 4.6038719999999955 4.746921 4.6409889999999905 4.663668999999996 +update_small SortedList 100 1.499999999055035e-05 1.7000000013922545e-05 1.5999999988025593e-05 1.5799999994214885e-05 +update_small SortedList 1000 0.0001540000000090913 0.00015799999999899228 0.00015500000000656655 0.0001552000000060616 +update_small SortedList 10000 0.0016310000000032687 0.001677999999998292 0.0016559999999969932 0.001654400000001033 +update_small SortedList 100000 0.01790900000000306 0.018315999999998667 0.018079000000000178 0.018096599999995532 +update_small SortedList 1000000 0.21849799999998254 0.22042199999998502 0.21933299999997757 0.21945839999999067 +update_small SortedKeyList 100 2.200000000129876e-05 2.3999999996249244e-05 2.3999999996249244e-05 2.319999999826905e-05 +update_small SortedKeyList 1000 0.00023499999997511622 0.0002570000000048367 0.0002389999999934389 0.0002411999999935688 +update_small SortedKeyList 10000 0.0024319999999988795 0.002854000000013457 0.0025009999999952015 0.0025782000000049267 +update_small SortedKeyList 100000 0.02633599999998637 0.02701099999998746 0.02653400000002648 0.026587599999999156 +update_small SortedKeyList 1000000 0.31340600000001473 0.3171859999999924 0.31574000000000524 0.3152976000000024 +update_small B-Tree 100 3.499999999689862e-05 3.5999999994373866e-05 3.500000002532033e-05 3.540000000157306e-05 +update_small B-Tree 1000 0.0006209999999953197 0.0006559999999922184 0.0006250000000136424 0.0006353999999930693 +update_small B-Tree 10000 0.008998999999988655 0.009457999999995081 0.009124999999983174 0.00916539999999486 +update_small B-Tree 100000 0.12178099999999858 0.12430099999997424 0.12210900000002312 0.12288139999999999 +update_small B-Tree 1000000 1.8123580000000175 1.8399949999999876 1.823348999999979 1.8235683999999934 +update_small List 100 1.1999999998124622e-05 1.4000000021496817e-05 1.3999999993075107e-05 1.3400000005958645e-05 +update_small List 1000 0.00013599999999769352 0.0001630000000147902 0.00013599999999769352 0.00014140000000111285 +update_small List 10000 0.00475299999999379 0.004874000000000933 0.004784999999998263 0.004809000000000197 +update_small List 100000 0.4238339999999994 0.43169299999999566 0.4245149999999853 0.4258871999999997 +update_large SortedList 100 2.200000000129876e-05 2.3999999996249244e-05 2.2999999998774e-05 2.2999999998774e-05 +update_large SortedList 1000 0.00022599999999783904 0.00022999999998774 0.00022599999999783904 0.00022719999999480932 +update_large SortedList 10000 0.0028559999999799857 0.0028990000000135296 0.0028570000000058826 0.0028720000000021172 +update_large SortedList 100000 0.03686899999999582 0.03756799999999316 0.036991999999997915 0.037104800000003026 +update_large SortedList 1000000 0.615729999999985 0.638038999999992 0.6236470000000054 0.6251421999999934 +update_large SortedKeyList 100 5.5000000003246896e-05 5.699999999819738e-05 5.600000000072214e-05 5.620000000021719e-05 +update_large SortedKeyList 1000 0.0005319999999926495 0.0005419999999958236 0.0005350000000134969 0.0005359999999996034 +update_large SortedKeyList 10000 0.005963999999977432 0.006166000000007443 0.006003999999990128 0.006025599999998121 +update_large SortedKeyList 100000 0.07164299999999457 0.07208099999999718 0.07186699999999746 0.07186059999999088 +update_large SortedKeyList 1000000 1.0697260000000028 1.5267209999999523 1.0875909999999749 1.1728957999999807 +update_large B-Tree 100 0.000367999999980384 0.0003690000000347027 0.000367999999980384 0.00036819999999124773 +update_large B-Tree 1000 0.006643999999994321 0.006746000000021013 0.006680000000017117 0.006684400000006007 +update_large B-Tree 10000 0.09885500000001457 0.10111299999999801 0.10005499999999756 0.10005300000000261 +update_large B-Tree 100000 1.3559560000000488 1.3739590000000135 1.365129999999965 1.3646536000000082 +update_large B-Tree 1000000 20.17571799999996 20.43918500000001 20.356344999999976 20.31769999999999 +update_large List 100 9.699999998247222e-05 9.900000003426612e-05 9.799999997994746e-05 9.800000000268483e-05 +update_large List 1000 0.001469999999983429 0.001518000000032771 0.0014780000000200744 0.0014862000000107401 +update_large List 10000 0.06531699999999319 0.06629800000001751 0.06548100000003387 0.06567939999999908 +update_large List 100000 5.965372000000002 6.009855000000016 5.987123999999994 5.988070600000003 +contains SortedList 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 2.999999992425728e-06 +contains SortedList 1000 9.999999974752427e-06 1.200000008338975e-05 1.1000000085914508e-05 1.1200000017197453e-05 +contains SortedList 10000 9.699999998247222e-05 9.89999999774227e-05 9.80000000936343e-05 9.820000000217987e-05 +contains SortedList 100000 0.0012389999999413703 0.0012769999999591164 0.0012530000000197106 0.0012561999999661567 +contains SortedList 1000000 0.015965999999934866 0.01659600000004957 0.01647600000001148 0.01640019999999822 +contains SortedKeyList 100 2.999999992425728e-06 4.0000001035878086e-06 3.999999989900971e-06 3.80000001314329e-06 +contains SortedKeyList 1000 1.5000000075815478e-05 1.600000007329072e-05 1.600000007329072e-05 1.5800000073795673e-05 +contains SortedKeyList 10000 0.00013599999999769352 0.000137999999992644 0.000137999999992644 0.0001375999999936539 +contains SortedKeyList 100000 0.0017270000000735308 0.0018340000000307555 0.001740000000040709 0.0017568000000437677 +contains SortedKeyList 1000000 0.02368699999999535 0.02417800000000625 0.023988000000031207 0.023995600000012017 +contains B-Tree 100 4.9999999873762135e-06 6.999999982326699e-06 5.999999984851456e-06 5.999999984851456e-06 +contains B-Tree 1000 5.599999997230043e-05 6.299999995462713e-05 5.699999996977567e-05 5.78000000132306e-05 +contains B-Tree 10000 0.0006779999999935171 0.0007289999999784413 0.0006969999999455467 0.0006973999999900116 +contains B-Tree 100000 0.008416000000011081 0.008713000000057036 0.00844999999992524 0.008530799999994088 +contains B-Tree 1000000 0.10706299999992552 0.10870899999997619 0.10826700000006895 0.10793820000001234 +contains List 100 2.999999992425728e-06 3.999999989900971e-06 2.999999992425728e-06 3.399999991415825e-06 +contains List 1000 1.3999999964653398e-05 1.5000000075815478e-05 1.4000000078340236e-05 1.440000000911823e-05 +contains List 10000 0.0001330000000052678 0.00013400000000274304 0.00013400000000274304 0.00013360000000375293 +contains List 100000 0.0021060000000261425 0.002349999999978536 0.0023149999999532156 0.0022404000000051383 +contains List 1000000 0.028001000000017484 0.031916000000023814 0.029835999999932028 0.02977659999999105 +remove SortedList 100 3.999999989900971e-06 4.9999999873762135e-06 3.999999989900971e-06 4.1999999893960195e-06 +remove SortedList 1000 1.899999995202961e-05 2.8000000042993634e-05 1.900000006571645e-05 2.119999999194988e-05 +remove SortedList 10000 0.00017500000001291482 0.00018499999998766725 0.00017500000001291482 0.0001770000000078653 +remove SortedList 100000 0.001995000000079017 0.0020680000000083965 0.0020060000000512446 0.0020186000000194325 +remove SortedList 1000000 0.02570299999990766 0.026353999999969346 0.026106000000027052 0.026074799999992137 +remove SortedKeyList 100 3.999999989900971e-06 5.999999984851456e-06 4.9999999873762135e-06 4.799999987881165e-06 +remove SortedKeyList 1000 2.4999999936881068e-05 2.6000000048043148e-05 2.5000000050567905e-05 2.540000000408327e-05 +remove SortedKeyList 10000 0.00023299999998016574 0.0002479999999422944 0.00023599999997259147 0.00023719999996956175 +remove SortedKeyList 100000 0.0027039999999942665 0.0028829999999970823 0.0027420000000120126 0.002757399999995869 +remove SortedKeyList 1000000 0.03551099999992857 0.03679599999998118 0.035690000000045075 0.03599199999998746 +remove B-Tree 100 5.999999984851456e-06 6.999999982326699e-06 5.999999984851456e-06 6.399999983841554e-06 +remove B-Tree 1000 7.500000003801688e-05 7.799999991675577e-05 7.500000003801688e-05 7.600000001275475e-05 +remove B-Tree 10000 0.0010509999999612774 0.0010939999999663996 0.0010740000000168948 0.0010717999999769745 +remove B-Tree 100000 0.01429700000005596 0.014462000000094122 0.014381999999955042 0.014372800000001008 +remove B-Tree 1000000 0.2103949999999486 0.2120350000000144 0.21167900000000373 0.21140060000000177 +remove List 100 2.999999992425728e-06 5.000000101063051e-06 2.999999992425728e-06 3.80000001314329e-06 +remove List 1000 1.9999999949504854e-05 2.0000000063191692e-05 2.0000000063191692e-05 2.0000000040454326e-05 +remove List 10000 0.0003789999999526117 0.0003999999998995918 0.000381000000061249 0.0003843999999844527 +remove List 100000 0.03237699999999677 0.0327429999999822 0.0326710000000503 0.032613999999989575 +remove List 1000000 3.980912999999987 4.0914379999999255 4.029239999999959 4.022808799999984 +delitem SortedList 100 4.9999999873762135e-06 7.999999979801942e-06 5.999999984851456e-06 6.200000007083872e-06 +delitem SortedList 1000 2.6999999931831553e-05 3.6000000022795575e-05 2.9000000040468876e-05 3.1199999989439674e-05 +delitem SortedList 10000 0.00047499999993760866 0.0004930000000058499 0.00048599999990983633 0.00048559999997905835 +delitem SortedList 100000 0.005469000000061897 0.005817999999976564 0.005498999999986154 0.005570600000010017 +delitem SortedList 1000000 0.06959300000005442 0.0714580000000069 0.07068300000003092 0.07060040000001208 +delitem SortedKeyList 100 4.9999999873762135e-06 7.999999979801942e-06 7.000000096013537e-06 6.600000028811337e-06 +delitem SortedKeyList 1000 2.899999992678204e-05 3.100000003541936e-05 2.999999992425728e-05 2.9799999992974335e-05 +delitem SortedKeyList 10000 0.0005069999999705033 0.0005170000000589425 0.0005089999999654538 0.0005111999999826367 +delitem SortedKeyList 100000 0.005993999999986954 0.006076000000007298 0.006045999999969354 0.006038600000010774 +delitem SortedKeyList 1000000 0.07480199999997694 0.07708400000001348 0.07598999999993339 0.07600719999998092 +delitem B-Tree 100 3.999999989900971e-06 4.9999999873762135e-06 3.999999989900971e-06 4.1999999893960195e-06 +delitem B-Tree 1000 1.6999999957079126e-05 1.900000006571645e-05 1.8000000068241206e-05 1.780000004600879e-05 +delitem B-Tree 10000 0.00015699999994467362 0.00016899999991437653 0.00016000000005078618 0.00016219999997701962 +delitem B-Tree 100000 0.0016669999999976426 0.0017490000000179862 0.0016960000000381115 0.001698200000032557 +delitem B-Tree 1000000 0.01975500000003194 0.0219249999998965 0.020495999999980086 0.02075680000000375 +delitem List 100 2.999999992425728e-06 4.9999999873762135e-06 3.999999989900971e-06 3.80000001314329e-06 +delitem List 1000 1.5999999959603883e-05 1.6999999957079126e-05 1.5999999959603883e-05 1.619999995909893e-05 +delitem List 10000 0.00032000000010157237 0.0003560000000106811 0.00034099999993486563 0.0003389999999853899 +delitem List 100000 0.030290000000036343 0.03152699999998276 0.0311940000000277 0.03098840000002383 +bisect SortedList 100 2.999999992425728e-06 3.000000106112566e-06 2.999999992425728e-06 3.0000000151630956e-06 +bisect SortedList 1000 1.099999997222767e-05 1.600000007329072e-05 1.5999999959603883e-05 1.4799999985370959e-05 +bisect SortedList 10000 0.00021900000001551234 0.00024099999995996768 0.00022200000000793807 0.00022519999999985884 +bisect SortedList 100000 0.002751999999986765 0.002792999999996937 0.002778000000034808 0.002778800000010051 +bisect SortedList 1000000 0.0384199999999737 0.039437000000020817 0.03856699999994362 0.03877759999998034 +bisect SortedKeyList 100 2.999999992425728e-06 3.999999989900971e-06 3.999999989900971e-06 3.599999990910874e-06 +bisect SortedKeyList 1000 1.2999999967178155e-05 1.499999996212864e-05 1.499999996212864e-05 1.4399999963643495e-05 +bisect SortedKeyList 10000 0.00024199999995744292 0.00024600000006103073 0.0002439999999523934 0.00024399999999786816 +bisect SortedKeyList 100000 0.003003000000035172 0.0030480000000352447 0.003035999999951855 0.0030315999999857013 +bisect SortedKeyList 1000000 0.04089400000009391 0.04425100000003113 0.042888999999945554 0.04273960000002717 +bisect B-Tree 100 4.9999999873762135e-06 7.000000096013537e-06 5.999999984851456e-06 5.800000008093775e-06 +bisect B-Tree 1000 4.899999998997373e-05 5.899999996472616e-05 4.999999998744897e-05 5.179999998290441e-05 +bisect B-Tree 10000 0.0006069999999454012 0.0006399999999757711 0.0006090000000540385 0.0006155999999919004 +bisect B-Tree 100000 0.007712000000083208 0.007875000000012733 0.007729000000040287 0.007767600000033781 +bisect B-Tree 1000000 0.10034000000007381 0.10323000000005322 0.10259999999993852 0.10204800000003615 +bisect List 100 1.9999999949504854e-06 3.999999989900971e-06 1.9999999949504854e-06 2.599999993435631e-06 +bisect List 1000 7.999999979801942e-06 9.999999974752427e-06 7.999999979801942e-06 8.600000001024455e-06 +bisect List 10000 7.299999992937956e-05 7.300000004306639e-05 7.300000004306639e-05 7.299999999759166e-05 +bisect List 100000 0.0010499999999638021 0.001224999999976717 0.0011440000000675354 0.0011398000000099272 +bisect List 1000000 0.017732000000023618 0.018582000000037624 0.018457000000012158 0.018214800000032484 +getitem SortedList 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 2.999999992425728e-06 +getitem SortedList 1000 8.00000009348878e-06 1.1000000085914508e-05 1.099999997222767e-05 1.0000000042964529e-05 +getitem SortedList 10000 0.0002389999999650172 0.00024200000007112976 0.00024099999995996768 0.00024079999998321 +getitem SortedList 100000 0.00281900000004498 0.003121000000078311 0.0028379999999970096 0.0028908000000001264 +getitem SortedList 1000000 0.035321999999951004 0.03638999999998305 0.03549299999997402 0.03573679999997239 +getitem SortedKeyList 100 2.999999992425728e-06 3.999999989900971e-06 2.999999992425728e-06 3.199999991920777e-06 +getitem SortedKeyList 1000 8.999999977277184e-06 1.0000000088439265e-05 9.999999974752427e-06 9.600000021237065e-06 +getitem SortedKeyList 10000 0.00024099999995996768 0.0002439999999523934 0.00024200000007112976 0.00024240000002464512 +getitem SortedKeyList 100000 0.0028090000000702275 0.0029579999999214124 0.0028340000000071086 0.0028624000000036175 +getitem SortedKeyList 1000000 0.035601000000042404 0.03665799999998853 0.03616299999998773 0.03611100000000533 +getitem B-Tree 100 1.9999999949504854e-06 3.999999989900971e-06 2.999999992425728e-06 2.7999999929306794e-06 +getitem B-Tree 1000 7.999999979801942e-06 9.999999974752427e-06 8.999999977277184e-06 8.800000000519503e-06 +getitem B-Tree 10000 7.400000004054164e-05 7.600000003549212e-05 7.499999992433004e-05 7.480000001578447e-05 +getitem B-Tree 100000 0.0008770000000595246 0.0009090000000924192 0.0008850000000393266 0.00088920000005146 +getitem B-Tree 1000000 0.01164599999992788 0.012518999999997504 0.011718999999970947 0.011854199999993398 +getitem List 100 9.999999974752427e-07 2.999999992425728e-06 9.999999974752427e-07 1.799999995455437e-06 +getitem List 1000 3.999999989900971e-06 4.9999999873762135e-06 3.999999989900971e-06 4.399999988891068e-06 +getitem List 10000 1.9999999949504854e-05 2.1000000060666935e-05 2.0000000063191692e-05 2.0200000017212004e-05 +getitem List 100000 0.00044400000001587614 0.0005170000000589425 0.0004500000000007276 0.0004632000000356129 +getitem List 1000000 0.006242999999813037 0.007542999999941458 0.007188000000041939 0.0069713999999748925 +pop SortedList 100 3.000000106112566e-06 5.000000101063051e-06 3.999999989900971e-06 4.000000035375706e-06 +pop SortedList 1000 1.5000000075815478e-05 1.699999984339229e-05 1.5999999959603883e-05 1.600000000507862e-05 +pop SortedList 10000 0.00012599999990925426 0.00016500000015184924 0.00012900000001536682 0.00013579999999819848 +pop SortedList 100000 0.0012409999999363208 0.0014040000000932196 0.0012439999998150597 0.0012757999999848835 +pop SortedList 1000000 0.012754000000086307 0.013134000000036394 0.012793999999985317 0.012891600000057225 +pop SortedKeyList 100 2.9999998787388904e-06 6.000000212225132e-06 3.999999989900971e-06 4.400000034365803e-06 +pop SortedKeyList 1000 1.699999984339229e-05 1.799999995455437e-05 1.7000000070765964e-05 1.7399999933331856e-05 +pop SortedKeyList 10000 0.00013600000011138036 0.00017800000000534055 0.00013899999999011925 0.000150000000030559 +pop SortedKeyList 100000 0.0013460000000122818 0.0013719999999466381 0.0013480000000072323 0.0013535999999930936 +pop SortedKeyList 1000000 0.013731999999890832 0.013993000000027678 0.013793000000077882 0.013816200000019308 +pop B-Tree 100 3.999999989900971e-06 5.000000101063051e-06 3.999999989900971e-06 4.200000012133387e-06 +pop B-Tree 1000 1.3999999964653398e-05 1.5999999959603883e-05 1.4999999848441803e-05 1.5199999916148954e-05 +pop B-Tree 10000 0.0001300000001265289 0.00013600000011138036 0.0001319999998941057 0.00013279999998303538 +pop B-Tree 100000 0.0013770000000477012 0.0015130000001590815 0.001396999999997206 0.0014130000000477593 +pop B-Tree 1000000 0.015039000000115266 0.015426999999817781 0.015232000000196422 0.015233799999987242 +pop List 100 1.9999999949504854e-06 3.999999989900971e-06 2.000000222324161e-06 2.6000000161729986e-06 +pop List 1000 7.000000096013537e-06 7.999999979801942e-06 7.000000096013537e-06 7.400000049528898e-06 +pop List 10000 4.3000000005122274e-05 4.399999988891068e-05 4.3000000005122274e-05 4.319999998187995e-05 +pop List 100000 0.00041599999985919567 0.00046999999995023245 0.00041699999997035775 0.00042879999996330297 +pop List 1000000 0.004121999999824766 0.004269000000022061 0.004185999999890555 0.00418479999993906 +index SortedList 100 3.000000106112566e-06 4.999999873689376e-06 3.999999989900971e-06 3.999999989900971e-06 +index SortedList 1000 1.5999999959603883e-05 1.7000000070765964e-05 1.5999999959603883e-05 1.6400000004068715e-05 +index SortedList 10000 0.00026000000002568413 0.00037600000018755964 0.00027100000011159864 0.00030120000010356305 +index SortedList 100000 0.003176999999823238 0.0032070000002022425 0.003191000000015265 0.0031903999999940424 +index SortedList 1000000 0.04250200000001314 0.04415800000015224 0.04307799999992312 0.04318420000004153 +index SortedKeyList 100 2.9999998787388904e-06 5.000000101063051e-06 3.999999989900971e-06 3.80000001314329e-06 +index SortedKeyList 1000 1.9999999949504854e-05 2.1000000060666935e-05 1.9999999949504854e-05 2.039999994849495e-05 +index SortedKeyList 10000 0.0003059999999095453 0.00030800000013186946 0.00030600000013691897 0.00030679999999847494 +index SortedKeyList 100000 0.003647000000000844 0.0037239999999201245 0.0036820000000261643 0.0036863999999695806 +index SortedKeyList 1000000 0.049436000000014246 0.04995700000017678 0.04956100000003971 0.049656600000071195 +index B-Tree 100 5.999999984851456e-06 7.000000096013537e-06 6.000000212225132e-06 6.400000029316289e-06 +index B-Tree 1000 5.599999985861359e-05 5.899999996472616e-05 5.599999985861359e-05 5.6599999879836105e-05 +index B-Tree 10000 0.0006799999998747808 0.0006920000000718574 0.0006809999999859428 0.0006832000000031258 +index B-Tree 100000 0.008518000000094617 0.008589000000029046 0.00853200000005927 0.008538799999996627 +index B-Tree 1000000 0.10796200000004319 0.11414100000001781 0.11040699999989556 0.11094459999994796 +index List 100 2.9999998787388904e-06 1.3000000080864993e-05 3.999999989900971e-06 5.400000009103678e-06 +index List 1000 1.4999999848441803e-05 1.5000000075815478e-05 1.5000000075815478e-05 1.4999999984866009e-05 +index List 10000 0.00014899999996487168 0.00015299999995477265 0.00014899999996487168 0.00015019999996184196 +index List 100000 0.0023120000000744767 0.002623000000085085 0.0025200000000040745 0.002477800000042407 +index List 1000000 0.03247899999996662 0.035075000000006185 0.03279999999995198 0.03326759999999922 +iter SortedList 100 8.999999863590347e-06 1.1000000085914508e-05 9.999999974752427e-06 1.0000000020227163e-05 +iter SortedList 1000 8.800000000519503e-05 9.10000001113076e-05 8.899999988898344e-05 8.920000000216533e-05 +iter SortedList 10000 0.0009090000000924192 0.0009539999998651183 0.0009220000001732842 0.0009268000000247411 +iter SortedList 100000 0.009352000000035332 0.009664999999813517 0.009444999999914216 0.009487599999965823 +iter SortedList 1000000 0.09363999999982298 0.09835399999997207 0.09518500000012864 0.09607099999993807 +iter SortedKeyList 100 9.999999974752427e-06 1.0999999858540832e-05 9.999999974752427e-06 1.0199999996984843e-05 +iter SortedKeyList 1000 8.900000011635711e-05 9.099999988393392e-05 8.900000011635711e-05 8.960000004663016e-05 +iter SortedKeyList 10000 0.0009110000000873697 0.0009719999998196727 0.0009300000001530861 0.0009371999999984836 +iter SortedKeyList 100000 0.00938599999994949 0.009615000000167129 0.009581999999909385 0.009520199999997203 +iter SortedKeyList 1000000 0.09366099999988364 0.09991199999990386 0.09398299999998017 0.0953635999999733 +iter B-Tree 100 2.7999999929306796e-05 4.0000000126383384e-05 2.9000000040468876e-05 3.120000005765178e-05 +iter B-Tree 1000 0.000275999999985288 0.00028199999997013947 0.000275999999985288 0.0002775999999812484 +iter B-Tree 10000 0.002821999999923719 0.0030020000001513836 0.0028500000000803993 0.0028782000000319385 +iter B-Tree 100000 0.02856400000018766 0.029635999999982232 0.02894800000012765 0.029038400000035835 +iter B-Tree 1000000 0.2856850000000577 0.2950060000000576 0.2865039999999226 0.2879156000000421 +iter List 100 7.999999979801942e-06 9.999999974752427e-06 9.000000090964022e-06 9.000000045489286e-06 +iter List 1000 8.400000001529406e-05 8.599999978287087e-05 8.499999989908247e-05 8.479999996779952e-05 +iter List 10000 0.0008689999999660358 0.0009600000000773434 0.0008920000000216532 0.0009002000000236876 +iter List 100000 0.009219000000030064 0.009351000000151544 0.00927599999999984 0.009277800000018033 +iter List 1000000 0.09189999999989595 0.09612399999991794 0.0938419999999951 0.09395559999993566 +count SortedList 100 2.9999998787388904e-06 3.999999989900971e-06 2.9999998787388904e-06 3.3999999232037227e-06 +count SortedList 1000 1.699999984339229e-05 1.799999995455437e-05 1.7000000070765964e-05 1.7199999956574174e-05 +count SortedList 10000 0.00016299999992952507 0.00016700000014679972 0.00016499999992447556 0.00016500000001542502 +count SortedList 100000 0.0021389999999428255 0.0022360000000389846 0.0021940000001450244 0.002192600000034872 +count SortedList 1000000 0.024713000000019747 0.02616400000010799 0.025234000000182277 0.025307400000019697 +count SortedKeyList 100 2.9999998787388904e-06 4.999999873689376e-06 3.999999989900971e-06 3.7999999676685547e-06 +count SortedKeyList 1000 1.699999984339229e-05 1.799999995455437e-05 1.7000000070765964e-05 1.720000000204891e-05 +count SortedKeyList 10000 0.00015000000007603376 0.00019200000019736763 0.00015199999984361057 0.00015939999998408893 +count SortedKeyList 100000 0.0019199999999273132 0.001987000000099215 0.0019570000001749577 0.0019522000000506523 +count SortedKeyList 1000000 0.025525000000016007 0.027835000000095533 0.026548000000047978 0.02665740000002188 +count B-Tree 100 6.999999868639861e-06 1.900000006571645e-05 8.999999863590347e-06 1.0400000019217259e-05 +count B-Tree 1000 6.69999999445281e-05 7.900000014160469e-05 6.69999999445281e-05 6.960000000617583e-05 +count B-Tree 10000 0.0007840000000669534 0.0009079999999812571 0.0007890000001680164 0.0008194000000457891 +count B-Tree 100000 0.009714999999914653 0.010804999999891152 0.009836999999834006 0.010002599999961604 +count B-Tree 1000000 0.11999100000002727 0.13054399999987254 0.12052900000003319 0.12405859999998939 +count List 100 1.9999999949504854e-06 3.999999989900971e-06 3.000000106112566e-06 3.199999991920777e-06 +count List 1000 1.3999999964653398e-05 2.5000000050567905e-05 1.5000000075815478e-05 1.6800000048533546e-05 +count List 10000 0.00013899999999011925 0.00016200000004573667 0.00013999999987390765 0.00014459999993050588 +count List 100000 0.0022360000000389846 0.002448000000185857 0.0023909999999887077 0.002368600000045262 +count List 1000000 0.031727999999930034 0.03392700000017612 0.032110000000102445 0.03271860000008928 +priorityqueue SortedList 100 2.599999993435631e-05 2.9000000040468876e-05 2.9000000040468876e-05 2.8000000020256267e-05 +priorityqueue SortedList 1000 0.00025899999991452205 0.00027000000000043656 0.0002620000000206346 0.0002635999999711203 +priorityqueue SortedList 10000 0.002563000000009197 0.0027159999999639695 0.002647000000024491 0.0026422000000366095 +priorityqueue SortedList 100000 0.028103999999984808 0.029446999999890977 0.02849900000001071 0.02860899999996036 +priorityqueue SortedList 1000000 0.3539700000001176 0.37881100000004153 0.35752899999988585 0.36160559999998443 +priorityqueue SortedKeyList 100 3.200000014658144e-05 4.4000000116284355e-05 3.90000000152213e-05 3.9000000060696036e-05 +priorityqueue SortedKeyList 1000 0.0003019999999196443 0.00031100000001060835 0.0003070000000207074 0.00030699999997523263 +priorityqueue SortedKeyList 10000 0.0030759999999645515 0.0032020000001011795 0.003152999999883832 0.0031463999999687075 +priorityqueue SortedKeyList 100000 0.03342200000020057 0.034619999999904394 0.03379700000004959 0.03392180000000735 +priorityqueue SortedKeyList 1000000 0.42622099999994134 0.4526860000000852 0.4326980000000731 0.43530479999999444 +priorityqueue B-Tree 100 3.199999991920777e-05 4.6999999995023245e-05 3.999999989900971e-05 3.979999996772676e-05 +priorityqueue B-Tree 1000 0.0005489999998644635 0.0006410000000869331 0.000559999999950378 0.0005761999999322143 +priorityqueue B-Tree 10000 0.0075930000000425935 0.008438999999953012 0.008131000000048516 0.008080400000017108 +priorityqueue B-Tree 100000 0.09774000000015803 0.10509000000001834 0.09847399999989648 0.09957800000001953 +priorityqueue B-Tree 1000000 1.398388999999952 1.4385150000000522 1.3989789999998266 1.4104125999999724 +priorityqueue List 100 2.099999983329326e-05 3.500000002532033e-05 2.6999999818144715e-05 2.6999999909094187e-05 +priorityqueue List 1000 0.0002250000000003638 0.0002389999999650172 0.00023000000010142685 0.00023100000003069 +priorityqueue List 10000 0.003819000000021333 0.003960000000006403 0.0038830000000871223 0.003875000000016371 +priorityqueue List 100000 0.21446300000002338 0.21929399999999077 0.21868900000004032 0.21755300000004354 +multiset SortedList 100 2.2999999828243745e-05 2.999999992425728e-05 2.599999993435631e-05 2.6599999910104088e-05 +multiset SortedList 1000 0.00022800000010647636 0.0002489999999397696 0.00022899999999026477 0.00023420000002261077 +multiset SortedList 10000 0.002688999999918451 0.0027970000001005246 0.0027029999998831045 0.0027295999999751076 +multiset SortedList 100000 0.03236500000002707 0.0328389999999672 0.0326230000000578 0.032586799999990035 +multiset SortedList 1000000 0.3986099999999624 0.4272680000001401 0.40240200000016557 0.4066638000000694 +multiset SortedKeyList 100 3.0999999808045686e-05 3.700000002027082e-05 3.500000002532033e-05 3.4000000005107724e-05 +multiset SortedKeyList 1000 0.000275999999985288 0.0003039999999145948 0.00028500000007625204 0.0002879999999549909 +multiset SortedKeyList 10000 0.003189999999904103 0.0035340000001724547 0.0033189999999194697 0.003368000000000393 +multiset SortedKeyList 100000 0.035781000000042695 0.03604999999993197 0.035926999999901454 0.035943600000018706 +multiset SortedKeyList 1000000 0.48032499999999345 0.5109739999998055 0.48289900000008856 0.4897479999999632 +multiset B-Tree 100 4.899999998997373e-05 6.299999995462713e-05 5.2000000096086296e-05 5.399999995461258e-05 +multiset B-Tree 1000 0.000665000000026339 0.0007880000000568543 0.0006819999998697313 0.0007025999999768828 +multiset B-Tree 10000 0.01054100000010294 0.01079400000003261 0.010770999999976993 0.01072560000006888 +multiset B-Tree 100000 0.14354400000001988 0.15487099999995735 0.1443500000000313 0.1470915999999761 +multiset B-Tree 1000000 2.0287000000000717 2.089472999999998 2.058277000000089 2.0598664000000553 +multiset List 100 2.5000000050567905e-05 2.999999992425728e-05 2.700000004551839e-05 2.7000000000043655e-05 +multiset List 1000 0.00024600000006103073 0.0002730000001065491 0.0002500000000509317 0.0002546000000620552 +multiset List 10000 0.003198999999995067 0.003308000000060929 0.0032570000000760047 0.0032594000000244704 +multiset List 100000 0.09947499999998399 0.10497899999995752 0.10188100000004852 0.10220859999999447 +ranking SortedList 100 2.700000004551839e-05 3.100000003541936e-05 2.89999998130952e-05 2.8799999972761726e-05 +ranking SortedList 1000 0.00024699999994481914 0.00026700000012169767 0.0002489999999397696 0.00025440000003982275 +ranking SortedList 10000 0.003808999999819207 0.003995000000031723 0.003960000000006403 0.003907799999979034 +ranking SortedList 100000 0.04508000000009815 0.04560900000001311 0.04535200000009354 0.0453424000000723 +ranking SortedList 1000000 0.5937540000002173 0.6206319999998868 0.5981180000001132 0.6015096000000539 +ranking SortedKeyList 100 2.999999992425728e-05 3.399999991415825e-05 3.299999980299617e-05 3.2199999941440184e-05 +ranking SortedKeyList 1000 0.00027399999999033753 0.00029400000016721606 0.0002870000000712025 0.0002854000000297674 +ranking SortedKeyList 10000 0.004087000000026819 0.004257000000052358 0.004175000000032014 0.004159800000024916 +ranking SortedKeyList 100000 0.04978500000015629 0.05078000000003158 0.05005200000005061 0.050122000000055775 +ranking SortedKeyList 1000000 0.6553949999999986 0.6876939999999649 0.6603959999999915 0.6640069999999924 +ranking B-Tree 100 3.999999989900971e-05 8.900000011635711e-05 5.29999999798747e-05 6.0200000007171184e-05 +ranking B-Tree 1000 0.0004999999998744897 0.0005929999999807478 0.0005129999999553547 0.0005259999999452702 +ranking B-Tree 10000 0.007763000000068132 0.007951999999932013 0.007797999999866079 0.007830200000034893 +ranking B-Tree 100000 0.10082299999999123 0.10895200000004479 0.1017460000000483 0.10366840000001502 +ranking B-Tree 1000000 1.410041000000092 1.4706860000001143 1.4312949999998636 1.433772799999997 +ranking List 100 2.300000005561742e-05 3.100000003541936e-05 3.0999999808045686e-05 2.8399999973771627e-05 +ranking List 1000 0.00022699999999531428 0.0003039999999145948 0.00024199999984375609 0.0002557999999226013 +ranking List 10000 0.0029010000000653235 0.0030930000000353175 0.002956999999923937 0.0029784000000290687 +ranking List 100000 0.09790900000007241 0.1015620000000581 0.09822399999984555 0.098939399999972 +neighbor SortedList 100 2.3999999939405825e-05 3.199999991920777e-05 2.700000004551839e-05 2.7399999999033754e-05 +neighbor SortedList 1000 0.00023399999986395414 0.0002520000000458822 0.00024200000007112976 0.00024279999997816047 +neighbor SortedList 10000 0.0033979999998337007 0.0035370000000511936 0.003453999999919688 0.0034615999999459746 +neighbor SortedList 100000 0.04086400000005597 0.04184399999985544 0.041318000000046595 0.04124879999999394 +neighbor SortedList 1000000 0.5555030000000443 0.5891280000000734 0.5569709999999759 0.5638116000000082 +neighbor SortedKeyList 100 2.7999999929306796e-05 3.600000013648241e-05 3.400000014153193e-05 3.2400000054622066e-05 +neighbor SortedKeyList 1000 0.00026800000000548607 0.0003059999999095453 0.0002750000001014996 0.0002820000000156142 +neighbor SortedKeyList 10000 0.00373899999999594 0.0039340000000720465 0.003889999999955762 0.003845600000022387 +neighbor SortedKeyList 100000 0.04492400000003727 0.04870000000005348 0.048514999999952124 0.04763659999998708 +neighbor SortedKeyList 1000000 0.608545999999933 0.6241390000000138 0.6139679999998862 0.6159238000000187 +neighbor B-Tree 100 4.600000011123484e-05 6.69999999445281e-05 5.500000020219886e-05 5.500000006577466e-05 +neighbor B-Tree 1000 0.0006730000000061409 0.0007640000001174485 0.0007500000001527951 0.0007304000000203815 +neighbor B-Tree 10000 0.011029999999891515 0.011222999999972672 0.011066999999911786 0.01111919999998463 +neighbor B-Tree 100000 0.1452790000000732 0.15701899999999114 0.14667400000007547 0.14860880000005636 +neighbor B-Tree 1000000 2.029789999999821 2.113002999999935 2.037078000000065 2.0629731999999423 +neighbor List 100 1.9999999949504854e-05 2.499999982319423e-05 2.2999999828243745e-05 2.239999998892017e-05 +neighbor List 1000 0.00020500000005085894 0.0003050000000257569 0.00021300000003066089 0.00022939999998925487 +neighbor List 10000 0.002731000000039785 0.002987000000075568 0.0029180000001360895 0.0028906000000461065 +neighbor List 100000 0.0962090000000444 0.10637399999995978 0.10284299999989344 0.10213999999996304 +intervals SortedList 100 3.100000003541936e-05 3.80000001314329e-05 3.599999990910874e-05 3.49999999798456e-05 +intervals SortedList 1000 0.0002779999999802385 0.0002899999999499414 0.00028899999983877933 0.0002865999999357882 +intervals SortedList 10000 0.004310999999916021 0.004561999999850741 0.004400000000032378 0.0044151999999940015 +intervals SortedList 100000 0.05184499999995751 0.052572999999938475 0.05239900000015041 0.05231079999998656 +intervals SortedList 1000000 0.6859540000000379 0.702590999999984 0.6878810000000612 0.6906467999999677 +intervals SortedKeyList 100 3.300000003036985e-05 4.1999999893960194e-05 3.90000000152213e-05 3.839999999399879e-05 +intervals SortedKeyList 1000 0.00030600000013691897 0.00038099999983387534 0.00032400000009147334 0.0003369999999904394 +intervals SortedKeyList 10000 0.004635000000007494 0.004732000000103653 0.004670000000032815 0.004677800000035859 +intervals SortedKeyList 100000 0.05583699999988312 0.05732699999998658 0.056168000000070606 0.05634439999994356 +intervals SortedKeyList 1000000 0.7385789999998451 0.780715999999984 0.7417749999999614 0.7496025999999801 +intervals B-Tree 100 3.600000013648241e-05 6.099999995967664e-05 4.799999987881165e-05 4.720000001725566e-05 +intervals B-Tree 1000 0.0005020000000968139 0.0005739999999150314 0.0005360000000109721 0.0005347999999685271 +intervals B-Tree 10000 0.007279000000153246 0.0075130000000172 0.007413000000042302 0.007382400000096823 +intervals B-Tree 100000 0.09547700000007353 0.10272099999997408 0.09699799999998504 0.09760840000003554 +intervals B-Tree 1000000 1.3585219999999936 1.4131740000000264 1.38794699999994 1.387116799999967 +intervals List 100 3.200000014658144e-05 3.700000002027082e-05 3.600000013648241e-05 3.5600000046542846e-05 +intervals List 1000 0.00021900000001551234 0.0002480000000559812 0.00023000000010142685 0.0002316000000519125 +intervals List 10000 0.0032300000000304863 0.003439000000071246 0.003256999999848631 0.0033158000000184985 +intervals List 100000 0.15335000000004584 0.15744100000006256 0.155666999999994 0.15546840000001794 +init SortedList 100 1.3999999964653398e-05 1.5999999959603883e-05 1.5999999959603883e-05 1.5199999961623688e-05 +init SortedList 1000 0.0001609999999345746 0.000183999999990192 0.00016200000004573667 0.00016620000001239533 +init SortedList 10000 0.0022190000001955923 0.002345999999988635 0.002300000000104774 0.0022918000000572646 +init SortedList 100000 0.03106100000013612 0.0321240000000671 0.03139000000010128 0.031504400000039824 +init SortedList 1000000 0.538817999999992 0.5744819999999891 0.5524390000000494 0.5551492000000507 +init SortedKeyList 100 2.999999992425728e-05 3.400000014153193e-05 3.0999999808045686e-05 3.1399999988934725e-05 +init SortedKeyList 1000 0.0003019999999196443 0.0003670000000965956 0.0003339999998388521 0.00033360000002176094 +init SortedKeyList 10000 0.0036340000001473527 0.003857000000152766 0.0037659999998140847 0.003771599999981845 +init SortedKeyList 100000 0.04631500000004962 0.04771899999991547 0.04733499999997548 0.047132999999985256 +init SortedKeyList 1000000 0.7917740000000322 0.8293280000000323 0.7977699999999004 0.8066255999999612 +init B-Tree 100 0.0002939999999398424 0.00029599999993479287 0.00029500000005100446 0.00029499999996005497 +init B-Tree 1000 0.005186000000094282 0.005469999999831998 0.005235999999968044 0.005274000000008527 +init B-Tree 10000 0.08074200000010023 0.0851150000000871 0.08434299999998984 0.08326740000002246 +init B-Tree 100000 1.1695760000000064 1.2117769999999837 1.1781780000001163 1.187289200000032 +init List 100 4.3000000005122274e-05 4.500000000007276e-05 4.4000000116284355e-05 4.3800000048577205e-05 +init List 1000 0.0005329999999048596 0.0006280000000060681 0.0005349999998998101 0.0005529999999907886 +init List 10000 0.007485999999971682 0.5564289999999801 0.007669999999961874 0.11740740000000187 +init List 100000 0.13533800000004703 0.14647100000001956 0.13723499999991873 0.1385848000000351 +init List 1000000 2.2048299999999017 2.2933080000000245 2.2577429999998913 2.250877999999966 diff -Nru sortedcontainers-1.5.9/tests/results_sortedset.txt sortedcontainers-2.0.4/tests/results_sortedset.txt --- sortedcontainers-1.5.9/tests/results_sortedset.txt 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/results_sortedset.txt 2018-06-07 05:34:49.000000000 +0000 @@ -1,686 +1,542 @@ -contains SortedSet 100 1.00000000014e-06 1.00000000014e-06 1.00000000014e-06 1.00000000014e-06 -contains SortedSet 1000 1.99999999939e-06 4.00000000056e-06 3.00000000042e-06 3.00000000006e-06 -contains SortedSet 10000 1.50000000003e-05 1.9e-05 1.60000000005e-05 1.62000000001e-05 -contains SortedSet 100000 0.000216 0.000249999999999 0.000219 0.0002326 -contains SortedSet 1000000 0.003259 0.003544 0.003338 0.0033826 -contains rbset 100 9.99999999252e-07 2.00000000028e-06 1.00000000103e-06 1.40000000037e-06 -contains rbset 1000 4.99999999981e-06 5.99999999906e-06 4.99999999981e-06 5.19999999966e-06 -contains rbset 10000 4.59999999993e-05 5.7e-05 4.59999999993e-05 4.91999999998e-05 -contains rbset 100000 0.001004 0.001117 0.001004 0.001047 -contains rbset 1000000 0.015432 0.019257 0.016203 0.0168528 -contains blist.sortedset 100 3.99999999701e-06 6.00000000262e-06 4.99999999803e-06 5.00000000017e-06 -contains blist.sortedset 1000 4.79999999996e-05 4.79999999996e-05 4.79999999996e-05 4.79999999996e-05 -contains blist.sortedset 10000 0.000571000000001 0.000593000000002 0.000593000000002 0.0005776 -contains blist.sortedset 100000 0.007039 0.007728 0.007129 0.007261 -contains blist.sortedset 1000000 0.092282 0.098027 0.097725 0.0949212 -contains SkipListSet 100 3.9999999899e-06 5.99999998485e-06 5.99999998485e-06 5.39999998637e-06 -contains SkipListSet 1000 3.69999999634e-05 4.20000000076e-05 4.10000000102e-05 3.93999999915e-05 -contains SkipListSet 10000 0.000464000000022 0.00050200000004 0.00050200000004 0.000479600000017 -contains SkipListSet 100000 0.00655600000005 0.00692200000003 0.00668000000002 0.00674360000003 -contains SkipListSet 1000000 0.099382 0.102256 0.100005 0.1007648 -contains banyan.SortedSet 100 9.99999997475e-07 2.99999999243e-06 1.99999999495e-06 1.79999999546e-06 -contains banyan.SortedSet 1000 4.00000004674e-06 5.99999998485e-06 4.00000004674e-06 4.80000002199e-06 -contains banyan.SortedSet 10000 3.79999999609e-05 4.10000000102e-05 4.00000000127e-05 3.89999999925e-05 -contains banyan.SortedSet 100000 0.00109300000003 0.00115299999999 0.001102 0.0011094 -contains banyan.SortedSet 1000000 0.013567 0.014889 0.013699 0.0139576 -iter SortedSet 100 7.9999999798e-06 1.00000000316e-05 1.00000000316e-05 9.39999998764e-06 -iter SortedSet 1000 7.29999999862e-05 7.39999999837e-05 7.30000000431e-05 7.33999999966e-05 -iter SortedSet 10000 0.000709000000029 0.000713000000019 0.000709000000029 0.000711200000012 -iter SortedSet 100000 0.007137 0.00719700000002 0.00714400000004 0.00715940000001 -iter SortedSet 1000000 0.073205 0.079986 0.073416 0.0751426 -iter rbset 100 2.10000000038e-05 2.10000000038e-05 2.10000000038e-05 2.10000000038e-05 -iter rbset 1000 0.00019599999996 0.000198000000012 0.000196000000017 0.000196400000004 -iter rbset 10000 0.00194699999997 0.00197800000001 0.00194699999997 0.0019576 -iter rbset 100000 0.020637 0.021679 0.020637 0.0210188 -iter rbset 1000000 0.211843 0.217703 0.217703 0.2150812 -iter blist.sortedset 100 8.60000000102e-05 8.80000000052e-05 8.70000000077e-05 8.68000000082e-05 -iter blist.sortedset 1000 0.000839999999982 0.000841000000037 0.000839999999982 0.000840600000004 -iter blist.sortedset 10000 0.00836700000002 0.00885299999999 0.00885299999999 0.0085718 -iter blist.sortedset 100000 0.083772 0.087177 0.084027 0.0845792 -iter blist.sortedset 1000000 0.844429 0.850807 0.850807 0.8476746 -iter SkipListSet 100 3.00000000379e-05 3.20000000329e-05 3.00000000379e-05 3.11999999894e-05 -iter SkipListSet 1000 0.000254999999925 0.00025699999992 0.00025699999992 0.000255799999991 -iter SkipListSet 10000 0.00267399999996 0.002745 0.002745 0.0026932 -iter SkipListSet 100000 0.040934 0.044471 0.043709 0.0433214 -iter SkipListSet 1000000 0.488629 0.501052 0.489719 0.4920052 -iter banyan.SortedSet 100 7.9999999798e-06 9.99999997475e-06 8.99999997728e-06 8.79999997778e-06 -iter banyan.SortedSet 1000 6.90000000532e-05 7.10000000481e-05 6.90000000532e-05 7.04000000042e-05 -iter banyan.SortedSet 10000 0.000673000000006 0.000675000000001 0.000673000000006 0.000674000000004 -iter banyan.SortedSet 100000 0.0070639999999 0.00714600000003 0.00709200000006 0.0070972 -iter banyan.SortedSet 1000000 0.070586 0.0747080000001 0.0747080000001 0.072174 -add SortedSet 100 2.99999999243e-06 4.99999998738e-06 4.99999998738e-06 4.1999999894e-06 -add SortedSet 1000 2.20000000581e-05 2.39999999394e-05 2.29999999419e-05 2.29999999647e-05 -add SortedSet 10000 0.000182999999993 0.000202999999942 0.000182999999993 0.000187599999981 -add SortedSet 100000 0.00204899999994 0.00239199999999 0.00239199999999 0.0021262 -add SortedSet 1000000 0.021161 0.021825 0.021825 0.021374 -add rbset 100 9.99999997475e-07 1.99999999495e-06 1.99999999495e-06 1.39999999647e-06 -add rbset 1000 5.99999998485e-06 6.99999998233e-06 6.99999998233e-06 6.60000000607e-06 -add rbset 10000 5.59999999723e-05 5.79999999673e-05 5.59999999723e-05 5.69999999925e-05 -add rbset 100000 0.000817999999981 0.000852000000009 0.000823000000082 0.000832600000012 -add rbset 1000000 0.010675 0.0111730000001 0.010675 0.010937 -add blist.sortedset 100 8.99999997728e-06 1.8999999952e-05 9.99999997475e-06 1.15999999707e-05 -add blist.sortedset 1000 0.000107999999955 0.000110000000063 0.000109000000066 0.00010900000002 -add blist.sortedset 10000 0.00154200000009 0.00182899999993 0.00154200000009 0.00160320000002 -add SkipListSet 100 5.99999998485e-06 7.00000009601e-06 5.99999998485e-06 6.20000002982e-06 -add SkipListSet 1000 4.59999999975e-05 9.29999999926e-05 4.6999999995e-05 5.6399999994e-05 -add SkipListSet 10000 0.000530000000026 0.000607999999943 0.000541999999996 0.000556599999982 -add SkipListSet 100000 0.00635799999998 0.006801 0.00635799999998 0.00653359999999 -add SkipListSet 1000000 0.076183 0.077544 0.076328 0.0767428 -add banyan.SortedSet 100 1.99999999495e-06 2.99999999243e-06 1.99999999495e-06 2.19999999445e-06 -add banyan.SortedSet 1000 3.9999999899e-06 5.99999998485e-06 4.99999998738e-06 4.80000001062e-06 -add banyan.SortedSet 10000 3.80000000177e-05 4.00000000127e-05 4.00000000127e-05 3.90000000152e-05 -add banyan.SortedSet 100000 0.000561999999945 0.000591999999983 0.000561999999945 0.000569200000018 -add banyan.SortedSet 1000000 0.00757999999996 0.00781499999994 0.00757999999996 0.00764300000001 -update_tiny SortedSet 100 1.40000000783e-05 1.60000000733e-05 1.50000000758e-05 1.50000000758e-05 -update_tiny SortedSet 1000 1.50000000758e-05 1.60000000733e-05 1.59999999596e-05 1.58000000056e-05 -update_tiny SortedSet 10000 1.60000000733e-05 1.8999999952e-05 1.70000000708e-05 1.72000000248e-05 -update_tiny SortedSet 100000 2.90000000405e-05 3.20000000329e-05 3.09999999217e-05 3.06000000137e-05 -update_tiny SortedSet 1000000 3.89999999015e-05 4.79999999925e-05 3.89999999015e-05 4.23999999839e-05 -update_tiny rbset 100 3.9999999899e-06 4.99999998738e-06 4.99999998738e-06 4.60000001112e-06 -update_tiny rbset 1000 4.99999998738e-06 6.00000009854e-06 6.00000009854e-06 5.20000000961e-06 -update_tiny rbset 10000 5.99999998485e-06 7.00000009601e-06 6.99999998233e-06 6.80000002831e-06 -update_tiny rbset 100000 1.59999999596e-05 1.79999999546e-05 1.69999999571e-05 1.69999999798e-05 -update_tiny rbset 1000000 2.40000000531e-05 3.00000000379e-05 2.50000000506e-05 2.58000000485e-05 -update_tiny blist.sortedset 100 0.000111999999945 0.000115000000051 0.000111999999945 0.000113400000032 -update_tiny blist.sortedset 1000 0.000165999999922 0.000170000000026 0.000165999999922 0.000167399999987 -update_tiny blist.sortedset 10000 0.000194999999962 0.000227999999993 0.000194999999962 0.000208399999997 -update_tiny blist.sortedset 100000 0.000255000000038 0.000292999999942 0.000255000000038 0.000270399999999 -update_tiny blist.sortedset 1000000 0.000332999999955 0.000395000000026 0.00037599999996 0.00037440000001 -update_tiny banyan.SortedSet 100 5.29999999799e-05 5.6000000086e-05 5.29999999799e-05 5.45999999758e-05 -update_tiny banyan.SortedSet 1000 0.00037599999996 0.000380999999834 0.000379000000066 0.000378599999976 -update_tiny banyan.SortedSet 10000 0.00363700000003 0.00380399999995 0.00364399999989 0.00367659999997 -update_tiny banyan.SortedSet 100000 0.039049 0.0397949999999 0.039681 0.0395836 -update_tiny banyan.SortedSet 1000000 0.439065 0.483863 0.45858 0.4596778 -update_small SortedSet 100 1.69999998434e-05 1.79999999546e-05 1.70000000708e-05 1.75999999556e-05 -update_small SortedSet 1000 0.000126999999793 0.000143999999864 0.000127999999904 0.000133399999913 -update_small SortedSet 10000 0.00130599999989 0.00145799999996 0.00130799999988 0.00136899999993 -update_small SortedSet 100000 0.0129320000001 0.0137070000001 0.0134899999998 0.013419 -update_small SortedSet 1000000 0.163582 0.164238 0.163582 0.163857 -update_small rbset 100 3.9999999899e-06 5.99999998485e-06 4.99999987369e-06 4.79999998788e-06 -update_small rbset 1000 4.39999998889e-05 4.60000001112e-05 4.40000001163e-05 4.44000000698e-05 -update_small rbset 10000 0.000516000000061 0.00051899999994 0.000518000000056 0.000517200000013 -update_small rbset 100000 0.00615900000003 0.00631399999997 0.00616200000013 0.0062062 -update_small rbset 1000000 0.0712289999999 0.0725319999999 0.0725319999999 0.071976 -update_small blist.sortedset 100 0.000112999999828 0.000119000000041 0.000119000000041 0.000114399999984 -update_small blist.sortedset 1000 0.00160199999982 0.00162599999999 0.00160499999993 0.00160819999992 -update_small blist.sortedset 10000 0.0225310000001 0.0231200000001 0.0227319999999 0.0227134 -update_small blist.sortedset 100000 0.299117 0.311438 0.299317 0.302267 -update_small blist.sortedset 1000000 3.944035 3.984938 3.965019 3.9653188 -update_small banyan.SortedSet 100 5.29999999799e-05 5.6000000086e-05 5.39999998637e-05 5.41999999768e-05 -update_small banyan.SortedSet 1000 0.000410999999986 0.000418999999965 0.000411999999869 0.000413199999912 -update_small banyan.SortedSet 10000 0.00397199999998 0.00399100000004 0.00397199999998 0.00397839999996 -update_small banyan.SortedSet 100000 0.0464259999999 0.0469099999998 0.0464939999999 0.0465919999999 -update_small banyan.SortedSet 1000000 0.491601 0.545498 0.512825 0.5117308 -update_medium SortedSet 100 9.99999997475e-06 1.09999998585e-05 9.99999997475e-06 1.05999999505e-05 -update_medium SortedSet 1000 5.89999999647e-05 6.00000000759e-05 5.89999999647e-05 5.92000000324e-05 -update_medium SortedSet 10000 0.000479000000041 0.00048199999992 0.000480000000152 0.000480199999993 -update_medium SortedSet 100000 0.00500000000011 0.00510800000006 0.00504999999998 0.00506220000002 -update_medium SortedSet 1000000 0.104312 0.11436 0.104312 0.1070866 -update_medium rbset 100 1.79999999546e-05 1.99999999495e-05 1.79999999546e-05 1.86000000213e-05 -update_medium rbset 1000 0.000215999999909 0.000217000000021 0.000215999999909 0.000216799999998 -update_medium rbset 10000 0.00261099999989 0.00263800000016 0.00261799999998 0.00261860000001 -update_medium rbset 100000 0.0310550000002 0.031375 0.0310550000002 0.0312308 -update_medium rbset 1000000 0.356258 0.360334 0.358944 0.358184 -update_medium blist.sortedset 100 0.000602999999956 0.000610999999935 0.000610999999935 0.000606199999947 -update_medium blist.sortedset 1000 0.00897899999995 0.00902700000006 0.009006 0.00900600000004 -update_medium blist.sortedset 10000 0.126009 0.128062 0.128062 0.126729 -update_medium banyan.SortedSet 100 7.39999998132e-05 7.49999999243e-05 7.49999999243e-05 7.45999999253e-05 -update_medium banyan.SortedSet 1000 0.000583000000006 0.000588999999991 0.000588000000107 0.000586800000019 -update_medium banyan.SortedSet 10000 0.00544000000014 0.00549499999988 0.00545699999998 0.00546799999997 -update_medium banyan.SortedSet 100000 0.060199 0.0676070000002 0.0676070000002 0.0642508 -update_medium banyan.SortedSet 1000000 0.685721 0.74801 0.699271 0.7227416 -update_large SortedSet 100 1.39999999647e-05 1.59999999596e-05 1.39999999647e-05 1.45999999859e-05 -update_large SortedSet 1000 8.20000000203e-05 9.10000001113e-05 8.39999997879e-05 8.6199999987e-05 -update_large SortedSet 10000 0.000773999999865 0.000786000000062 0.000774000000092 0.000778200000013 -update_large SortedSet 100000 0.011141 0.01133 0.0112049999998 0.0111997999999 -update_large SortedSet 1000000 0.15152 0.167467 0.167467 0.1611632 -update_large rbset 100 3.2999999803e-05 3.50000000253e-05 3.2999999803e-05 3.37999999829e-05 -update_large rbset 1000 0.000395000000026 0.000397000000021 0.000395000000026 0.000395800000024 -update_large rbset 10000 0.00476300000014 0.00488500000006 0.00476300000014 0.00480420000004 -update_large rbset 100000 0.056245 0.060825 0.056615 0.0572812 -update_large rbset 1000000 0.655196 0.672478 0.657615 0.6601982 -update_large blist.sortedset 100 0.00114099999996 0.0011669999999 0.00114499999995 0.00114779999994 -update_large blist.sortedset 1000 0.016969 0.0170439999999 0.0169720000001 0.016997 -update_large blist.sortedset 10000 0.238498 0.243902 0.243902 0.2417094 -update_large banyan.SortedSet 100 8.60000000102e-05 9.00000000001e-05 8.80000000052e-05 8.7799999983e-05 -update_large banyan.SortedSet 1000 0.000725999999986 0.000729999999976 0.000727999999981 0.000727999999981 -update_large banyan.SortedSet 10000 0.00697799999989 0.00703799999997 0.00702000000001 0.00700399999996 -update_large banyan.SortedSet 100000 0.079201 0.084368 0.0827859999999 0.0815566 -update_large banyan.SortedSet 1000000 0.885521 0.920925 0.885521 0.9058176 -union_tiny SortedSet 100 2.19999999445e-05 2.49999998232e-05 2.30000000556e-05 2.31999999414e-05 -union_tiny SortedSet 1000 7.19999998182e-05 7.60000000355e-05 7.60000000355e-05 7.31999999971e-05 -union_tiny SortedSet 10000 0.00061699999992 0.000651999999945 0.000617999999804 0.000625799999898 -union_tiny SortedSet 100000 0.00722999999994 0.00730499999986 0.00729300000012 0.00726399999994 -union_tiny SortedSet 1000000 0.118078 0.140468 0.118078 0.1285444 -union_tiny rbset 100 0.000125999999909 0.000133000000005 0.00012700000002 0.00012799999995 -union_tiny rbset 1000 0.000694999999951 0.000849000000017 0.000757000000021 0.000782199999958 -union_tiny rbset 10000 0.00664099999995 0.00670100000002 0.00664099999995 0.00666439999995 -union_tiny rbset 100000 0.0784639999999 0.083161 0.0794129999999 0.0797868 -union_tiny rbset 1000000 0.891465 0.912108 0.905171 0.9004658 -union_tiny blist.sortedset 100 0.000115000000051 0.000117999999929 0.000117999999929 0.000116600000047 -union_tiny blist.sortedset 1000 0.00015099999996 0.000152999999955 0.000151999999844 0.000151799999958 -union_tiny blist.sortedset 10000 0.000205000000051 0.000235999999859 0.00023299999998 0.000219199999992 -union_tiny blist.sortedset 100000 0.00027 0.000310000000127 0.00027 0.000301199999967 -union_tiny blist.sortedset 1000000 0.00037599999996 0.000561999999945 0.00037599999996 0.00041839999999 -union_tiny banyan.SortedSet 100 2.99999999243e-05 3.30000000304e-05 3.10000000354e-05 3.13999999889e-05 -union_tiny banyan.SortedSet 1000 0.00020399999994 0.000220000000127 0.000220000000127 0.000209199999972 -union_tiny banyan.SortedSet 10000 0.00198099999989 0.0020669999999 0.0020669999999 0.00202379999996 -union_tiny banyan.SortedSet 100000 0.0240740000002 0.024803 0.024803 0.0244414 -union_tiny banyan.SortedSet 1000000 0.225115 0.239873 0.225115 0.2308734 -union_small SortedSet 100 2.19999999445e-05 2.49999998232e-05 2.30000000556e-05 2.31999999869e-05 -union_small SortedSet 1000 8.29999999041e-05 8.60000000102e-05 8.29999999041e-05 8.40000000153e-05 -union_small SortedSet 10000 0.000692000000072 0.000699000000168 0.000692000000072 0.00069580000004 -union_small SortedSet 100000 0.00894300000004 0.00935300000015 0.00894300000004 0.00914419999999 -union_small SortedSet 1000000 0.149366 0.168345 0.168345 0.1538358 -union_small rbset 100 5.6000000086e-05 5.90000001921e-05 5.69999999698e-05 5.72000000375e-05 -union_small rbset 1000 0.000623000000132 0.000675000000001 0.000623000000132 0.000643799999989 -union_small rbset 10000 0.00718299999994 0.00721799999997 0.00718400000005 0.00719919999997 -union_small rbset 100000 0.0859849999999 0.088448 0.0879789999999 0.0877207999999 -union_small rbset 1000000 0.963934 0.984036 0.984036 0.9768292 -union_small blist.sortedset 100 0.000115999999935 0.000117000000046 0.000115999999935 0.000116200000002 -union_small blist.sortedset 1000 0.00160400000004 0.00163099999986 0.00160400000004 0.001611 -union_small blist.sortedset 10000 0.022508 0.0235279999999 0.0225620000001 0.0228418000001 -union_small blist.sortedset 100000 0.297793 0.309674 0.309674 0.302395 -union_small blist.sortedset 1000000 3.946533 3.974056 3.946533 3.958967 -union_small banyan.SortedSet 100 3.19999999192e-05 3.39999996868e-05 3.19999999192e-05 3.26000001223e-05 -union_small banyan.SortedSet 1000 0.000232000000324 0.000250999999935 0.000249000000167 0.000241200000164 -union_small banyan.SortedSet 10000 0.00222100000019 0.0022570000001 0.00222500000018 0.00223340000011 -union_small banyan.SortedSet 100000 0.0261380000002 0.0270560000004 0.0270560000004 0.0266598000001 -union_small banyan.SortedSet 1000000 0.246212 0.286237 0.286237 0.2664542 -union_medium SortedSet 100 2.5999999707e-05 2.89999998131e-05 2.5999999707e-05 2.67999998869e-05 -union_medium SortedSet 1000 0.00011399999994 0.000136999999995 0.00011399999994 0.000120599999991 -union_medium SortedSet 10000 0.000888999999916 0.000903999999991 0.000892000000022 0.00089280000002 -union_medium SortedSet 100000 0.0125860000003 0.0128199999999 0.0128199999999 0.0126836 -union_medium SortedSet 1000000 0.213467 0.281103 0.213467 0.2362224 -union_medium rbset 100 7.40000000405e-05 9.49999998738e-05 9.49999998738e-05 7.86000000517e-05 -union_medium rbset 1000 0.000821999999971 0.000825999999961 0.000822999999855 0.000824000000011 -union_medium rbset 10000 0.00960699999996 0.00963199999978 0.00963199999978 0.00962139999983 -union_medium rbset 100000 0.116205 0.117423 0.117264 0.1169466 -union_medium rbset 1000000 1.278446 1.32709 1.298606 1.3106004 -union_medium blist.sortedset 100 0.000608000000284 0.00061100000039 0.000609000000168 0.000609600000098 -union_medium blist.sortedset 1000 0.0089710000002 0.00900299999967 0.00900299999967 0.00898799999986 -union_medium blist.sortedset 10000 0.125682 0.126518 0.125941 0.1260776 -union_medium banyan.SortedSet 100 4.60000001112e-05 4.89999997626e-05 4.6999999995e-05 4.75999999253e-05 -union_medium banyan.SortedSet 1000 0.000394000000142 0.000399000000016 0.000394000000142 0.000396799999999 -union_medium banyan.SortedSet 10000 0.00314400000025 0.00315099999989 0.00315099999989 0.00314820000003 -union_medium banyan.SortedSet 100000 0.0386590000003 0.039546 0.039546 0.039081 -union_medium banyan.SortedSet 1000000 0.387642 0.404385 0.400523 0.3990772 -union_large SortedSet 100 2.5999999707e-05 3.00000001516e-05 2.70000000455e-05 2.7399999999e-05 -union_large SortedSet 1000 0.000137999999879 0.000140000000101 0.000137999999879 0.000138599999991 -union_large SortedSet 10000 0.00118100000009 0.00121799999988 0.00119399999994 0.00119360000008 -union_large SortedSet 100000 0.018309 0.0200720000003 0.0195709999998 0.0195134 -union_large SortedSet 1000000 0.25773 0.329071 0.25773 0.2855596 -union_large rbset 100 9.09999998839e-05 0.000102999999854 0.000102999999854 9.46000000113e-05 -union_large rbset 1000 0.00101899999981 0.00103100000024 0.00102700000025 0.00102460000007 -union_large rbset 10000 0.0119749999999 0.0120619999998 0.012025 0.0120215999998 -union_large rbset 100000 0.145939 0.149596 0.147597 0.1481318 -union_large rbset 1000000 1.61274 1.645768 1.61274 1.6291148 -union_large blist.sortedset 100 0.00114499999972 0.00116600000001 0.00115000000005 0.00115119999991 -union_large blist.sortedset 1000 0.0169029999997 0.0170350000003 0.0170350000003 0.0169422 -union_large blist.sortedset 10000 0.23736 0.244817 0.23989 0.2411224 -union_large banyan.SortedSet 100 5.80000000809e-05 7.30000001568e-05 6.29999999546e-05 6.5000000086e-05 -union_large banyan.SortedSet 1000 0.000412999999753 0.000414000000092 0.000414000000092 0.000413399999979 -union_large banyan.SortedSet 10000 0.00395500000013 0.00398300000006 0.00395500000013 0.00397140000005 -union_large banyan.SortedSet 100000 0.0496029999999 0.050663 0.0496029999999 0.0502728000001 -union_large banyan.SortedSet 1000000 0.507299 0.536926 0.519063 0.5254784 -remove SortedSet 100 2.99999965137e-06 3.9999999899e-06 2.99999965137e-06 3.39999996868e-06 -remove SortedSet 1000 1.79999997272e-05 1.90000000657e-05 1.79999997272e-05 1.86000000213e-05 -remove SortedSet 10000 0.00018 0.000183000000106 0.000182000000223 0.000181599999996 -remove SortedSet 100000 0.00204299999996 0.00222699999995 0.00222699999995 0.00210299999999 -remove SortedSet 1000000 0.0266670000001 0.0278699999999 0.0266670000001 0.0271858 -remove rbset 100 9.99999883788e-07 2.00000022232e-06 9.99999883788e-07 1.20000004245e-06 -remove rbset 1000 6.99999964127e-06 8.99999986359e-06 7.9999999798e-06 7.99999988885e-06 -remove rbset 10000 9.19999997677e-05 9.60000002124e-05 9.19999997677e-05 9.34000000598e-05 -remove rbset 100000 0.00177500000018 0.00188799999978 0.00188600000001 0.00183280000001 -remove rbset 1000000 0.0257109999998 0.028695 0.0257109999998 0.0266811999999 -remove blist.sortedset 100 7.9999999798e-06 1.00000002021e-05 8.99999986359e-06 8.80000006873e-06 -remove blist.sortedset 1000 0.000111000000288 0.000125000000025 0.000112000000172 0.000114400000166 -remove blist.sortedset 10000 0.00176499999998 0.00194599999986 0.00177699999995 0.00181159999993 -remove SkipListSet 100 7.9999999798e-06 1.19999999697e-05 7.9999999798e-06 9.99999983833e-06 -remove SkipListSet 1000 8.90000001164e-05 9.60000002124e-05 8.90000001164e-05 9.2400000085e-05 -remove SkipListSet 10000 0.00101700000005 0.001127 0.00102199999992 0.00105960000001 -remove SkipListSet 100000 0.01377 0.0142940000001 0.0142940000001 0.0141094000001 -remove SkipListSet 1000000 0.1772 0.187702 0.18015 0.1814664 -remove banyan.SortedSet 100 9.99999883788e-07 3.00000010611e-06 1.00000033854e-06 1.99999994948e-06 -remove banyan.SortedSet 1000 5.00000032844e-06 7.00000009601e-06 5.00000032844e-06 6.20000009803e-06 -remove banyan.SortedSet 10000 5.39999996363e-05 6.39999998384e-05 5.39999996363e-05 5.61999999263e-05 -remove banyan.SortedSet 100000 0.00120700000025 0.00156700000025 0.00156700000025 0.00134540000017 -remove banyan.SortedSet 1000000 0.015969 0.0173569999997 0.017351 0.016835 -difference_tiny SortedSet 100 1.29999998535e-05 1.50000000758e-05 1.29999998535e-05 1.37999998515e-05 -difference_tiny SortedSet 1000 3.69999997929e-05 3.90000000152e-05 3.80000001314e-05 3.79999999495e-05 -difference_tiny SortedSet 10000 0.000309000000016 0.000366000000213 0.000311000000238 0.000322000000142 -difference_tiny SortedSet 100000 0.00315899999987 0.00407900000027 0.00316599999996 0.00348899999999 -difference_tiny SortedSet 1000000 0.065204 0.0859759999998 0.0745910000001 0.0730132000001 -difference_tiny rbset 100 6.39999998384e-05 6.60000000607e-05 6.5000000177e-05 6.47999999273e-05 -difference_tiny rbset 1000 0.000781000000188 0.000782000000072 0.000782000000072 0.000781800000095 -difference_tiny rbset 10000 0.0087010000002 0.00875499999984 0.00873000000001 0.00872340000005 -difference_tiny rbset 100000 0.100094 0.101654 0.100327 0.1005284 -difference_tiny rbset 1000000 1.086691 1.127769 1.106366 1.1102798 -difference_tiny blist.sortedset 100 9.09999998839e-05 9.29999996515e-05 9.09999998839e-05 9.15999998142e-05 -difference_tiny blist.sortedset 1000 0.000117000000046 0.000120000000152 0.000117000000046 0.000118399999974 -difference_tiny blist.sortedset 10000 0.000148999999965 0.000170000000253 0.000170000000253 0.000157600000057 -difference_tiny blist.sortedset 100000 0.000213000000258 0.000246999999945 0.000215000000026 0.000226800000019 -difference_tiny blist.sortedset 1000000 0.000270999999884 0.000301000000036 0.000301000000036 0.000279399999999 -difference_tiny banyan.SortedSet 100 2.89999998131e-05 3.10000000354e-05 3.00000001516e-05 3.02000000374e-05 -difference_tiny banyan.SortedSet 1000 0.000186000000213 0.000193999999738 0.00018799999998 0.000188799999978 -difference_tiny banyan.SortedSet 10000 0.00178000000005 0.00187700000015 0.00180399999999 0.00180739999996 -difference_tiny banyan.SortedSet 100000 0.0202059999997 0.0207320000004 0.0205059999998 0.020497 -difference_tiny banyan.SortedSet 1000000 0.200613 0.223008 0.200613 0.2108536 -difference_small SortedSet 100 1.30000003082e-05 1.4000000192e-05 1.4000000192e-05 1.36000002385e-05 -difference_small SortedSet 1000 3.80000001314e-05 3.90000000152e-05 3.80000001314e-05 3.86000000617e-05 -difference_small SortedSet 10000 0.000313999999889 0.000316999999995 0.000316000000112 0.000315600000067 -difference_small SortedSet 100000 0.00409899999977 0.00444199999993 0.00412099999994 0.00424079999993 -difference_small SortedSet 1000000 0.0622549999998 0.0858640000001 0.0660280000002 0.0710664 -difference_small rbset 100 6.5000000177e-05 6.60000000607e-05 6.5000000177e-05 6.52000001537e-05 -difference_small rbset 1000 0.00210000000015 0.00212200000033 0.00210000000015 0.00210580000003 -difference_small rbset 10000 0.159602 0.160735 0.159602 0.1601814 -difference_small blist.sortedset 100 9.09999998839e-05 9.30000001063e-05 9.19999997677e-05 9.17999999729e-05 -difference_small blist.sortedset 1000 0.00116900000012 0.00117300000011 0.00117100000034 0.00117080000018 -difference_small blist.sortedset 10000 0.0161360000002 0.0179900000003 0.0161710000002 0.0166152000002 -difference_small blist.sortedset 100000 0.222044 0.228881 0.228881 0.2254312 -difference_small blist.sortedset 1000000 2.910392 2.93703 2.928004 2.9251056 -difference_small banyan.SortedSet 100 2.60000001617e-05 2.90000002678e-05 2.70000000455e-05 2.76000001577e-05 -difference_small banyan.SortedSet 1000 0.000174999999672 0.000186999999642 0.000186999999642 0.000180799999816 -difference_small banyan.SortedSet 10000 0.00165400000014 0.00168299999996 0.00166900000022 0.00166840000002 -difference_small banyan.SortedSet 100000 0.0191099999997 0.0199509999998 0.0193250000002 0.0194473999999 -difference_small banyan.SortedSet 1000000 0.196782 0.219283 0.203764 0.2051966 -difference_medium SortedSet 100 1.19999999697e-05 1.49999996211e-05 1.29999998535e-05 1.31999999212e-05 -difference_medium SortedSet 1000 4.39999998889e-05 4.80000003336e-05 4.50000002274e-05 4.56000000668e-05 -difference_medium SortedSet 10000 0.000345999999809 0.000348000000031 0.000345999999809 0.000346799999988 -difference_medium SortedSet 100000 0.00424100000009 0.00443399999995 0.00424599999997 0.00430819999992 -difference_medium SortedSet 1000000 0.0478539999999 0.0552160000002 0.0552160000002 0.050571 -difference_medium rbset 100 8.89999996616e-05 9.09999998839e-05 9.00000000001e-05 9.0199999886e-05 -difference_medium rbset 1000 0.00646900000038 0.00658599999997 0.0065010000003 0.0065082000001 -difference_medium rbset 10000 0.612219 0.61749 0.614839 0.6140104 -difference_medium blist.sortedset 100 0.000453000000107 0.000540000000001 0.000453999999991 0.0004774 -difference_medium blist.sortedset 1000 0.00646800000004 0.0065010000003 0.00647899999967 0.0064848 -difference_medium blist.sortedset 10000 0.0936580000002 0.0957269999999 0.0936580000002 0.0942693999999 -difference_medium banyan.SortedSet 100 2.30000000556e-05 2.50000002779e-05 2.39999999394e-05 2.42000000071e-05 -difference_medium banyan.SortedSet 1000 0.000139999999647 0.000141999999869 0.000140999999985 0.000140999999894 -difference_medium banyan.SortedSet 10000 0.00130100000024 0.00132299999996 0.00130100000024 0.00130980000004 -difference_medium banyan.SortedSet 100000 0.0149819999997 0.0155159999999 0.0155159999999 0.0152455999999 -difference_medium banyan.SortedSet 1000000 0.156083 0.168878 0.156083 0.164011 -difference_large SortedSet 100 1.29999998535e-05 1.50000000758e-05 1.4000000192e-05 1.38000000334e-05 -difference_large SortedSet 1000 4.99999996464e-05 5.4000000091e-05 5.09999999849e-05 5.17999999829e-05 -difference_large SortedSet 10000 0.000418999999965 0.000433999999586 0.000422000000071 0.000423799999953 -difference_large SortedSet 100000 0.00472600000012 0.00531000000001 0.00476299999991 0.00485819999994 -difference_large SortedSet 1000000 0.0534149999999 0.0545099999999 0.0545099999999 0.0537734 -difference_large rbset 100 0.000118999999813 0.000122999999803 0.000121000000036 0.000120599999991 -difference_large rbset 1000 0.009728 0.00982900000008 0.00973500000009 0.00976060000012 -difference_large rbset 10000 0.937781 0.942765 0.940312 0.9398194 -difference_large blist.sortedset 100 0.00081500000033 0.000872000000072 0.000817999999981 0.000828200000069 -difference_large blist.sortedset 1000 0.011688 0.0118039999998 0.0117019999998 0.0117175999999 -difference_large blist.sortedset 10000 0.166785 0.170519 0.166836 0.1683186 -difference_large banyan.SortedSet 100 2.69999995908e-05 2.90000002678e-05 2.70000000455e-05 2.77999999525e-05 -difference_large banyan.SortedSet 1000 0.000164999999924 0.000166000000263 0.000165999999808 0.000165600000128 -difference_large banyan.SortedSet 10000 0.00152299999991 0.00155100000029 0.00153799999998 0.0015370000001 -difference_large banyan.SortedSet 100000 0.019123 0.020712 0.0202520000003 0.0198506000001 -difference_large banyan.SortedSet 1000000 0.18948 0.208935 0.18948 0.1974034 -difference_update_tiny SortedSet 100 1.90000000657e-05 2.20000001718e-05 1.90000000657e-05 1.96000000869e-05 -difference_update_tiny SortedSet 1000 1.99999999495e-05 2.20000001718e-05 2.09999998333e-05 2.11999999919e-05 -difference_update_tiny SortedSet 10000 2.30000000556e-05 2.49999998232e-05 2.39999999394e-05 2.37999999626e-05 -difference_update_tiny SortedSet 100000 3.59999999091e-05 3.90000000152e-05 3.90000000152e-05 3.82000000172e-05 -difference_update_tiny SortedSet 1000000 4.60000001112e-05 4.90000002173e-05 4.6999999995e-05 4.76000000162e-05 -difference_update_tiny rbset 100 5.99999975748e-06 7.00000009601e-06 7.00000009601e-06 6.60000005155e-06 -difference_update_tiny rbset 1000 6.99999964127e-06 7.00000009601e-06 6.99999964127e-06 6.99999991411e-06 -difference_update_tiny rbset 10000 9.99999974738e-06 1.10000000859e-05 1.00000002021e-05 1.03999999737e-05 -difference_update_tiny rbset 100000 2.30000000556e-05 2.49999998232e-05 2.39999999394e-05 2.39999999394e-05 -difference_update_tiny rbset 1000000 3.09999995807e-05 3.70000002476e-05 3.59999999091e-05 3.35999999152e-05 -difference_update_tiny blist.sortedset 100 8.60000000102e-05 8.90000001164e-05 8.80000002326e-05 8.72000000527e-05 -difference_update_tiny blist.sortedset 1000 0.00011399999994 0.000136999999995 0.000136999999995 0.000118599999951 -difference_update_tiny blist.sortedset 10000 0.000138000000334 0.000142999999753 0.000138000000334 0.000139999999919 -difference_update_tiny blist.sortedset 100000 0.000191000000086 0.000224000000344 0.000219000000016 0.00020999999997 -difference_update_tiny blist.sortedset 1000000 0.000246999999945 0.000284000000192 0.000279000000319 0.000265600000057 -difference_update_tiny banyan.SortedSet 100 4.59999996565e-05 5.00000001011e-05 4.6999999995e-05 4.7799999993e-05 -difference_update_tiny banyan.SortedSet 1000 0.000352999999905 0.000375000000076 0.000356000000011 0.000359000000026 -difference_update_tiny banyan.SortedSet 10000 0.00356899999997 0.00380899999982 0.00361599999997 0.00367139999989 -difference_update_tiny banyan.SortedSet 100000 0.042551 0.0427870000003 0.042606 0.0426254000002 -difference_update_tiny banyan.SortedSet 1000000 0.408444 0.446552 0.408444 0.4312978 -difference_update_small SortedSet 100 1.90000000657e-05 1.99999999495e-05 1.99999999495e-05 1.9599999996e-05 -difference_update_small SortedSet 1000 0.000168999999914 0.000174000000243 0.00017200000002 0.000171399999999 -difference_update_small SortedSet 10000 0.00168900000017 0.00171300000011 0.00171300000011 0.00169480000013 -difference_update_small SortedSet 100000 0.0178419999997 0.0181029999999 0.017867 0.0179623999999 -difference_update_small SortedSet 1000000 0.189795 0.194378 0.191328 0.1917238 -difference_update_small rbset 100 7.00000009601e-06 7.9999999798e-06 7.00000009601e-06 7.80000000304e-06 -difference_update_small rbset 1000 3.90000000152e-05 4.20000001213e-05 4.00000003538e-05 4.00000000809e-05 -difference_update_small rbset 10000 0.000443999999789 0.000447999999778 0.000443999999789 0.000445599999875 -difference_update_small rbset 100000 0.00658599999997 0.00777299999982 0.00668999999971 0.006873 -difference_update_small rbset 1000000 0.0410940000002 0.0429219999996 0.0420280000003 0.0419103999999 -difference_update_small blist.sortedset 100 8.6999999894e-05 8.90000001164e-05 8.70000003488e-05 8.78000001649e-05 -difference_update_small blist.sortedset 1000 0.0011599999998 0.0011800000002 0.00116400000024 0.00116620000008 -difference_update_small blist.sortedset 10000 0.0160709999996 0.02061 0.0161550000003 0.0170031999999 -difference_update_small blist.sortedset 100000 0.221567 0.225668 0.225668 0.2231678 -difference_update_small blist.sortedset 1000000 2.892438 2.924978 2.915644 2.9122984 -difference_update_small banyan.SortedSet 100 4.89999997626e-05 5.19999998687e-05 4.90000002173e-05 4.98000000334e-05 -difference_update_small banyan.SortedSet 1000 0.000343000000157 0.000348999999915 0.000344000000041 0.000345399999969 -difference_update_small banyan.SortedSet 10000 0.00340300000016 0.00343699999985 0.00340300000016 0.00341880000005 -difference_update_small banyan.SortedSet 100000 0.0374620000002 0.0422479999997 0.0376040000001 0.0387412000001 -difference_update_small banyan.SortedSet 1000000 0.367257 0.443951 0.443951 0.4156496 -difference_update_medium SortedSet 100 8.99999986359e-06 1.10000000859e-05 9.99999974738e-06 9.99999992928e-06 -difference_update_medium SortedSet 1000 4.39999998889e-05 4.50000002274e-05 4.49999997727e-05 4.46000000011e-05 -difference_update_medium SortedSet 10000 0.000328999999965 0.000330999999733 0.000328999999965 0.000329799999872 -difference_update_medium SortedSet 100000 0.00367400000005 0.00370099999964 0.00370099999964 0.00369359999995 -difference_update_medium SortedSet 1000000 0.0551820000001 0.0626999999999 0.05557 0.0582164 -difference_update_medium rbset 100 2.50000002779e-05 2.70000000455e-05 2.60000001617e-05 2.60000001617e-05 -difference_update_medium rbset 1000 0.000180999999884 0.000198000000182 0.000181000000339 0.000185800000145 -difference_update_medium rbset 10000 0.00203499999998 0.00206200000002 0.00204399999984 0.00204640000002 -difference_update_medium rbset 100000 0.0302630000001 0.0315299999997 0.0302630000001 0.0311314 -difference_update_medium rbset 1000000 0.191896 0.19574 0.19574 0.193866 -difference_update_medium blist.sortedset 100 0.000450000000001 0.000453999999991 0.000451999999768 0.000451799999973 -difference_update_medium blist.sortedset 1000 0.0064769999999 0.00924400000031 0.00924400000031 0.00707320000001 -difference_update_medium blist.sortedset 10000 0.0934980000002 0.0954729999999 0.0937829999998 0.094255 -difference_update_medium banyan.SortedSet 100 4.10000002375e-05 4.40000003437e-05 4.10000002375e-05 4.24000001658e-05 -difference_update_medium banyan.SortedSet 1000 0.000268000000233 0.00027 0.00027 0.000269200000093 -difference_update_medium banyan.SortedSet 10000 0.00246300000026 0.0024699999999 0.00246599999991 0.00246619999998 -difference_update_medium banyan.SortedSet 100000 0.0281989999999 0.0286249999999 0.0285559999998 0.0283947999998 -difference_update_medium banyan.SortedSet 1000000 0.289023 0.323998 0.289023 0.3050766 -difference_update_large SortedSet 100 1.10000000859e-05 1.19999999697e-05 1.10000000859e-05 1.14000000394e-05 -difference_update_large SortedSet 1000 5.29999997525e-05 5.49999999748e-05 5.4000000091e-05 5.40000000001e-05 -difference_update_large SortedSet 10000 0.00046199999997 0.000465000000077 0.00046199999997 0.00046339999999 -difference_update_large SortedSet 100000 0.00606100000005 0.00649599999997 0.00608200000033 0.00617360000006 -difference_update_large SortedSet 1000000 0.0733130000003 0.0875379999998 0.0743889999999 0.0765218 -difference_update_large rbset 100 3.19999999192e-05 3.40000001415e-05 3.2000000374e-05 3.26000002133e-05 -difference_update_large rbset 1000 0.000266000000011 0.00027 0.000268999999662 0.000268199999937 -difference_update_large rbset 10000 0.00326600000017 0.00330300000041 0.00326600000017 0.00328240000017 -difference_update_large rbset 100000 0.0437400000001 0.043913 0.0437420000003 0.0438120000001 -difference_update_large rbset 1000000 0.353824 0.357134 0.354087 0.3547522 -difference_update_large blist.sortedset 100 0.000810999999885 0.000858999999764 0.000858999999764 0.00082199999988 -difference_update_large blist.sortedset 1000 0.0116990000001 0.0117380000002 0.0117380000002 0.0117222000001 -difference_update_large blist.sortedset 10000 0.166559 0.171679 0.171679 0.1681124 -difference_update_large banyan.SortedSet 100 4.39999998889e-05 4.60000001112e-05 4.50000002274e-05 4.49999999546e-05 -difference_update_large banyan.SortedSet 1000 0.000287999999728 0.000312000000122 0.000288000000182 0.000293000000056 -difference_update_large banyan.SortedSet 10000 0.00266399999964 0.00268700000015 0.00266399999964 0.00267359999998 -difference_update_large banyan.SortedSet 100000 0.0300669999997 0.0331890000002 0.030413 0.0308529999999 -difference_update_large banyan.SortedSet 1000000 0.314011 0.362862 0.314878 0.3259214 -intersection_tiny SortedSet 100 9.99999974738e-06 1.39999997373e-05 1.09999996312e-05 1.15999998343e-05 -intersection_tiny SortedSet 1000 1.19999999697e-05 1.19999999697e-05 1.19999999697e-05 1.19999999697e-05 -intersection_tiny SortedSet 10000 1.39999997373e-05 1.69999998434e-05 1.50000000758e-05 1.48000000081e-05 -intersection_tiny SortedSet 100000 2.90000002678e-05 3.19999999192e-05 3.19999999192e-05 3.08000000587e-05 -intersection_tiny SortedSet 1000000 4.30000000051e-05 5.69999997424e-05 5.00000001011e-05 4.81999999465e-05 -intersection_tiny rbset 100 3.50000000253e-05 3.70000002476e-05 3.50000000253e-05 3.64000001355e-05 -intersection_tiny rbset 1000 0.000331000000187 0.000332999999955 0.000331999999617 0.000331800000004 -intersection_tiny rbset 10000 0.00325999999995 0.00328799999988 0.00327000000016 0.0032744000001 -intersection_tiny rbset 100000 0.0342810000002 0.0351679999999 0.0351679999999 0.0346598 -intersection_tiny rbset 1000000 0.346928 0.350272 0.34882 0.3487756 -intersection_tiny blist.sortedset 100 0.00121599999966 0.00123900000017 0.00123900000017 0.00122179999998 -intersection_tiny blist.sortedset 1000 0.016572 0.0166259999996 0.0166020000001 0.0166016 -intersection_tiny blist.sortedset 10000 0.225651 0.232065 0.225651 0.2270082 -intersection_tiny banyan.SortedSet 100 1.19999999697e-05 1.39999997373e-05 1.30000003082e-05 1.30000001263e-05 -intersection_tiny banyan.SortedSet 1000 2.20000001718e-05 2.30000000556e-05 2.20000001718e-05 2.28000000789e-05 -intersection_tiny banyan.SortedSet 10000 9.399999999e-05 9.50000003286e-05 9.49999998738e-05 9.4800000079e-05 -intersection_tiny banyan.SortedSet 100000 0.000880999999936 0.00108900000032 0.000888000000032 0.000932600000033 -intersection_tiny banyan.SortedSet 1000000 0.00851700000021 0.0104590000001 0.00856699999986 0.00968119999998 -intersection_small SortedSet 100 1.00000002021e-05 1.29999998535e-05 1.10000000859e-05 1.12000000627e-05 -intersection_small SortedSet 1000 1.8999999611e-05 1.99999999495e-05 1.8999999611e-05 1.93999998373e-05 -intersection_small SortedSet 10000 6.69999999445e-05 8.40000002427e-05 6.90000001669e-05 7.18000001143e-05 -intersection_small SortedSet 100000 0.000695000000178 0.000742000000173 0.000717999999779 0.000721799999974 -intersection_small SortedSet 1000000 0.00647200000003 0.00702700000011 0.00650899999982 0.00673480000005 -intersection_small rbset 100 3.59999999091e-05 3.70000002476e-05 3.60000003639e-05 3.64000000445e-05 -intersection_small rbset 1000 0.00174100000004 0.00174500000003 0.00174500000003 0.00174360000001 -intersection_small rbset 10000 0.156248 0.161125 0.156248 0.1572958 -intersection_small blist.sortedset 100 0.00121499999977 0.00121799999988 0.001217 0.00121679999993 -intersection_small blist.sortedset 1000 0.016799 0.0168560000002 0.0168040000003 0.0168216 -intersection_small blist.sortedset 10000 0.233416 0.237541 0.234473 0.2353454 -intersection_small banyan.SortedSet 100 1.39999997373e-05 1.59999999596e-05 1.39999997373e-05 1.45999998495e-05 -intersection_small banyan.SortedSet 1000 5.70000001971e-05 5.89999999647e-05 5.70000001971e-05 5.78000001042e-05 -intersection_small banyan.SortedSet 10000 0.000352000000021 0.000358999999662 0.000353999999788 0.000354799999968 -intersection_small banyan.SortedSet 100000 0.00368500000013 0.00373900000022 0.00370599999997 0.00370880000009 -intersection_small banyan.SortedSet 1000000 0.035535 0.036439 0.036439 0.0357954 -intersection_medium SortedSet 100 1.19999999697e-05 1.39999997373e-05 1.29999998535e-05 1.29999999444e-05 -intersection_medium SortedSet 1000 3.9999999899e-05 4.20000001213e-05 4.20000001213e-05 4.07999999879e-05 -intersection_medium SortedSet 10000 0.000275000000329 0.000276999999642 0.000275000000329 0.000276399999893 -intersection_medium SortedSet 100000 0.00294799999983 0.00303299999996 0.00295099999994 0.00296740000003 -intersection_medium SortedSet 1000000 0.0388459999999 0.0400479999998 0.0400479999998 0.0394691999999 -intersection_medium rbset 100 9.00000000001e-05 9.399999999e-05 9.20000002225e-05 9.14000000193e-05 -intersection_medium rbset 1000 0.00648499999988 0.00657799999999 0.00657799999999 0.00652499999997 -intersection_medium rbset 10000 0.611951 0.622556 0.616697 0.615627 -intersection_medium blist.sortedset 100 0.00111000000015 0.00125299999991 0.00111000000015 0.00115760000008 -intersection_medium blist.sortedset 1000 0.0150639999997 0.0152330000001 0.0150669999998 0.0151204 -intersection_medium blist.sortedset 10000 0.208423 0.214072 0.20933 0.2105426 -intersection_medium banyan.SortedSet 100 2.39999999394e-05 2.60000001617e-05 2.39999999394e-05 2.49999999141e-05 -intersection_medium banyan.SortedSet 1000 0.000148999999965 0.00015300000041 0.00015300000041 0.000151400000141 -intersection_medium banyan.SortedSet 10000 0.00134299999991 0.00168600000006 0.00134600000001 0.0014158 -intersection_medium banyan.SortedSet 100000 0.0153149999996 0.0158710000001 0.0153149999996 0.0154754 -intersection_medium banyan.SortedSet 1000000 0.151492 0.179484 0.152216 0.1600514 -intersection_large SortedSet 100 1.29999998535e-05 1.50000000758e-05 1.39999997373e-05 1.41999999869e-05 -intersection_large SortedSet 1000 4.49999997727e-05 5.60000003134e-05 4.50000002274e-05 4.76000001072e-05 -intersection_large SortedSet 10000 0.000324000000091 0.000324999999975 0.000324999999975 0.000324799999999 -intersection_large SortedSet 100000 0.0043740000001 0.00450000000001 0.00450000000001 0.00441199999996 -intersection_large SortedSet 1000000 0.0443380000002 0.0506600000003 0.049661 0.0487402000002 -intersection_large rbset 100 0.000119999999697 0.000121999999919 0.000121000000036 0.0001205999999 -intersection_large rbset 1000 0.00973199999999 0.00980500000014 0.00976300000002 0.00976679999994 -intersection_large rbset 10000 0.93989 0.944956 0.944035 0.9424738 -intersection_large blist.sortedset 100 0.00136500000008 0.00136900000007 0.00136900000007 0.00136739999989 -intersection_large blist.sortedset 1000 0.0188519999997 0.01901 0.0188549999998 0.0189101999999 -intersection_large blist.sortedset 10000 0.262081 0.270343 0.267682 0.267065 -intersection_large banyan.SortedSet 100 2.70000000455e-05 2.90000002678e-05 2.79999999293e-05 2.80000000203e-05 -intersection_large banyan.SortedSet 1000 0.000179000000117 0.000193999999738 0.000182000000223 0.000185400000009 -intersection_large banyan.SortedSet 10000 0.00165500000003 0.00168799999983 0.00165500000003 0.00166399999998 -intersection_large banyan.SortedSet 100000 0.0184939999999 0.0197539999999 0.0186489999996 0.0187986 -intersection_large banyan.SortedSet 1000000 0.191778 0.209188 0.191778 0.1960902 -intersection_update_tiny SortedSet 100 7.00000009601e-06 7.9999999798e-06 7.00000009601e-06 7.40000004953e-06 -intersection_update_tiny SortedSet 1000 9.99999974738e-06 1.10000000859e-05 9.99999974738e-06 1.03999999737e-05 -intersection_update_tiny SortedSet 10000 6.90000001669e-05 0.000106999999844 7.10000003892e-05 7.82000001891e-05 -intersection_update_tiny SortedSet 100000 0.00067399999989 0.000700999999935 0.000700999999935 0.000692399999934 -intersection_update_tiny SortedSet 1000000 0.00687599999992 0.007341 0.00728300000037 0.00720000000001 -intersection_update_tiny rbset 100 7.9999999798e-05 8.20000000203e-05 8.00000002528e-05 8.04000001153e-05 -intersection_update_tiny rbset 1000 0.000987999999779 0.00105100000019 0.000989000000118 0.00100600000005 -intersection_update_tiny rbset 10000 0.0116069999999 0.0117299999997 0.0116720000001 0.0116609999999 -intersection_update_tiny blist.sortedset 100 0.00121300000001 0.001217 0.001217 0.00121419999996 -intersection_update_tiny blist.sortedset 1000 0.0165859999997 0.0166250000002 0.016615 0.0166107999999 -intersection_update_tiny blist.sortedset 10000 0.225465 0.238413 0.23182 0.2299814 -intersection_update_tiny banyan.SortedSet 100 2.30000000556e-05 2.5999999707e-05 2.30000000556e-05 2.43999999839e-05 -intersection_update_tiny banyan.SortedSet 1000 9.19999997677e-05 9.49999998738e-05 9.19999997677e-05 9.29999999244e-05 -intersection_update_tiny banyan.SortedSet 10000 0.000734999999622 0.000747000000047 0.000737000000299 0.000738400000046 -intersection_update_tiny banyan.SortedSet 100000 0.010714 0.0110790000003 0.01073 0.0108208 -intersection_update_tiny banyan.SortedSet 1000000 0.0786439999997 0.0886169999999 0.0857959999998 0.0837527999998 -intersection_update_small SortedSet 100 5.99999975748e-06 7.00000009601e-06 6.99999964127e-06 6.79999993736e-06 -intersection_update_small SortedSet 1000 1.50000000758e-05 1.70000002981e-05 1.70000002981e-05 1.60000000506e-05 -intersection_update_small SortedSet 10000 8.20000000203e-05 8.40000002427e-05 8.20000000203e-05 8.26000000416e-05 -intersection_update_small SortedSet 100000 0.00153399999999 0.00154100000009 0.00153600000021 0.00153820000005 -intersection_update_small SortedSet 1000000 0.0131889999998 0.0140590000001 0.0131889999998 0.0136751999999 -intersection_update_small rbset 100 7.9999999798e-05 8.20000000203e-05 7.9999999798e-05 8.07999999779e-05 -intersection_update_small rbset 1000 0.00231100000019 0.00233800000024 0.00231100000019 0.0023234000002 -intersection_update_small rbset 10000 0.162465 0.162997 0.162465 0.1627136 -intersection_update_small blist.sortedset 100 0.00121500000023 0.00123499999972 0.00121500000023 0.00122059999994 -intersection_update_small blist.sortedset 1000 0.0168409999997 0.0168899999999 0.0168409999997 0.0168661999999 -intersection_update_small blist.sortedset 10000 0.233397 0.234636 0.234154 0.2338738 -intersection_update_small banyan.SortedSet 100 2.39999999394e-05 2.60000001617e-05 2.39999999394e-05 2.43999999839e-05 -intersection_update_small banyan.SortedSet 1000 0.000129999999899 0.000132000000121 0.000129999999899 0.000130999999874 -intersection_update_small banyan.SortedSet 10000 0.0010900000002 0.00110300000006 0.00110200000017 0.001098 -intersection_update_small banyan.SortedSet 100000 0.0141349999999 0.015073 0.0148349999999 0.014615 -intersection_update_small banyan.SortedSet 1000000 0.124535 0.136713 0.124535 0.1317442 -intersection_update_medium SortedSet 100 7.9999999798e-06 2.49999998232e-05 7.9999999798e-06 1.19999998788e-05 -intersection_update_medium SortedSet 1000 3.59999999091e-05 3.90000000152e-05 3.59999999091e-05 3.69999999748e-05 -intersection_update_medium SortedSet 10000 0.000288999999611 0.000293000000056 0.000291000000288 0.000290599999971 -intersection_update_medium SortedSet 100000 0.00400899999977 0.00402899999972 0.00402899999972 0.00401780000002 -intersection_update_medium SortedSet 1000000 0.0421570000003 0.0460890000004 0.0459559999999 0.0440264000002 -intersection_update_medium rbset 100 0.00010199999997 0.000103999999737 0.000102999999854 0.000102999999945 -intersection_update_medium rbset 1000 0.0066139999999 0.00665800000024 0.0066139999999 0.00662700000003 -intersection_update_medium rbset 10000 0.611307 0.618453 0.611307 0.614248 -intersection_update_medium blist.sortedset 100 0.00110700000005 0.00111099999958 0.00110899999981 0.00110859999986 -intersection_update_medium blist.sortedset 1000 0.01505 0.0153329999998 0.0150779999999 0.0151289999999 -intersection_update_medium blist.sortedset 10000 0.208586 0.214679 0.208586 0.210606 -intersection_update_medium banyan.SortedSet 100 4.10000002375e-05 4.39999998889e-05 4.10000002375e-05 4.22000000071e-05 -intersection_update_medium banyan.SortedSet 1000 0.000266000000011 0.000269000000117 0.000266000000011 0.000267000000076 -intersection_update_medium banyan.SortedSet 10000 0.00247399999989 0.00247600000012 0.00247399999989 0.00247480000007 -intersection_update_medium banyan.SortedSet 100000 0.0294239999998 0.0360390000001 0.0300469999997 0.0317043999999 -intersection_update_medium banyan.SortedSet 1000000 0.307898 0.330281 0.330281 0.3204244 -intersection_update_large SortedSet 100 8.99999986359e-06 1.09999996312e-05 9.99999974738e-06 9.79999995252e-06 -intersection_update_large SortedSet 1000 3.9999999899e-05 4.10000002375e-05 4.00000003538e-05 4.06000000112e-05 -intersection_update_large SortedSet 10000 0.000332000000071 0.00075199999992 0.000395000000026 0.000449600000047 -intersection_update_large SortedSet 100000 0.00432899999987 0.00438800000029 0.00435399999969 0.00435820000002 -intersection_update_large SortedSet 1000000 0.0463460000001 0.050718 0.0463460000001 0.0480721999999 -intersection_update_large rbset 100 0.000130999999783 0.000133999999889 0.000130999999783 0.00013259999987 -intersection_update_large rbset 1000 0.00986899999998 0.00990300000012 0.00990300000012 0.00988859999998 -intersection_update_large rbset 10000 0.935685 0.945105 0.94097 0.9399794 -intersection_update_large blist.sortedset 100 0.00136500000008 0.00140600000032 0.00136500000008 0.00137480000012 -intersection_update_large blist.sortedset 1000 0.0188990000001 0.0189700000001 0.0189220000002 0.0189258 -intersection_update_large blist.sortedset 10000 0.262357 0.274102 0.262357 0.2647878 -intersection_update_large banyan.SortedSet 100 4.39999998889e-05 4.6999999995e-05 4.39999998889e-05 4.52000000223e-05 -intersection_update_large banyan.SortedSet 1000 0.000288000000182 0.000291000000288 0.00028999999995 0.000289600000087 -intersection_update_large banyan.SortedSet 10000 0.00266199999987 0.00275800000009 0.00266499999998 0.00270040000005 -intersection_update_large banyan.SortedSet 100000 0.0313639999999 0.0318979999997 0.0314499999999 0.0316526 -intersection_update_large banyan.SortedSet 1000000 0.333497 0.360532 0.336769 0.3410294 -symmetric_difference_tiny SortedSet 100 1.39999997373e-05 1.59999999596e-05 1.4000000192e-05 1.46000000314e-05 -symmetric_difference_tiny SortedSet 1000 4.39999998889e-05 4.50000002274e-05 4.50000002274e-05 4.42000001385e-05 -symmetric_difference_tiny SortedSet 10000 0.000430999999935 0.000456000000213 0.000431999999819 0.000440200000048 -symmetric_difference_tiny SortedSet 100000 0.00463799999989 0.00510499999973 0.00466899999992 0.00475200000001 -symmetric_difference_tiny SortedSet 1000000 0.0774139999999 0.0884590000001 0.078262 0.0809704 -symmetric_difference_tiny rbset 100 6.80000002831e-05 7.00000000506e-05 6.89999997121e-05 6.88000000082e-05 -symmetric_difference_tiny rbset 1000 0.00076799999988 0.000770000000102 0.000769000000219 0.000769000000128 -symmetric_difference_tiny rbset 10000 0.00864000000001 0.00887400000011 0.00864000000001 0.0087465999999 -symmetric_difference_tiny rbset 100000 0.098442 0.0997830000001 0.0991090000002 0.0992650000001 -symmetric_difference_tiny rbset 1000000 1.098812 1.124073 1.098996 1.1074434 -symmetric_difference_tiny blist.sortedset 100 0.00145699999985 0.0015099999996 0.00145699999985 0.00146839999979 -symmetric_difference_tiny blist.sortedset 1000 0.0199890000004 0.0204899999999 0.0200089999998 0.0201340000001 -symmetric_difference_tiny blist.sortedset 10000 0.281511 0.29189 0.29189 0.2855988 -symmetric_difference_tiny banyan.SortedSet 100 2.70000000455e-05 3.00000001516e-05 2.79999999293e-05 2.83999999738e-05 -symmetric_difference_tiny banyan.SortedSet 1000 0.000182999999652 0.000186000000213 0.000186000000213 0.000184999999965 -symmetric_difference_tiny banyan.SortedSet 10000 0.00174500000003 0.00177399999984 0.00174500000003 0.00176059999994 -symmetric_difference_tiny banyan.SortedSet 100000 0.0192630000001 0.0210959999999 0.0201940000002 0.019943 -symmetric_difference_tiny banyan.SortedSet 1000000 0.195273 0.217959 0.211744 0.2094066 -symmetric_difference_small SortedSet 100 1.4000000192e-05 1.69999998434e-05 1.59999999596e-05 1.57999999828e-05 -symmetric_difference_small SortedSet 1000 4.6999999995e-05 4.89999997626e-05 4.79999998788e-05 4.79999999698e-05 -symmetric_difference_small SortedSet 10000 0.000379000000066 0.000390000000152 0.000390000000152 0.000382600000012 -symmetric_difference_small SortedSet 100000 0.00417300000026 0.00490099999979 0.00417300000026 0.00444500000012 -symmetric_difference_small SortedSet 1000000 0.0821900000001 0.0928709999998 0.0922129999999 0.0882549999999 -symmetric_difference_small rbset 100 6.60000000607e-05 7.00000000506e-05 6.79999998283e-05 6.8199999896e-05 -symmetric_difference_small rbset 1000 0.00212199999987 0.00221800000008 0.00212199999987 0.0021553999999 -symmetric_difference_small rbset 10000 0.160513 0.161067 0.16078 0.1607266 -symmetric_difference_small blist.sortedset 100 0.00145900000007 0.0031399999998 0.0031399999998 0.0020129999999 -symmetric_difference_small blist.sortedset 1000 0.0201910000001 0.0202400000003 0.0202020000002 0.0202188 -symmetric_difference_small blist.sortedset 10000 0.28403 0.300492 0.300492 0.291589 -symmetric_difference_small banyan.SortedSet 100 2.89999998131e-05 3.10000000354e-05 2.89999998131e-05 2.93999999485e-05 -symmetric_difference_small banyan.SortedSet 1000 0.000210000000152 0.000214000000142 0.000210000000152 0.000211800000034 -symmetric_difference_small banyan.SortedSet 10000 0.00177499999972 0.00178400000004 0.00178400000004 0.00177940000003 -symmetric_difference_small banyan.SortedSet 100000 0.0177629999998 0.0183010000001 0.0178029999997 0.0178972 -symmetric_difference_small banyan.SortedSet 1000000 0.186604 0.208383 0.208383 0.1987256 -symmetric_difference_medium SortedSet 100 1.4000000192e-05 1.70000002981e-05 1.4000000192e-05 1.480000019e-05 -symmetric_difference_medium SortedSet 1000 5.00000001011e-05 5.19999998687e-05 5.19999998687e-05 5.11999999617e-05 -symmetric_difference_medium SortedSet 10000 0.000449000000117 0.000459999999748 0.000453999999991 0.000453599999946 -symmetric_difference_medium SortedSet 100000 0.00449500000013 0.00537200000008 0.00481999999965 0.00482979999997 -symmetric_difference_medium SortedSet 1000000 0.059694 0.0607349999996 0.0599309999998 0.0601681999999 -symmetric_difference_medium rbset 100 9.89999998637e-05 0.00010199999997 9.89999998637e-05 9.97999999527e-05 -symmetric_difference_medium rbset 1000 0.00658599999997 0.00660200000038 0.00658599999997 0.00659240000005 -symmetric_difference_medium rbset 10000 0.616029 0.620085 0.620085 0.617503 -symmetric_difference_medium blist.sortedset 100 0.001397 0.00142400000004 0.00140099999999 0.00140479999991 -symmetric_difference_medium blist.sortedset 1000 0.0185939999997 0.0187040000001 0.0186370000001 0.01864 -symmetric_difference_medium blist.sortedset 10000 0.257404 0.26229 0.25845 0.2588898 -symmetric_difference_medium banyan.SortedSet 100 2.49999998232e-05 2.60000001617e-05 2.5999999707e-05 2.55999999354e-05 -symmetric_difference_medium banyan.SortedSet 1000 0.000147000000197 0.000148999999965 0.000148999999965 0.000148200000058 -symmetric_difference_medium banyan.SortedSet 10000 0.00130600000011 0.00136400000019 0.00130600000011 0.00132300000014 -symmetric_difference_medium banyan.SortedSet 100000 0.014537 0.0168100000001 0.0146060000002 0.0150224 -symmetric_difference_medium banyan.SortedSet 1000000 0.161787 0.17551 0.16928 0.169559 -symmetric_difference_large SortedSet 100 1.59999999596e-05 1.80000001819e-05 1.59999999596e-05 1.68000001395e-05 -symmetric_difference_large SortedSet 1000 7.40000000405e-05 7.80000000304e-05 7.49999999243e-05 7.56000000365e-05 -symmetric_difference_large SortedSet 10000 0.000561999999718 0.000578000000132 0.00056399999994 0.000566199999957 -symmetric_difference_large SortedSet 100000 0.00740900000028 0.00756599999977 0.00756599999977 0.00747000000001 -symmetric_difference_large SortedSet 1000000 0.129519 0.158606 0.131655 0.1434316 -symmetric_difference_large rbset 100 0.000150999999732 0.000183000000106 0.000179000000117 0.000169000000005 -symmetric_difference_large rbset 1000 0.0101689999997 0.0102069999998 0.0101709999999 0.0101891999999 -symmetric_difference_large rbset 10000 0.940542 0.949647 0.945388 0.9446884 -symmetric_difference_large blist.sortedset 100 0.00224800000024 0.00227399999994 0.00225399999999 0.00225719999999 -symmetric_difference_large blist.sortedset 1000 0.0308819999996 0.0312039999999 0.0309190000003 0.0310035999999 -symmetric_difference_large blist.sortedset 10000 0.431095 0.435263 0.435263 0.4326316 -symmetric_difference_large banyan.SortedSet 100 3.49999995706e-05 3.70000002476e-05 3.50000000253e-05 3.57999999324e-05 -symmetric_difference_large banyan.SortedSet 1000 0.000266999999894 0.000286000000415 0.000268000000233 0.000273200000083 -symmetric_difference_large banyan.SortedSet 10000 0.00231900000017 0.00236600000017 0.00233299999991 0.00233340000004 -symmetric_difference_large banyan.SortedSet 100000 0.0243300000002 0.0259659999997 0.0243300000002 0.0247386 -symmetric_difference_large banyan.SortedSet 1000000 0.26465 0.293395 0.26465 0.2815556 -symmetric_difference_update_tiny SortedSet 100 7.9999999798e-06 9.00000031834e-06 8.00000043455e-06 8.40000011522e-06 -symmetric_difference_update_tiny SortedSet 1000 2.5999999707e-05 2.70000000455e-05 2.5999999707e-05 2.63999999333e-05 -symmetric_difference_update_tiny SortedSet 10000 0.000207000000046 0.000210999999581 0.000210999999581 0.000208399999883 -symmetric_difference_update_tiny SortedSet 100000 0.00209899999982 0.00227800000039 0.00209899999982 0.00214940000005 -symmetric_difference_update_tiny SortedSet 1000000 0.0372990000001 0.0390130000001 0.0387929999997 0.0384233999999 -symmetric_difference_update_tiny blist.sortedset 100 0.000120000000152 0.000123000000258 0.000123000000258 0.000121200000012 -symmetric_difference_update_tiny blist.sortedset 1000 0.000156999999945 0.000160000000051 0.000160000000051 0.000158199999896 -symmetric_difference_update_tiny blist.sortedset 10000 0.000214000000142 0.000250000000051 0.000216000000364 0.000224000000071 -symmetric_difference_update_tiny banyan.SortedSet 100 5.19999998687e-05 5.30000002072e-05 5.20000003235e-05 5.24000000041e-05 -symmetric_difference_update_tiny banyan.SortedSet 1000 0.000384000000395 0.000388999999814 0.000388999999814 0.000387000000046 -symmetric_difference_update_tiny banyan.SortedSet 10000 0.00344900000027 0.00346099999979 0.00346099999979 0.00345360000001 -symmetric_difference_update_tiny banyan.SortedSet 100000 0.037988 0.0418600000003 0.0408910000001 0.0402738000002 -symmetric_difference_update_tiny banyan.SortedSet 1000000 0.432661 0.473455 0.432661 0.4477918 -symmetric_difference_update_small SortedSet 100 7.9999999798e-06 1.00000002021e-05 7.9999999798e-06 8.60000000102e-06 -symmetric_difference_update_small SortedSet 1000 2.89999998131e-05 3.10000000354e-05 3.00000001516e-05 2.99999998788e-05 -symmetric_difference_update_small SortedSet 10000 0.000230000000101 0.000250999999935 0.000250999999935 0.00023540000002 -symmetric_difference_update_small SortedSet 100000 0.00241199999982 0.00244499999962 0.00241800000003 0.00242679999992 -symmetric_difference_update_small SortedSet 1000000 0.0392959999999 0.0438199999999 0.0398030000001 0.0408286 -symmetric_difference_update_small blist.sortedset 100 0.000120000000152 0.000122000000374 0.000121999999919 0.000121000000127 -symmetric_difference_update_small blist.sortedset 1000 0.00162599999976 0.00162899999987 0.00162899999987 0.00162799999989 -symmetric_difference_update_small blist.sortedset 10000 0.0234820000001 0.0245500000001 0.0234820000001 0.0238244000001 -symmetric_difference_update_small banyan.SortedSet 100 5.09999999849e-05 5.39999996363e-05 5.20000003235e-05 5.25999998899e-05 -symmetric_difference_update_small banyan.SortedSet 1000 0.000354000000243 0.000356000000011 0.000354000000243 0.000354799999968 -symmetric_difference_update_small banyan.SortedSet 10000 0.0032540000002 0.00330000000031 0.0032970000002 0.00327600000019 -symmetric_difference_update_small banyan.SortedSet 100000 0.035531 0.0360950000004 0.03566 0.0357598000001 -symmetric_difference_update_small banyan.SortedSet 1000000 0.390532 0.444939 0.390532 0.4275476 -symmetric_difference_update_medium SortedSet 100 9.99999974738e-06 1.19999999697e-05 1.19999999697e-05 1.0999999995e-05 -symmetric_difference_update_medium SortedSet 1000 4.10000002375e-05 5.00000001011e-05 4.30000000051e-05 4.44000000243e-05 -symmetric_difference_update_medium SortedSet 10000 0.000332999999955 0.000338000000284 0.000332999999955 0.000334600000042 -symmetric_difference_update_medium SortedSet 100000 0.00360499999988 0.00438100000019 0.00387099999989 0.00395040000003 -symmetric_difference_update_medium SortedSet 1000000 0.0448269999997 0.0526359999999 0.0526359999999 0.0494469999999 -symmetric_difference_update_medium blist.sortedset 100 0.000613000000158 0.000616000000264 0.000614999999925 0.000615000000016 -symmetric_difference_update_medium blist.sortedset 1000 0.00871400000005 0.00877000000037 0.00875199999973 0.00874080000003 -symmetric_difference_update_medium blist.sortedset 10000 0.129504 0.134068 0.130358 0.1307182 -symmetric_difference_update_medium banyan.SortedSet 100 4.09999997828e-05 4.39999998889e-05 4.19999996666e-05 4.2399999893e-05 -symmetric_difference_update_medium banyan.SortedSet 1000 0.000267999999778 0.000270999999884 0.000268999999662 0.000269399999888 -symmetric_difference_update_medium banyan.SortedSet 10000 0.00248499999998 0.00252 0.00248499999998 0.00250260000003 -symmetric_difference_update_medium banyan.SortedSet 100000 0.0302299999998 0.0311609999999 0.0305139999996 0.0307015999998 -symmetric_difference_update_medium banyan.SortedSet 1000000 0.292316 0.322988 0.312055 0.3075776 -symmetric_difference_update_large SortedSet 100 1.29999998535e-05 2.39999999394e-05 1.30000003082e-05 1.54000001203e-05 -symmetric_difference_update_large SortedSet 1000 6.20000000708e-05 7.40000000405e-05 6.20000000708e-05 6.46000000415e-05 -symmetric_difference_update_large SortedSet 10000 0.000529999999799 0.000554000000193 0.000532999999905 0.000540400000045 -symmetric_difference_update_large SortedSet 100000 0.00625300000002 0.00706899999977 0.006351 0.00645699999995 -symmetric_difference_update_large SortedSet 1000000 0.098512 0.113411 0.0987110000001 0.1042214 -symmetric_difference_update_large blist.sortedset 100 0.00121200000012 0.00121499999977 0.00121200000012 0.00121319999998 -symmetric_difference_update_large blist.sortedset 1000 0.0175220000001 0.017664 0.0176110000002 0.0175864000001 -symmetric_difference_update_large blist.sortedset 10000 0.260753 0.276564 0.264573 0.2655532 -symmetric_difference_update_large banyan.SortedSet 100 5.69999997424e-05 6.10000001871e-05 5.80000000809e-05 5.86000000112e-05 -symmetric_difference_update_large banyan.SortedSet 1000 0.000463000000309 0.000484000000142 0.000467000000299 0.000469400000111 -symmetric_difference_update_large banyan.SortedSet 10000 0.0038770000001 0.00391300000001 0.00387899999987 0.0038896 -symmetric_difference_update_large banyan.SortedSet 100000 0.0457030000002 0.045967 0.0458700000004 0.0458428000002 -symmetric_difference_update_large banyan.SortedSet 1000000 0.444466 0.504063 0.476671 0.481671 -pop SortedSet 100 3.00000010611e-06 4.00000044465e-06 3.00000010611e-06 3.59999994544e-06 -pop SortedSet 1000 1.29999998535e-05 1.4000000192e-05 1.4000000192e-05 1.36000002385e-05 -pop SortedSet 10000 0.000111999999717 0.000114999999823 0.000113000000056 0.000113599999895 -pop SortedSet 100000 0.00111399999969 0.00113500000043 0.00111599999946 0.00112079999999 -pop SortedSet 1000000 0.0109759999996 0.0113799999999 0.0109759999996 0.0111529999998 -pop rbset 100 1.00000033854e-06 3.00000010611e-06 3.00000010611e-06 2.40000008489e-06 -pop rbset 1000 1.4000000192e-05 1.50000005306e-05 1.49999996211e-05 1.46000000314e-05 -pop rbset 10000 0.000141999999869 0.000143000000207 0.000143000000207 0.00014259999989 -pop rbset 100000 0.00163500000053 0.00166600000011 0.0016370000003 0.00164780000014 -pop rbset 1000000 0.0178550000001 0.0183509999997 0.0183509999997 0.0180760000001 -pop blist.sortedset 100 1.99999976758e-06 3.00000010611e-06 1.99999976758e-06 2.20000001718e-06 -pop blist.sortedset 1000 1.1999999515e-05 1.4000000192e-05 1.29999998535e-05 1.31999997393e-05 -pop blist.sortedset 10000 0.000119000000268 0.000125999999909 0.000121000000036 0.000121400000171 -pop blist.sortedset 100000 0.00124300000061 0.00131400000009 0.00129699999979 0.00127360000006 -pop blist.sortedset 1000000 0.013449 0.0137800000002 0.0137800000002 0.0135966000002 -pop SkipListSet 100 6.99999964127e-06 9.00000031834e-06 6.99999964127e-06 7.9999997979e-06 -pop SkipListSet 1000 5.1999999414e-05 5.59999998586e-05 5.4000000091e-05 5.35999999556e-05 -pop SkipListSet 10000 0.000514000000294 0.000533999999789 0.000515999999152 0.000522199999978 -pop SkipListSet 100000 0.00545599999987 0.00597199999993 0.00545599999987 0.00572859999993 -pop SkipListSet 1000000 0.060383 0.0632139999998 0.0615459999999 0.0616523999999 -pop banyan.SortedSet 100 9.99999429041e-07 3.00000010611e-06 9.99999429041e-07 1.99999994948e-06 -pop banyan.SortedSet 1000 3.00000010611e-06 4.00000044465e-06 4.00000044465e-06 3.40000005963e-06 -pop banyan.SortedSet 10000 1.59999999596e-05 1.70000002981e-05 1.59999999596e-05 1.65999999808e-05 -pop banyan.SortedSet 100000 0.000163000000612 0.000167999999576 0.00016499999947 0.000165000000015 -pop banyan.SortedSet 1000000 0.00152799999978 0.00160600000072 0.00160600000072 0.0015628000001 -init SortedSet 100 1.10000000859e-05 1.29999998535e-05 1.10000000859e-05 1.20000000607e-05 -init SortedSet 1000 5.29999997525e-05 5.4000000091e-05 5.3000000662e-05 5.34000000698e-05 -init SortedSet 10000 0.000605000000178 0.000630999999885 0.000608000000284 0.000611199999912 -init SortedSet 100000 0.00874099999965 0.00932499999999 0.00912000000062 0.00905880000009 -init SortedSet 1000000 0.169319 0.199726 0.169685 0.180128 -init rbset 100 3.10000004902e-05 3.30000002577e-05 3.29999993482e-05 3.23999998727e-05 -init rbset 1000 0.000399000000471 0.000401999999667 0.000399000000471 0.000400600000103 -init rbset 10000 0.00528899999972 0.00554000000011 0.00554000000011 0.0053751999998 -init rbset 100000 0.075562 0.0924109999996 0.0755829999998 0.0790757999997 -init rbset 1000000 1.559733 1.603022 1.578649 1.5834208 -init blist.sortedset 100 0.00125099999968 0.00127900000007 0.00125300000036 0.0012616 -init blist.sortedset 1000 0.017922 0.0180479999999 0.0179740000003 0.0179797999999 -init blist.sortedset 10000 0.278244 0.278742 0.278428 0.2784718 -init blist.sortedset 100000 3.812856 3.856099 3.835528 3.841837 -init banyan.SortedSet 100 5.4000000091e-05 6.20000000708e-05 5.4000000091e-05 5.62000001082e-05 -init banyan.SortedSet 1000 0.000481000000036 0.000486000000819 0.000482999999804 0.0004828000001 -init banyan.SortedSet 10000 0.00522600000022 0.00527800000054 0.00522600000022 0.00524260000002 -init banyan.SortedSet 100000 0.06718 0.0730000000003 0.0679110000001 0.069498 -init banyan.SortedSet 1000000 0.879876999999 0.970159 0.953533 0.9331142 +contains SortedSet 100 2.000000000279556e-06 2.9999999995311555e-06 2.000000000279556e-06 2.2000000001298757e-06 +contains SortedSet 1000 4.000000000559112e-06 4.999999999810711e-06 4.999999999810711e-06 4.600000000110072e-06 +contains SortedSet 10000 1.799999999896329e-05 1.9999999999242846e-05 1.8999999999991246e-05 1.8999999999635973e-05 +contains SortedSet 100000 0.00022799999999989495 0.0003449999999993736 0.0002300000000001745 0.0002521999999999025 +contains SortedSet 1000000 0.0032149999999990797 0.0036629999999995277 0.003470000000000084 0.0034489999999998133 +contains B-Tree 100 6.000000002615025e-06 7.000000000090267e-06 7.000000000090267e-06 6.800000000595219e-06 +contains B-Tree 1000 5.699999999819738e-05 6.000000000128125e-05 5.799999999922534e-05 5.839999999963652e-05 +contains B-Tree 10000 0.0006899999999987472 0.0008209999999984063 0.0007300000000007856 0.0007446000000001618 +contains B-Tree 100000 0.008764999999996803 0.009173999999994464 0.008969999999997924 0.008980599999997452 +contains B-Tree 1000000 0.11045100000001185 0.11808599999997682 0.11118700000002946 0.11246920000000955 +contains RB-Tree 100 2.999999992425728e-06 3.999999989900971e-06 3.000000049269147e-06 3.400000002784509e-06 +contains RB-Tree 1000 5.999999984851456e-06 7.000000039170118e-06 5.999999984851456e-06 6.200000007083872e-06 +contains RB-Tree 10000 4.200000000764703e-05 4.400000000259752e-05 4.3000000005122274e-05 4.280000000562722e-05 +contains RB-Tree 100000 0.0012120000000095388 0.0014770000000225991 0.0013100000000463297 0.001325800000029176 +contains RB-Tree 1000000 0.016548999999997704 0.01824800000002824 0.016623000000038246 0.017103800000006684 +contains Skip-List 100 5.999999984851456e-06 7.999999979801942e-06 6.999999982326699e-06 6.999999993695383e-06 +contains Skip-List 1000 4.3000000005122274e-05 4.899999998997373e-05 4.5999999997548e-05 4.5999999997548e-05 +contains Skip-List 10000 0.000536999999951604 0.0005869999999958964 0.0005510000000299442 0.0005574000000024171 +contains Skip-List 100000 0.007157000000006519 0.008127000000001772 0.007705000000044038 0.007621000000017375 +contains Skip-List 1000000 0.10534099999995306 0.11495100000001912 0.10926900000004025 0.10997820000000047 +iter SortedSet 100 9.999999974752427e-06 1.2000000026546331e-05 1.2000000026546331e-05 1.120000000582877e-05 +iter SortedSet 1000 9.000000000014552e-05 0.0001330000000052678 9.299999999257125e-05 0.00010059999999612046 +iter SortedSet 10000 0.0009110000000305263 0.0010359999999991487 0.0009210000000052787 0.0009444000000030428 +iter SortedSet 100000 0.009213000000045213 0.009515999999962332 0.009326999999984764 0.009343599999988328 +iter SortedSet 1000000 0.09405099999997901 0.0991989999999987 0.09441399999997202 0.0954723999999942 +iter B-Tree 100 0.00010199999996984843 0.00016499999998131898 0.00010299999996732367 0.00011519999998199637 +iter B-Tree 1000 0.0010580000000004475 0.001102000000003045 0.0010609999999928732 0.0010733999999956723 +iter B-Tree 10000 0.010875999999996111 0.015094000000033247 0.010964000000001306 0.011814400000002934 +iter B-Tree 100000 0.10858899999999494 0.11451999999997042 0.11185599999998885 0.11155679999998255 +iter B-Tree 1000000 1.0608140000000503 1.1194560000000138 1.087900999999988 1.0867148000000042 +iter RB-Tree 100 9.999999974752427e-06 1.099999997222767e-05 1.099999997222767e-05 1.059999999597494e-05 +iter RB-Tree 1000 8.900000000267028e-05 9.000000000014552e-05 8.900000000267028e-05 8.940000000166038e-05 +iter RB-Tree 10000 0.0008980000000065047 0.0009380000000192013 0.0009009999999989304 0.0009111999999959153 +iter RB-Tree 100000 0.009372999999982312 0.009666000000038366 0.009447000000022854 0.009491800000000694 +iter RB-Tree 1000000 0.09401600000001054 0.09838999999999487 0.09471700000005967 0.09527199999999994 +iter Skip-List 100 3.700000002027082e-05 3.90000000152213e-05 3.800000001774606e-05 3.780000001825101e-05 +iter Skip-List 1000 0.000325999999972737 0.00040500000000065484 0.00032699999997021223 0.0003423999999995431 +iter Skip-List 10000 0.003308000000060929 0.0034530000000358996 0.003309000000058404 0.0033562000000529222 +iter Skip-List 100000 0.0464759999999842 0.050266999999962536 0.0480329999999185 0.04798879999998462 +iter Skip-List 1000000 0.5166499999999132 0.5407949999998891 0.5282799999999952 0.5279643999999507 +add SortedSet 100 3.999999989900971e-06 7.000000096013537e-06 4.9999999873762135e-06 5.400000009103678e-06 +add SortedSet 1000 2.3999999939405825e-05 2.4999999936881068e-05 2.4000000053092663e-05 2.4200000007112975e-05 +add SortedSet 10000 0.0002119999999194988 0.00025600000003578316 0.0002139999999144493 0.0002223999999841908 +add SortedSet 100000 0.002307999999970889 0.002447000000074695 0.0023280000000340806 0.0023458000000346146 +add SortedSet 1000000 0.024850000000014916 0.025578999999993357 0.025171000000000276 0.025186200000007375 +add B-Tree 100 1.099999997222767e-05 1.200000008338975e-05 1.1999999969702912e-05 1.1599999993450183e-05 +add B-Tree 1000 0.00011800000004313915 0.00012300000003051537 0.00012000000003808964 0.00012060000003657478 +add B-Tree 10000 0.0017010000000254877 0.00179800000000796 0.0017090000000052896 0.0017332000000124027 +add RB-Tree 100 1.9999999949504854e-06 2.999999992425728e-06 1.9999999949504854e-06 2.3999999939405824e-06 +add RB-Tree 1000 4.9999999873762135e-06 7.000000096013537e-06 5.999999984851456e-06 6.000000007588824e-06 +add RB-Tree 10000 4.200000000764703e-05 4.500000000007276e-05 4.3000000005122274e-05 4.340000000411237e-05 +add RB-Tree 100000 0.0005620000000590153 0.0006919999999581705 0.0005720000000337677 0.0005959999999959109 +add RB-Tree 1000000 0.007778999999914049 0.008284000000003289 0.00795899999991434 0.007968199999959324 +add Skip-List 100 7.999999979801942e-06 8.999999977277184e-06 8.00000009348878e-06 8.400000001529407e-06 +add Skip-List 1000 5.3999999977349944e-05 5.699999996977567e-05 5.499999997482519e-05 5.499999999756255e-05 +add Skip-List 10000 0.0005890000001045337 0.0014800000000150249 0.0006419999999707215 0.0008110000000215223 +add Skip-List 100000 0.007175999999958549 0.008207999999967797 0.007342999999991662 0.007506799999987379 +add Skip-List 1000000 0.08673399999997855 0.09074799999984862 0.08722899999997935 0.08826099999992039 +update_tiny SortedSet 100 1.7000000070765964e-05 1.9999999949504854e-05 1.799999995455437e-05 1.820000002226152e-05 +update_tiny SortedSet 1000 1.8999999838342774e-05 2.000000017687853e-05 1.9999999949504854e-05 1.9600000041464227e-05 +update_tiny SortedSet 10000 2.000000017687853e-05 2.700000004551839e-05 2.199999994445534e-05 2.2400000034394907e-05 +update_tiny SortedSet 100000 3.299999980299617e-05 3.700000002027082e-05 3.500000002532033e-05 3.49999999798456e-05 +update_tiny SortedSet 1000000 4.399999988891068e-05 5.0999999984924216e-05 4.8000000106185325e-05 4.760000001624576e-05 +update_tiny B-Tree 100 0.00012400000014167745 0.00015499999994972313 0.00012999999989915523 0.0001332000000275002 +update_tiny B-Tree 1000 0.00017099999990932702 0.00017800000000534055 0.0001720000000204891 0.0001730000000407017 +update_tiny B-Tree 10000 0.00023499999997511622 0.000279999999975189 0.00026800000000548607 0.0002577999999630265 +update_tiny B-Tree 100000 0.0003010000000358559 0.0003530000001319422 0.0003150000000005093 0.0003222000000278058 +update_tiny B-Tree 1000000 0.00038500000005115 0.00041800000008151983 0.00041200000009666837 0.00040780000003906027 +update_tiny RB-Tree 100 4.899999998997373e-05 5.0999999984924216e-05 4.9999999873762135e-05 4.999999996471161e-05 +update_tiny RB-Tree 1000 0.00037699999984397436 0.0005129999999553547 0.00037799999995513645 0.0004049999999551801 +update_tiny RB-Tree 10000 0.003967999999986205 0.004423999999971784 0.004048000000011598 0.004159799999979441 +update_tiny RB-Tree 100000 0.047702000000072076 0.049500999999963824 0.049015999999937776 0.04877080000001115 +update_tiny RB-Tree 1000000 0.46235599999999977 0.4755729999999403 0.470154999999977 0.46925460000002206 +update_small SortedSet 100 2.199999994445534e-05 2.300000005561742e-05 2.2999999828243745e-05 2.2599999965677853e-05 +update_small SortedSet 1000 0.00015199999984361057 0.00015699999994467362 0.00015299999995477265 0.00015339999999923747 +update_small SortedSet 10000 0.0015650000000277942 0.0015919999998459389 0.0015670000000227446 0.0015723999999863736 +update_small SortedSet 100000 0.015463000000181637 0.015683000000080938 0.015489999999999782 0.015554600000086793 +update_small SortedSet 1000000 0.19509799999991628 0.20624399999996967 0.19710299999997005 0.19852959999998349 +update_small B-Tree 100 0.00012200000014672696 0.0001459999998587591 0.00012399999991430377 0.00013199999998505518 +update_small B-Tree 1000 0.0018239999999423162 0.0019280000001344888 0.0018979999999828578 0.0018804000000272937 +update_small B-Tree 10000 0.027002999999922395 0.028145999999878768 0.027419000000008964 0.027599799999916286 +update_small B-Tree 100000 0.3513749999999618 0.35481800000002295 0.3522880000000441 0.3527370000000246 +update_small B-Tree 1000000 4.6405630000001565 4.652679999999918 4.650622999999996 4.649068400000033 +update_small RB-Tree 100 4.9999999873762135e-05 5.400000009103678e-05 5.29999999798747e-05 5.2000000005136825e-05 +update_small RB-Tree 1000 0.0004089999999905558 0.0004360000000360742 0.0004119999998692947 0.00041599999999561985 +update_small RB-Tree 10000 0.004045999999789274 0.004125999999814667 0.00409100000001672 0.004082599999946979 +update_small RB-Tree 100000 0.051433999999972 0.053523000000041066 0.05223399999999856 0.05232660000001488 +update_small RB-Tree 1000000 0.49602600000002894 0.5112269999999626 0.5027729999999337 0.5039444000000003 +update_medium SortedSet 100 1.3000000080864993e-05 1.4000000192027073e-05 1.3999999964653398e-05 1.3600000102087506e-05 +update_medium SortedSet 1000 6.299999995462713e-05 6.499999994957761e-05 6.399999983841553e-05 6.3999999929365e-05 +update_medium SortedSet 10000 0.0004899999998997373 0.0004979999998795392 0.0004910000000108994 0.000492599999961385 +update_medium SortedSet 100000 0.0052430000000640575 0.005493000000114989 0.005319999999983338 0.005342200000040975 +update_medium SortedSet 1000000 0.10835900000006404 0.5456070000000182 0.11003899999991518 0.19707640000001447 +update_medium B-Tree 100 0.000647999999955573 0.0006539999999404245 0.0006539999999404245 0.0006515999999464839 +update_medium B-Tree 1000 0.010441000000128042 0.01347699999996621 0.010590000000092914 0.011581600000045 +update_medium B-Tree 10000 0.14868400000000292 0.14996900000005553 0.14947400000005473 0.14938940000006368 +update_medium RB-Tree 100 6.299999995462713e-05 6.599999983336602e-05 6.400000006578921e-05 6.419999995159742e-05 +update_medium RB-Tree 1000 0.0005370000001221342 0.0005400000000008731 0.0005390000001170847 0.0005390000000261352 +update_medium RB-Tree 10000 0.005325000000084401 0.005447999999887543 0.005392000000028929 0.005386600000019825 +update_medium RB-Tree 100000 0.0660360000001674 0.06919199999992998 0.06638900000007197 0.06732080000001588 +update_medium RB-Tree 1000000 0.661487999999963 0.6764310000000933 0.671730000000025 0.6707552000000305 +update_large SortedSet 100 1.5000000075815478e-05 1.900000006571645e-05 1.600000018697756e-05 1.6600000071775868e-05 +update_large SortedSet 1000 8.200000002034358e-05 8.400000001529406e-05 8.300000013150566e-05 8.28000000637985e-05 +update_large SortedSet 10000 0.0007809999999608408 0.0008479999999053689 0.0007829999999557913 0.0008010000000012951 +update_large SortedSet 100000 0.010771000000204367 0.011015999999926862 0.010956000000078348 0.010905200000024706 +update_large SortedSet 1000000 0.1521610000002056 0.16931799999997565 0.153966999999966 0.15957620000003772 +update_large B-Tree 100 0.001234000000067681 0.0012389999999413703 0.0012360000000626314 0.0012361999999939144 +update_large B-Tree 1000 0.01999500000010812 0.020332000000053085 0.02010500000005777 0.0201164000000972 +update_large B-Tree 10000 0.28083200000014585 0.28358699999989767 0.2826469999999972 0.2821830000000318 +update_large RB-Tree 100 7.499999992433004e-05 7.699999991928053e-05 7.500000015170372e-05 7.559999999102729e-05 +update_large RB-Tree 1000 0.0006579999999303254 0.0007020000000466098 0.0006640000001425506 0.0006774000000405068 +update_large RB-Tree 10000 0.006699999999909778 0.006863999999950465 0.006719000000202868 0.006753399999979592 +update_large RB-Tree 100000 0.0815149999998539 0.08432799999991403 0.0825640000000476 0.08287499999992179 +update_large RB-Tree 1000000 0.8479379999998855 0.8818150000001879 0.8664450000001125 0.8628140000000257 +union_tiny SortedSet 100 2.40000001667795e-05 2.700000004551839e-05 2.5000000050567905e-05 2.5400000049558e-05 +union_tiny SortedSet 1000 6.60000000607397e-05 7.70000001466542e-05 6.800000005569018e-05 6.920000005266047e-05 +union_tiny SortedSet 10000 0.0005370000001221342 0.0005670000000463915 0.0005400000000008731 0.0005450000000109867 +union_tiny SortedSet 100000 0.006634000000076412 0.0067309999999451975 0.006687999999940075 0.006688599999961298 +union_tiny SortedSet 1000000 0.09946400000012545 0.11046799999985524 0.10025599999994483 0.10247480000002725 +union_tiny B-Tree 100 0.00012500000002546585 0.00012900000001536682 0.00012600000013662793 0.00012660000006690098 +union_tiny B-Tree 1000 0.00017400000001543958 0.00017500000012660166 0.000174999999899228 0.00017479999996794504 +union_tiny B-Tree 10000 0.00023400000009132782 0.0003040000001419685 0.00024400000006608025 0.00025580000005902547 +union_tiny B-Tree 100000 0.00030600000013691897 0.00033799999982875306 0.00031300000000555883 0.0003181999999924301 +union_tiny B-Tree 1000000 0.00042500000017753337 0.0012279999998554558 0.00044100000013713725 0.0005994000000555388 +union_tiny RB-Tree 100 2.89999998130952e-05 3.100000003541936e-05 3.0000000151630957e-05 3.0000000060681485e-05 +union_tiny RB-Tree 1000 0.00020700000004580943 0.00020899999981338624 0.00020700000004580943 0.00020739999999932479 +union_tiny RB-Tree 10000 0.001983000000109314 0.0020140000001447333 0.002001000000291242 0.0019998000000668982 +union_tiny RB-Tree 100000 0.024570000000039727 0.02521999999999025 0.024913000000196917 0.02487620000001698 +union_tiny RB-Tree 1000000 0.237297000000126 0.25068499999997584 0.24381300000004558 0.24355139999997846 +union_small SortedSet 100 2.2000000171829015e-05 2.7999999929306796e-05 2.300000005561742e-05 2.4000000030355297e-05 +union_small SortedSet 1000 7.499999992433004e-05 7.899999991423101e-05 7.60000002628658e-05 7.679999998799758e-05 +union_small SortedSet 10000 0.0006100000000515138 0.0006290000001172302 0.0006120000002738379 0.0006162000001495472 +union_small SortedSet 100000 0.007397000000310072 0.007536999999956606 0.007462000000032276 0.00746980000012627 +union_small SortedSet 1000000 0.12457900000026711 0.1396719999997913 0.1268129999998564 0.12866980000007971 +union_small B-Tree 100 0.00012599999990925426 0.00016599999980826396 0.00012800000013157842 0.00013680000001841107 +union_small B-Tree 1000 0.0018249999998261046 0.001874000000043452 0.0018319999999221181 0.0018465999998625194 +union_small B-Tree 10000 0.02662800000007337 0.026933000000099128 0.0268620000001647 0.026785200000085753 +union_small B-Tree 100000 0.3512439999999515 0.35628200000019206 0.35291600000027756 0.3535424000000603 +union_small B-Tree 1000000 4.6318850000002385 5.075816999999915 4.643219999999928 4.728089399999954 +union_small RB-Tree 100 2.900000026784255e-05 3.0000000151630957e-05 3.0000000151630957e-05 2.9800000083923807e-05 +union_small RB-Tree 1000 0.00023099999998521525 0.000232000000323751 0.00023199999986900366 0.00023160000000643777 +union_small RB-Tree 10000 0.0022069999999985157 0.002274999999826832 0.002226000000064232 0.002232599999933882 +union_small RB-Tree 100000 0.027413000000251486 0.02807299999994939 0.027418000000125176 0.027564600000005157 +union_small RB-Tree 1000000 0.27102700000023106 0.28414199999997436 0.2775010000000293 0.2772904000000381 +union_medium SortedSet 100 2.500000027794158e-05 3.100000003541936e-05 2.6000000161729986e-05 2.700000004551839e-05 +union_medium SortedSet 1000 0.00010900000006586197 0.00011300000005576294 0.00010999999994965037 0.00011059999997087289 +union_medium SortedSet 10000 0.0008069999998951971 0.000822999999854801 0.0008079999997789855 0.000811399999929563 +union_medium SortedSet 100000 0.01070300000037605 0.010859999999865977 0.010773999999855732 0.010776200000054813 +union_medium SortedSet 1000000 0.19218700000010358 0.20986600000014732 0.193304999999782 0.19629639999993742 +union_medium B-Tree 100 0.0006499999999505235 0.0006560000001627486 0.0006520000001728476 0.0006522000000586559 +union_medium B-Tree 1000 0.010441000000355416 0.010584000000108063 0.010478000000148313 0.010500800000136224 +union_medium B-Tree 10000 0.14852699999983088 0.1591920000000755 0.14972900000020672 0.1513516000000891 +union_medium RB-Tree 100 3.90000000152213e-05 4.099999978279811e-05 4.000000035375706e-05 4.0000000171858116e-05 +union_medium RB-Tree 1000 0.00032000000010157237 0.0003229999997529376 0.0003209999999853608 0.00032119999996211847 +union_medium RB-Tree 10000 0.003141000000141503 0.003321000000141794 0.0031509999998888816 0.0031957999999576714 +union_medium RB-Tree 100000 0.03787300000021787 0.04044500000009066 0.03818700000010722 0.038709600000038334 +union_medium RB-Tree 1000000 0.388054000000011 0.410153000000264 0.39353299999993396 0.398270599999978 +union_large SortedSet 100 2.700000004551839e-05 3.200000037395512e-05 2.8000000384054147e-05 2.8800000200135402e-05 +union_large SortedSet 1000 0.0001330000000052678 0.00013899999976274557 0.0001349999997728446 0.00013559999988501658 +union_large SortedSet 10000 0.0010889999998653366 0.0011429999999563734 0.0010949999996228144 0.001103199999943172 +union_large SortedSet 100000 0.016207000000122207 0.018148000000110187 0.017819000000145024 0.017276200000014796 +union_large SortedSet 1000000 0.2322199999998702 0.2462319999999636 0.23389399999996385 0.23599919999987834 +union_large B-Tree 100 0.001228999999966618 0.0012560000000121363 0.0012420000002748566 0.0012440000001333828 +union_large B-Tree 1000 0.01986399999987043 0.01999599999999191 0.019983000000138418 0.019944799999939276 +union_large B-Tree 10000 0.2812290000001667 0.2842169999998987 0.28178099999968254 0.2821745999999621 +union_large RB-Tree 100 4.6999999995023245e-05 4.8999999762600055e-05 4.799999987881165e-05 4.799999987881165e-05 +union_large RB-Tree 1000 0.0004079999998793937 0.0004129999997530831 0.0004090000002179295 0.00040999999991981896 +union_large RB-Tree 10000 0.004067000000304688 0.0041129999999611755 0.004087000000254193 0.004085200000190525 +union_large RB-Tree 100000 0.047802000000046974 0.04964900000004491 0.04854400000021997 0.04867880000001605 +union_large RB-Tree 1000000 0.5057300000003124 0.5347029999998085 0.5215610000000197 0.5215798000000177 +remove SortedSet 100 3.999999989900971e-06 6.000000212225132e-06 4.999999873689376e-06 4.999999964638846e-06 +remove SortedSet 1000 2.2000000171829015e-05 2.3999999939405825e-05 2.300000005561742e-05 2.299999996466795e-05 +remove SortedSet 10000 0.00020300000005590846 0.00020600000016202102 0.00020500000027823262 0.00020500000018728315 +remove SortedSet 100000 0.002331000000140193 0.0025740000000951113 0.002357000000301923 0.002400200000101904 +remove SortedSet 1000000 0.030451999999968393 0.03168699999969249 0.031133999999838124 0.031148799999937183 +remove B-Tree 100 1.0000000202126103e-05 1.1999999969702912e-05 1.1000000085914508e-05 1.1000000085914508e-05 +remove B-Tree 1000 0.00012699999979304266 0.00012900000001536682 0.00012800000013157842 0.0001277999999729218 +remove B-Tree 10000 0.0019980000001851295 0.002073999999993248 0.0020000000004074536 0.0020152000001871784 +remove RB-Tree 100 1.99999976757681e-06 3.000000106112566e-06 2.000000222324161e-06 2.4000000848900527e-06 +remove RB-Tree 1000 7.000000096013537e-06 7.999999979801942e-06 7.000000096013537e-06 7.400000049528898e-06 +remove RB-Tree 10000 5.800000008093775e-05 8.299999990413198e-05 5.800000008093775e-05 6.300000004557659e-05 +remove RB-Tree 100000 0.0013349999999263673 0.0014169999999467109 0.001390999999784981 0.0013857999999345339 +remove RB-Tree 1000000 0.0201799999999821 0.020976999999675172 0.02074799999991228 0.020686599999953613 +remove Skip-List 100 1.0000000202126103e-05 1.4000000192027073e-05 1.2999999853491317e-05 1.2800000058632577e-05 +remove Skip-List 1000 9.399999999004649e-05 0.00011300000005576294 0.00010199999996984843 0.00010259999999107094 +remove Skip-List 10000 0.001146000000062486 0.001198999999814987 0.0011850000000777072 0.0011794000000008964 +remove Skip-List 100000 0.014880000000175642 0.0154050000001007 0.015192999999726453 0.015135000000009313 +remove Skip-List 1000000 0.19195799999988594 0.21511300000020128 0.1977750000000924 0.2006162000000586 +difference_tiny SortedSet 100 1.4999999621068127e-05 1.5999999959603883e-05 1.5000000075815478e-05 1.5199999870674219e-05 +difference_tiny SortedSet 1000 3.999999989900971e-05 7.499999992433004e-05 4.1000000237545464e-05 4.7799999993003436e-05 +difference_tiny SortedSet 10000 0.0003189999997630366 0.0003229999997529376 0.00032000000010157237 0.00032019999998738057 +difference_tiny SortedSet 100000 0.003283000000010361 0.0041169999999510765 0.003482999999960157 0.003643999999985681 +difference_tiny SortedSet 1000000 0.058492999999998574 0.0710070000000087 0.059509000000161905 0.06271259999994072 +difference_tiny B-Tree 100 0.00010100000008606003 0.00012199999991935329 0.00010300000030838419 0.00010660000007192138 +difference_tiny B-Tree 1000 0.0001349999997728446 0.00013699999999516876 0.00013500000022759195 0.00013559999997596605 +difference_tiny B-Tree 10000 0.0001710000001367007 0.00018000000000029104 0.00017800000023271423 0.0001772000000528351 +difference_tiny B-Tree 100000 0.00024100000018734136 0.0002799999997478153 0.0002500000000509317 0.0002577999999630265 +difference_tiny B-Tree 1000000 0.00029500000027837814 0.00030999999989944627 0.0003040000001419685 0.0003038000001652108 +difference_tiny RB-Tree 100 3.0000000151630957e-05 3.199999991920777e-05 3.0000000151630957e-05 3.0600000081904e-05 +difference_tiny RB-Tree 1000 0.00019499999962135917 0.0002230000000054133 0.00019599999995989492 0.0002013999999689986 +difference_tiny RB-Tree 10000 0.0018370000002505549 0.0020009999998364947 0.0019390000002204033 0.0019236000000091736 +difference_tiny RB-Tree 100000 0.02409299999999348 0.026014999999915744 0.024499999999989086 0.0248435999999856 +difference_tiny RB-Tree 1000000 0.24229000000013912 0.2579439999999522 0.24610299999994822 0.24809900000009294 +difference_small SortedSet 100 1.3999999737279722e-05 1.900000006571645e-05 1.6000000414351234e-05 1.6200000118260505e-05 +difference_small SortedSet 1000 4.200000012133387e-05 4.399999988891068e-05 4.3000000005122274e-05 4.319999998187995e-05 +difference_small SortedSet 10000 0.0003339999998388521 0.0003689999998641724 0.0003380000002835004 0.0003438000000642205 +difference_small SortedSet 100000 0.003938000000289321 0.004018999999971129 0.003963000000112515 0.003969000000051892 +difference_small SortedSet 1000000 0.05913400000008551 0.07249100000035469 0.05999699999983932 0.06234220000005734 +difference_small B-Tree 100 0.00010199999996984843 0.00010300000030838419 0.00010299999985363684 0.00010259999999107094 +difference_small B-Tree 1000 0.0013149999999768625 0.0013619999999718857 0.0013169999997444393 0.0013257999999950697 +difference_small B-Tree 10000 0.019345000000157597 0.019717000000127882 0.019431000000167842 0.019467600000007225 +difference_small B-Tree 100000 0.26523900000029244 0.2679929999999331 0.26596799999970244 0.26645019999996294 +difference_small B-Tree 1000000 3.404066999999941 3.443068999999923 3.415682000000288 3.422950199999923 +difference_small RB-Tree 100 2.499999982319423e-05 2.700000004551839e-05 2.500000027794158e-05 2.5800000094022836e-05 +difference_small RB-Tree 1000 0.00017800000023271423 0.00023400000009132782 0.0001810000003388268 0.000191000000177155 +difference_small RB-Tree 10000 0.001706000000012864 0.0017880000000332075 0.0017269999998461572 0.001740200000040204 +difference_small RB-Tree 100000 0.021580999999969208 0.02228000000013708 0.02167600000029779 0.021806199999991803 +difference_small RB-Tree 1000000 0.21711000000004788 0.2285660000002281 0.22103900000001886 0.2211798000001181 +difference_medium SortedSet 100 1.3999999737279722e-05 1.700000029813964e-05 1.4000000192027073e-05 1.5000000075815478e-05 +difference_medium SortedSet 1000 4.9000000217347406e-05 5.199999986871262e-05 5.0999999984924216e-05 5.080000000816654e-05 +difference_medium SortedSet 10000 0.0004079999998793937 0.00044100000013713725 0.0004079999998793937 0.0004173999999693478 +difference_medium SortedSet 100000 0.004531000000042695 0.004748999999719672 0.004680000000007567 0.004657999999926688 +difference_medium SortedSet 1000000 0.04705899999999019 0.04948500000000422 0.047775999999885244 0.047925199999917824 +difference_medium B-Tree 100 0.0005620000001727021 0.0006679999996777042 0.0006469999998444109 0.0006347999998979504 +difference_medium B-Tree 1000 0.007564000000002125 0.007617000000209373 0.007584999999835418 0.007591800000045623 +difference_medium B-Tree 10000 0.110508000000209 0.11282100000016726 0.11086599999998725 0.11120540000010806 +difference_medium RB-Tree 100 2.2000000171829015e-05 2.300000005561742e-05 2.2000000171829015e-05 2.2200000148586697e-05 +difference_medium RB-Tree 1000 0.00014899999996487168 0.00016300000015689875 0.00015200000007098424 0.0001554000000396627 +difference_medium RB-Tree 10000 0.0013899999999011925 0.0014689999998154235 0.0014240000000427244 0.0014215999999578344 +difference_medium RB-Tree 100000 0.015420999999605556 0.016873000000032334 0.015574000000015076 0.015969399999994492 +difference_medium RB-Tree 1000000 0.15691199999992023 0.16567299999996976 0.15757999999959793 0.1599011999999675 +difference_large SortedSet 100 1.3999999737279722e-05 1.8000000181928044e-05 1.5000000075815478e-05 1.540000002933084e-05 +difference_large SortedSet 1000 6.000000030326191e-05 6.200000007083872e-05 6.200000007083872e-05 6.140000014056567e-05 +difference_large SortedSet 10000 0.0005070000001978769 0.0005219999998189451 0.0005100000003039895 0.0005128000000695465 +difference_large SortedSet 100000 0.0056939999999485735 0.005828000000292377 0.005732000000080006 0.005740400000104273 +difference_large SortedSet 1000000 0.057801999999810505 0.06228700000019671 0.059901000000081694 0.05989939999990383 +difference_large B-Tree 100 0.0008779999998296262 0.0009140000001934823 0.0008779999998296262 0.0008857999999236199 +difference_large B-Tree 1000 0.013856000000032509 0.014041999999790278 0.013875999999982014 0.013904199999888078 +difference_large B-Tree 10000 0.1975809999999001 0.20265599999993356 0.19843600000012884 0.1990802000000258 +difference_large RB-Tree 100 2.3999999939405825e-05 2.499999982319423e-05 2.499999982319423e-05 2.4799999846436548e-05 +difference_large RB-Tree 1000 0.0001739999997880659 0.00017600000001039007 0.00017500000012660166 0.00017479999996794504 +difference_large RB-Tree 10000 0.00166399999989153 0.001984999999876891 0.001667999999881431 0.0017397999999047898 +difference_large RB-Tree 100000 0.01721300000008341 0.019123000000035972 0.018281000000115455 0.01806300000007468 +difference_large RB-Tree 1000000 0.18953300000021045 0.20264399999996385 0.19177099999978964 0.19489480000002005 +difference_update_tiny SortedSet 100 2.3999999939405825e-05 2.699999959077104e-05 2.499999982319423e-05 2.519999998185085e-05 +difference_update_tiny SortedSet 1000 2.499999982319423e-05 2.500000027794158e-05 2.499999982319423e-05 2.49999999141437e-05 +difference_update_tiny SortedSet 10000 2.700000004551839e-05 2.900000026784255e-05 2.7999999929306796e-05 2.8000000020256267e-05 +difference_update_tiny SortedSet 100000 4.199999966658652e-05 4.5000000227446435e-05 4.4999999772699084e-05 4.3800000003102466e-05 +difference_update_tiny SortedSet 1000000 4.999999964638846e-05 5.800000008093775e-05 5.100000043967157e-05 5.240000000412692e-05 +difference_update_tiny B-Tree 100 9.600000021237065e-05 9.799999997994746e-05 9.799999997994746e-05 9.740000004967441e-05 +difference_update_tiny B-Tree 1000 0.00012800000013157842 0.00012900000001536682 0.00012800000013157842 0.00012840000008509377 +difference_update_tiny B-Tree 10000 0.00015800000028320937 0.0002009999998335843 0.00015900000016699778 0.00016840000007505295 +difference_update_tiny B-Tree 100000 0.00023099999998521525 0.000289000000066153 0.00023099999998521525 0.0002440000000206055 +difference_update_tiny B-Tree 1000000 0.0002829999998539279 0.0003010000000358559 0.0002899999999499414 0.0002907999999479216 +difference_update_tiny RB-Tree 100 4.399999988891068e-05 6.399999983841553e-05 4.600000011123484e-05 5.019999989599455e-05 +difference_update_tiny RB-Tree 1000 0.00035499999967214535 0.00035900000011679367 0.00035700000034921686 0.00035719999996217664 +difference_update_tiny RB-Tree 10000 0.003519000000324013 0.0035910000001422304 0.0035309999998389685 0.0035460000000966828 +difference_update_tiny RB-Tree 100000 0.04625400000031732 0.048330000000078144 0.047779999999875145 0.04757500000005166 +difference_update_tiny RB-Tree 1000000 0.432988000000023 0.4538680000000568 0.44430499999998574 0.44325699999999413 +difference_update_small SortedSet 100 2.300000005561742e-05 2.6000000161729986e-05 2.3999999939405825e-05 2.4200000007112975e-05 +difference_update_small SortedSet 1000 0.00019699999984368333 0.0001999999999497959 0.00019800000018221908 0.00019819999997707782 +difference_update_small SortedSet 10000 0.001956999999947584 0.002256000000215863 0.0019659999998111743 0.0020560000000841685 +difference_update_small SortedSet 100000 0.020561999999699765 0.020956999999725667 0.02068199999985154 0.020731599999817264 +difference_update_small SortedSet 1000000 0.21655699999973876 0.2207300000000032 0.21770199999991746 0.21806019999985438 +difference_update_small B-Tree 100 9.700000009615906e-05 9.799999997994746e-05 9.799999997994746e-05 9.76000000264321e-05 +difference_update_small B-Tree 1000 0.001299999999901047 0.0013570000000981963 0.001307999999880849 0.0013198000000556932 +difference_update_small B-Tree 10000 0.01885099999981321 0.019088000000010652 0.018920999999863852 0.01894239999992351 +difference_update_small B-Tree 100000 0.2597489999998288 0.2634360000001834 0.26224699999966106 0.2617117999999209 +difference_update_small B-Tree 1000000 3.4109659999999167 3.4322970000002897 3.4157460000001265 3.418844000000081 +difference_update_small RB-Tree 100 4.399999943416333e-05 4.8999999307852704e-05 4.400000034365803e-05 4.5199999840406234e-05 +difference_update_small RB-Tree 1000 0.00034099999993486563 0.00034500000037951395 0.00034299999970244244 0.0003428000001804321 +difference_update_small RB-Tree 10000 0.0033180000000356813 0.0033810000004450558 0.0033680000005915645 0.003356800000256044 +difference_update_small RB-Tree 100000 0.040812000000187254 0.04304099999990285 0.04251399999975547 0.04229859999995824 +difference_update_small RB-Tree 1000000 0.40628000000015163 0.4225829999995767 0.41384800000014366 0.413130799999999 +difference_update_medium SortedSet 100 1.1999999514955562e-05 1.4000000192027073e-05 1.2000000424450263e-05 1.2400000014167744e-05 +difference_update_medium SortedSet 1000 4.999999964638846e-05 5.0999999984924216e-05 4.999999964638846e-05 5.039999978180276e-05 +difference_update_medium SortedSet 10000 0.0003999999998995918 0.0004089999993084348 0.0004040000003442401 0.000403800000094634 +difference_update_medium SortedSet 100000 0.004359999999905995 0.004471000000194181 0.004416000000674103 0.0044082000002163115 +difference_update_medium SortedSet 1000000 0.054884999999558204 0.06712500000048749 0.05533899999954883 0.058208399999966784 +difference_update_medium B-Tree 100 0.0004969999999957508 0.0005080000000816653 0.0005029999992984813 0.0005031999997299863 +difference_update_medium B-Tree 1000 0.0075010000000474975 0.007609999999658612 0.007518999999774678 0.007537199999751465 +difference_update_medium B-Tree 10000 0.1104349999995975 0.11085800000000745 0.11063699999976961 0.11061859999990702 +difference_update_medium RB-Tree 100 3.5999999454361387e-05 3.899999956047395e-05 3.600000036385609e-05 3.660000002128072e-05 +difference_update_medium RB-Tree 1000 0.0002770000000964501 0.00028199999997013947 0.0002789999998640269 0.0002793999998175423 +difference_update_medium RB-Tree 10000 0.00269899999966583 0.0027890000001207227 0.002712000000428816 0.0027250000001004084 +difference_update_medium RB-Tree 100000 0.028879000000415544 0.03060800000002928 0.029298000000380853 0.029491200000302344 +difference_update_medium RB-Tree 1000000 0.31020300000000134 0.3278950000003533 0.3160669999997481 0.31781380000011267 +difference_update_large SortedSet 100 1.1999999514955562e-05 1.5999999959603883e-05 1.2999999853491317e-05 1.3599999692814891e-05 +difference_update_large SortedSet 1000 6.200000007083872e-05 6.399999983841553e-05 6.300000040937448e-05 6.31999999313848e-05 +difference_update_large SortedSet 10000 0.0005750000000261934 0.0006360000006679911 0.0005959999998594867 0.0005992000000333064 +difference_update_large SortedSet 100000 0.006362000000081025 0.007026999999652617 0.006962999999814201 0.006850999999915075 +difference_update_large SortedSet 1000000 0.08337399999982154 0.09637999999995372 0.08375899999919056 0.0863495999998122 +difference_update_large B-Tree 100 0.0008670000006532064 0.0008729999999559368 0.00087100000018836 0.0008704000001671375 +difference_update_large B-Tree 1000 0.013718000000153552 0.01381500000024971 0.013756999999714026 0.013767000000007102 +difference_update_large B-Tree 10000 0.19751200000064273 0.21339100000022881 0.19839199999933044 0.201192600000104 +difference_update_large RB-Tree 100 3.9000000469968654e-05 4.199999966658652e-05 3.999999989900971e-05 4.019999996671686e-05 +difference_update_large RB-Tree 1000 0.0003020000003743917 0.0003059999999095453 0.0003040000001419685 0.00030399999996006956 +difference_update_large RB-Tree 10000 0.0029049999993731035 0.0029500000000552973 0.002915999999459018 0.002920799999810697 +difference_update_large RB-Tree 100000 0.03133299999990413 0.03338200000052893 0.031560000000354194 0.03193940000019211 +difference_update_large RB-Tree 1000000 0.34839999999985594 0.37071500000001834 0.3565600000001723 0.3567403999999442 +intersection_tiny SortedSet 100 1.1000000085914508e-05 1.4000000192027073e-05 1.1999999514955562e-05 1.2000000060652382e-05 +intersection_tiny SortedSet 1000 1.2999999853491317e-05 1.500000053056283e-05 1.4000000192027073e-05 1.3800000124319922e-05 +intersection_tiny SortedSet 10000 1.4999999621068127e-05 1.5999999959603883e-05 1.500000053056283e-05 1.539999993838137e-05 +intersection_tiny SortedSet 100000 3.199999991920777e-05 3.7999999221938197e-05 3.500000002532033e-05 3.479999977571424e-05 +intersection_tiny SortedSet 1000000 4.400000034365803e-05 5.400000009103678e-05 4.600000011123484e-05 4.760000010719523e-05 +intersection_tiny B-Tree 100 0.0013129999997545383 0.0014240000000427244 0.0013319999998202547 0.001346200000079989 +intersection_tiny B-Tree 1000 0.018990999999914493 0.019381000000066706 0.019111000000521017 0.019143200000144134 +intersection_tiny B-Tree 10000 0.2599609999997483 0.2609499999998661 0.26032800000029965 0.26043580000005023 +intersection_tiny RB-Tree 100 1.1000000085914508e-05 1.1999999514955562e-05 1.1000000085914508e-05 1.1199999971722718e-05 +intersection_tiny RB-Tree 1000 2.299999960087007e-05 2.300000051036477e-05 2.299999960087007e-05 2.299999996466795e-05 +intersection_tiny RB-Tree 10000 0.00010199999996984843 0.00011100000028818613 0.00010300000030838419 0.0001045999999405467 +intersection_tiny RB-Tree 100000 0.0008639999996375991 0.0009039999995366088 0.0008840000000418513 0.0008837999999741442 +intersection_tiny RB-Tree 1000000 0.00805099999979575 0.010121000000253844 0.008109000000331434 0.008507800000188581 +intersection_small SortedSet 100 1.1000000085914508e-05 1.4000000192027073e-05 1.1000000085914508e-05 1.179999999294523e-05 +intersection_small SortedSet 1000 2.2000000171829015e-05 4.1000000237545464e-05 2.2000000171829015e-05 2.5800000184972304e-05 +intersection_small SortedSet 10000 8.199999956559623e-05 8.299999990413198e-05 8.199999956559623e-05 8.219999981520231e-05 +intersection_small SortedSet 100000 0.0007719999994151294 0.0009819999995670514 0.0007750000004307367 0.0008153999999194639 +intersection_small SortedSet 1000000 0.008346000000528875 0.009143999999650987 0.008506000000124914 0.008648800000082701 +intersection_small B-Tree 100 0.001314000000093074 0.0014000000001033186 0.0013159999998606509 0.0013332000000445988 +intersection_small B-Tree 1000 0.019195000000763685 0.019371000000319327 0.01927700000032928 0.019284800000423274 +intersection_small B-Tree 10000 0.27152699999987817 0.27349600000070495 0.2727729999996882 0.27253419999997275 +intersection_small RB-Tree 100 1.0999999176419806e-05 1.2000000424450263e-05 1.1000000085914508e-05 1.140000003942987e-05 +intersection_small RB-Tree 1000 4.6999999540275894e-05 5.700000019714935e-05 4.799999987881165e-05 4.9399999988963826e-05 +intersection_small RB-Tree 10000 0.0003569999998944695 0.0003889999998136773 0.0003639999995357357 0.000366799999937939 +intersection_small RB-Tree 100000 0.003613000000768807 0.003757999999834283 0.0036700000000564614 0.0036701999999422695 +intersection_small RB-Tree 1000000 0.03649299999960931 0.03931099999954313 0.037352999999711756 0.037772999999833703 +intersection_medium SortedSet 100 1.3999999282532372e-05 1.5999999959603883e-05 1.4000000192027073e-05 1.4599999849451705e-05 +intersection_medium SortedSet 1000 4.799999987881165e-05 5.0999999984924216e-05 4.999999964638846e-05 4.9600000056670976e-05 +intersection_medium SortedSet 10000 0.0003509999996822444 0.00035600000046542846 0.0003529999994498212 0.00035319999988132623 +intersection_medium SortedSet 100000 0.003574999999727879 0.0038960000001679873 0.0036380000001372537 0.003714600000057544 +intersection_medium SortedSet 1000000 0.04822500000045693 0.04914900000039779 0.04856300000028568 0.04856680000011693 +intersection_medium B-Tree 100 0.0011919999997189734 0.001239000000168744 0.0011979999999311985 0.0012060000000928995 +intersection_medium B-Tree 1000 0.01701599999978498 0.017131999999946856 0.017066999999769905 0.01706899999990128 +intersection_medium B-Tree 10000 0.24222400000053312 0.2429729999994379 0.24272999999993772 0.24270200000009937 +intersection_medium RB-Tree 100 2.1999999262334313e-05 2.2000000171829015e-05 2.2000000171829015e-05 2.1999999808031136e-05 +intersection_medium RB-Tree 1000 0.00014800000008108327 0.00015000000075815478 0.00014899999951012433 0.00014919999994162937 +intersection_medium RB-Tree 10000 0.001389000000017404 0.001479000000472297 0.0014000000001033186 0.0014138000000457397 +intersection_medium RB-Tree 100000 0.014775000000554428 0.015733000000182074 0.01522099999965576 0.015208200000051875 +intersection_medium RB-Tree 1000000 0.16327699999965262 0.16703400000005786 0.16527899999982765 0.16509839999998804 +intersection_large SortedSet 100 1.4000000192027073e-05 1.7999999727180693e-05 1.4999999621068127e-05 1.539999993838137e-05 +intersection_large SortedSet 1000 6.000000030326191e-05 6.200000007083872e-05 6.099999973230297e-05 6.080000021029264e-05 +intersection_large SortedSet 10000 0.0004419999995661783 0.00044500000058178557 0.0004440000002432498 0.00044360000028973443 +intersection_large SortedSet 100000 0.004867000000558619 0.005165000000488362 0.004912000000331318 0.00497300000024552 +intersection_large SortedSet 1000000 0.0597539999998844 0.06178899999940768 0.06045300000005227 0.060616599999775644 +intersection_large B-Tree 100 0.0014689999998154235 0.001728000000184693 0.0014700000001539593 0.0015348000002632033 +intersection_large B-Tree 1000 0.021577000000434055 0.021832999999787717 0.021727000000282715 0.021717800000078568 +intersection_large B-Tree 10000 0.3062230000005002 0.30755600000065897 0.30663800000002084 0.3067264000002979 +intersection_large RB-Tree 100 2.3999999939405825e-05 2.499999936844688e-05 2.3999999939405825e-05 2.4200000007112975e-05 +intersection_large RB-Tree 1000 0.00017100000059144804 0.00018699999964155722 0.0001739999997880659 0.00017740000002959279 +intersection_large RB-Tree 10000 0.0016410000007454073 0.0018360000003667665 0.0016470000000481377 0.0017118000001573818 +intersection_large RB-Tree 100000 0.017335000000457512 0.017483999999967637 0.017473999999310763 0.017436799999813957 +intersection_large RB-Tree 1000000 0.1997140000003128 0.208042000000205 0.20203399999991234 0.20297559999999065 +intersection_update_tiny SortedSet 100 7.999999979801942e-06 9.999999747378752e-06 9.000000318337698e-06 9.000000136438758e-06 +intersection_update_tiny SortedSet 1000 9.999999747378752e-06 1.5999999959603883e-05 1.500000053056283e-05 1.320000028499635e-05 +intersection_update_tiny SortedSet 10000 3.999999989900971e-05 4.200000057608122e-05 4.000000080850441e-05 4.0600000465929044e-05 +intersection_update_tiny SortedSet 100000 0.000735999999960768 0.0007440000008500647 0.0007390000000668806 0.0007394000002022949 +intersection_update_tiny SortedSet 1000000 0.006938000000445754 0.007725999999820488 0.007013999999799125 0.00722700000005716 +intersection_update_tiny B-Tree 100 0.001314999999522115 0.0013760000001639128 0.0013159999998606509 0.0013291999997818494 +intersection_update_tiny B-Tree 1000 0.018958000000566244 0.019019000000298547 0.019011000000318745 0.01899500000017724 +intersection_update_tiny B-Tree 10000 0.26033100000040577 0.26160600000002887 0.2609660000007352 0.2609182000001965 +intersection_update_tiny RB-Tree 100 2.299999960087007e-05 2.3999999939405825e-05 2.300000051036477e-05 2.3399999918183312e-05 +intersection_update_tiny RB-Tree 1000 0.00010699999984353781 0.00010800000018207356 0.00010799999927257886 0.00010760000004665926 +intersection_update_tiny RB-Tree 10000 0.0009360000003653113 0.000992999999652966 0.0009399999999004649 0.0009497999999439344 +intersection_update_tiny RB-Tree 100000 0.009469000000535743 0.009583000000020547 0.009525999999823398 0.009528799999861804 +intersection_update_tiny RB-Tree 1000000 0.09428200000002107 0.0961699999998018 0.09430199999951583 0.09490279999990889 +intersection_update_small SortedSet 100 7.999999979801942e-06 9.999999747378752e-06 9.000000318337698e-06 8.800000068731606e-06 +intersection_update_small SortedSet 1000 1.7999999727180693e-05 2.3999999939405825e-05 1.900000006571645e-05 1.9799999790848233e-05 +intersection_update_small SortedSet 10000 0.00010099999963131268 0.000105000000075961 0.00010099999963131268 0.00010179999972024235 +intersection_update_small SortedSet 100000 0.0013840000001437147 0.001599000000169326 0.001389000000017404 0.001433799999904295 +intersection_update_small SortedSet 1000000 0.01410299999952258 0.014416999999411928 0.014336999999613909 0.014287799999692652 +intersection_update_small B-Tree 100 0.0013150000004316098 0.001397999999426247 0.0013179999996282277 0.0013331999998626998 +intersection_update_small B-Tree 1000 0.019253999999818916 0.01936400000067806 0.019314000000122178 0.01930979999997362 +intersection_update_small B-Tree 10000 0.27099600000019564 0.2757979999996678 0.2713309999999183 0.27219700000005104 +intersection_update_small RB-Tree 100 2.2000000171829015e-05 2.3999999939405825e-05 2.299999960087007e-05 2.299999978276901e-05 +intersection_update_small RB-Tree 1000 0.00013999999919178663 0.00014200000077835284 0.00014100000043981709 0.0001410000000760192 +intersection_update_small RB-Tree 10000 0.0012820000001738663 0.0013370000006034388 0.0012909999995827093 0.0013059999999313731 +intersection_update_small RB-Tree 100000 0.013052999999672465 0.013202999999521126 0.013113999999404768 0.013119199999891862 +intersection_update_small RB-Tree 1000000 0.1364480000002004 0.14034999999967113 0.13664300000073126 0.13731640000023618 +intersection_update_medium SortedSet 100 9.000000318337698e-06 1.2000000424450263e-05 1.1000000085914508e-05 1.0800000018207356e-05 +intersection_update_medium SortedSet 1000 4.400000034365803e-05 4.4999999772699084e-05 4.400000034365803e-05 4.440000011527445e-05 +intersection_update_medium SortedSet 10000 0.000345999999808555 0.00037400000019260915 0.00034700000014709076 0.00035260000004200265 +intersection_update_medium SortedSet 100000 0.003932000000531843 0.004105999999410415 0.003967999999986205 0.003996799999913492 +intersection_update_medium SortedSet 1000000 0.04981099999986327 0.05157500000041182 0.05029299999932846 0.05045159999990574 +intersection_update_medium B-Tree 100 0.0011890000005223555 0.001194000000396045 0.0011899999999513966 0.0011904000002687098 +intersection_update_medium B-Tree 1000 0.016914999999244174 0.01707299999998213 0.017061999999896216 0.017027999999663736 +intersection_update_medium B-Tree 10000 0.24294100000042818 0.243333999999777 0.24324599999999919 0.24317120000014256 +intersection_update_medium RB-Tree 100 3.600000036385609e-05 3.999999989900971e-05 3.7000000702391844e-05 3.740000029210933e-05 +intersection_update_medium RB-Tree 1000 0.00029600000016216654 0.0002970000005007023 0.0002969999995912076 0.00029680000006919726 +intersection_update_medium RB-Tree 10000 0.0026550000002316665 0.002735999999458727 0.002664000000550004 0.0026760000000649597 +intersection_update_medium RB-Tree 100000 0.029327000000193948 0.029728999999861117 0.02937999999994645 0.029465800000070885 +intersection_update_medium RB-Tree 1000000 0.31196300000010524 0.32330699999965873 0.31303700000080426 0.31531400000003484 +intersection_update_large SortedSet 100 1.2999999853491317e-05 1.4999999621068127e-05 1.4000000192027073e-05 1.3999999828229192e-05 +intersection_update_large SortedSet 1000 5.199999941396527e-05 5.400000009103678e-05 5.200000032345997e-05 5.259999979898566e-05 +intersection_update_large SortedSet 10000 0.0004269999999451102 0.00042799999937415123 0.0004269999999451102 0.0004271999998309184 +intersection_update_large SortedSet 100000 0.005011999999624095 0.005264999999781139 0.00505799999973533 0.0051001999998334215 +intersection_update_large SortedSet 1000000 0.06122700000014447 0.06386000000020431 0.061692999999650056 0.06197579999989102 +intersection_update_large B-Tree 100 0.0014599999994970858 0.0015040000007502385 0.0014620000001741573 0.0014702000000397675 +intersection_update_large B-Tree 1000 0.021412999999483873 0.021504999999706342 0.021482000000105472 0.02147639999984676 +intersection_update_large B-Tree 10000 0.30615099999977247 0.317761999999675 0.30932099999972706 0.3101545999998052 +intersection_update_large RB-Tree 100 3.899999956047395e-05 4.200000057608122e-05 3.999999989900971e-05 4.019999996671686e-05 +intersection_update_large RB-Tree 1000 0.00030299999980343273 0.00033600000006117625 0.00030299999980343273 0.0003097999999226886 +intersection_update_large RB-Tree 10000 0.002915999999459018 0.002937999999630847 0.0029209999993327074 0.0029225999996924656 +intersection_update_large RB-Tree 100000 0.030930000000807922 0.03283000000010361 0.031071999999767286 0.03144400000019232 +intersection_update_large RB-Tree 1000000 0.3421490000000631 0.3733520000005228 0.3612219999995432 0.35876080000016375 +symmetric_difference_tiny SortedSet 100 1.5999999959603883e-05 1.8000000636675395e-05 1.6000000869098585e-05 1.6600000344624276e-05 +symmetric_difference_tiny SortedSet 1000 4.9000000217347406e-05 5.000000055588316e-05 4.999999964638846e-05 4.9600000056670976e-05 +symmetric_difference_tiny SortedSet 10000 0.0004149999995206599 0.0004220000000714208 0.0004149999995206599 0.0004173999997874489 +symmetric_difference_tiny SortedSet 100000 0.00444699999934528 0.005076000000372005 0.004455000000234577 0.004585599999882106 +symmetric_difference_tiny SortedSet 1000000 0.07360599999992701 0.08488099999976839 0.07401099999970029 0.0763837999997122 +symmetric_difference_tiny B-Tree 100 0.00156299999980547 0.0016059999998105923 0.0015679999996791594 0.0015751999999338295 +symmetric_difference_tiny B-Tree 1000 0.023118000000067696 0.023352999999588064 0.02315100000032544 0.02318779999986873 +symmetric_difference_tiny B-Tree 10000 0.3259889999999359 0.32697900000039226 0.32623400000011316 0.3263890000000174 +symmetric_difference_tiny RB-Tree 100 2.500000027794158e-05 2.700000004551839e-05 2.500000027794158e-05 2.5600000117265154e-05 +symmetric_difference_tiny RB-Tree 1000 0.00018499999987398041 0.00018700000055105193 0.00018600000021251617 0.00018619999991642544 +symmetric_difference_tiny RB-Tree 10000 0.0018239999999423162 0.002080999999634514 0.0018670000008569332 0.0019175999999788474 +symmetric_difference_tiny RB-Tree 100000 0.022409000000152446 0.02310200000010809 0.022713000000294414 0.02271740000014688 +symmetric_difference_tiny RB-Tree 1000000 0.21677700000054756 0.22860100000070815 0.21849999999994907 0.22124080000012328 +symmetric_difference_small SortedSet 100 1.5999999959603883e-05 1.900000006571645e-05 1.700000029813964e-05 1.720000000204891e-05 +symmetric_difference_small SortedSet 1000 5.899999996472616e-05 7.000000005064066e-05 6.000000030326191e-05 6.280000015976839e-05 +symmetric_difference_small SortedSet 10000 0.00041599999985919567 0.00042500000017753337 0.00041900000087480294 0.0004194000002826215 +symmetric_difference_small SortedSet 100000 0.00503500000013446 0.005520000000615255 0.005124000000250817 0.005177800000092247 +symmetric_difference_small SortedSet 1000000 0.0863710000003266 0.1058790000006411 0.09032899999965593 0.09299360000022716 +symmetric_difference_small B-Tree 100 0.001570999999785272 0.001983000000109314 0.0015730000004623435 0.001710800000000745 +symmetric_difference_small B-Tree 1000 0.023304999999709253 0.02424700000028679 0.023484000000280503 0.02362620000003517 +symmetric_difference_small B-Tree 10000 0.3346300000002884 0.335215000000062 0.3348550000000614 0.3349028000000544 +symmetric_difference_small RB-Tree 100 2.500000027794158e-05 2.8000000384054147e-05 2.5999999706982635e-05 2.6200000138487668e-05 +symmetric_difference_small RB-Tree 1000 0.00017800000023271423 0.0001810000003388268 0.00017899999966175528 0.00017939999997906853 +symmetric_difference_small RB-Tree 10000 0.0017090000001189765 0.0017539999998916755 0.0017170000000987784 0.0017230000001291045 +symmetric_difference_small RB-Tree 100000 0.020975999999791384 0.02161100000012084 0.021225000000413274 0.02128419999990001 +symmetric_difference_small RB-Tree 1000000 0.20870099999956437 0.22285400000055233 0.21084999999948195 0.21377740000007178 +symmetric_difference_medium SortedSet 100 1.5999999959603883e-05 1.7999999727180693e-05 1.5999999959603883e-05 1.6399999913119247e-05 +symmetric_difference_medium SortedSet 1000 5.599999985861359e-05 5.80000005356851e-05 5.700000019714935e-05 5.700000019714935e-05 +symmetric_difference_medium SortedSet 10000 0.0005060000003140885 0.0005500000006577466 0.0005160000000614673 0.0005202000002100249 +symmetric_difference_medium SortedSet 100000 0.005535999999665364 0.005599000000074739 0.005567000000155531 0.005567599999812956 +symmetric_difference_medium SortedSet 1000000 0.06744700000035664 0.06774099999984173 0.06755299999986164 0.06757120000002033 +symmetric_difference_medium B-Tree 100 0.001518999999461812 0.0015649999995730468 0.0015190000003713067 0.001528399999915564 +symmetric_difference_medium B-Tree 1000 0.0213819999999032 0.02148899999974674 0.021432999999888125 0.021438599999783037 +symmetric_difference_medium B-Tree 10000 0.303356000000349 0.30581400000028225 0.30389199999990524 0.3041925999999876 +symmetric_difference_medium RB-Tree 100 2.100000074278796e-05 2.300000051036477e-05 2.2000000171829015e-05 2.2200000239536165e-05 +symmetric_difference_medium RB-Tree 1000 0.00014899999951012433 0.00015099999927770114 0.00014999999984866008 0.00014999999966676115 +symmetric_difference_medium RB-Tree 10000 0.0013789999993605306 0.0014000000001033186 0.0013939999998910935 0.0013919999999416177 +symmetric_difference_medium RB-Tree 100000 0.014682999999422464 0.015542999999524909 0.01507599999968079 0.015041999999630207 +symmetric_difference_medium RB-Tree 1000000 0.1622689999994691 0.17162900000039372 0.16579600000022765 0.1659349999999904 +symmetric_difference_large SortedSet 100 1.700000029813964e-05 1.9999999494757503e-05 1.700000029813964e-05 1.7800000023271423e-05 +symmetric_difference_large SortedSet 1000 8.900000011635711e-05 9.100000079342863e-05 8.999999954539817e-05 8.980000002338784e-05 +symmetric_difference_large SortedSet 10000 0.0006569999995917897 0.0007089999999152496 0.0006789999997636187 0.000679399999899033 +symmetric_difference_large SortedSet 100000 0.007985000000189757 0.008136000000376953 0.00800500000059401 0.008052400000269699 +symmetric_difference_large SortedSet 1000000 0.13554300000032526 0.15399900000011257 0.1472989999992933 0.14555579999978363 +symmetric_difference_large B-Tree 100 0.002427000000352564 0.002720999999837659 0.0024439999997412087 0.002536800000052608 +symmetric_difference_large B-Tree 1000 0.035984000000098604 0.042949000000589876 0.03643999999985681 0.037847800000054124 +symmetric_difference_large B-Tree 10000 0.509792999999263 0.5125520000001416 0.5106359999999768 0.5108469999999216 +symmetric_difference_large RB-Tree 100 3.099999958067201e-05 3.300000025774352e-05 3.100000049016671e-05 3.15999999656924e-05 +symmetric_difference_large RB-Tree 1000 0.0002389999999650172 0.0002410000006420887 0.00023999999939405825 0.0002398000002358458 +symmetric_difference_large RB-Tree 10000 0.0023169999994934187 0.0025359999999636784 0.0023530000007667695 0.0023928000000523753 +symmetric_difference_large RB-Tree 100000 0.027221000000281492 0.029516999999941618 0.027885999999853084 0.028175400000145602 +symmetric_difference_large RB-Tree 1000000 0.28218999999990046 0.29089699999985896 0.284219000000121 0.28625519999986865 +symmetric_difference_update_tiny SortedSet 100 9.000000318337698e-06 1.1999999514955562e-05 1.1000000085914508e-05 1.0800000018207356e-05 +symmetric_difference_update_tiny SortedSet 1000 2.89999998130952e-05 3.199999991920777e-05 3.0000000151630957e-05 3.0399999741348437e-05 +symmetric_difference_update_tiny SortedSet 10000 0.00023799999962648144 0.00024300000040966552 0.000240999999732594 0.0002407999998467858 +symmetric_difference_update_tiny SortedSet 100000 0.0023630000005141483 0.0024759999996604165 0.002373999999690568 0.0024010000000998844 +symmetric_difference_update_tiny SortedSet 1000000 0.03683599999931175 0.04183600000033039 0.03794300000026851 0.03838219999997818 +symmetric_difference_update_tiny B-Tree 100 0.00013299999955052044 0.00013500000022759195 0.00013299999955052044 0.00013339999986783369 +symmetric_difference_update_tiny B-Tree 1000 0.0001810000003388268 0.0001919999995152466 0.00018199999976786785 0.0001837999998315354 +symmetric_difference_update_tiny B-Tree 10000 0.00024399999983870657 0.0002590000003692694 0.0002480000002833549 0.0002494000002116081 +symmetric_difference_update_tiny RB-Tree 100 4.400000034365803e-05 4.7000000449770596e-05 4.4999999772699084e-05 4.520000020420411e-05 +symmetric_difference_update_tiny RB-Tree 1000 0.0003550000001268927 0.00035800000023300527 0.00035600000046542846 0.00035640000023704486 +symmetric_difference_update_tiny RB-Tree 10000 0.003513000000566535 0.0035939999997935956 0.003545999999914784 0.0035528000000340397 +symmetric_difference_update_tiny RB-Tree 100000 0.04452300000048126 0.045094000000062806 0.04467300000032992 0.044735399999990474 +symmetric_difference_update_tiny RB-Tree 1000000 0.43760699999984354 0.4602260000001479 0.43925799999942683 0.44382059999989 +symmetric_difference_update_small SortedSet 100 1.0999999176419806e-05 1.2000000424450263e-05 1.1999999514955562e-05 1.159999974333914e-05 +symmetric_difference_update_small SortedSet 1000 3.500000002532033e-05 3.699999979289714e-05 3.5999999454361387e-05 3.579999993235106e-05 +symmetric_difference_update_small SortedSet 10000 0.00026700000034907134 0.00027600000066740904 0.0002679999997781124 0.00026940000025206247 +symmetric_difference_update_small SortedSet 100000 0.002732000000833068 0.0027810000001409207 0.0027390000004743342 0.0027452000003904686 +symmetric_difference_update_small SortedSet 1000000 0.04040999999961059 0.04524600000058854 0.04125999999996566 0.04179739999981393 +symmetric_difference_update_small B-Tree 100 0.0001320000001214794 0.00013500000022759195 0.0001339999998890562 0.00013360000011743977 +symmetric_difference_update_small B-Tree 1000 0.0018380000001343433 0.0019019999999727588 0.00183999999990192 0.001853599999958533 +symmetric_difference_update_small B-Tree 10000 0.027396000000408094 0.02864399999998568 0.027567000000090047 0.0277697999999873 +symmetric_difference_update_small RB-Tree 100 4.399999943416333e-05 4.799999987881165e-05 4.4999999772699084e-05 4.5199999840406234e-05 +symmetric_difference_update_small RB-Tree 1000 0.000345999999808555 0.00034900000082416227 0.0003479999995761318 0.00034780000005412147 +symmetric_difference_update_small RB-Tree 10000 0.0033779999994294485 0.003492000000733242 0.003395000000637083 0.003409000000101514 +symmetric_difference_update_small RB-Tree 100000 0.04108500000074855 0.041561999999430554 0.04151899999942543 0.041357199999765726 +symmetric_difference_update_small RB-Tree 1000000 0.4133739999997488 0.41651200000069366 0.41544299999986833 0.4151100000000952 +symmetric_difference_update_medium SortedSet 100 9.999999747378752e-06 1.2999999853491317e-05 1.1000000085914508e-05 1.1199999789823778e-05 +symmetric_difference_update_medium SortedSet 1000 5.000000055588316e-05 5.899999996472616e-05 5.000000055588316e-05 5.340000043361215e-05 +symmetric_difference_update_medium SortedSet 10000 0.0003839999999399879 0.0003929999993488309 0.00038500000027852366 0.00038699999986420154 +symmetric_difference_update_medium SortedSet 100000 0.004057000000102562 0.004122000000279513 0.0040740000004007015 0.0040862000001652635 +symmetric_difference_update_medium SortedSet 1000000 0.054395000000113214 0.05591499999991356 0.054650000000037835 0.054947399999946356 +symmetric_difference_update_medium B-Tree 100 0.0006590000002688612 0.0006960000000617583 0.0006599999996979022 0.0006679999998596032 +symmetric_difference_update_medium B-Tree 1000 0.010148000000299362 0.010246999999253603 0.01017500000034488 0.01019819999983156 +symmetric_difference_update_medium B-Tree 10000 0.15239499999916006 0.153056000000106 0.15285900000071706 0.15280200000015612 +symmetric_difference_update_medium RB-Tree 100 3.7999999221938197e-05 4.1000000237545464e-05 3.999999989900971e-05 3.9599999945494345e-05 +symmetric_difference_update_medium RB-Tree 1000 0.0002770000000964501 0.0003020000003743917 0.0002970000005007023 0.00029060000015306285 +symmetric_difference_update_medium RB-Tree 10000 0.002704000000449014 0.002808000000186439 0.002763999999842781 0.0027592000002186977 +symmetric_difference_update_medium RB-Tree 100000 0.02931200000057288 0.03031399999963469 0.02967499999977008 0.02979059999997844 +symmetric_difference_update_medium RB-Tree 1000000 0.3130300000002535 0.3191110000007029 0.31849199999942357 0.3173346000001402 +symmetric_difference_update_large SortedSet 100 1.2000000424450263e-05 1.5999999959603883e-05 1.2999999853491317e-05 1.3800000124319922e-05 +symmetric_difference_update_large SortedSet 1000 7.700000060140155e-05 7.900000036897836e-05 7.80000000304426e-05 7.80000000304426e-05 +symmetric_difference_update_large SortedSet 10000 0.0006929999999556458 0.0007349999996222323 0.0006969999994907994 0.0007045999996989849 +symmetric_difference_update_large SortedSet 100000 0.007370000000264554 0.007631999999830441 0.007383000000118045 0.007434400000238384 +symmetric_difference_update_large SortedSet 1000000 0.11318499999924825 0.13050199999997858 0.12701000000015483 0.12375219999994443 +symmetric_difference_update_large B-Tree 100 0.00130899999930989 0.0013260000005175243 0.0013119999994160025 0.0013153999998394283 +symmetric_difference_update_large B-Tree 1000 0.020696000000498316 0.02088999999978114 0.02078799999981129 0.020793400000184193 +symmetric_difference_update_large B-Tree 10000 0.3071159999999509 0.30859500000042317 0.30721400000038557 0.3075404000001072 +symmetric_difference_update_large RB-Tree 100 5.000000055588316e-05 5.2999999752501026e-05 5.0999999984924216e-05 5.1400000120338515e-05 +symmetric_difference_update_large RB-Tree 1000 0.0003999999998995918 0.00040300000000570435 0.0004019999996671686 0.0004016000000774511 +symmetric_difference_update_large RB-Tree 10000 0.003926999999748659 0.003993999999693187 0.003942999999708263 0.003954399999747693 +symmetric_difference_update_large RB-Tree 100000 0.04590900000039255 0.04628599999978178 0.045952999999826716 0.04605939999983093 +symmetric_difference_update_large RB-Tree 1000000 0.4779109999999491 0.4985740000001897 0.48237799999969866 0.48514339999983347 +pop SortedSet 100 4.999999873689376e-06 6.999999641266186e-06 6.000000212225132e-06 5.999999848427251e-06 +pop SortedSet 1000 1.900000006571645e-05 2.3999999939405825e-05 1.900000006571645e-05 2.0000000040454326e-05 +pop SortedSet 10000 0.0001430000002073939 0.00015299999995477265 0.0001449999999749707 0.00014620000001741573 +pop SortedSet 100000 0.0014209999999366119 0.0014689999998154235 0.0014240000000427244 0.0014319999998406274 +pop SortedSet 1000000 0.014530000000377186 0.014622000000599655 0.014560000000528817 0.014567400000123598 +pop B-Tree 100 3.99999953515362e-06 5.000000783184078e-06 4.999999873689376e-06 4.600000102072954e-06 +pop B-Tree 1000 1.3999999282532372e-05 1.500000053056283e-05 1.4999999621068127e-05 1.4599999849451705e-05 +pop B-Tree 10000 0.00012399999923218274 0.00012700000024779 0.00012599999990925426 0.00012559999977383994 +pop B-Tree 100000 0.0012959999994563987 0.0013109999999869615 0.00130899999930989 0.0013069999997242121 +pop B-Tree 1000000 0.014345999999932246 0.014818999999988591 0.014704000000165252 0.014646799999900395 +pop RB-Tree 100 1.99999976757681e-06 3.000000106112566e-06 3.000000106112566e-06 2.8000000384054148e-06 +pop RB-Tree 1000 3.99999953515362e-06 6.000000212225132e-06 4.999999873689376e-06 4.999999691790435e-06 +pop RB-Tree 10000 1.7999999727180693e-05 2.099999983329326e-05 1.8000000636675395e-05 1.87999999980093e-05 +pop RB-Tree 100000 0.00017699999989417847 0.0002210000002378365 0.00017800000023271423 0.00018759999984467867 +pop RB-Tree 1000000 0.0016749999995226972 0.0017520000001240987 0.00171299999965413 0.0017115999999077758 +pop Skip-List 100 9.999999747378752e-06 1.1999999514955562e-05 1.0000000656873453e-05 1.0599999950500204e-05 +pop Skip-List 1000 5.700000019714935e-05 6.100000064179767e-05 5.899999996472616e-05 5.94000002820394e-05 +pop Skip-List 10000 0.0005620000001727021 0.0006359999997584964 0.0005659999997078557 0.0005807999998069136 +pop Skip-List 100000 0.006061000000045169 0.006365000000187138 0.0061659999992116354 0.0061895999999251215 +pop Skip-List 1000000 0.06538999999975204 0.06862400000045454 0.06597800000054121 0.06653200000018841 +init SortedSet 100 1.2999999853491317e-05 1.4999999621068127e-05 1.4000000192027073e-05 1.3800000124319922e-05 +init SortedSet 1000 5.199999941396527e-05 5.400000009103678e-05 5.200000032345997e-05 5.2599999980884606e-05 +init SortedSet 10000 0.0005819999996674596 0.0005879999998796848 0.0005839999994350364 0.0005841999996846426 +init SortedSet 100000 0.008349000000634987 0.009618000000045868 0.008982999999716412 0.008871800000088114 +init SortedSet 1000000 0.15111800000067888 0.15922299999965617 0.15713400000004185 0.15526980000013282 +init B-Tree 100 0.0013269999999465654 0.0013600000002043089 0.0013290000006236369 0.0013358000001971958 +init B-Tree 1000 0.020531999999548134 0.02059800000006362 0.020561000000270724 0.020560199999817997 +init B-Tree 10000 0.3226510000004055 0.32339300000057847 0.32278800000040064 0.322885000000133 +init B-Tree 100000 4.403553999999531 4.453508000000511 4.426534000000174 4.428352600000108 +init RB-Tree 100 5.2999999752501026e-05 5.700000019714935e-05 5.400000009103678e-05 5.43999998626532e-05 +init RB-Tree 1000 0.0004779999999300344 0.0005209999999351567 0.000481999999465188 0.0004887999997663428 +init RB-Tree 10000 0.005301999999574036 0.005739999999605061 0.005343999999240623 0.0054121999995913935 +init RB-Tree 100000 0.0693410000003496 0.07161699999960547 0.07037000000036642 0.07048439999998664 +init RB-Tree 1000000 0.9810820000002423 1.0326239999994868 0.9965780000002269 0.9985264000000825 diff -Nru sortedcontainers-1.5.9/tests/sortedcollection.py sortedcontainers-2.0.4/tests/sortedcollection.py --- sortedcontainers-1.5.9/tests/sortedcollection.py 1970-01-01 00:00:00.000000000 +0000 +++ sortedcontainers-2.0.4/tests/sortedcollection.py 2018-06-07 05:34:49.000000000 +0000 @@ -0,0 +1,345 @@ +"""Python Sorted Collection Module by Raymond Hettinger + +Copied from http://code.activestate.com/recipes/577197-sortedcollection/ +Retrieved on April 22, 2018 + +""" + +from bisect import bisect_left, bisect_right + +class SortedCollection(object): + '''Sequence sorted by a key function. + + SortedCollection() is much easier to work with than using bisect() directly. + It supports key functions like those use in sorted(), min(), and max(). + The result of the key function call is saved so that keys can be searched + efficiently. + + Instead of returning an insertion-point which can be hard to interpret, the + five find-methods return a specific item in the sequence. They can scan for + exact matches, the last item less-than-or-equal to a key, or the first item + greater-than-or-equal to a key. + + Once found, an item's ordinal position can be located with the index() method. + New items can be added with the insert() and insert_right() methods. + Old items can be deleted with the remove() method. + + The usual sequence methods are provided to support indexing, slicing, + length lookup, clearing, copying, forward and reverse iteration, contains + checking, item counts, item removal, and a nice looking repr. + + Finding and indexing are O(log n) operations while iteration and insertion + are O(n). The initial sort is O(n log n). + + The key function is stored in the 'key' attibute for easy introspection or + so that you can assign a new key function (triggering an automatic re-sort). + + In short, the class was designed to handle all of the common use cases for + bisect but with a simpler API and support for key functions. + + >>> from pprint import pprint + >>> from operator import itemgetter + + >>> s = SortedCollection(key=itemgetter(2)) + >>> for record in [ + ... ('roger', 'young', 30), + ... ('angela', 'jones', 28), + ... ('bill', 'smith', 22), + ... ('david', 'thomas', 32)]: + ... s.insert(record) + + >>> pprint(list(s)) # show records sorted by age + [('bill', 'smith', 22), + ('angela', 'jones', 28), + ('roger', 'young', 30), + ('david', 'thomas', 32)] + + >>> s.find_le(29) # find oldest person aged 29 or younger + ('angela', 'jones', 28) + >>> s.find_lt(28) # find oldest person under 28 + ('bill', 'smith', 22) + >>> s.find_gt(28) # find youngest person over 28 + ('roger', 'young', 30) + + >>> r = s.find_ge(32) # find youngest person aged 32 or older + >>> s.index(r) # get the index of their record + 3 + >>> s[3] # fetch the record at that index + ('david', 'thomas', 32) + + >>> s.key = itemgetter(0) # now sort by first name + >>> pprint(list(s)) + [('angela', 'jones', 28), + ('bill', 'smith', 22), + ('david', 'thomas', 32), + ('roger', 'young', 30)] + + ''' + + def __init__(self, iterable=(), key=None): + self._given_key = key + key = (lambda x: x) if key is None else key + decorated = sorted((key(item), item) for item in iterable) + self._keys = [k for k, item in decorated] + self._items = [item for k, item in decorated] + self._key = key + + def _getkey(self): + return self._key + + def _setkey(self, key): + if key is not self._key: + self.__init__(self._items, key=key) + + def _delkey(self): + self._setkey(None) + + key = property(_getkey, _setkey, _delkey, 'key function') + + def clear(self): + self.__init__([], self._key) + + def copy(self): + return self.__class__(self, self._key) + + def __len__(self): + return len(self._items) + + def __getitem__(self, i): + return self._items[i] + + def __iter__(self): + return iter(self._items) + + def __reversed__(self): + return reversed(self._items) + + def __repr__(self): + return '%s(%r, key=%s)' % ( + self.__class__.__name__, + self._items, + getattr(self._given_key, '__name__', repr(self._given_key)) + ) + + def __reduce__(self): + return self.__class__, (self._items, self._given_key) + + def __contains__(self, item): + k = self._key(item) + i = bisect_left(self._keys, k) + j = bisect_right(self._keys, k) + return item in self._items[i:j] + + def index(self, item): + 'Find the position of an item. Raise ValueError if not found.' + k = self._key(item) + i = bisect_left(self._keys, k) + j = bisect_right(self._keys, k) + return self._items[i:j].index(item) + i + + def count(self, item): + 'Return number of occurrences of item' + k = self._key(item) + i = bisect_left(self._keys, k) + j = bisect_right(self._keys, k) + return self._items[i:j].count(item) + + def insert(self, item): + 'Insert a new item. If equal keys are found, add to the left' + k = self._key(item) + i = bisect_left(self._keys, k) + self._keys.insert(i, k) + self._items.insert(i, item) + + def insert_right(self, item): + 'Insert a new item. If equal keys are found, add to the right' + k = self._key(item) + i = bisect_right(self._keys, k) + self._keys.insert(i, k) + self._items.insert(i, item) + + def remove(self, item): + 'Remove first occurence of item. Raise ValueError if not found' + i = self.index(item) + del self._keys[i] + del self._items[i] + + def find(self, k): + 'Return first item with a key == k. Raise ValueError if not found.' + i = bisect_left(self._keys, k) + if i != len(self) and self._keys[i] == k: + return self._items[i] + raise ValueError('No item found with key equal to: %r' % (k,)) + + def find_le(self, k): + 'Return last item with a key <= k. Raise ValueError if not found.' + i = bisect_right(self._keys, k) + if i: + return self._items[i-1] + raise ValueError('No item found with key at or below: %r' % (k,)) + + def find_lt(self, k): + 'Return last item with a key < k. Raise ValueError if not found.' + i = bisect_left(self._keys, k) + if i: + return self._items[i-1] + raise ValueError('No item found with key below: %r' % (k,)) + + def find_ge(self, k): + 'Return first item with a key >= equal to k. Raise ValueError if not found' + i = bisect_left(self._keys, k) + if i != len(self): + return self._items[i] + raise ValueError('No item found with key at or above: %r' % (k,)) + + def find_gt(self, k): + 'Return first item with a key > k. Raise ValueError if not found' + i = bisect_right(self._keys, k) + if i != len(self): + return self._items[i] + raise ValueError('No item found with key above: %r' % (k,)) + + # GrantJ 05/16/18 -- Additions for benchmarking. + + add = insert + + def update(self, iterable): + for value in iterable: + self.insert(value) + + def bisect(self, item): + key = self._key(item) + pos = bisect_left(self._keys, key) + return pos + + def pop(self): + self._keys.pop() + return self._items.pop() + + def discard(self, item): + try: + self.remove(item) + except ValueError: + pass + + def __delitem__(self, index): + del self._keys[index] + del self._items[index] + + +# --------------------------- Simple demo and tests ------------------------- +if __name__ == '__main__': + + def ve2no(f, *args): + 'Convert ValueError result to -1' + try: + return f(*args) + except ValueError: + return -1 + + def slow_index(seq, k): + 'Location of match or -1 if not found' + for i, item in enumerate(seq): + if item == k: + return i + return -1 + + def slow_find(seq, k): + 'First item with a key equal to k. -1 if not found' + for item in seq: + if item == k: + return item + return -1 + + def slow_find_le(seq, k): + 'Last item with a key less-than or equal to k.' + for item in reversed(seq): + if item <= k: + return item + return -1 + + def slow_find_lt(seq, k): + 'Last item with a key less-than k.' + for item in reversed(seq): + if item < k: + return item + return -1 + + def slow_find_ge(seq, k): + 'First item with a key-value greater-than or equal to k.' + for item in seq: + if item >= k: + return item + return -1 + + def slow_find_gt(seq, k): + 'First item with a key-value greater-than or equal to k.' + for item in seq: + if item > k: + return item + return -1 + + from random import choice + pool = [1.5, 2, 2.0, 3, 3.0, 3.5, 4, 4.0, 4.5] + for i in range(500): + for n in range(6): + s = [choice(pool) for i in range(n)] + sc = SortedCollection(s) + s.sort() + for probe in pool: + assert repr(ve2no(sc.index, probe)) == repr(slow_index(s, probe)) + assert repr(ve2no(sc.find, probe)) == repr(slow_find(s, probe)) + assert repr(ve2no(sc.find_le, probe)) == repr(slow_find_le(s, probe)) + assert repr(ve2no(sc.find_lt, probe)) == repr(slow_find_lt(s, probe)) + assert repr(ve2no(sc.find_ge, probe)) == repr(slow_find_ge(s, probe)) + assert repr(ve2no(sc.find_gt, probe)) == repr(slow_find_gt(s, probe)) + for i, item in enumerate(s): + assert repr(item) == repr(sc[i]) # test __getitem__ + assert item in sc # test __contains__ and __iter__ + assert s.count(item) == sc.count(item) # test count() + assert len(sc) == n # test __len__ + assert list(map(repr, reversed(sc))) == list(map(repr, reversed(s))) # test __reversed__ + assert list(sc.copy()) == list(sc) # test copy() + sc.clear() # test clear() + assert len(sc) == 0 + + sd = SortedCollection('The quick Brown Fox jumped'.split(), key=str.lower) + assert sd._keys == ['brown', 'fox', 'jumped', 'quick', 'the'] + assert sd._items == ['Brown', 'Fox', 'jumped', 'quick', 'The'] + assert sd._key == str.lower + assert repr(sd) == "SortedCollection(['Brown', 'Fox', 'jumped', 'quick', 'The'], key=lower)" + sd.key = str.upper + assert sd._key == str.upper + assert len(sd) == 5 + assert list(reversed(sd)) == ['The', 'quick', 'jumped', 'Fox', 'Brown'] + for item in sd: + assert item in sd + for i, item in enumerate(sd): + assert item == sd[i] + sd.insert('jUmPeD') + sd.insert_right('QuIcK') + assert sd._keys ==['BROWN', 'FOX', 'JUMPED', 'JUMPED', 'QUICK', 'QUICK', 'THE'] + assert sd._items == ['Brown', 'Fox', 'jUmPeD', 'jumped', 'quick', 'QuIcK', 'The'] + assert sd.find_le('JUMPED') == 'jumped', sd.find_le('JUMPED') + assert sd.find_ge('JUMPED') == 'jUmPeD' + assert sd.find_le('GOAT') == 'Fox' + assert sd.find_ge('GOAT') == 'jUmPeD' + assert sd.find('FOX') == 'Fox' + assert sd[3] == 'jumped' + assert sd[3:5] ==['jumped', 'quick'] + assert sd[-2] == 'QuIcK' + assert sd[-4:-2] == ['jumped', 'quick'] + for i, item in enumerate(sd): + assert sd.index(item) == i + try: + sd.index('xyzpdq') + except ValueError: + pass + else: + assert 0, 'Oops, failed to notify of missing value' + sd.remove('jumped') + assert list(sd) == ['Brown', 'Fox', 'jUmPeD', 'quick', 'QuIcK', 'The'] + + import doctest + from operator import itemgetter + print(doctest.testmod()) diff -Nru sortedcontainers-1.5.9/tests/test_coverage_sorteddict.py sortedcontainers-2.0.4/tests/test_coverage_sorteddict.py --- sortedcontainers-1.5.9/tests/test_coverage_sorteddict.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/test_coverage_sorteddict.py 2018-06-07 05:34:49.000000000 +0000 @@ -3,7 +3,7 @@ import random, string from .context import sortedcontainers from sortedcontainers import SortedDict -from nose.tools import raises +import pytest from sys import hexversion if hexversion < 0x03000000: @@ -21,12 +21,6 @@ else: return dic.keys() -def get_valuesview(dic): - if hexversion < 0x03000000: - return dic.viewvalues() - else: - return dic.values() - def get_itemsview(dic): if hexversion < 0x03000000: return dic.viewitems() @@ -35,6 +29,12 @@ def test_init(): temp = SortedDict() + assert temp.key is None + temp._check() + +def test_init_key(): + temp = SortedDict(negate) + assert temp.key == negate temp._check() def test_init_args(): @@ -205,30 +205,23 @@ temp = SortedDict(mapping) assert list(temp.items()) == mapping -def test_iteritems(): - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - assert list(temp.iteritems()) == mapping - def test_keys(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping) assert list(temp.keys()) == [key for key, pos in mapping] -def test_iterkeys(): - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - assert list(temp.iterkeys()) == [key for key, pos in mapping] - def test_values(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping) assert list(temp.values()) == [pos for key, pos in mapping] -def test_itervalues(): - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - assert list(temp.itervalues()) == [pos for key, pos in mapping] +def test_iterkeys(): + temp = SortedDict() + with pytest.raises(AttributeError): + temp.iterkeys + +def test_notgiven(): + assert repr(SortedDict._SortedDict__not_given) == '' def test_pop(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] @@ -236,26 +229,26 @@ assert temp.pop('a') == 0 assert temp.pop('a', -1) == -1 -@raises(KeyError) def test_pop2(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping) - temp.pop('A') + with pytest.raises(KeyError): + temp.pop('A') def test_popitem(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping) assert temp.popitem() == ('z', 25) -@raises(KeyError) def test_popitem2(): temp = SortedDict() - temp.popitem() + with pytest.raises(KeyError): + temp.popitem() def test_popitem3(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping) - assert temp.popitem(last=False) == ('a', 0) + assert temp.popitem(index=0) == ('a', 0) def test_peekitem(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] @@ -264,11 +257,11 @@ assert temp.peekitem(0) == ('a', 0) assert temp.peekitem(index=4) == ('e', 4) -@raises(IndexError) def test_peekitem2(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping) - temp.peekitem(index=100) + with pytest.raises(IndexError): + temp.peekitem(index=100) def test_setdefault(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] @@ -313,9 +306,16 @@ temp = CustomSortedDict({'alice': 3, 'bob': 1, 'carol': 2, 'dave': 4}) assert repr(temp) == "CustomSortedDict({'alice': 3, 'bob': 1, 'carol': 2, 'dave': 4})" +def test_index(): + mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] + temp = SortedDict(mapping) + assert temp.index('a') == 0 + assert temp.index('f', 3, -3) == 5 + def test_iloc(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping) + assert len(temp.iloc) == 26 assert temp.iloc[0] == 'a' assert temp.iloc[-1] == 'z' assert temp.iloc[-3:] == ['x', 'y', 'z'] @@ -324,12 +324,6 @@ del temp.iloc[-3:] assert temp.iloc[-1] == 'w' -def test_index(): - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - assert temp.index('a') == 0 - assert temp.index('f', 3, -3) == 5 - def test_index_key(): temp = SortedDict(negate, ((val, val) for val in range(100))) temp._reset(7) @@ -357,11 +351,9 @@ assert all(temp.bisect_key_left(val) == (val % 10) * 10 for val in range(10)) def test_keysview(): - if hexversion < 0x02070000: return - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping[:13]) - keys = get_keysview(temp) + keys = temp.keys() assert len(keys) == 13 assert 'a' in keys @@ -395,15 +387,13 @@ assert list(keys - that_keys) == [] assert list(keys ^ that_keys) == [] - keys = get_keysview(SortedDict(mapping[:2])) - assert repr(keys) == "SortedDict_keys(['a', 'b'])" + keys = SortedDict(mapping[:2]).keys() + assert repr(keys) == "SortedKeysView(SortedDict({'a': 0, 'b': 1}))" def test_valuesview(): - if hexversion < 0x02070000: return - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping[:13]) - values = get_valuesview(temp) + values = temp.values() assert len(values) == 13 assert 0 in values @@ -420,107 +410,20 @@ assert 25 in values assert list(values) == [pos for val, pos in mapping] - that = dict(mapping) - that_values = get_valuesview(that) - - values = get_valuesview(SortedDict(mapping[:2])) - assert repr(values) == "SortedDict_values([0, 1])" - -@raises(ValueError) -def test_valuesview(): - if hexversion < 0x02070000: raise ValueError + values = SortedDict(mapping[:2]).values() + assert repr(values) == "SortedValuesView(SortedDict({'a': 0, 'b': 1}))" +def test_values_view_index(): mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping[:13]) - values = get_valuesview(temp) - - values.index(13) - -@raises(TypeError) -def test_values_view_lt(): - if hexversion < 0x02070000: raise TypeError - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - values = get_valuesview(temp) - that = dict(mapping) - that_values = get_valuesview(that) - values < that_values - -@raises(TypeError) -def test_values_view_gt(): - if hexversion < 0x02070000: raise TypeError - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - values = get_valuesview(temp) - that = dict(mapping) - that_values = get_valuesview(that) - values > that_values - -@raises(TypeError) -def test_values_view_le(): - if hexversion < 0x02070000: raise TypeError - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - values = get_valuesview(temp) - that = dict(mapping) - that_values = get_valuesview(that) - values <= that_values - -@raises(TypeError) -def test_values_view_ge(): - if hexversion < 0x02070000: raise TypeError - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - values = get_valuesview(temp) - that = dict(mapping) - that_values = get_valuesview(that) - values >= that_values - -@raises(TypeError) -def test_values_view_and(): - if hexversion < 0x02070000: raise TypeError - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - values = get_valuesview(temp) - that = dict(mapping) - that_values = get_valuesview(that) - values & that_values - -@raises(TypeError) -def test_values_view_or(): - if hexversion < 0x02070000: raise TypeError - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - values = get_valuesview(temp) - that = dict(mapping) - that_values = get_valuesview(that) - values | that_values - -@raises(TypeError) -def test_values_view_sub(): - if hexversion < 0x02070000: raise TypeError - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - values = get_valuesview(temp) - that = dict(mapping) - that_values = get_valuesview(that) - values - that_values - -@raises(TypeError) -def test_values_view_xor(): - if hexversion < 0x02070000: raise TypeError - mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] - temp = SortedDict(mapping) - values = get_valuesview(temp) - that = dict(mapping) - that_values = get_valuesview(that) - values ^ that_values + values = temp.values() + with pytest.raises(ValueError): + values.index(100) def test_itemsview(): - if hexversion < 0x02070000: return mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] temp = SortedDict(mapping[:13]) - items = get_itemsview(temp) + items = temp.items() assert len(items) == 13 assert ('a', 0) in items @@ -540,7 +443,6 @@ assert list(items) == mapping that = dict(mapping) - that_items = get_itemsview(that) assert items == that_items @@ -555,8 +457,15 @@ assert list(items - that_items) == [] assert list(items ^ that_items) == [] - items = SortedDict(mapping[:2]).viewitems() - assert repr(items) == "SortedDict_items([('a', 0), ('b', 1)])" + items = SortedDict(mapping[:2]).items() + assert repr(items) == "SortedItemsView(SortedDict({'a': 0, 'b': 1}))" + +def test_items_view_index(): + mapping = [(val, pos) for pos, val in enumerate(string.ascii_lowercase)] + temp = SortedDict(mapping[:13]) + items = temp.items() + with pytest.raises(ValueError): + items.index(('f', 100)) def test_pickle(): import pickle @@ -565,7 +474,3 @@ beta = pickle.loads(pickle.dumps(alpha)) assert alpha == beta assert alpha._key == beta._key - -if __name__ == '__main__': - import nose - nose.main() diff -Nru sortedcontainers-1.5.9/tests/test_coverage_sortedkeylist_modulo.py sortedcontainers-2.0.4/tests/test_coverage_sortedkeylist_modulo.py --- sortedcontainers-1.5.9/tests/test_coverage_sortedkeylist_modulo.py 1970-01-01 00:00:00.000000000 +0000 +++ sortedcontainers-2.0.4/tests/test_coverage_sortedkeylist_modulo.py 2018-06-07 05:34:49.000000000 +0000 @@ -0,0 +1,738 @@ +# -*- coding: utf-8 -*- + +from sys import hexversion + +import random +from .context import sortedcontainers +from sortedcontainers import SortedList, SortedKeyList +import pytest + +if hexversion < 0x03000000: + from itertools import izip as zip + range = xrange + +def modulo(val): + return val % 10 + +def test_init(): + slt = SortedKeyList(key=modulo) + assert slt.key == modulo + slt._check() + + slt = SortedKeyList(key=modulo) + slt._reset(10000) + assert slt._load == 10000 + slt._check() + + slt = SortedKeyList(range(10000), key=modulo) + assert all(tup[0] == tup[1] for tup in zip(slt, sorted(range(10000), key=modulo))) + + slt.clear() + assert slt._len == 0 + assert slt._maxes == [] + assert slt._lists == [] + + assert isinstance(slt, SortedList) + assert isinstance(slt, SortedKeyList) + + slt._check() + +def test_new(): + slt = SortedList(iter(range(1000)), key=modulo) + assert slt == sorted(range(1000), key=modulo) + slt._check() + + assert isinstance(slt, SortedList) + assert isinstance(slt, SortedKeyList) + assert type(slt) == SortedKeyList + + slt = SortedKeyList(iter(range(1000)), key=modulo) + assert slt == sorted(range(1000), key=modulo) + slt._check() + + assert isinstance(slt, SortedList) + assert isinstance(slt, SortedKeyList) + assert type(slt) == SortedKeyList + +def test_new_error(): + class SortedListPlus(SortedList): + pass + with pytest.raises(TypeError): + SortedListPlus(key=modulo) + +def test_key(): + slt = SortedKeyList(range(10000), key=lambda val: val % 10) + slt._check() + + values = sorted(range(10000), key=lambda val: (val % 10, val)) + assert slt == values + assert all(val in slt for val in range(10000)) + +def test_key2(): + class Incomparable: + pass + a = Incomparable() + b = Incomparable() + slt = SortedKeyList(key=lambda val: 1) + slt.add(a) + slt.add(b) + assert slt == [a, b] + +def test_add(): + random.seed(0) + slt = SortedKeyList(key=modulo) + for val in range(1000): + slt.add(val) + slt._check() + + slt = SortedKeyList(key=modulo) + for val in range(1000, 0, -1): + slt.add(val) + slt._check() + + slt = SortedKeyList(key=modulo) + for val in range(1000): + slt.add(random.random()) + slt._check() + +def test_update(): + slt = SortedKeyList(key=modulo) + + slt.update(range(1000)) + assert all(tup[0] == tup[1] for tup in zip(slt, sorted(range(1000), key=modulo))) + assert len(slt) == 1000 + slt._check() + + slt.update(range(10000)) + assert len(slt) == 11000 + slt._check() + +def test_contains(): + slt = SortedKeyList(key=modulo) + slt._reset(7) + + assert 0 not in slt + + slt.update(range(100)) + + for val in range(100): + assert val in slt + + assert 100 not in slt + + slt._check() + + slt = SortedKeyList(range(100), key=modulo) + slt._reset(4) + assert all(val not in slt for val in range(100, 200)) + +def test_discard(): + slt = SortedKeyList(key=modulo) + + assert slt.discard(0) == None + assert len(slt) == 0 + slt._check() + + slt = SortedKeyList([1, 2, 2, 2, 3, 3, 5], key=modulo) + slt._reset(4) + + slt.discard(6) + slt._check() + slt.discard(4) + slt._check() + slt.discard(2) + slt._check() + slt.discard(11) + slt.discard(12) + slt.discard(13) + slt.discard(15) + + assert all(tup[0] == tup[1] for tup in zip(slt, [1, 2, 2, 3, 3, 5])) + +def test_remove(): + slt = SortedKeyList(key=modulo) + + assert slt.discard(0) == None + assert len(slt) == 0 + slt._check() + + slt = SortedKeyList([1, 2, 2, 2, 3, 3, 5], key=modulo) + slt._reset(4) + + slt.remove(2) + slt._check() + + assert all(tup[0] == tup[1] for tup in zip(slt, [1, 2, 2, 3, 3, 5])) + +def test_remove_valueerror1(): + slt = SortedKeyList(key=modulo) + with pytest.raises(ValueError): + slt.remove(0) + +def test_remove_valueerror2(): + slt = SortedKeyList(range(100), key=modulo) + slt._reset(10) + with pytest.raises(ValueError): + slt.remove(100) + +def test_remove_valueerror3(): + slt = SortedKeyList([1, 2, 2, 2, 3, 3, 5], key=modulo) + with pytest.raises(ValueError): + slt.remove(4) + +def test_remove_valueerror4(): + slt = SortedKeyList([1, 1, 1, 2, 2, 2], key=modulo) + with pytest.raises(ValueError): + slt.remove(13) + +def test_remove_valueerror5(): + slt = SortedKeyList([1, 1, 1, 2, 2, 2], key=modulo) + with pytest.raises(ValueError): + slt.remove(12) + +def test_delete(): + slt = SortedKeyList(range(20), key=modulo) + slt._reset(4) + slt._check() + for val in range(20): + slt.remove(val) + slt._check() + assert len(slt) == 0 + assert slt._maxes == [] + assert slt._lists == [] + +def test_getitem(): + random.seed(0) + slt = SortedKeyList(key=modulo) + slt._reset(17) + + slt.add(5) + slt._build_index() + slt._check() + slt.clear() + + lst = list(random.random() for rpt in range(100)) + slt.update(lst) + lst.sort(key=modulo) + + assert all(slt[idx] == lst[idx] for idx in range(100)) + assert all(slt[idx - 99] == lst[idx - 99] for idx in range(100)) + +def test_getitem_slice(): + random.seed(0) + slt = SortedKeyList(key=modulo) + slt._reset(17) + + lst = list() + + for rpt in range(100): + val = random.random() + slt.add(val) + lst.append(val) + + lst.sort(key=modulo) + + assert all(slt[start:] == lst[start:] + for start in [-75, -25, 0, 25, 75]) + + assert all(slt[:stop] == lst[:stop] + for stop in [-75, -25, 0, 25, 75]) + + assert all(slt[::step] == lst[::step] + for step in [-5, -1, 1, 5]) + + assert all(slt[start:stop] == lst[start:stop] + for start in [-75, -25, 0, 25, 75] + for stop in [-75, -25, 0, 25, 75]) + + assert all(slt[:stop:step] == lst[:stop:step] + for stop in [-75, -25, 0, 25, 75] + for step in [-5, -1, 1, 5]) + + assert all(slt[start::step] == lst[start::step] + for start in [-75, -25, 0, 25, 75] + for step in [-5, -1, 1, 5]) + + assert all(slt[start:stop:step] == lst[start:stop:step] + for start in [-75, -25, 0, 25, 75] + for stop in [-75, -25, 0, 25, 75] + for step in [-5, -1, 1, 5]) + +def test_getitem_slice_big(): + slt = SortedKeyList(range(4), key=modulo) + lst = sorted(range(4), key=modulo) + + itr = ((start, stop, step) + for start in [-6, -4, -2, 0, 2, 4, 6] + for stop in [-6, -4, -2, 0, 2, 4, 6] + for step in [-3, -2, -1, 1, 2, 3]) + + for start, stop, step in itr: + assert slt[start:stop:step] == lst[start:stop:step] + +def test_getitem_slicezero(): + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + with pytest.raises(ValueError): + slt[::0] + +def test_getitem_indexerror1(): + slt = SortedKeyList(key=modulo) + with pytest.raises(IndexError): + slt[5] + +def test_getitem_indexerror2(): + slt = SortedKeyList(range(100), key=modulo) + with pytest.raises(IndexError): + slt[200] + +def test_getitem_indexerror3(): + slt = SortedKeyList(range(100), key=modulo) + with pytest.raises(IndexError): + slt[-101] + +def test_delitem(): + random.seed(0) + + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + while len(slt) > 0: + del slt[random.randrange(len(slt))] + slt._check() + + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + del slt[:] + assert len(slt) == 0 + slt._check() + +def test_delitem_slice(): + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + del slt[10:40:1] + del slt[10:40:-1] + del slt[10:40:2] + del slt[10:40:-2] + +def test_iter(): + slt = SortedKeyList(range(10000), key=modulo) + itr = iter(slt) + assert all(tup[0] == tup[1] for tup in zip(sorted(range(10000), key=modulo), itr)) + +def test_reversed(): + slt = SortedKeyList(range(10000), key=modulo) + rev = reversed(slt) + assert all(tup[0] == tup[1] for tup in zip(reversed(sorted(range(10000), key=modulo)), rev)) + +def test_reverse(): + slt = SortedKeyList(range(10000), key=modulo) + with pytest.raises(NotImplementedError): + slt.reverse() + +def test_islice(): + sl = SortedKeyList(key=modulo) + sl._reset(7) + + assert [] == list(sl.islice()) + + values = sorted(range(100), key=modulo) + sl.update(values) + + for start in range(53): + for stop in range(53): + assert list(sl.islice(start, stop)) == values[start:stop] + + for start in range(53): + for stop in range(53): + assert list(sl.islice(start, stop, reverse=True)) == values[start:stop][::-1] + + for start in range(53): + assert list(sl.islice(start=start)) == values[start:] + assert list(sl.islice(start=start, reverse=True)) == values[start:][::-1] + + for stop in range(53): + assert list(sl.islice(stop=stop)) == values[:stop] + assert list(sl.islice(stop=stop, reverse=True)) == values[:stop][::-1] + +def test_irange(): + values = sorted(range(100), key=modulo) + + for load in range(5, 16): + slt = SortedKeyList(range(100), key=modulo) + slt._reset(load) + + for start in range(10): + for end in range(start, 10): + temp = list(slt.irange(start, end)) + assert temp == values[(start * 10):((end + 1) * 10)] + + temp = list(slt.irange(start, end, reverse=True)) + assert temp == values[(start * 10):((end + 1) * 10)][::-1] + + for start in range(10): + for end in range(start, 10): + temp = list(slt.irange(start, end, inclusive=(True, False))) + assert temp == values[(start * 10):(end * 10)] + + for start in range(10): + for end in range(start, 10): + temp = list(slt.irange(start, end, (False, True))) + assert temp == values[((start + 1) * 10):((end + 1) * 10)] + + for start in range(10): + for end in range(start, 10): + temp = list(slt.irange(start, end, inclusive=(False, False))) + assert temp == values[((start + 1) * 10):(end * 10)] + + for start in range(10): + temp = list(slt.irange(minimum=start)) + assert temp == values[(start * 10):] + + for end in range(10): + temp = list(slt.irange(maximum=end)) + assert temp == values[:(end + 1) * 10] + +def test_irange_key(): + values = sorted(range(100), key=modulo) + + for load in range(5, 16): + slt = SortedKeyList(range(100), key=modulo) + slt._reset(load) + + for start in range(10): + for end in range(start, 10): + temp = list(slt.irange_key(start, end)) + assert temp == values[(start * 10):((end + 1) * 10)] + + temp = list(slt.irange_key(start, end, reverse=True)) + assert temp == values[(start * 10):((end + 1) * 10)][::-1] + + for start in range(10): + for end in range(start, 10): + temp = list(slt.irange_key(start, end, inclusive=(True, False))) + assert temp == values[(start * 10):(end * 10)] + + for start in range(10): + for end in range(start, 10): + temp = list(slt.irange_key(start, end, (False, True))) + assert temp == values[((start + 1) * 10):((end + 1) * 10)] + + for start in range(10): + for end in range(start, 10): + temp = list(slt.irange_key(start, end, inclusive=(False, False))) + assert temp == values[((start + 1) * 10):(end * 10)] + + for start in range(10): + temp = list(slt.irange_key(min_key=start)) + assert temp == values[(start * 10):] + + for end in range(10): + temp = list(slt.irange_key(max_key=end)) + assert temp == values[:(end + 1) * 10] + +def test_len(): + slt = SortedKeyList(key=modulo) + + for val in range(10000): + slt.add(val) + assert len(slt) == (val + 1) + +def test_bisect_left(): + slt = SortedKeyList(key=modulo) + assert slt.bisect_left(0) == 0 + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + slt.update(range(100)) + slt._check() + assert slt.bisect_left(50) == 0 + assert slt.bisect_left(0) == 0 + +def test_bisect(): + slt = SortedKeyList(key=modulo) + assert slt.bisect(10) == 0 + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + slt.update(range(100)) + slt._check() + assert slt.bisect(10) == 20 + assert slt.bisect(0) == 20 + +def test_bisect_right(): + slt = SortedKeyList(key=modulo) + assert slt.bisect_right(10) == 0 + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + slt.update(range(100)) + slt._check() + assert slt.bisect_right(10) == 20 + assert slt.bisect_right(0) == 20 + +def test_bisect_key_left(): + slt = SortedKeyList(key=modulo) + assert slt.bisect_key_left(10) == 0 + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + slt.update(range(100)) + slt._check() + assert slt.bisect_key_left(0) == 0 + assert slt.bisect_key_left(5) == 100 + assert slt.bisect_key_left(10) == 200 + +def test_bisect_key_right(): + slt = SortedKeyList(key=modulo) + assert slt.bisect_key_right(0) == 0 + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + slt.update(range(100)) + slt._check() + assert slt.bisect_key_right(0) == 20 + assert slt.bisect_key_right(5) == 120 + assert slt.bisect_key_right(10) == 200 + +def test_bisect_key(): + slt = SortedKeyList(key=modulo) + assert slt.bisect_key(0) == 0 + slt = SortedKeyList(range(100), key=modulo) + slt._reset(17) + slt.update(range(100)) + slt._check() + assert slt.bisect_key(0) == 20 + assert slt.bisect_key(5) == 120 + assert slt.bisect_key(10) == 200 + +def test_copy(): + slt = SortedKeyList(range(100), key=modulo) + slt._reset(7) + two = slt.copy() + slt.add(100) + assert len(slt) == 101 + assert len(two) == 100 + +def test_copy_copy(): + import copy + slt = SortedKeyList(range(100), key=modulo) + slt._reset(7) + two = copy.copy(slt) + slt.add(100) + assert len(slt) == 101 + assert len(two) == 100 + +def test_count(): + slt = SortedKeyList(key=modulo) + slt._reset(7) + + assert slt.count(0) == 0 + + for iii in range(100): + for jjj in range(iii): + slt.add(iii) + slt._check() + + for iii in range(100): + assert slt.count(iii) == iii + + slt = SortedKeyList(range(8), key=modulo) + assert slt.count(9) == 0 + +def test_pop(): + slt = SortedKeyList(range(10), key=modulo) + slt._reset(4) + slt._check() + assert slt.pop() == 9 + slt._check() + assert slt.pop(0) == 0 + slt._check() + assert slt.pop(-2) == 7 + slt._check() + assert slt.pop(4) == 5 + slt._check() + +def test_pop_indexerror1(): + slt = SortedKeyList(range(10), key=modulo) + slt._reset(4) + with pytest.raises(IndexError): + slt.pop(-11) + +def test_pop_indexerror2(): + slt = SortedKeyList(range(10), key=modulo) + slt._reset(4) + with pytest.raises(IndexError): + slt.pop(10) + +def test_index(): + slt = SortedKeyList(range(100), key=modulo) + slt._reset(7) + + for pos, val in enumerate(sorted(range(100), key=modulo)): + assert val == slt.index(pos) + + assert slt.index(9, 0, 1000) == 90 + + slt = SortedKeyList((0 for rpt in range(100)), key=modulo) + slt._reset(7) + + for start in range(100): + for stop in range(start, 100): + assert slt.index(0, start, stop + 1) == start + + for start in range(100): + assert slt.index(0, -(100 - start)) == start + + assert slt.index(0, -1000) == 0 + +def test_index_valueerror1(): + slt = SortedKeyList([0] * 10, key=modulo) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(0, 10) + +def test_index_valueerror2(): + slt = SortedKeyList([0] * 10, key=modulo) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(0, 0, -10) + +def test_index_valueerror3(): + slt = SortedKeyList([0] * 10, key=modulo) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(0, 7, 3) + +def test_index_valueerror4(): + slt = SortedKeyList([0] * 10, key=modulo) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(1) + +def test_index_valueerror5(): + slt = SortedKeyList(key=modulo) + with pytest.raises(ValueError): + slt.index(1) + +def test_index_valueerror6(): + slt = SortedKeyList(range(100), key=modulo) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(91, 0, 15) + +def test_index_valueerror7(): + slt = SortedKeyList([0] * 10 + [1] * 10 + [2] * 10, key=modulo) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(1, 0, 10) + +def test_index_valueerror8(): + slt = SortedKeyList(range(10), key=modulo) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(4, 5) + +def test_index_valueerror9(): + slt = SortedKeyList(key=modulo) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(5) + +def test_index_valueerror10(): + slt = SortedKeyList(range(10), key=modulo) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(19) + +def test_mul(): + this = SortedKeyList(range(10), key=modulo) + this._reset(4) + that = this * 5 + this._check() + that._check() + assert this == sorted(range(10), key=modulo) + assert that == sorted(list(range(10)) * 5, key=modulo) + assert this != that + +def test_imul(): + this = SortedKeyList(range(10), key=modulo) + this._reset(4) + this *= 5 + this._check() + assert this == sorted(list(range(10)) * 5, key=modulo) + +def test_op_add(): + this = SortedKeyList(range(10), key=modulo) + this._reset(4) + assert (this + this + this) == (this * 3) + + that = SortedKeyList(range(10), key=modulo) + that._reset(4) + that += that + that += that + assert that == (this * 4) + +def test_eq(): + this = SortedKeyList(range(10), key=modulo) + this._reset(4) + assert this == list(range(10)) + assert this == tuple(range(10)) + assert not (this == list(range(9))) + +def test_ne(): + this = SortedKeyList(range(10, 20), key=modulo) + this._reset(4) + assert this != list(range(11, 21)) + assert this != tuple(range(10, 21)) + assert this != [0, 1, 2, 3, 3, 5, 6, 7, 8, 9] + assert this != (val for val in range(10)) + assert this != set() + +def test_lt(): + this = SortedKeyList(range(10, 15), key=modulo) + this._reset(4) + assert this < [10, 11, 13, 13, 14] + assert this < [10, 11, 12, 13, 14, 15] + assert this < [11] + +def test_le(): + this = SortedKeyList(range(10, 15), key=modulo) + this._reset(4) + assert this <= [10, 11, 12, 13, 14] + assert this <= [10, 11, 12, 13, 14, 15] + assert this <= [10, 11, 13, 13, 14] + assert this <= [11] + +def test_gt(): + this = SortedKeyList(range(10, 15), key=modulo) + this._reset(4) + assert this > [10, 11, 11, 13, 14] + assert this > [10, 11, 12, 13] + assert this > [9] + +def test_ge(): + this = SortedKeyList(range(10, 15), key=modulo) + this._reset(4) + assert this >= [10, 11, 12, 13, 14] + assert this >= [10, 11, 12, 13] + assert this >= [10, 11, 11, 13, 14] + assert this >= [9] + +def test_repr(): + this = SortedKeyList(range(10), key=modulo) + this._reset(4) + assert repr(this).startswith('SortedKeyList([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], key= 0: + del slt[random.randrange(len(slt))] + slt._check() + +def test_delitem_slice(): + slt = SortedKeyList(range(100), key=negate) + slt._reset(17) + del slt[10:40:1] + del slt[10:40:-1] + del slt[10:40:2] + del slt[10:40:-2] + +def test_iter(): + slt = SortedKeyList(range(10000), key=negate) + itr = iter(slt) + assert all(tup[0] == tup[1] for tup in zip(range(9999, -1, -1), itr)) + +def test_reversed(): + slt = SortedKeyList(range(10000), key=negate) + rev = reversed(slt) + assert all(tup[0] == tup[1] for tup in zip(range(10000), rev)) + +def test_reverse(): + slt = SortedKeyList(range(10000), key=negate) + with pytest.raises(NotImplementedError): + slt.reverse() + +def test_islice(): + return + slt = SortedKeyList(key=negate) + slt._reset(7) + + assert [] == list(slt.islice()) + + values = sorted(range(53), key=negate) + slt.update(values) + + for start in range(53): + for stop in range(53): + assert list(slt.islice(start, stop)) == values[start:stop] + + for start in range(53): + for stop in range(53): + assert list(slt.islice(start, stop, reverse=True)) == values[start:stop][::-1] + + for start in range(53): + assert list(slt.islice(start=start)) == values[start:] + assert list(slt.islice(start=start, reverse=True)) == values[start:][::-1] + + for stop in range(53): + assert list(slt.islice(stop=stop)) == values[:stop] + assert list(slt.islice(stop=stop, reverse=True)) == values[:stop][::-1] + +def test_irange(): + slt = SortedKeyList(key=negate) + slt._reset(7) + + assert [] == list(slt.irange()) + + values = list(range(53)) + slt.update(values) + + for start in range(53): + for end in range(start, 53): + assert list(slt.irange(end, start)) == values[start:(end + 1)][::-1] + assert list(slt.irange(end, start, reverse=True)) == values[start:(end + 1)] + + for start in range(53): + for end in range(start, 53): + assert list(slt.irange(end, start, (True, False))) == values[(start + 1):(end + 1)][::-1] + + for start in range(53): + for end in range(start, 53): + assert list(slt.irange(end, start, (False, True))) == values[start:end][::-1] + + for start in range(53): + for end in range(start, 53): + assert list(slt.irange(end, start, (False, False))) == values[(start + 1):end][::-1] + + for start in range(53): + assert list(slt.irange(start)) == values[:(start + 1)][::-1] + + for end in range(53): + assert list(slt.irange(None, end, (True, False))) == values[(end + 1):][::-1] + + assert list(slt.irange(inclusive=(False, False))) == values[::-1] + + assert list(slt.irange(-1)) == [] + assert list(slt.irange(None, -1, (True, False))) == values[::-1] + +def test_len(): + slt = SortedKeyList(key=negate) + + for val in range(10000): + slt.add(val) + assert len(slt) == (val + 1) + +def test_bisect_left(): + slt = SortedKeyList(key=negate) + assert slt.bisect_left(0) == 0 + slt = SortedKeyList(range(100), key=negate) + slt._reset(17) + slt.update(range(100)) + slt._check() + assert slt.bisect_left(50) == 98 + assert slt.bisect_left(0) == 198 + assert slt.bisect_left(-1) == 200 + +def test_bisect(): + slt = SortedKeyList(key=negate) + assert slt.bisect(10) == 0 + slt = SortedKeyList(range(100), key=negate) + slt._reset(17) + slt.update(range(100)) + slt._check() + assert slt.bisect(10) == 180 + assert slt.bisect(0) == 200 + +def test_bisect_right(): + slt = SortedKeyList(key=negate) + assert slt.bisect_right(10) == 0 + slt = SortedKeyList(range(100), key=negate) + slt._reset(17) + slt.update(range(100)) + slt._check() + assert slt.bisect_right(10) == 180 + assert slt.bisect_right(0) == 200 + +def test_copy(): + slt = SortedKeyList(range(100), key=negate) + slt._reset(7) + two = slt.copy() + slt.add(100) + assert len(slt) == 101 + assert len(two) == 100 + +def test_copy_copy(): + import copy + slt = SortedKeyList(range(100), key=negate) + slt._reset(7) + two = copy.copy(slt) + slt.add(100) + assert len(slt) == 101 + assert len(two) == 100 + +def test_count(): + slt = SortedKeyList(key=negate) + slt._reset(7) + + assert slt.count(0) == 0 + + for iii in range(100): + for jjj in range(iii): + slt.add(iii) + slt._check() + + for iii in range(100): + assert slt.count(iii) == iii + +def test_pop(): + slt = SortedKeyList(range(10), key=negate) + slt._reset(4) + slt._check() + assert slt.pop() == 0 + slt._check() + assert slt.pop(0) == 9 + slt._check() + assert slt.pop(-2) == 2 + slt._check() + assert slt.pop(4) == 4 + slt._check() + +def test_pop_indexerror1(): + slt = SortedKeyList(range(10), key=negate) + slt._reset(4) + with pytest.raises(IndexError): + slt.pop(-11) + +def test_pop_indexerror2(): + slt = SortedKeyList(range(10), key=negate) + slt._reset(4) + with pytest.raises(IndexError): + slt.pop(10) + +def test_index(): + slt = SortedKeyList(range(100), key=negate) + slt._reset(17) + + for pos, val in enumerate(range(99, -1, -1)): + assert val == slt.index(pos) + + assert slt.index(99, 0, 1000) == 0 + + slt = SortedKeyList((0 for rpt in range(100)), key=negate) + slt._reset(17) + + for start in range(100): + for stop in range(start, 100): + assert slt.index(0, start, stop + 1) == start + + for start in range(100): + assert slt.index(0, -(100 - start)) == start + + assert slt.index(0, -1000) == 0 + +def test_index_valueerror1(): + slt = SortedKeyList([0] * 10, key=negate) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(0, 10) + +def test_index_valueerror2(): + slt = SortedKeyList([0] * 10, key=negate) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(0, 0, -10) + +def test_index_valueerror3(): + slt = SortedKeyList([0] * 10, key=negate) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(0, 7, 3) + +def test_index_valueerror4(): + slt = SortedKeyList([0] * 10, key=negate) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(1) + +def test_index_valueerror5(): + slt = SortedKeyList(key=negate) + with pytest.raises(ValueError): + slt.index(1) + +def test_index_valueerror6(): + slt = SortedKeyList(range(10), key=negate) + slt._reset(4) + with pytest.raises(ValueError): + slt.index(6, 5) + +def test_mul(): + this = SortedKeyList(range(10), key=negate) + this._reset(4) + that = this * 5 + this._check() + that._check() + assert this == list(reversed((range(10)))) + assert that == list(sorted(list(range(10)) * 5, reverse=True)) + assert this != that + +def test_imul(): + this = SortedKeyList(range(10), key=negate) + this._reset(4) + this *= 5 + this._check() + assert this == sorted(list(range(10)) * 5, reverse=True) + +def test_op_add(): + this = SortedKeyList(range(10), key=negate) + this._reset(4) + assert (this + this + this) == (this * 3) + + that = SortedKeyList(range(10), key=negate) + that._reset(4) + that += that + that += that + assert that == (this * 4) + +def test_eq(): + this = SortedKeyList(range(10), key=negate) + this._reset(4) + that = SortedKeyList(range(20), key=negate) + that._reset(4) + assert not (this == that) + that.clear() + that.update(range(10)) + assert this == that + +def test_lt(): + this = SortedKeyList(range(10), key=negate) + this._reset(4) + that = SortedKeyList(range(10, 20), key=negate) + that._reset(5) + assert this < that + assert not (that < this) + that = SortedKeyList(range(1, 20), key=negate) + that._reset(6) + assert this < that + that = SortedKeyList(range(1, 10), key=negate) + that._reset(4) + assert not (this < that) + +def test_lte(): + this = SortedKeyList(range(10), key=negate) + this._reset(4) + that = SortedKeyList(range(10), key=negate) + that._reset(5) + assert this <= that + assert that <= this + del this[-1] + assert this <= that + assert not (that <= this) + +def test_gt(): + this = SortedKeyList(range(10), key=negate) + this._reset(4) + that = SortedKeyList(range(10, 20), key=negate) + that._reset(5) + assert that > this + assert not (this > that) + that = SortedKeyList(range(1, 20), key=negate) + that._reset(6) + assert that > this + that = SortedKeyList(range(1, 10), key=negate) + that._reset(4) + assert not (that > this) + +def test_gte(): + this = SortedKeyList(range(10), key=negate) + this._reset(4) + that = SortedKeyList(range(10), key=negate) + that._reset(5) + assert this >= that + assert that >= this + del this[-1] + assert that >= this + assert not (this >= that) + +def test_repr(): + this = SortedKeyList(range(10), key=negate) + this._reset(4) + assert repr(this).startswith('SortedKeyList([9, 8, 7, 6, 5, 4, 3, 2, 1, 0], key= 0: - del slt[random.randrange(len(slt))] - slt._check() - - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - del slt[:] - assert len(slt) == 0 - slt._check() - -def test_delitem_slice(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - del slt[10:40:1] - del slt[10:40:-1] - del slt[10:40:2] - del slt[10:40:-2] - -def test_setitem(): - random.seed(0) - slt = SortedListWithKey(range(0, 100), key=modulo) - slt._reset(17) - slt[0] = 100 - slt[99] = 99 - slt[55] = 45 - -def test_setitem_slice(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt[:10] = [90, 80, 70, 60, 50, 40, 30, 20, 10, 0] - slt[:10:2] = [0, 10, 20, 30, 40] - slt[:] = sorted(range(100), key=modulo) - slt[90:] = [] - slt[:10] = [] - assert len(slt) == 80 - -@raises(ValueError) -def test_setitem_slice_bad(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt[:10] = list(reversed(range(10))) - -@raises(ValueError) -def test_setitem_slice_bad1(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt[10:20] = range(20, 30) - -@raises(ValueError) -def test_setitem_slice_bad2(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt[20:30] = range(10, 20) - -@raises(ValueError) -def test_setitem_extended_slice_bad1(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt[20:80:3] = list(range(10)) - -@raises(ValueError) -def test_setitem_extended_slice_bad2(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt[40:90:5] = list(range(10)) - -@raises(ValueError) -def test_setitem_valueerror1(): - slt = SortedListWithKey(range(10), key=modulo) - slt[9] = 10 - -@raises(ValueError) -def test_setitem_valueerror2(): - slt = SortedListWithKey(range(10), key=modulo) - slt[0] = 9 - -def test_iter(): - slt = SortedListWithKey(range(10000), key=modulo) - itr = iter(slt) - assert all(tup[0] == tup[1] for tup in zip(sorted(range(10000), key=modulo), itr)) - -def test_reversed(): - slt = SortedListWithKey(range(10000), key=modulo) - rev = reversed(slt) - assert all(tup[0] == tup[1] for tup in zip(reversed(sorted(range(10000), key=modulo)), rev)) - -@raises(NotImplementedError) -def test_reverse(): - slt = SortedListWithKey(range(10000), key=modulo) - slt.reverse() - -def test_islice(): - sl = SortedListWithKey(key=modulo) - sl._reset(7) - - assert [] == list(sl.islice()) - - values = sorted(range(100), key=modulo) - sl.update(values) - - for start in range(53): - for stop in range(53): - assert list(sl.islice(start, stop)) == values[start:stop] - - for start in range(53): - for stop in range(53): - assert list(sl.islice(start, stop, reverse=True)) == values[start:stop][::-1] - - for start in range(53): - assert list(sl.islice(start=start)) == values[start:] - assert list(sl.islice(start=start, reverse=True)) == values[start:][::-1] - - for stop in range(53): - assert list(sl.islice(stop=stop)) == values[:stop] - assert list(sl.islice(stop=stop, reverse=True)) == values[:stop][::-1] - -def test_irange(): - values = sorted(range(100), key=modulo) - - for load in range(5, 16): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(load) - - for start in range(10): - for end in range(start, 10): - temp = list(slt.irange(start, end)) - assert temp == values[(start * 10):((end + 1) * 10)] - - temp = list(slt.irange(start, end, reverse=True)) - assert temp == values[(start * 10):((end + 1) * 10)][::-1] - - for start in range(10): - for end in range(start, 10): - temp = list(slt.irange(start, end, inclusive=(True, False))) - assert temp == values[(start * 10):(end * 10)] - - for start in range(10): - for end in range(start, 10): - temp = list(slt.irange(start, end, (False, True))) - assert temp == values[((start + 1) * 10):((end + 1) * 10)] - - for start in range(10): - for end in range(start, 10): - temp = list(slt.irange(start, end, inclusive=(False, False))) - assert temp == values[((start + 1) * 10):(end * 10)] - - for start in range(10): - temp = list(slt.irange(minimum=start)) - assert temp == values[(start * 10):] - - for end in range(10): - temp = list(slt.irange(maximum=end)) - assert temp == values[:(end + 1) * 10] - -def test_irange_key(): - values = sorted(range(100), key=modulo) - - for load in range(5, 16): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(load) - - for start in range(10): - for end in range(start, 10): - temp = list(slt.irange_key(start, end)) - assert temp == values[(start * 10):((end + 1) * 10)] - - temp = list(slt.irange_key(start, end, reverse=True)) - assert temp == values[(start * 10):((end + 1) * 10)][::-1] - - for start in range(10): - for end in range(start, 10): - temp = list(slt.irange_key(start, end, inclusive=(True, False))) - assert temp == values[(start * 10):(end * 10)] - - for start in range(10): - for end in range(start, 10): - temp = list(slt.irange_key(start, end, (False, True))) - assert temp == values[((start + 1) * 10):((end + 1) * 10)] - - for start in range(10): - for end in range(start, 10): - temp = list(slt.irange_key(start, end, inclusive=(False, False))) - assert temp == values[((start + 1) * 10):(end * 10)] - - for start in range(10): - temp = list(slt.irange_key(min_key=start)) - assert temp == values[(start * 10):] - - for end in range(10): - temp = list(slt.irange_key(max_key=end)) - assert temp == values[:(end + 1) * 10] - -def test_len(): - slt = SortedListWithKey(key=modulo) - - for val in range(10000): - slt.add(val) - assert len(slt) == (val + 1) - -def test_bisect_left(): - slt = SortedListWithKey(key=modulo) - assert slt.bisect_left(0) == 0 - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt.update(range(100)) - slt._check() - assert slt.bisect_left(50) == 0 - assert slt.bisect_left(0) == 0 - -def test_bisect(): - slt = SortedListWithKey(key=modulo) - assert slt.bisect(10) == 0 - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt.update(range(100)) - slt._check() - assert slt.bisect(10) == 20 - assert slt.bisect(0) == 20 - -def test_bisect_right(): - slt = SortedListWithKey(key=modulo) - assert slt.bisect_right(10) == 0 - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt.update(range(100)) - slt._check() - assert slt.bisect_right(10) == 20 - assert slt.bisect_right(0) == 20 - -def test_bisect_key_left(): - slt = SortedListWithKey(key=modulo) - assert slt.bisect_key_left(10) == 0 - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt.update(range(100)) - slt._check() - assert slt.bisect_key_left(0) == 0 - assert slt.bisect_key_left(5) == 100 - assert slt.bisect_key_left(10) == 200 - -def test_bisect_key_right(): - slt = SortedListWithKey(key=modulo) - assert slt.bisect_key_right(0) == 0 - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt.update(range(100)) - slt._check() - assert slt.bisect_key_right(0) == 20 - assert slt.bisect_key_right(5) == 120 - assert slt.bisect_key_right(10) == 200 - -def test_bisect_key(): - slt = SortedListWithKey(key=modulo) - assert slt.bisect_key(0) == 0 - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(17) - slt.update(range(100)) - slt._check() - assert slt.bisect_key(0) == 20 - assert slt.bisect_key(5) == 120 - assert slt.bisect_key(10) == 200 - -def test_copy(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(7) - two = slt.copy() - slt.add(100) - assert len(slt) == 101 - assert len(two) == 100 - -def test_copy_copy(): - import copy - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(7) - two = copy.copy(slt) - slt.add(100) - assert len(slt) == 101 - assert len(two) == 100 - -def test_count(): - slt = SortedListWithKey(key=modulo) - slt._reset(7) - - assert slt.count(0) == 0 - - for iii in range(100): - for jjj in range(iii): - slt.add(iii) - slt._check() - - for iii in range(100): - assert slt.count(iii) == iii - - slt = SortedListWithKey(range(8), key=modulo) - assert slt.count(9) == 0 - -def test_append(): - slt = SortedListWithKey(key=modulo) - slt._reset(4) - - slt.append(0) - - for val in range(1, 10): - slt.append(val) - slt._check() - -@raises(ValueError) -def test_append_valueerror(): - slt = SortedListWithKey(range(100), key=modulo) - slt.append(5) - -def test_extend(): - slt = SortedListWithKey(key=modulo) - slt._reset(4) - - slt.extend(range(5)) - slt._check() - - slt.extend(range(6, 10)) - slt._check() - -@raises(ValueError) -def test_extend_valueerror1(): - slt = SortedListWithKey(key=modulo) - slt.extend([1, 2, 3, 5, 4, 6]) - -@raises(ValueError) -def test_extend_valueerror2(): - slt = SortedListWithKey(range(20), key=modulo) - slt._reset(4) - slt.extend([17, 18, 19, 20, 21, 22, 23]) - -def test_insert(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.insert(-100, 0) - slt._check() - slt.insert(-1, 9) - slt._check() - slt.insert(0, 10) - slt._check() - - slt = SortedListWithKey(key=modulo) - slt._reset(4) - slt.insert(0, 5) - slt._check() - - slt = SortedListWithKey(range(5, 15), key=modulo) - slt._reset(4) - for rpt in range(8): - slt.insert(0, 10) - slt._check() - - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.insert(8, 8) - slt._check() - -@raises(ValueError) -def test_insert_valueerror1(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.insert(10, 5) - -@raises(ValueError) -def test_insert_valueerror2(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.insert(0, 9) - -@raises(ValueError) -def test_insert_valueerror3(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.insert(5, 3) - -@raises(ValueError) -def test_insert_valueerror4(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.insert(5, 7) - -def test_pop(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt._check() - assert slt.pop() == 9 - slt._check() - assert slt.pop(0) == 0 - slt._check() - assert slt.pop(-2) == 7 - slt._check() - assert slt.pop(4) == 5 - slt._check() - -@raises(IndexError) -def test_pop_indexerror1(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.pop(-11) - -@raises(IndexError) -def test_pop_indexerror2(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.pop(10) - -def test_index(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(7) - - for pos, val in enumerate(sorted(range(100), key=modulo)): - assert val == slt.index(pos) - - assert slt.index(9, 0, 1000) == 90 - - slt = SortedListWithKey((0 for rpt in range(100)), key=modulo) - slt._reset(7) - - for start in range(100): - for stop in range(start, 100): - assert slt.index(0, start, stop + 1) == start - - for start in range(100): - assert slt.index(0, -(100 - start)) == start - - assert slt.index(0, -1000) == 0 - -@raises(ValueError) -def test_index_valueerror1(): - slt = SortedListWithKey([0] * 10, key=modulo) - slt._reset(4) - slt.index(0, 10) - -@raises(ValueError) -def test_index_valueerror2(): - slt = SortedListWithKey([0] * 10, key=modulo) - slt._reset(4) - slt.index(0, 0, -10) - -@raises(ValueError) -def test_index_valueerror3(): - slt = SortedListWithKey([0] * 10, key=modulo) - slt._reset(4) - slt.index(0, 7, 3) - -@raises(ValueError) -def test_index_valueerror4(): - slt = SortedListWithKey([0] * 10, key=modulo) - slt._reset(4) - slt.index(1) - -@raises(ValueError) -def test_index_valueerror5(): - slt = SortedListWithKey(key=modulo) - slt.index(1) - -@raises(ValueError) -def test_index_valueerror6(): - slt = SortedListWithKey(range(100), key=modulo) - slt._reset(4) - slt.index(91, 0, 15) - -@raises(ValueError) -def test_index_valueerror7(): - slt = SortedListWithKey([0] * 10 + [1] * 10 + [2] * 10, key=modulo) - slt._reset(4) - slt.index(1, 0, 10) - -@raises(ValueError) -def test_index_valueerror8(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.index(4, 5) - -@raises(ValueError) -def test_index_valueerror9(): - slt = SortedListWithKey(key=modulo) - slt._reset(4) - slt.index(5) - -@raises(ValueError) -def test_index_valueerror10(): - slt = SortedListWithKey(range(10), key=modulo) - slt._reset(4) - slt.index(19) - -def test_mul(): - this = SortedListWithKey(range(10), key=modulo) - this._reset(4) - that = this * 5 - this._check() - that._check() - assert this == sorted(range(10), key=modulo) - assert that == sorted(list(range(10)) * 5, key=modulo) - assert this != that - -def test_imul(): - this = SortedListWithKey(range(10), key=modulo) - this._reset(4) - this *= 5 - this._check() - assert this == sorted(list(range(10)) * 5, key=modulo) - -def test_op_add(): - this = SortedListWithKey(range(10), key=modulo) - this._reset(4) - assert (this + this + this) == (this * 3) - - that = SortedListWithKey(range(10), key=modulo) - that._reset(4) - that += that - that += that - assert that == (this * 4) - -def test_eq(): - this = SortedListWithKey(range(10), key=modulo) - this._reset(4) - assert this == list(range(10)) - assert this == tuple(range(10)) - assert not (this == list(range(9))) - -def test_ne(): - this = SortedListWithKey(range(10, 20), key=modulo) - this._reset(4) - assert this != list(range(11, 21)) - assert this != tuple(range(10, 21)) - assert this != [0, 1, 2, 3, 3, 5, 6, 7, 8, 9] - assert this != (val for val in range(10)) - assert this != set() - -def test_lt(): - this = SortedListWithKey(range(10, 15), key=modulo) - this._reset(4) - assert this < [10, 11, 13, 13, 14] - assert this < [10, 11, 12, 13, 14, 15] - assert this < [11] - -def test_le(): - this = SortedListWithKey(range(10, 15), key=modulo) - this._reset(4) - assert this <= [10, 11, 12, 13, 14] - assert this <= [10, 11, 12, 13, 14, 15] - assert this <= [10, 11, 13, 13, 14] - assert this <= [11] - -def test_gt(): - this = SortedListWithKey(range(10, 15), key=modulo) - this._reset(4) - assert this > [10, 11, 11, 13, 14] - assert this > [10, 11, 12, 13] - assert this > [9] - -def test_ge(): - this = SortedListWithKey(range(10, 15), key=modulo) - this._reset(4) - assert this >= [10, 11, 12, 13, 14] - assert this >= [10, 11, 12, 13] - assert this >= [10, 11, 11, 13, 14] - assert this >= [9] - -def test_repr(): - this = SortedListWithKey(range(10), key=modulo) - this._reset(4) - assert repr(this).startswith('SortedListWithKey([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], key= 0: - del slt[random.randrange(len(slt))] - slt._check() - -def test_delitem_slice(): - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - del slt[10:40:1] - del slt[10:40:-1] - del slt[10:40:2] - del slt[10:40:-2] - -def test_setitem(): - random.seed(0) - slt = SortedListWithKey(range(0, 100, 10), key=negate) - slt._reset(4) - - slt[-3] = 20 - slt._check() - - values = list(enumerate(range(95, 5, -10))) - random.shuffle(values) - for pos, val in values: - slt[pos] = val - -def test_setitem_slice(): - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - slt[:10] = iter(range(99, 89, -1)) - assert slt == list(range(99, -1, -1)) - slt[:10:2] = iter([99, 97, 95, 93, 91]) - assert slt == list(range(99, -1, -1)) - slt[-50:] = range(49, -51, -1) - assert slt == list(range(99, -51, -1)) - slt[-100:] = range(49, -1, -1) - assert slt == list(range(99, -1, -1)) - slt[:] = range(99, -1, -1) - assert slt == list(range(99, -1, -1)) - slt[90:] = [] - assert slt == list(range(99, 9, -1)) - slt[:10] = [] - assert slt == list(range(89, 9, -1)) - -@raises(ValueError) -def test_setitem_slice_bad(): - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - slt[:10] = list(reversed(range(10))) - -@raises(ValueError) -def test_setitem_slice_bad1(): - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - slt[10:20] = range(20, 30) - -@raises(ValueError) -def test_setitem_slice_bad2(): - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - slt[20:30] = range(10, 20) - -def test_setitem_extended_slice(): - slt = SortedListWithKey(range(1000, 0, -10), key=negate) - slt._reset(17) - lst = list(range(1000, 0, -10)) - lst[10:90:10] = range(905, 105, -100) - slt[10:90:10] = range(905, 105, -100) - assert slt == lst - -@raises(ValueError) -def test_setitem_extended_slice_bad1(): - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - slt[20:80:3] = list(range(10)) - -@raises(ValueError) -def test_setitem_extended_slice_bad2(): - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - slt[40:90:5] = list(range(10)) - -@raises(ValueError) -def test_setitem_valueerror1(): - slt = SortedListWithKey(range(10), key=negate) - slt[9] = 10 - -@raises(ValueError) -def test_setitem_valueerror2(): - slt = SortedListWithKey(range(10), key=negate) - slt[0] = 0 - -def test_iter(): - slt = SortedListWithKey(range(10000), key=negate) - itr = iter(slt) - assert all(tup[0] == tup[1] for tup in zip(range(9999, -1, -1), itr)) - -def test_reversed(): - slt = SortedListWithKey(range(10000), key=negate) - rev = reversed(slt) - assert all(tup[0] == tup[1] for tup in zip(range(10000), rev)) - -@raises(NotImplementedError) -def test_reverse(): - slt = SortedListWithKey(range(10000), key=negate) - slt.reverse() - -def test_islice(): - return - slt = SortedListWithKey(key=negate) - slt._reset(7) - - assert [] == list(slt.islice()) - - values = sorted(range(53), key=negate) - slt.update(values) - - for start in range(53): - for stop in range(53): - assert list(slt.islice(start, stop)) == values[start:stop] - - for start in range(53): - for stop in range(53): - assert list(slt.islice(start, stop, reverse=True)) == values[start:stop][::-1] - - for start in range(53): - assert list(slt.islice(start=start)) == values[start:] - assert list(slt.islice(start=start, reverse=True)) == values[start:][::-1] - - for stop in range(53): - assert list(slt.islice(stop=stop)) == values[:stop] - assert list(slt.islice(stop=stop, reverse=True)) == values[:stop][::-1] - -def test_irange(): - slt = SortedListWithKey(key=negate) - slt._reset(7) - - assert [] == list(slt.irange()) - - values = list(range(53)) - slt.update(values) - - for start in range(53): - for end in range(start, 53): - assert list(slt.irange(end, start)) == values[start:(end + 1)][::-1] - assert list(slt.irange(end, start, reverse=True)) == values[start:(end + 1)] - - for start in range(53): - for end in range(start, 53): - assert list(slt.irange(end, start, (True, False))) == values[(start + 1):(end + 1)][::-1] - - for start in range(53): - for end in range(start, 53): - assert list(slt.irange(end, start, (False, True))) == values[start:end][::-1] - - for start in range(53): - for end in range(start, 53): - assert list(slt.irange(end, start, (False, False))) == values[(start + 1):end][::-1] - - for start in range(53): - assert list(slt.irange(start)) == values[:(start + 1)][::-1] - - for end in range(53): - assert list(slt.irange(None, end, (True, False))) == values[(end + 1):][::-1] - - assert list(slt.irange(inclusive=(False, False))) == values[::-1] - - assert list(slt.irange(-1)) == [] - assert list(slt.irange(None, -1, (True, False))) == values[::-1] - -def test_len(): - slt = SortedListWithKey(key=negate) - - for val in range(10000): - slt.add(val) - assert len(slt) == (val + 1) - -def test_bisect_left(): - slt = SortedListWithKey(key=negate) - assert slt.bisect_left(0) == 0 - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - slt.update(range(100)) - slt._check() - assert slt.bisect_left(50) == 98 - assert slt.bisect_left(0) == 198 - assert slt.bisect_left(-1) == 200 - -def test_bisect(): - slt = SortedListWithKey(key=negate) - assert slt.bisect(10) == 0 - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - slt.update(range(100)) - slt._check() - assert slt.bisect(10) == 180 - assert slt.bisect(0) == 200 - -def test_bisect_right(): - slt = SortedListWithKey(key=negate) - assert slt.bisect_right(10) == 0 - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - slt.update(range(100)) - slt._check() - assert slt.bisect_right(10) == 180 - assert slt.bisect_right(0) == 200 - -def test_copy(): - slt = SortedListWithKey(range(100), key=negate) - slt._reset(7) - two = slt.copy() - slt.add(100) - assert len(slt) == 101 - assert len(two) == 100 - -def test_copy_copy(): - import copy - slt = SortedListWithKey(range(100), key=negate) - slt._reset(7) - two = copy.copy(slt) - slt.add(100) - assert len(slt) == 101 - assert len(two) == 100 - -def test_count(): - slt = SortedListWithKey(key=negate) - slt._reset(7) - - assert slt.count(0) == 0 - - for iii in range(100): - for jjj in range(iii): - slt.add(iii) - slt._check() - - for iii in range(100): - assert slt.count(iii) == iii - -def test_append(): - slt = SortedListWithKey(key=negate) - slt._reset(17) - - slt.append(1000) - - for val in range(999, -1, -1): - slt.append(val) - slt._check() - -@raises(ValueError) -def test_append_valueerror(): - slt = SortedListWithKey(range(100), key=negate) - slt.append(5) - -def test_extend(): - slt = SortedListWithKey(key=negate) - slt._reset(17) - - slt.extend(range(300, 200, -1)) - slt._check() - - slt.extend(list(range(200, 100, -1))) - slt._check() - - for val in range(100, 0, -1): - del slt._index[:] - slt._build_index() - slt.extend([val] * (101 - val)) - slt._check() - -@raises(ValueError) -def test_extend_valueerror1(): - slt = SortedListWithKey(key=negate) - slt.extend([1, 2, 3, 5, 4, 6]) - -@raises(ValueError) -def test_extend_valueerror2(): - slt = SortedListWithKey(range(20), key=negate) - slt._reset(4) - slt.extend([5, 4, 3, 2, 1]) - -def test_insert(): - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt.insert(-1, 0) - slt._check() - slt.insert(-100, 9) - slt._check() - slt.insert(0, 10) - slt._check() - slt.insert(14, -1) - slt._check() - - slt = SortedListWithKey(key=negate) - slt._reset(4) - slt.insert(0, 5) - slt._check() - - slt = SortedListWithKey(range(5, 15), key=negate) - slt._reset(4) - for rpt in range(8): - slt.insert(0, 15) - slt._check() - - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt.insert(8, 2) - slt._check() - -@raises(ValueError) -def test_insert_valueerror1(): - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt.insert(10, 5) - -@raises(ValueError) -def test_insert_valueerror2(): - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt.insert(0, 0) - -@raises(ValueError) -def test_insert_valueerror3(): - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt.insert(5, 3) - -@raises(ValueError) -def test_insert_valueerror4(): - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt.insert(5, 7) - -def test_pop(): - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt._check() - assert slt.pop() == 0 - slt._check() - assert slt.pop(0) == 9 - slt._check() - assert slt.pop(-2) == 2 - slt._check() - assert slt.pop(4) == 4 - slt._check() - -@raises(IndexError) -def test_pop_indexerror1(): - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt.pop(-11) - -@raises(IndexError) -def test_pop_indexerror2(): - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt.pop(10) - -def test_index(): - slt = SortedListWithKey(range(100), key=negate) - slt._reset(17) - - for pos, val in enumerate(range(99, -1, -1)): - assert val == slt.index(pos) - - assert slt.index(99, 0, 1000) == 0 - - slt = SortedListWithKey((0 for rpt in range(100)), key=negate) - slt._reset(17) - - for start in range(100): - for stop in range(start, 100): - assert slt.index(0, start, stop + 1) == start - - for start in range(100): - assert slt.index(0, -(100 - start)) == start - - assert slt.index(0, -1000) == 0 - -@raises(ValueError) -def test_index_valueerror1(): - slt = SortedListWithKey([0] * 10, key=negate) - slt._reset(4) - slt.index(0, 10) - -@raises(ValueError) -def test_index_valueerror2(): - slt = SortedListWithKey([0] * 10, key=negate) - slt._reset(4) - slt.index(0, 0, -10) - -@raises(ValueError) -def test_index_valueerror3(): - slt = SortedListWithKey([0] * 10, key=negate) - slt._reset(4) - slt.index(0, 7, 3) - -@raises(ValueError) -def test_index_valueerror4(): - slt = SortedListWithKey([0] * 10, key=negate) - slt._reset(4) - slt.index(1) - -@raises(ValueError) -def test_index_valueerror5(): - slt = SortedListWithKey(key=negate) - slt.index(1) - -@raises(ValueError) -def test_index_valueerror6(): - slt = SortedListWithKey(range(10), key=negate) - slt._reset(4) - slt.index(6, 5) - -def test_mul(): - this = SortedListWithKey(range(10), key=negate) - this._reset(4) - that = this * 5 - this._check() - that._check() - assert this == list(reversed((range(10)))) - assert that == list(sorted(list(range(10)) * 5, reverse=True)) - assert this != that - -def test_imul(): - this = SortedListWithKey(range(10), key=negate) - this._reset(4) - this *= 5 - this._check() - assert this == sorted(list(range(10)) * 5, reverse=True) - -def test_op_add(): - this = SortedListWithKey(range(10), key=negate) - this._reset(4) - assert (this + this + this) == (this * 3) - - that = SortedListWithKey(range(10), key=negate) - that._reset(4) - that += that - that += that - assert that == (this * 4) - -def test_eq(): - this = SortedListWithKey(range(10), key=negate) - this._reset(4) - that = SortedListWithKey(range(20), key=negate) - that._reset(4) - assert not (this == that) - that.clear() - that.update(range(10)) - assert this == that - -def test_lt(): - this = SortedListWithKey(range(10), key=negate) - this._reset(4) - that = SortedListWithKey(range(10, 20), key=negate) - that._reset(5) - assert this < that - assert not (that < this) - that = SortedListWithKey(range(1, 20), key=negate) - that._reset(6) - assert this < that - that = SortedListWithKey(range(1, 10), key=negate) - that._reset(4) - assert not (this < that) - -def test_lte(): - this = SortedListWithKey(range(10), key=negate) - this._reset(4) - that = SortedListWithKey(range(10), key=negate) - that._reset(5) - assert this <= that - assert that <= this - del this[-1] - assert this <= that - assert not (that <= this) - -def test_gt(): - this = SortedListWithKey(range(10), key=negate) - this._reset(4) - that = SortedListWithKey(range(10, 20), key=negate) - that._reset(5) - assert that > this - assert not (this > that) - that = SortedListWithKey(range(1, 20), key=negate) - that._reset(6) - assert that > this - that = SortedListWithKey(range(1, 10), key=negate) - that._reset(4) - assert not (that > this) - -def test_gte(): - this = SortedListWithKey(range(10), key=negate) - this._reset(4) - that = SortedListWithKey(range(10), key=negate) - that._reset(5) - assert this >= that - assert that >= this - del this[-1] - assert that >= this - assert not (this >= that) - -def test_repr(): - this = SortedListWithKey(range(10), key=negate) - this._reset(4) - assert repr(this).startswith('SortedListWithKey([9, 8, 7, 6, 5, 4, 3, 2, 1, 0], key= 0: + val = slt[random.randrange(len(slt))] + slt.remove(val) + + try: + slt.remove(1) + assert False + except ValueError: + pass + + try: + slt.remove(-1) + assert False + except ValueError: + pass + +@actor(1) +@not_empty +def stress_delitem(slt): + del slt[random.randrange(len(slt))] + +@actor(1) +def stress_getitem(slt): + if len(slt) > 0: + pos = random.randrange(len(slt)) + assert slt[pos] == list(slt)[pos] + + try: + slt[-(slt._len + 5)] + assert False + except IndexError: + pass + + try: + slt[slt._len + 5] + assert False + except IndexError: + pass + else: + try: + slt[0] + assert False + except IndexError: + pass + +@actor(1) +@not_empty +def stress_delitem_slice(slt): + start, stop = sorted(random.randrange(len(slt)) for rpt in range(2)) + step = random.choice([-3, -2, -1, 1, 1, 1, 1, 1, 2, 3]) + del slt[start:stop:step] + +@actor(1) +def stress_iter(slt): + itr1 = iter(slt) + itr2 = (slt[pos] for pos in range(len(slt))) + assert all(tup[0] == tup[1] for tup in zip(itr1, itr2)) + +@actor(1) +def stress_reversed(slt): + itr = reversed(list(reversed(slt))) + assert all(tup[0] == tup[1] for tup in zip(slt, itr)) + +@actor(1) +def stress_bisect_left(slt): + values = list(slt) + value = random.random() + values.sort() + assert bisect.bisect_left(values, value) == slt.bisect_left(value) + +@actor(1) +def stress_bisect(slt): + values = list(slt) + value = random.random() + values.sort() + assert bisect.bisect(values, value) == slt.bisect(value) + +@actor(1) +def stress_bisect_right(slt): + values = list(slt) + value = random.random() + values.sort() + assert bisect.bisect_right(values, value) == slt.bisect_right(value) + +@actor(1) +@not_empty +def stress_dups(slt): + pos = min(random.randrange(len(slt)), 300) + val = slt[pos] + for rpt in range(pos): + slt.add(val) + +@actor(1) +@not_empty +def stress_count(slt): + values = list(slt) + val = slt[random.randrange(len(slt))] + assert slt.count(val) == values.count(val) + +@actor(1) +@not_empty +def stress_pop(slt): + pos = random.randrange(len(slt)) + 1 + assert slt[-pos] == slt.pop(-pos) + +@actor(1) +@not_empty +def stress_index(slt): + values = set(slt) + slt.clear() + slt.update(values) + pos = random.randrange(len(slt)) + assert slt.index(slt[pos]) == pos + +@actor(1) +@not_empty +def stress_index2(slt): + values = list(slt)[:3] * 200 + slt = SortedKeyList(values) + for idx, val in enumerate(slt): + assert slt.index(val, idx) == idx + +@actor(1) +def stress_mul(slt): + values = list(slt) + mult = random.randrange(10) + values *= mult + values.sort() + assert (slt * mult) == values + +@actor(1) +def stress_imul(slt): + mult = random.randrange(10) + slt *= mult + +@actor(1) +@not_empty +def stress_reversed(slt): + itr = reversed(slt) + pos = random.randrange(1, len(slt)) + for rpt in range(pos): + val = next(itr) + assert val == slt[-pos] + +@actor(1) +@not_empty +def stress_eq(slt): + values = [] + assert not (values == slt) + +@actor(1) +@not_empty +def stress_lt(slt): + values = list(slt) + assert not (values < slt) + values = SortedKeyList(value - 1 for value in values) + assert values < slt + values = [] + assert values < slt + assert not (slt < values) + +def test_stress(repeat=1000): + slt = SortedKeyList((random.random() for rpt in range(1000))) + + for rpt in range(repeat): + action = random.choice(actions) + action(slt) + + slt._check() + + while len(slt) > 2000: + # Shorten the sortedlist. This maintains the "jaggedness" + # of the sublists which helps coverage. + pos = random.randrange(len(slt._maxes)) + del slt._maxes[pos] + del slt._keys[pos] + del slt._lists[pos] + slt._len = sum(len(sublist) for sublist in slt._lists) + slt._index = [] + slt._check() + + slt._check() + + stress_update(slt) + + while len(slt) > 0: + pos = random.randrange(len(slt)) + del slt[pos] + + slt._check() + +if __name__ == '__main__': + import sys + from datetime import datetime + + start = datetime.now() + + print('Python', sys.version_info) + + try: + num = int(sys.argv[1]) + print('Setting iterations to', num) + except: + print('Setting iterations to 1000 (default)') + num = 1000 + + try: + pea = int(sys.argv[2]) + random.seed(pea) + print('Setting seed to', pea) + except: + print('Setting seed to 0 (default)') + random.seed(0) + + try: + test_stress(num) + except: + raise + finally: + print('Exiting after', (datetime.now() - start)) diff -Nru sortedcontainers-1.5.9/tests/test_stress_sortedlist.py sortedcontainers-2.0.4/tests/test_stress_sortedlist.py --- sortedcontainers-1.5.9/tests/test_stress_sortedlist.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/test_stress_sortedlist.py 2018-06-07 05:34:49.000000000 +0000 @@ -8,7 +8,6 @@ import random from .context import sortedcontainers from sortedcontainers import SortedList -from nose.tools import raises from functools import wraps if hexversion < 0x03000000: @@ -129,27 +128,6 @@ @actor(1) @not_empty -def stress_setitem(slt): - pos = random.randrange(len(slt)) - slt[pos] = slt[pos] - -@actor(1) -@not_empty -def stress_setitem2(slt): - pos = random.randrange(int(len(slt) / 100)) * 100 - slt[pos] = slt[pos] - -@actor(1) -@not_empty -def stress_getset_slice(slt): - start, stop = sorted(random.randrange(len(slt)) for rpt in range(2)) - step = random.choice([-3, -2, -1, 1, 1, 1, 1, 1, 2, 3]) - lst = slt[start:stop:step] - assert all(lst[pos - 1] <= lst[pos] for pos in range(1, len(lst))) - slt[start:stop:step] = lst - -@actor(1) -@not_empty def stress_delitem_slice(slt): start, stop = sorted(random.randrange(len(slt)) for rpt in range(2)) step = random.choice([-3, -2, -1, 1, 1, 1, 1, 1, 2, 3]) @@ -176,7 +154,9 @@ @actor(1) def stress_irange(slt): - slt[:] = sorted(set(slt)) + values = sorted(set(slt)) + slt.clear() + slt.update(values) if len(slt) < 10: return start = random.randrange(len(slt) - 5) stop = random.randrange(start, len(slt)) @@ -220,47 +200,6 @@ assert slt.count(val) == values.count(val) @actor(1) -def stress_append(slt): - if random.randrange(100) < 10: - slt.clear() - if len(slt) == 0: - slt.append(random.random()) - else: - slt.append(slt[-1]) - -@actor(1) -def stress_extend(slt): - if random.randrange(100) < 10: - slt.clear() - if len(slt) == 0: - slt.extend(float(val) / 1000 for val in range(1000)) - else: - slt.extend(frange(slt[-1], 1, 0.001)) - -@actor(1) -@not_empty -def stress_insert(slt): - slt.insert(0, slt[0]) - slt.insert(-(len(slt) + 10), slt[0]) - - slt.insert(len(slt), slt[-1]) - slt.insert(len(slt) + 10, slt[-1]) - - pos = random.randrange(len(slt)) - slt.insert(pos, slt[pos]) - -@actor(1) -def stress_insert2(slt): - if random.randrange(100) < 10: - slt.clear() - if len(slt) == 0: - slt.insert(0, random.random()) - else: - values = list(slt)[:250] - for val in values: - slt.insert(slt.index(val), val) - -@actor(1) @not_empty def stress_pop(slt): pos = random.randrange(len(slt)) + 1 diff -Nru sortedcontainers-1.5.9/tests/test_stress_sortedlistwithkey.py sortedcontainers-2.0.4/tests/test_stress_sortedlistwithkey.py --- sortedcontainers-1.5.9/tests/test_stress_sortedlistwithkey.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/test_stress_sortedlistwithkey.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,369 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import print_function -from sys import hexversion - -import copy -import bisect -import random -from .context import sortedcontainers -from sortedcontainers import SortedListWithKey -from nose.tools import raises -from functools import wraps - -class SortedList(SortedListWithKey): - pass - -if hexversion < 0x03000000: - from itertools import izip as zip - range = xrange - -random.seed(0) -actions = [] - -def frange(start, stop, step): - while start < stop: - yield start - start += step - -class actor: - def __init__(self, count): - self._count = count - def __call__(self, func): - actions.extend([func] * self._count) - return func - -def not_empty(func): - @wraps(func) - def wrapper(slt): - if len(slt) < 100: - stress_update(slt) - func(slt) - return wrapper - -@actor(1) -def stress_clear(slt): - if random.randrange(100) < 10: - slt.clear() - else: - values = list(slt) - slt.clear() - slt.update(values[:int(len(values) / 2)]) - -@actor(1) -def stress_add(slt): - if random.randrange(100) < 10: - slt.clear() - slt.add(random.random()) - -@actor(1) -def stress_update(slt): - slt.update((random.random() for rpt in range(350))) - -@actor(1) -@not_empty -def stress_contains(slt): - if random.randrange(100) < 10: - slt.clear() - assert 0 not in slt - else: - val = slt[random.randrange(len(slt))] - assert val in slt - assert 1 not in slt - -@actor(1) -@not_empty -def stress_discard(slt): - val = slt[random.randrange(len(slt))] - slt.discard(val) - -@actor(1) -def stress_discard2(slt): - if random.randrange(100) < 10: - slt.clear() - slt.discard(random.random()) - -@actor(1) -def stress_remove(slt): - if len(slt) > 0: - val = slt[random.randrange(len(slt))] - slt.remove(val) - - try: - slt.remove(1) - assert False - except ValueError: - pass - - try: - slt.remove(-1) - assert False - except ValueError: - pass - -@actor(1) -@not_empty -def stress_delitem(slt): - del slt[random.randrange(len(slt))] - -@actor(1) -def stress_getitem(slt): - if len(slt) > 0: - pos = random.randrange(len(slt)) - assert slt[pos] == list(slt)[pos] - - try: - slt[-(slt._len + 5)] - assert False - except IndexError: - pass - - try: - slt[slt._len + 5] - assert False - except IndexError: - pass - else: - try: - slt[0] - assert False - except IndexError: - pass - -@actor(1) -@not_empty -def stress_setitem(slt): - pos = random.randrange(len(slt)) - slt[pos] = slt[pos] - -@actor(1) -@not_empty -def stress_setitem2(slt): - pos = random.randrange(int(len(slt) / 100)) * 100 - slt[pos] = slt[pos] - -@actor(1) -@not_empty -def stress_getset_slice(slt): - start, stop = sorted(random.randrange(len(slt)) for rpt in range(2)) - step = random.choice([-3, -2, -1, 1, 1, 1, 1, 1, 2, 3]) - lst = slt[start:stop:step] - assert all(lst[pos - 1] <= lst[pos] for pos in range(1, len(lst))) - slt[start:stop:step] = lst - -@actor(1) -@not_empty -def stress_delitem_slice(slt): - start, stop = sorted(random.randrange(len(slt)) for rpt in range(2)) - step = random.choice([-3, -2, -1, 1, 1, 1, 1, 1, 2, 3]) - del slt[start:stop:step] - -@actor(1) -def stress_iter(slt): - itr1 = iter(slt) - itr2 = (slt[pos] for pos in range(len(slt))) - assert all(tup[0] == tup[1] for tup in zip(itr1, itr2)) - -@actor(1) -def stress_reversed(slt): - itr = reversed(list(reversed(slt))) - assert all(tup[0] == tup[1] for tup in zip(slt, itr)) - -@actor(1) -def stress_bisect_left(slt): - values = list(slt) - value = random.random() - values.sort() - assert bisect.bisect_left(values, value) == slt.bisect_left(value) - -@actor(1) -def stress_bisect(slt): - values = list(slt) - value = random.random() - values.sort() - assert bisect.bisect(values, value) == slt.bisect(value) - -@actor(1) -def stress_bisect_right(slt): - values = list(slt) - value = random.random() - values.sort() - assert bisect.bisect_right(values, value) == slt.bisect_right(value) - -@actor(1) -@not_empty -def stress_dups(slt): - pos = min(random.randrange(len(slt)), 300) - val = slt[pos] - for rpt in range(pos): - slt.add(val) - -@actor(1) -@not_empty -def stress_count(slt): - values = list(slt) - val = slt[random.randrange(len(slt))] - assert slt.count(val) == values.count(val) - -@actor(1) -def stress_append(slt): - if random.randrange(100) < 10: - slt.clear() - if len(slt) == 0: - slt.append(random.random()) - else: - slt.append(slt[-1]) - -@actor(1) -def stress_extend(slt): - if random.randrange(100) < 10: - slt.clear() - if len(slt) == 0: - slt.extend(float(val) / 1000 for val in range(1000)) - else: - slt.extend(frange(slt[-1], 1, 0.001)) - -@actor(1) -@not_empty -def stress_insert(slt): - slt.insert(0, slt[0]) - slt.insert(-(len(slt) + 10), slt[0]) - - slt.insert(len(slt), slt[-1]) - slt.insert(len(slt) + 10, slt[-1]) - - pos = random.randrange(len(slt)) - slt.insert(pos, slt[pos]) - -@actor(1) -def stress_insert2(slt): - if random.randrange(100) < 10: - slt.clear() - if len(slt) == 0: - slt.insert(0, random.random()) - else: - values = list(slt)[:250] - for val in values: - slt.insert(slt.index(val), val) - -@actor(1) -@not_empty -def stress_pop(slt): - pos = random.randrange(len(slt)) + 1 - assert slt[-pos] == slt.pop(-pos) - -@actor(1) -@not_empty -def stress_index(slt): - values = set(slt) - slt.clear() - slt.update(values) - pos = random.randrange(len(slt)) - assert slt.index(slt[pos]) == pos - -@actor(1) -@not_empty -def stress_index2(slt): - values = list(slt)[:3] * 200 - slt = SortedList(values) - for idx, val in enumerate(slt): - assert slt.index(val, idx) == idx - -@actor(1) -def stress_mul(slt): - values = list(slt) - mult = random.randrange(10) - values *= mult - values.sort() - assert (slt * mult) == values - -@actor(1) -def stress_imul(slt): - mult = random.randrange(10) - slt *= mult - -@actor(1) -@not_empty -def stress_reversed(slt): - itr = reversed(slt) - pos = random.randrange(1, len(slt)) - for rpt in range(pos): - val = next(itr) - assert val == slt[-pos] - -@actor(1) -@not_empty -def stress_eq(slt): - values = [] - assert not (values == slt) - -@actor(1) # Disabled!!! -@not_empty -def stress_lt(slt): - values = list(slt) # Doesn't work with nose! - assert not (values < slt) - values = SortedList(value - 1 for value in values) - assert values < slt - values = [] - assert values < slt - assert not (slt < values) - -def test_stress(repeat=1000): - slt = SortedList((random.random() for rpt in range(1000))) - - for rpt in range(repeat): - action = random.choice(actions) - action(slt) - - slt._check() - - while len(slt) > 2000: - # Shorten the sortedlist. This maintains the "jaggedness" - # of the sublists which helps coverage. - pos = random.randrange(len(slt._maxes)) - del slt._maxes[pos] - del slt._keys[pos] - del slt._lists[pos] - slt._len = sum(len(sublist) for sublist in slt._lists) - slt._index = [] - slt._check() - - slt._check() - - stress_update(slt) - - while len(slt) > 0: - pos = random.randrange(len(slt)) - del slt[pos] - - slt._check() - -if __name__ == '__main__': - import sys - from datetime import datetime - - start = datetime.now() - - print('Python', sys.version_info) - - try: - num = int(sys.argv[1]) - print('Setting iterations to', num) - except: - print('Setting iterations to 1000 (default)') - num = 1000 - - try: - pea = int(sys.argv[2]) - random.seed(pea) - print('Setting seed to', pea) - except: - print('Setting seed to 0 (default)') - random.seed(0) - - try: - test_stress(num) - except: - raise - finally: - print('Exiting after', (datetime.now() - start)) diff -Nru sortedcontainers-1.5.9/tests/test_stress_sortedset.py sortedcontainers-2.0.4/tests/test_stress_sortedset.py --- sortedcontainers-1.5.9/tests/test_stress_sortedset.py 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tests/test_stress_sortedset.py 2018-06-07 05:34:49.000000000 +0000 @@ -6,7 +6,6 @@ import random from .context import sortedcontainers from sortedcontainers import SortedSet -from nose.tools import raises from functools import wraps import operator @@ -28,8 +27,6 @@ sst = SortedSet() sst._reset(10000) assert sst._list._load == 10000 - assert sst._list._half == 5000 - assert sst._list._dual == 20000 sst._check() sst = SortedSet(range(10000)) diff -Nru sortedcontainers-1.5.9/tox.ini sortedcontainers-2.0.4/tox.ini --- sortedcontainers-1.5.9/tox.ini 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/tox.ini 2018-06-07 05:34:49.000000000 +0000 @@ -1,8 +1,23 @@ [tox] -envlist=py27,py33,py34,py35,py36,pypy,pypy3,lint +envlist=py27,py34,py35,py36,pypy,pypy3,lint + [testenv] -deps=nose -commands=nosetests +deps=pytest +commands=python -m pytest + +[pytest] +addopts= + --doctest-modules + --doctest-glob "*.rst" + --ignore tests/benchmark.py + --ignore tests/benchmark_plot.py + --ignore tests/benchmark_sorteddict.py + --ignore tests/benchmark_sortedlist.py + --ignore tests/benchmark_sortedset.py + --ignore tests/plot_lengths_histogram_add.py + --ignore tests/plot_lengths_histogram_delitem.py +testpaths=docs sortedcontainers tests + [testenv:lint] deps=pylint -commands=pylint --rcfile=.pylintrc --reports=n --output-format=colorized sortedcontainers +commands=pylint sortedcontainers diff -Nru sortedcontainers-1.5.9/.travis.yml sortedcontainers-2.0.4/.travis.yml --- sortedcontainers-1.5.9/.travis.yml 2017-12-08 21:13:29.000000000 +0000 +++ sortedcontainers-2.0.4/.travis.yml 2018-06-07 05:34:49.000000000 +0000 @@ -6,8 +6,6 @@ include: - python: 2.7 env: TOXENV=py27 - - python: 3.3 - env: TOXENV=py33 - python: 3.4 env: TOXENV=py34 - python: 3.5 @@ -18,5 +16,5 @@ env: TOXENV=pypy - python: pypy3 env: TOXENV=pypy3 - - python: 2.7 + - python: 3.6 env: TOXENV=lint