diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2023-03-30 18:56:10 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2023-03-30 18:56:10 +0000 |
| commit | 8416ab31934b6265ff7b79cedc999a182d41c3ec (patch) | |
| tree | 9b89867727996426a51a221cfa8ea863735f0f86 /lib/sqlalchemy | |
| parent | 72d2ec57928bdf5649c551bdaa87b7fb0943c2fe (diff) | |
| parent | f3baf6194c3984525e3ce259e1b70c763c0ad824 (diff) | |
| download | sqlalchemy-8416ab31934b6265ff7b79cedc999a182d41c3ec.tar.gz | |
Merge "Minor improvements in collections.pyx" into main
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/cyextension/collections.pyx | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/lib/sqlalchemy/cyextension/collections.pyx b/lib/sqlalchemy/cyextension/collections.pyx index 07bc85e23..e6667dddd 100644 --- a/lib/sqlalchemy/cyextension/collections.pyx +++ b/lib/sqlalchemy/cyextension/collections.pyx @@ -1,3 +1,4 @@ +cimport cython from cpython.dict cimport PyDict_Merge, PyDict_Update from cpython.long cimport PyLong_FromLong from cpython.set cimport PySet_Add @@ -38,12 +39,14 @@ cdef class OrderedSet(set): else: self._list = [] + @cython.final cdef OrderedSet _copy(self): cdef OrderedSet cp = OrderedSet.__new__(OrderedSet) cp._list = list(self._list) set.update(cp, cp._list) return cp + @cython.final cdef OrderedSet _from_list(self, list new_list): cdef OrderedSet new = OrderedSet.__new__(OrderedSet) new._list = new_list @@ -88,7 +91,7 @@ cdef class OrderedSet(set): __str__ = __repr__ - def update(self, iterable): + cpdef OrderedSet update(self, iterable): for e in iterable: if e not in self: self._list.append(e) @@ -107,6 +110,7 @@ cdef class OrderedSet(set): def __or__(self, other): return self.union(other) + @cython.final cdef set _to_set(self, other): cdef set other_set if isinstance(other, set): @@ -116,7 +120,7 @@ cdef class OrderedSet(set): return other_set def intersection(self, *other): - cdef other_set = set.intersection(self, *other) + cdef set other_set = set.intersection(self, *other) return self._from_list([a for a in self._list if a in other_set]) def __and__(self, other): @@ -133,7 +137,7 @@ cdef class OrderedSet(set): return self.symmetric_difference(other) def difference(self, *other): - cdef other_set = set.difference(self, *other) + cdef set other_set = set.difference(self, *other) return self._from_list([a for a in self._list if a in other_set]) def __sub__(self, other): @@ -147,7 +151,7 @@ cdef class OrderedSet(set): self.intersection_update(other) return self - def symmetric_difference_update(self, other): + cpdef symmetric_difference_update(self, other): set.symmetric_difference_update(self, other) self._list = [a for a in self._list if a in self] self._list += [a for a in other if a in self] @@ -296,7 +300,7 @@ cdef class IdentitySet: self.update(other) return self - cpdef difference(self, iterable): + cpdef IdentitySet difference(self, iterable): cdef IdentitySet result = self.__new__(self.__class__) if isinstance(iterable, self.__class__): other = (<IdentitySet>iterable)._members @@ -320,7 +324,7 @@ cdef class IdentitySet: self.difference_update(other) return self - cpdef intersection(self, iterable): + cpdef IdentitySet intersection(self, iterable): cdef IdentitySet result = self.__new__(self.__class__) if isinstance(iterable, self.__class__): other = (<IdentitySet>iterable)._members @@ -344,7 +348,7 @@ cdef class IdentitySet: self.intersection_update(other) return self - cpdef symmetric_difference(self, iterable): + cpdef IdentitySet symmetric_difference(self, iterable): cdef IdentitySet result = self.__new__(self.__class__) cdef dict other if isinstance(iterable, self.__class__): @@ -372,7 +376,7 @@ cdef class IdentitySet: self.symmetric_difference(other) return self - cpdef copy(self): + cpdef IdentitySet copy(self): cdef IdentitySet cp = self.__new__(self.__class__) cp._members = self._members.copy() return cp |
