Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python 3.6 support #2512

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ environment:
PANDAS_DATAREADER_VERSION: "0.4.0"
DASK_VERSION: "0.17.1"

- PYTHON_VERSION: "3.6"
PANDAS_VERSION: "0.22.0"
NUMPY_VERSION: "1.14.1"
SCIPY_VERSION: "1.0.0"
PANDAS_DATAREADER_VERSION: "0.4.0"
DASK_VERSION: "0.17.1"

# We always use a 64-bit machine, but can build x86 distributions
# with the PYTHON_ARCH variable (which is used by CMD_IN_ENV).
platform:
Expand Down
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ fast_finish: true
python:
- 2.7
- 3.5
- 3.6
env:
global:
# 1. Generated a token for travis at https://anaconda.org/quantopian/settings/access with scope api:write.
Expand All @@ -23,6 +24,8 @@ matrix:
exclude:
- python: 2.7
env: NEW_PANDAS=1
- python: 3.6
env: OLD_PANDAS=1
# include:
# # Workaround Travis OSX not natively supporting Python.
# - os: osx
Expand Down
84 changes: 23 additions & 61 deletions conda/0_sortedcontainers/meta.yaml
Original file line number Diff line number Diff line change
@@ -1,86 +1,48 @@
{% set name = "sortedcontainers" %}
{% set version = "1.4.4" %}
{% set file_ext = "tar.gz" %}
{% set hash_type = "sha256" %}
{% set hash_value = "192f59da6df6f91204f85a614a09b88e5ca680a4cc6a31fbc8689cad472da212" %}
{% set version = "2.1.0" %}
{% set sha256 = "974e9a32f56b17c1bac2aebd9dcf197f3eb9cd30553c5852a3187ad162e1a03a" %}

package:
name: '{{ name|lower }}'
version: '{{ version }}'
name: {{ name }}
version: {{ version }}

source:
fn: '{{ name }}-{{ version }}.{{ file_ext }}'
url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.{{ file_ext }}
'{{ hash_type }}': '{{ hash_value }}'
fn: {{ name }}-{{ version }}.tar.gz
url: https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz
sha256: {{ sha256 }}

build:
number: 0
script: python setup.py install --single-version-externally-managed --record=record.txt

requirements:
build:
host:
- python
- setuptools

run:
- python


test:
imports:
- sortedcontainers
requires:
- tox

