Skip to content

Commit da8dd95

Browse files
committed
REF: working toward #1150, broke apart Cython module into generated _algos extension
1 parent d3c3f51 commit da8dd95

14 files changed

+710
-481
lines changed

pandas/core/common.py

+40-39
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def next(x):
1818
from numpy.lib.format import read_array, write_array
1919
import numpy as np
2020

21+
import pandas._algos as _algos
2122
import pandas._tseries as lib
2223
from pandas.util import py3compat
2324
import codecs
@@ -111,17 +112,17 @@ def _unpickle_array(bytes):
111112
def _take_1d_datetime(arr, indexer, out, fill_value=np.nan):
112113
view = arr.view(np.int64)
113114
outview = out.view(np.int64)
114-
lib.take_1d_bool(view, indexer, outview, fill_value=fill_value)
115+
_algos.take_1d_bool(view, indexer, outview, fill_value=fill_value)
115116

116117
def _take_2d_axis0_datetime(arr, indexer, out, fill_value=np.nan):
117118
view = arr.view(np.int64)
118119
outview = out.view(np.int64)
119-
lib.take_1d_bool(view, indexer, outview, fill_value=fill_value)
120+
_algos.take_1d_bool(view, indexer, outview, fill_value=fill_value)
120121

121122
def _take_2d_axis1_datetime(arr, indexer, out, fill_value=np.nan):
122123
view = arr.view(np.uint8)
123124
outview = out.view(np.uint8)
124-
lib.take_1d_bool(view, indexer, outview, fill_value=fill_value)
125+
_algos.take_1d_bool(view, indexer, outview, fill_value=fill_value)
125126

126127
def _view_wrapper(f, wrap_dtype, na_override=None):
127128
def wrapper(arr, indexer, out, fill_value=np.nan):
@@ -134,42 +135,42 @@ def wrapper(arr, indexer, out, fill_value=np.nan):
134135

135136

