From 5b280290e0f184fae0e6cd46d6bbf4104eec7177 Mon Sep 17 00:00:00 2001 From: tp Date: Wed, 1 Aug 2018 13:41:57 +0100 Subject: [PATCH] make conftest._cython_table deterministic for Python<3.6 --- pandas/conftest.py | 7 ++----- pandas/core/base.py | 46 ++++++++++++++++++++++----------------------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/pandas/conftest.py b/pandas/conftest.py index c714ce2228d09..94c07bc09267f 100644 --- a/pandas/conftest.py +++ b/pandas/conftest.py @@ -123,13 +123,10 @@ def all_arithmetic_operators(request): return request.param -# use sorted as dicts in py<3.6 have random order, which xdist doesn't like -_cython_table = sorted(((key, value) for key, value in - pd.core.base.SelectionMixin._cython_table.items()), - key=lambda x: x[0].__name__) +_cython_table = pd.core.base.SelectionMixin._cython_table.items() -@pytest.fixture(params=_cython_table) +@pytest.fixture(params=list(_cython_table)) def cython_table_items(request): return request.param diff --git a/pandas/core/base.py b/pandas/core/base.py index 5382315bad32b..084a976320d77 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -23,7 +23,7 @@ import pandas.core.nanops as nanops import pandas._libs.lib as lib from pandas.compat.numpy import function as nv -from pandas.compat import PYPY +from pandas.compat import PYPY, OrderedDict from pandas.util._decorators import (Appender, cache_readonly, deprecate_kwarg, Substitution) @@ -179,28 +179,28 @@ class SelectionMixin(object): _selection = None _internal_names = ['_cache', '__setstate__'] _internal_names_set = set(_internal_names) - _builtin_table = { - builtins.sum: np.sum, - builtins.max: np.max, - builtins.min: np.min - } - _cython_table = { - builtins.sum: 'sum', - builtins.max: 'max', - builtins.min: 'min', - np.all: 'all', - np.any: 'any', - np.sum: 'sum', - np.mean: 'mean', - np.prod: 'prod', - np.std: 'std', - np.var: 'var', - np.median: 'median', - np.max: 'max', - np.min: 'min', - np.cumprod: 'cumprod', - np.cumsum: 'cumsum' - } + _builtin_table = OrderedDict(( + (builtins.sum, np.sum), + (builtins.max, np.max), + (builtins.min, np.min), + )) + _cython_table = OrderedDict(( + (builtins.sum, 'sum'), + (builtins.max, 'max'), + (builtins.min, 'min'), + (np.all, 'all'), + (np.any, 'any'), + (np.sum, 'sum'), + (np.mean, 'mean'), + (np.prod, 'prod'), + (np.std, 'std'), + (np.var, 'var'), + (np.median, 'median'), + (np.max, 'max'), + (np.min, 'min'), + (np.cumprod, 'cumprod'), + (np.cumsum, 'cumsum'), + )) @property def _selection_name(self):