about:
home: http://www.grantjenks.com/docs/sortedcontainers/
license: Apache Software License
license_family: APACHE
license_file: ''
license: Apache 2.0
license_file: LICENSE
summary: 'Python Sorted Container Types: SortedList, SortedDict, and SortedSet'
description: "Python SortedContainers\n=======================\n\n.. image:: https://api.travis-ci.org/grantjenks/sorted_containers.svg\n :target: http://www.grantjenks.com/docs/sortedcontainers/\n\
\n`SortedContainers`_ is an Apache2 licensed `sorted collections library`_,\nwritten in pure-Python, and fast as C-extensions.\n\nPython's standard library is great until you need a sorted collections\n\
type. Many will attest that you can get really far without one, but the moment\nyou **really need** a sorted list, dict, or set, you're faced with a dozen\ndifferent implementations, most using C-extensions\
\ without great documentation\nand benchmarking.\n\nIn Python, we can do better. And we can do it in pure-Python!\n\n.. code-block:: python\n\n >>> sl = sortedcontainers.SortedList(xrange(10000000))\n\
\ >>> 1234567 in sl\n True\n >>> sl[7654321]\n 7654321\n >>> sl.add(1234567)\n >>> sl.count(1234567)\n 2\n >>> sl *= 3\n >>> len(sl)\n 30000003\n\n**Note:** don't try this\
\ without at least a half gigabyte of memory. In Python\nan integer requires about 24 bytes. SortedList will add about 8 bytes per\nobject stored in the container. That's pretty hard to beat as it's\
\ the cost of\na pointer to each object. It's also 66% less overhead than a typical binary\ntree implementation (e.g. red-black tree, avl tree, aa tree, splay tree, treap,\netc.) for which every node\
\ must also store two pointers to children nodes.\n\n`SortedContainers`_ takes all of the work out of Python sorted collections -\nmaking your deployment and use of Python easy. There's no need to install\
\ a C\ncompiler or pre-build and distribute custom extensions. Performance is a\nfeature and testing has 100% coverage with unit tests and hours of stress.\n\n.. _`SortedContainers`: http://www.grantjenks.com/docs/sortedcontainers/\n\
.. _`sorted collections library`: http://www.grantjenks.com/docs/sortedcontainers/\n\nTestimonials\n------------\n\n**Alex Martelli**, `Wikipedia`_\n\nGood stuff! ... I like the `simple, effective implementation`_\
\ idea of splitting\nthe sorted containers into smaller \"fragments\" to avoid the O(N) insertion costs.\n\n.. _`Wikipedia`: http://en.wikipedia.org/wiki/Alex_Martelli\n.. _`simple, effective implementation`:\
\ http://www.grantjenks.com/docs/sortedcontainers/implementation.html\n\n**Jeff Knupp**, `Review of SortedContainers`_\n\nThat last part, \"fast as C-extensions,\" was difficult to believe. I would\
\ need\nsome sort of `Performance Comparison`_ to be convinced this is true. The author\nincludes this in the docs. It is.\n\n.. _`Review of SortedContainers`: http://reviews.jeffknupp.com/reviews/sortedcontainers/3/\n\
\n**Kevin Samuel**, `Formations Python`_\n\nI'm quite amazed, not just by the code quality (it's incredibly\nreadable and has more comment than code, wow), but the actual\namount of work you put at\
\ stuff that is *not* code:\ndocumentation, benchmarking, implementation explanations. Even\nthe git log is clean and the unit tests run out of the box on\nPython 2 and 3.\n\n.. _`Formations Python`:\
\ http://formationspython.com/\n\n**Mark Summerfield**, a short plea for `Python Sorted Collections`_\n\nPython's \"batteries included\" standard library seems to have a battery\nmissing. And the argument\
\ that \"we never had it before\" has worn thin. It is\ntime that Python offered a full range of collection classes out of the box,\nincluding sorted ones.\n\n.. _`Python Sorted Collections`: http://www.qtrac.eu/pysorted.html\n\
\nFeatures\n--------\n\n- Pure-Python\n- Fully documented\n- Benchmark comparison (alternatives, runtimes, load-factors)\n- 100% test coverage\n- Hours of stress testing\n- Performance matters (often\
\ faster than C implementations)\n- Compatible API (nearly identical to popular blist and rbtree modules)\n- Feature-rich (e.g. get the five largest keys in a sorted dict: d.iloc[-5:])\n- Pragmatic\
\ design (e.g. SortedSet is a Python set with a SortedList index)\n- Developed on Python 2.7\n- Tested on CPython 2.6, 2.7, 3.2, 3.3, 3.4, 3.5 and PyPy 5.1+, PyPy3 2.4+\n\nQuickstart\n----------\n\n\
Installing `SortedContainers`_ is simple with\n`pip <http://www.pip-installer.org/>`_::\n\n $ pip install sortedcontainers\n\nYou can access documentation in the interpreter with Python's built-in\
\ help\nfunction:\n\n.. code-block:: python\n\n >>> from sortedcontainers import SortedList, SortedSet, SortedDict\n >>> help(SortedList)\n\nDocumentation\n-------------\n\nComplete documentation\
\ including performance comparisons is available at\nhttp://www.grantjenks.com/docs/sortedcontainers/ .\n\nUser Guide\n..........\n\nFor those wanting more details, this part of the documentation describes\n\
introduction, implementation, performance, and development.\n\n- `Introduction`_\n- `Performance Comparison`_\n- `Load Factor Performance Comparison`_\n- `Runtime Performance Comparison`_\n- `Simulated\
\ Workload Performance Comparison`_\n- `Implementation Details`_\n- `Performance at Scale`_\n- `Developing and Contributing`_\n- `Release History`_\n\n.. _`Introduction`: http://www.grantjenks.com/docs/sortedcontainers/introduction.html\n\
.. _`Performance Comparison`: http://www.grantjenks.com/docs/sortedcontainers/performance.html\n.. _`Load Factor Performance Comparison`: http://www.grantjenks.com/docs/sortedcontainers/performance-load.html\n\
.. _`Runtime Performance Comparison`: http://www.grantjenks.com/docs/sortedcontainers/performance-runtime.html\n.. _`Simulated Workload Performance Comparison`: http://www.grantjenks.com/docs/sortedcontainers/performance-workload.html\n\
.. _`Implementation Details`: http://www.grantjenks.com/docs/sortedcontainers/implementation.html\n.. _`Performance at Scale`: http://www.grantjenks.com/docs/sortedcontainers/performance-scale.html\n\
.. _`Developing and Contributing`: http://www.grantjenks.com/docs/sortedcontainers/development.html\n.. _`Release History`: http://www.grantjenks.com/docs/sortedcontainers/history.html\n\nAPI Documentation\n\
.................\n\nIf you are looking for information on a specific function, class or method, this\npart of the documentation is for you.\n\n- `SortedList`_\n- `SortedListWithKey`_\n- `SortedDict`_\n\
- `SortedSet`_\n\n.. _`SortedList`: http://www.grantjenks.com/docs/sortedcontainers/sortedlist.html\n.. _`SortedListWithKey`: http://www.grantjenks.com/docs/sortedcontainers/sortedlistwithkey.html\n\
.. _`SortedDict`: http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html\n.. _`SortedSet`: http://www.grantjenks.com/docs/sortedcontainers/sortedset.html\n\nTalks\n-----\n\n- `Python Sorted\
\ Collections | PyCon 2016 Talk`_\n- `SF Python Holiday Party 2015 Lightning Talk`_\n- `DjangoCon 2015 Lightning Talk`_\n\n.. _`Python Sorted Collections | PyCon 2016 Talk`: http://www.grantjenks.com/docs/sortedcontainers/pycon-2016-talk.html\n\
.. _`SF Python Holiday Party 2015 Lightning Talk`: http://www.grantjenks.com/docs/sortedcontainers/sf-python-2015-lightning-talk.html\n.. _`DjangoCon 2015 Lightning Talk`: http://www.grantjenks.com/docs/sortedcontainers/djangocon-2015-lightning-talk.html\n\
\nContribute\n----------\n\nCollaborators are welcome!\n\n#. Check for open issues or open a fresh issue to start a discussion around a\n bug. There is a Contributor Friendly tag for issues that\
\ should be used by\n people who are not very familiar with the codebase yet.\n#. Fork the `SortedContainers repository\n <https://github.com/grantjenks/sorted_containers>`_ on GitHub and start\n\
\ making your changes to a new branch.\n#. Write a test which shows that the bug was fixed.\n#. Send a pull request and bug the maintainer until it gets merged and\n published.\n\nUseful Links\n\
------------\n\n- `SortedContainers Documentation`_\n- `SortedContainers at PyPI`_\n- `SortedContainers at Github`_\n- `SortedContainers Issue Tracker`_\n\n.. _`SortedContainers Documentation`: http://www.grantjenks.com/docs/sortedcontainers/\n\
.. _`SortedContainers at PyPI`: https://pypi.python.org/pypi/sortedcontainers\n.. _`SortedContainers at Github`: https://github.com/grantjenks/sorted_containers\n.. _`SortedContainers Issue Tracker`:\
\ https://github.com/grantjenks/sorted_containers/issues\n\nSortedContainers License\n------------------------\n\nCopyright 2014-2016 Grant Jenks\n\nLicensed under the Apache License, Version 2.0 (the\
\ \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable\
\ law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License\
\ for the specific language governing permissions and\nlimitations under the License."
doc_url: ''
dev_url: ''
description: |
SortedContainers is a sorted collections library, written in pure-Python
and fast as C-extensions.
doc_url: http://www.grantjenks.com/docs/sortedcontainers/
dev_url: https://github.com/grantjenks/python-sortedcontainers
doc_source_url: https://github.com/grantjenks/python-sortedcontainers/blob/master/docs/index.rst

