Skip to content
Open
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
9 changes: 7 additions & 2 deletions cytoolz/dicttoolz.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,13 @@ from cpython.ref cimport PyObject, Py_DECREF, Py_INCREF, Py_XDECREF
# Locally defined bindings that differ from `cython.cpython` bindings
from cytoolz.cpython cimport PyDict_Next_Compat, PtrIter_Next

from copy import copy
from collections.abc import Mapping
from collections import abc


# cdef aliases to eliminate global lookups

cdef object Mapping = abc.Mapping
del abc


__all__ = ['merge', 'merge_with', 'valmap', 'keymap', 'itemmap', 'valfilter',
Expand Down
63 changes: 46 additions & 17 deletions cytoolz/functoolz.pyx
Original file line number Diff line number Diff line change
@@ -1,16 +1,3 @@
import inspect
import sys
from functools import partial
from importlib import import_module
from operator import attrgetter
from types import MethodType
from cytoolz.utils import no_default
import cytoolz._signatures as _sigs

from toolz.functoolz import (InstanceProperty, instanceproperty, is_arity,
num_required_args, has_varargs, has_keywords,
is_valid_args, is_partial_args)

cimport cython
from cpython.dict cimport PyDict_Merge, PyDict_New
from cpython.object cimport (PyCallable_Check, PyObject_Call, PyObject_CallObject,
Expand All @@ -20,6 +7,48 @@ from cpython.sequence cimport PySequence_Concat
from cpython.set cimport PyFrozenSet_New
from cpython.tuple cimport PyTuple_Check, PyTuple_GET_SIZE

import functools
import importlib
import inspect
import operator
import types
from toolz import functoolz as functoolz_py

from cytools import _signatures
from cytoolz import utils

# cdef constants to eliminate global lookups
cdef object partial = functools.partial
del functools

cdef object import_module = importlib.import_module
del importlib

cdef object signature = inspect.signature
del inspect

cdef object attrgetter = operator.attrgetter
del operator

cdef object MethodType = types.MethodType
del types

cdef object InstanceProperty = functoolz_py.InstanceProperty
cdef object instanceproperty = functoolz_py.instanceproperty
cdef object is_arity = functoolz_py.is_arity
cdef object num_required_args = functoolz_py.num_required_args
cdef object has_varargs = functoolz_py.has_varargs
cdef object has_keywords = functoolz_py.has_keywords
cdef object is_valid_args = functoolz_py.is_valid_args
cdef object is_partial_args = functoolz_py.is_partial_args
del functoolz_py

cdef object no_default = utils.no_default
del utils

cdef object signature_or_spec = _signatures.signature_or_spec
del _signatures


__all__ = ['identity', 'thread_first', 'thread_last', 'memoize', 'compose', 'compose_left',
'pipe', 'complement', 'juxt', 'do', 'curry', 'memoize', 'flip',
Expand Down Expand Up @@ -289,7 +318,7 @@ cdef class curry:
# kwargs = dict(self.keywords, **kwargs)

if self._sigspec is None:
sigspec = self._sigspec = _sigs.signature_or_spec(func)
sigspec = self._sigspec = signature_or_spec(func)
self._has_unknown_args = has_varargs(func, sigspec) is not False
else:
sigspec = self._sigspec
Expand Down Expand Up @@ -330,7 +359,7 @@ cdef class curry:

property __signature__:
def __get__(self):
sig = inspect.signature(self.func)
sig = signature(self.func)
args = self.args or ()
keywords = self.keywords or {}
if is_partial_args(self.func, args, keywords, sig) is False:
Expand Down Expand Up @@ -558,8 +587,8 @@ cdef class Compose:

property __signature__:
def __get__(self):
base = inspect.signature(self.first)
last = inspect.signature(self.funcs[-1])
base = signature(self.first)
last = signature(self.funcs[-1])
return base.replace(return_annotation=last.return_annotation)

property __name__:
Expand Down
30 changes: 25 additions & 5 deletions cytoolz/itertoolz.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,31 @@ from cpython.tuple cimport PyTuple_GET_ITEM, PyTuple_GetSlice, PyTuple_New, PyTu
# Locally defined bindings that differ from `cython.cpython` bindings
from cytoolz.cpython cimport PtrIter_Next, PtrObject_GetItem

from collections import deque
from heapq import heapify, heappop, heapreplace
from itertools import chain, islice, zip_longest
from operator import itemgetter
from cytoolz.utils import no_default
import collections
import heapq
import itertools
import operator
from cytools import utils

# cdef aliases to eliminate global lookups
cdef object deque = collections.deque
del collections

cdef object heapify = heapq.heapify
cdef object heappop = heapq.heappop
cdef object heapreplace = heapq.heapreplace
del heapq

cdef object chain = itertools.chain
cdef object islice = itertools.islice
cdef object zip_longest = itertools.zip_longest
del itertools

cdef object itemgetter = operator.itemgetter
del operator

cdef object no_default = utils.no_default
del utils


__all__ = ['remove', 'accumulate', 'groupby', 'merge_sorted', 'interleave',
Expand Down
6 changes: 5 additions & 1 deletion cytoolz/recipes.pyx
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
from cpython.sequence cimport PySequence_Tuple
from cytoolz.itertoolz cimport frequencies, pluck

from itertools import groupby
import itertools

# cdef alias to eliminate global lookups
cdef object groupby = itertools.groupby
del itertools


__all__ = ['countby', 'partitionby']
Expand Down