Skip to content

CLN: assorted cleanups in cython #46861

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

Merged
merged 4 commits into from
Apr 25, 2022
Merged
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
5 changes: 2 additions & 3 deletions pandas/_libs/algos.pyx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import cython
from cython import Py_ssize_t

cimport cython
from cython cimport Py_ssize_t
from libc.math cimport (
fabs,
sqrt,
Expand Down
35 changes: 12 additions & 23 deletions pandas/_libs/groupby.pyx
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import cython
from cython import Py_ssize_t

from cython cimport floating
cimport cython
from cython cimport (
Py_ssize_t,
floating,
)
from libc.stdlib cimport (
free,
malloc,
Expand Down Expand Up @@ -268,7 +269,6 @@ def group_cumsum(
out[i, j] = na_val
continue


if isna_entry:
out[i, j] = na_val
if not skipna:
Expand Down Expand Up @@ -1220,7 +1220,7 @@ def group_nth(
if nobs[lab, j] == rank:
resx[lab, j] = val

# TODO: de-dup this whoel block with group_last?
# TODO: de-dup this whole block with group_last?
for i in range(ncounts):
for j in range(K):
if nobs[i, j] < min_count:
Expand All @@ -1232,6 +1232,9 @@ def group_nth(
# set a placeholder value in out[i, j].
if uses_mask:
result_mask[i, j] = True
# set out[i, j] to 0 to be deterministic, as
# it was initialized with np.empty. Also ensures
# we can downcast out if appropriate.
out[i, j] = 0
elif numeric_object_t is float32_t or numeric_object_t is float64_t:
out[i, j] = NAN
Expand Down Expand Up @@ -1369,7 +1372,7 @@ cdef group_min_max(
"""
cdef:
Py_ssize_t i, j, N, K, lab, ngroups = len(counts)
numeric_t val, nan_val
numeric_t val
ndarray[numeric_t, ndim=2] group_min_or_max
int64_t[:, ::1] nobs
bint uses_mask = mask is not None
Expand All @@ -1386,20 +1389,6 @@ cdef group_min_max(
group_min_or_max = np.empty_like(out)
group_min_or_max[:] = _get_min_or_max(<numeric_t>0, compute_max, is_datetimelike)

# NB: We do not define nan_val because there is no such thing
# for uint64_t. We carefully avoid having to reference it in this
# case.
if numeric_t is int64_t:
nan_val = NPY_NAT
elif numeric_t is int32_t:
nan_val = util.INT32_MIN
elif numeric_t is int16_t:
nan_val = util.INT16_MIN
elif numeric_t is int8_t:
nan_val = util.INT8_MIN
elif numeric_t is float64_t or numeric_t is float32_t:
nan_val = NAN

N, K = (<object>values).shape

with nogil:
Expand Down Expand Up @@ -1442,11 +1431,11 @@ cdef group_min_max(
# we can downcast out if appropriate.
out[i, j] = 0
elif numeric_t is float32_t or numeric_t is float64_t:
out[i, j] = nan_val
out[i, j] = NAN
elif numeric_t is int64_t:
# Per above, this is a placeholder in
# non-is_datetimelike cases.
out[i, j] = nan_val
out[i, j] = NPY_NAT
else:
# placeholder, see above
out[i, j] = 0
Expand Down
3 changes: 1 addition & 2 deletions pandas/_libs/hashing.pyx
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# Translated from the reference implementation
# at https://github.com/veorq/SipHash

import cython

cimport cython
from libc.stdlib cimport (
free,
malloc,
Expand Down
5 changes: 2 additions & 3 deletions pandas/_libs/internals.pyx
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
from collections import defaultdict

import cython
from cython import Py_ssize_t

cimport cython
from cpython.slice cimport PySlice_GetIndicesEx
from cython cimport Py_ssize_t


cdef extern from "Python.h":
Expand Down
4 changes: 2 additions & 2 deletions pandas/_libs/interval.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ from cpython.datetime cimport (

import_datetime()

cimport cython
from cpython.object cimport (
Py_EQ,
Py_GE,
Expand All @@ -20,9 +21,8 @@ from cpython.object cimport (
Py_NE,
PyObject_RichCompare,
)
from cython cimport Py_ssize_t

import cython
from cython import Py_ssize_t
import numpy as np

cimport numpy as cnp
Expand Down
6 changes: 4 additions & 2 deletions pandas/_libs/join.pyx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import cython
from cython import Py_ssize_t
cimport cython
from cython cimport Py_ssize_t
import numpy as np

cimport numpy as cnp
Expand Down Expand Up @@ -233,6 +233,8 @@ cdef void _get_result_indexer(intp_t[::1] sorter, intp_t[::1] indexer) nogil:
indexer[:] = -1


@cython.wraparound(False)
@cython.boundscheck(False)
def ffill_indexer(const intp_t[:] indexer) -> np.ndarray:
cdef:
Py_ssize_t i, n = len(indexer)
Expand Down
9 changes: 5 additions & 4 deletions pandas/_libs/lib.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ from decimal import Decimal
from enum import Enum
import warnings

import cython
from cython import Py_ssize_t

cimport cython
from cpython.datetime cimport (
PyDate_Check,
PyDateTime_Check,
Expand All @@ -25,7 +23,10 @@ from cpython.tuple cimport (
PyTuple_New,
PyTuple_SET_ITEM,
)
from cython cimport floating
from cython cimport (
Py_ssize_t,
floating,
)

import_datetime()

Expand Down
4 changes: 2 additions & 2 deletions pandas/_libs/missing.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ from decimal import Decimal
import numbers
from sys import maxsize

import cython
from cython import Py_ssize_t
cimport cython
from cython cimport Py_ssize_t
import numpy as np

cimport numpy as cnp
Expand Down
4 changes: 2 additions & 2 deletions pandas/_libs/ops.pyx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import operator

cimport cython
from cpython.object cimport (
Py_EQ,
Py_GE,
Expand All @@ -9,9 +10,8 @@ from cpython.object cimport (
Py_NE,
PyObject_RichCompareBool,
)
from cython cimport Py_ssize_t

import cython
from cython import Py_ssize_t
import numpy as np

from numpy cimport (
Expand Down
18 changes: 8 additions & 10 deletions pandas/_libs/parsers.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,7 @@ import sys
import time
import warnings

from libc.stdlib cimport free
from libc.string cimport (
strcasecmp,
strlen,
strncpy,
)

import cython
from cython import Py_ssize_t

cimport cython
from cpython.bytes cimport (
PyBytes_AsString,
PyBytes_FromString,
Expand All @@ -40,6 +31,13 @@ from cpython.unicode cimport (
PyUnicode_Decode,
PyUnicode_DecodeUTF8,
)
from cython cimport Py_ssize_t
from libc.stdlib cimport free
from libc.string cimport (
strcasecmp,
strlen,
strncpy,
)


cdef extern from "Python.h":
Expand Down
3 changes: 1 addition & 2 deletions pandas/_libs/properties.pyx
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from cython import Py_ssize_t

from cpython.dict cimport (
PyDict_Contains,
PyDict_GetItem,
PyDict_SetItem,
)
from cython cimport Py_ssize_t


cdef class CachedProperty:
Expand Down
5 changes: 2 additions & 3 deletions pandas/_libs/reshape.pyx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import cython
from cython import Py_ssize_t

cimport cython
from cython cimport Py_ssize_t
from numpy cimport (
int64_t,
ndarray,
Expand Down
2 changes: 1 addition & 1 deletion pandas/_libs/sparse.pyx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import cython
cimport cython
import numpy as np

cimport numpy as cnp
Expand Down
10 changes: 5 additions & 5 deletions pandas/_libs/tslib.pyx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import warnings

import cython

cimport cython
from cpython.datetime cimport (
PyDate_Check,
PyDateTime_Check,
Expand All @@ -28,14 +27,14 @@ cnp.import_array()
import pytz

from pandas._libs.tslibs.np_datetime cimport (
_string_to_dts,
check_dts_bounds,
dt64_to_dtstruct,
dtstruct_to_dt64,
get_datetime64_value,
npy_datetimestruct,
pydate_to_dt64,
pydatetime_to_dt64,
string_to_dts,
)
from pandas._libs.util cimport (
is_datetime64_object,
Expand Down Expand Up @@ -63,6 +62,7 @@ from pandas._libs.tslibs.timestamps cimport _Timestamp
from pandas._libs.tslibs.timestamps import Timestamp

# Note: this is the only non-tslibs intra-pandas dependency here

from pandas._libs.missing cimport checknull_with_nat_and_na
from pandas._libs.tslibs.tzconversion cimport tz_localize_to_utc_single

Expand All @@ -83,7 +83,7 @@ def _test_parse_iso8601(ts: str):
elif ts == 'today':
return Timestamp.now().normalize()

_string_to_dts(ts, &obj.dts, &out_local, &out_tzoffset, True)
string_to_dts(ts, &obj.dts, &out_local, &out_tzoffset, True)
obj.value = dtstruct_to_dt64(&obj.dts)
check_dts_bounds(&obj.dts)
if out_local == 1:
Expand Down Expand Up @@ -515,7 +515,7 @@ cpdef array_to_datetime(
iresult[i] = NPY_NAT
continue

string_to_dts_failed = _string_to_dts(
string_to_dts_failed = string_to_dts(
val, &dts, &out_local,
&out_tzoffset, False
)
Expand Down
7 changes: 3 additions & 4 deletions pandas/_libs/tslibs/ccalendar.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
Cython implementations of functions resembling the stdlib calendar module
"""

import cython

cimport cython
from numpy cimport (
int32_t,
int64_t,
Expand Down Expand Up @@ -51,8 +50,8 @@ weekday_to_int = {int_to_weekday[key]: key for key in int_to_weekday}
DAY_SECONDS = 86400
HOUR_SECONDS = 3600

cdef int64_t DAY_NANOS = DAY_SECONDS * 1_000_000_000
cdef int64_t HOUR_NANOS = HOUR_SECONDS * 1_000_000_000
cdef const int64_t DAY_NANOS = DAY_SECONDS * 1_000_000_000
cdef const int64_t HOUR_NANOS = HOUR_SECONDS * 1_000_000_000

# ----------------------------------------------------------------------

Expand Down
7 changes: 4 additions & 3 deletions pandas/_libs/tslibs/conversion.pyx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import cython
cimport cython

import numpy as np

cimport numpy as cnp
Expand Down Expand Up @@ -31,7 +32,6 @@ from pandas._libs.tslibs.base cimport ABCTimestamp
from pandas._libs.tslibs.np_datetime cimport (
NPY_DATETIMEUNIT,
NPY_FR_ns,
_string_to_dts,
astype_overflowsafe,
check_dts_bounds,
dt64_to_dtstruct,
Expand All @@ -43,6 +43,7 @@ from pandas._libs.tslibs.np_datetime cimport (
npy_datetimestruct,
pandas_datetime_to_datetimestruct,
pydatetime_to_dt64,
string_to_dts,
)

from pandas._libs.tslibs.np_datetime import (
Expand Down Expand Up @@ -602,7 +603,7 @@ cdef _TSObject _convert_str_to_tsobject(object ts, tzinfo tz, str unit,
dt = datetime.now(tz)
# equiv: datetime.today().replace(tzinfo=tz)
else:
string_to_dts_failed = _string_to_dts(
string_to_dts_failed = string_to_dts(
ts, &dts, &out_local,
&out_tzoffset, False
)
Expand Down
1 change: 1 addition & 0 deletions pandas/_libs/tslibs/dtypes.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,7 @@ cdef NPY_DATETIMEUNIT freq_group_code_to_npy_unit(int freq) nogil:
return NPY_DATETIMEUNIT.NPY_FR_D


# TODO: use in _matplotlib.converter?
cdef int64_t periods_per_day(NPY_DATETIMEUNIT reso=NPY_DATETIMEUNIT.NPY_FR_ns) except? -1:
"""
How many of the given time units fit into a single day?
Expand Down
4 changes: 2 additions & 2 deletions pandas/_libs/tslibs/fields.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ objects and arrays
from locale import LC_TIME

from _strptime import LocaleTime
import cython
from cython import Py_ssize_t
cimport cython
from cython cimport Py_ssize_t
import numpy as np

cimport numpy as cnp
Expand Down
Loading