extra:
recipe-maintainers: ''
recipe-maintainers:
- grantjenks
- msarahan
- richafrank
- nehaljwani
2 changes: 1 addition & 1 deletion etc/conda_build_matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import click

py_versions = ('2.7', '3.4', '3.5')
py_versions = ('2.7', '3.4', '3.5', '3.6')
npy_versions = ('1.9', '1.10')
zipline_path = os.path.join(
os.path.dirname(__file__),
Expand Down
2 changes: 1 addition & 1 deletion etc/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ sqlalchemy==1.1.18
# For asset db management
alembic==0.7.7

sortedcontainers==1.4.4
sortedcontainers==2.1.0
# for intervaltree
intervaltree==2.1.0

Expand Down
2 changes: 1 addition & 1 deletion etc/requirements_blaze.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ flask-cors==2.1.3
Jinja2==2.10.1
MarkupSafe==0.23
Werkzeug==0.12.2
psutil==4.3.0
psutil==5.6.7

-e git://github.com/quantopian/blaze.git@f26375a6708eab85b7acc7869d6c518df2f974eb#egg=blaze
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ def setup_requirements(requirements_path, module_names, strict_bounds,
'Programming Language :: Python',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Operating System :: OS Independent',
'Intended Audience :: Science/Research',
'Topic :: Office/Business :: Financial',
Expand Down
14 changes: 12 additions & 2 deletions tests/test_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from functools import partial
from operator import itemgetter
import tarfile

import matplotlib
Expand Down Expand Up @@ -77,11 +78,20 @@ def test_example(self, example_name):
},
)
expected_perf = self.expected_perf[example_name]
# Exclude positions column as the positions do not always have the
# same order
columns = [column for column in examples._cols_to_check
if column != 'positions']
assert_equal(
actual_perf[examples._cols_to_check],
expected_perf[examples._cols_to_check],
actual_perf[columns],
expected_perf[columns],
# There is a difference in the datetime columns in pandas
# 0.16 and 0.17 because in 16 they are object and in 17 they are
# datetime[ns, UTC]. We will just ignore the dtypes for now.
check_dtype=False,
)
# Sort positions by SID before comparing
assert_equal(
expected_perf['positions'].apply(sorted, key=itemgetter('sid')),
actual_perf['positions'].apply(sorted, key=itemgetter('sid')),
)