136137
_take1d_dict = {
137-
'float64' : lib.take_1d_float64,
138-
'int32' : lib.take_1d_int32,
139-
'int64' : lib.take_1d_int64,
140-
'object' : lib.take_1d_object,
141-
'bool' : _view_wrapper(lib.take_1d_bool, np.uint8),
142-
'datetime64[us]' : _view_wrapper(lib.take_1d_int64, np.int64,
138+
'float64' : _algos.take_1d_float64,
139+
'int32' : _algos.take_1d_int32,
140+
'int64' : _algos.take_1d_int64,
141+
'object' : _algos.take_1d_object,
142+
'bool' : _view_wrapper(_algos.take_1d_bool, np.uint8),
143+
'datetime64[us]' : _view_wrapper(_algos.take_1d_int64, np.int64,
143144
na_override=lib.NaT),
144145
}
145146

146147
_take2d_axis0_dict = {
147-
'float64' : lib.take_2d_axis0_float64,
148-
'int32' : lib.take_2d_axis0_int32,
149-
'int64' : lib.take_2d_axis0_int64,
150-
'object' : lib.take_2d_axis0_object,
151-
'bool' : _view_wrapper(lib.take_2d_axis0_bool, np.uint8),
152-
'datetime64[us]' : _view_wrapper(lib.take_2d_axis0_int64, np.int64,
148+
'float64' : _algos.take_2d_axis0_float64,
149+
'int32' : _algos.take_2d_axis0_int32,
150+
'int64' : _algos.take_2d_axis0_int64,
151+
'object' : _algos.take_2d_axis0_object,
152+
'bool' : _view_wrapper(_algos.take_2d_axis0_bool, np.uint8),
153+
'datetime64[us]' : _view_wrapper(_algos.take_2d_axis0_int64, np.int64,
153154
na_override=lib.NaT),
154155
}
155156

156157
_take2d_axis1_dict = {
157-
'float64' : lib.take_2d_axis1_float64,
158-
'int32' : lib.take_2d_axis1_int32,
159-
'int64' : lib.take_2d_axis1_int64,
160-
'object' : lib.take_2d_axis1_object,
161-
'bool' : _view_wrapper(lib.take_2d_axis1_bool, np.uint8),
162-
'datetime64[us]' : _view_wrapper(lib.take_2d_axis1_int64, np.int64,
158+
'float64' : _algos.take_2d_axis1_float64,
159+
'int32' : _algos.take_2d_axis1_int32,
160+
'int64' : _algos.take_2d_axis1_int64,
161+
'object' : _algos.take_2d_axis1_object,
162+
'bool' : _view_wrapper(_algos.take_2d_axis1_bool, np.uint8),
163+
'datetime64[us]' : _view_wrapper(_algos.take_2d_axis1_int64, np.int64,
163164
na_override=lib.NaT),
164165
}
165166

166167
_take2d_multi_dict = {
167-
'float64' : lib.take_2d_multi_float64,
168-
'int32' : lib.take_2d_multi_int32,
169-
'int64' : lib.take_2d_multi_int64,
170-
'object' : lib.take_2d_multi_object,
171-
'bool' : _view_wrapper(lib.take_2d_multi_bool, np.uint8),
172-
'datetime64[us]' : _view_wrapper(lib.take_2d_multi_int64, np.int64,
168+
'float64' : _algos.take_2d_multi_float64,
169+
'int32' : _algos.take_2d_multi_int32,
170+
'int64' : _algos.take_2d_multi_int64,
171+
'object' : _algos.take_2d_multi_object,
172+
'bool' : _view_wrapper(_algos.take_2d_multi_bool, np.uint8),
173+
'datetime64[us]' : _view_wrapper(_algos.take_2d_multi_int64, np.int64,
173174
na_override=lib.NaT),
174175
}
175176

@@ -366,54 +367,54 @@ def wrapper(arr, mask, limit=None):
366367
f(view, mask, limit=limit)
367368
return wrapper
368369

369-
_pad_1d_datetime = _interp_wrapper(lib.pad_inplace_int64, np.int64)
370-
_pad_2d_datetime = _interp_wrapper(lib.pad_2d_inplace_int64, np.int64)
371-
_backfill_1d_datetime = _interp_wrapper(lib.backfill_inplace_int64, np.int64)
372-
_backfill_2d_datetime = _interp_wrapper(lib.backfill_2d_inplace_int64, np.int64)
370+
_pad_1d_datetime = _interp_wrapper(_algos.pad_inplace_int64, np.int64)
371+
_pad_2d_datetime = _interp_wrapper(_algos.pad_2d_inplace_int64, np.int64)
372+
_backfill_1d_datetime = _interp_wrapper(_algos.backfill_inplace_int64, np.int64)
373+
_backfill_2d_datetime = _interp_wrapper(_algos.backfill_2d_inplace_int64, np.int64)
373374

374375
def pad_1d(values, limit=None):
375376
if is_float_dtype(values):
376-
_method = lib.pad_inplace_float64
377+
_method = _algos.pad_inplace_float64
377378
elif is_datetime64_dtype(values):
378379
_method = _pad_1d_datetime
379380
elif values.dtype == np.object_:
380-
_method = lib.pad_inplace_object
381+
_method = _algos.pad_inplace_object
381382
else: # pragma: no cover
382383
raise ValueError('Invalid dtype for padding')
383384

384385
_method(values, isnull(values).view(np.uint8), limit=limit)
385386

386387
def backfill_1d(values, limit=None):
387388
if is_float_dtype(values):
388-
_method = lib.backfill_inplace_float64
389+
_method = _algos.backfill_inplace_float64
389390
elif is_datetime64_dtype(values):
390391
_method = _backfill_1d_datetime
391392
elif values.dtype == np.object_:
392-
_method = lib.backfill_inplace_object
393+
_method = _algos.backfill_inplace_object
393394
else: # pragma: no cover
394395
raise ValueError('Invalid dtype for padding')
395396

396397
_method(values, isnull(values).view(np.uint8), limit=limit)
397398

398399
def pad_2d(values, limit=None):
399400
if is_float_dtype(values):
400-
_method = lib.pad_2d_inplace_float64
401+
_method = _algos.pad_2d_inplace_float64
401402
elif is_datetime64_dtype(values):
402403
_method = _pad_2d_datetime
403404
elif values.dtype == np.object_:
404-
_method = lib.pad_2d_inplace_object
405+
_method = _algos.pad_2d_inplace_object
405406
else: # pragma: no cover
406407
raise ValueError('Invalid dtype for padding')
407408

408409
_method(values, isnull(values).view(np.uint8), limit=limit)
409410

410411
def backfill_2d(values, limit=None):
411412
if is_float_dtype(values):
412-
_method = lib.backfill_2d_inplace_float64
413+
_method = _algos.backfill_2d_inplace_float64
413414
elif is_datetime64_dtype(values):
414415
_method = _backfill_2d_datetime
415416
elif values.dtype == np.object_:
416-
_method = lib.backfill_2d_inplace_object
417+
_method = _algos.backfill_2d_inplace_object
417418
else: # pragma: no cover
418419
raise ValueError('Invalid dtype for padding')
419420

pandas/core/index.py

+12-11
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from pandas.util import py3compat
1313
import pandas.core.common as com
1414
import pandas._tseries as lib
15+
import pandas._algos as _algos
1516

1617

1718
__all__ = ['Index']
@@ -56,11 +57,11 @@ class Index(np.ndarray):
5657
_join_precedence = 1
5758

5859
# Cython methods
59-
_groupby = lib.groupby_object
60-
_arrmap = lib.arrmap_object
61-
_left_indexer = lib.left_join_indexer_object
62-
_inner_indexer = lib.inner_join_indexer_object
63-
_outer_indexer = lib.outer_join_indexer_object
60+
_groupby = _algos.groupby_object
61+
_arrmap = _algos.arrmap_object
62+
_left_indexer = _algos.left_join_indexer_object
63+
_inner_indexer = _algos.inner_join_indexer_object
64+
_outer_indexer = _algos.outer_join_indexer_object
6465

6566
_box_scalars = False
6667

@@ -1067,11 +1068,11 @@ def copy(self, order='C'):
10671068

10681069
class Int64Index(Index):
10691070

1070-
_groupby = lib.groupby_int64
1071-
_arrmap = lib.arrmap_int64
1072-
_left_indexer = lib.left_join_indexer_int64
1073-
_inner_indexer = lib.inner_join_indexer_int64
1074-
_outer_indexer = lib.outer_join_indexer_int64
1071+
_groupby = _algos.groupby_int64
1072+
_arrmap = _algos.arrmap_int64
1073+
_left_indexer = _algos.left_join_indexer_int64
1074+
_inner_indexer = _algos.inner_join_indexer_int64
1075+
_outer_indexer = _algos.outer_join_indexer_int64
10751076

10761077
_engine_type = lib.Int64Engine
10771078

@@ -1378,7 +1379,7 @@ def lexsort_depth(self):
13781379
return self.nlevels
13791380
else:
13801381
return 0
1381-
1382+
13821383
int64_labels = [com._ensure_int64(lab) for lab in self.labels]
13831384
for k in range(self.nlevels, 0, -1):
13841385
if lib.is_lexsorted(int64_labels[:k]):

0 commit comments

Comments
 (0)