bool-hybrid-array 9.11.11__py3-none-any.whl → 9.11.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bool_hybrid_array/__init__.py +1 -1
- bool_hybrid_array/compile_core.cp314-win_amd64.pyd +0 -0
- bool_hybrid_array/core.c +4643 -4432
- bool_hybrid_array/core.py +4 -0
- bool_hybrid_array/int_array/core.py +53 -3
- {bool_hybrid_array-9.11.11.dist-info → bool_hybrid_array-9.11.13.dist-info}/METADATA +3 -1
- bool_hybrid_array-9.11.13.dist-info/RECORD +14 -0
- bool_hybrid_array-9.11.11.dist-info/RECORD +0 -14
- {bool_hybrid_array-9.11.11.dist-info → bool_hybrid_array-9.11.13.dist-info}/WHEEL +0 -0
- {bool_hybrid_array-9.11.11.dist-info → bool_hybrid_array-9.11.13.dist-info}/licenses/LICENSE +0 -0
- {bool_hybrid_array-9.11.11.dist-info → bool_hybrid_array-9.11.13.dist-info}/top_level.txt +0 -0
bool_hybrid_array/core.py
CHANGED
|
@@ -283,6 +283,10 @@ class BoolHybridArray(MutableSequence,Exception,metaclass=ResurrectMeta):# type:
|
|
|
283
283
|
for i, val in zip(slice_indices, value_list):
|
|
284
284
|
self[i] = val
|
|
285
285
|
return
|
|
286
|
+
if new_len == max(0, stop - start):
|
|
287
|
+
for v,i in zip(new_len,range(start,stop)):
|
|
288
|
+
self[i] = v
|
|
289
|
+
return
|
|
286
290
|
for i in range(stop - 1, start - 1, -1):
|
|
287
291
|
if i <= self.split_index:
|
|
288
292
|
if i >= len(self.small):
|
|
@@ -2,6 +2,37 @@ from __future__ import annotations
|
|
|
2
2
|
from collections.abc import Iterable
|
|
3
3
|
from ..core import *
|
|
4
4
|
import builtins
|
|
5
|
+
def block_insert_sort(arr, start, end):
|
|
6
|
+
for i in range(start + 1, end):
|
|
7
|
+
current = arr[i]
|
|
8
|
+
insert_pos = bisect.bisect_right(arr, current, start, i)
|
|
9
|
+
j = i
|
|
10
|
+
while j > insert_pos:
|
|
11
|
+
arr[j], arr[j-1] = arr[j-1], arr[j]
|
|
12
|
+
j -= 1
|
|
13
|
+
def merge_two_blocks(arr, left_start, left_end, right_end):
|
|
14
|
+
if arr[left_end - 1] <= arr[left_end]:
|
|
15
|
+
return
|
|
16
|
+
left = arr[left_start:left_end]
|
|
17
|
+
right = arr[left_end:right_end]
|
|
18
|
+
i = j = 0
|
|
19
|
+
k = left_start
|
|
20
|
+
while i < len(left) and j < len(right):
|
|
21
|
+
if left[i] <= right[j]:
|
|
22
|
+
arr[k] = left[i]
|
|
23
|
+
i += 1
|
|
24
|
+
else:
|
|
25
|
+
arr[k] = right[j]
|
|
26
|
+
j += 1
|
|
27
|
+
k += 1
|
|
28
|
+
while i < len(left):
|
|
29
|
+
arr[k] = left[i]
|
|
30
|
+
i += 1
|
|
31
|
+
k += 1
|
|
32
|
+
while j < len(right):
|
|
33
|
+
arr[k] = right[j]
|
|
34
|
+
j += 1
|
|
35
|
+
k += 1
|
|
5
36
|
class IntBitTag(BHA_bool, metaclass=ResurrectMeta):
|
|
6
37
|
def __str__(self):
|
|
7
38
|
return "'-1'" if (hasattr(self, 'is_sign_bit') and self.is_sign_bit and self) else "'1'" if self else "'0'"
|
|
@@ -95,9 +126,14 @@ class IntHybridArray(BoolHybridArray,metaclass=ResurrectMeta):
|
|
|
95
126
|
return self.to_int(bit_chunk)
|
|
96
127
|
|
|
97
128
|
def __setitem__(self, key, value):
|
|
98
|
-
|
|
99
|
-
tmp
|
|
100
|
-
|
|
129
|
+
tmp1 = IntHybridArray([value],bit_length = self.bit_length)
|
|
130
|
+
tmp = tmp1.view()
|
|
131
|
+
if tmp1[0] == value:
|
|
132
|
+
super().__setitem__(slice(key*self.bit_length,(key+1)*self.bit_length),tmp)
|
|
133
|
+
else:
|
|
134
|
+
lst = list(self)
|
|
135
|
+
lst[key] = value
|
|
136
|
+
self.__init__(lst)
|
|
101
137
|
def __iter__(self):
|
|
102
138
|
return map(self.__getitem__,range(len(self)))
|
|
103
139
|
|
|
@@ -152,3 +188,17 @@ class IntHybridArray(BoolHybridArray,metaclass=ResurrectMeta):
|
|
|
152
188
|
self.total_bits += self.bit_length
|
|
153
189
|
self.size = self.total_bits
|
|
154
190
|
self[-1] = value
|
|
191
|
+
def sort(self):
|
|
192
|
+
n = len(self)
|
|
193
|
+
BLOCK_SIZE = 32
|
|
194
|
+
for start in range(0, n, BLOCK_SIZE):
|
|
195
|
+
end = min(start + BLOCK_SIZE, n)
|
|
196
|
+
block_insert_sort(self, start, end)
|
|
197
|
+
merge_size = BLOCK_SIZE
|
|
198
|
+
while merge_size < n:
|
|
199
|
+
for start in range(0, n, merge_size * 2):
|
|
200
|
+
mid = min(start + merge_size, n)
|
|
201
|
+
end = min(start + merge_size * 2, n)
|
|
202
|
+
if mid < end:
|
|
203
|
+
merge_two_blocks(self, start, mid, end)
|
|
204
|
+
merge_size *= 2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bool-hybrid-array
|
|
3
|
-
Version: 9.11.
|
|
3
|
+
Version: 9.11.13
|
|
4
4
|
Summary: 一个高效的布尔数组(密集+稀疏混合存储,节省内存)
|
|
5
5
|
Home-page: https://github.com/BKsell/bool-hybrid-array
|
|
6
6
|
Author: 蔡靖杰
|
|
@@ -621,6 +621,8 @@ print(f"出队2个元素后: {q}") # 输出:BHA_Queue([T,T,F,T,F])
|
|
|
621
621
|
* **9.11.9**:修复BHA_Queue的bug,新增cin和cout(使用方式:a = ctypes.c_int();cin >> a;cout << a,支持各种ctypes类型、numpy标量)
|
|
622
622
|
* **9.11.10**:修复cin的AttributeError的错误
|
|
623
623
|
* **9.11.11**:新增cin对EOF的处理
|
|
624
|
+
* **9.11.12**:优化了IntHybridArray的__setitem__,新增了IntHybridArray的sort
|
|
625
|
+
* **9.11.13**:修复IndexError的错误
|
|
624
626
|
|
|
625
627
|
|
|
626
628
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
bool_hybrid_array/__init__.py,sha256=m44910RtpNN9VGJkDkG_T3aZ50wPidd6hT5t1Yw465s,1086
|
|
2
|
+
bool_hybrid_array/__main__.py,sha256=uFyebfsZl1tW54AVcc6IDhk36BglTGb_Vw3Djx8pq00,8987
|
|
3
|
+
bool_hybrid_array/_cppiostream.py,sha256=1i973ag_8XgivQkeIbqzHivflcQkVFtX77R_UwChSAg,9205
|
|
4
|
+
bool_hybrid_array/compile_core.cp314-win_amd64.pyd,sha256=3vFAZ6vSMqoP_fWRkXd_KVPVUw4oo2Nv7xi0sBQu2fQ,516096
|
|
5
|
+
bool_hybrid_array/core.c,sha256=gFU1P6ksFaDqT0vUC4u65bb700-LZU6vu0mwTUYNLzg,3241001
|
|
6
|
+
bool_hybrid_array/core.py,sha256=t0CuBJwRJY870E0ycnMpdfflAIIa6PgUk3W1IVzbDrs,42257
|
|
7
|
+
bool_hybrid_array/秘密.md,sha256=Ii2NvXmv-Ktu04zJsGLcQZvlzT4gOatByE4B2wTK1Ks,48
|
|
8
|
+
bool_hybrid_array/int_array/__init__.py,sha256=CCKDUL5GBAXOprc9FhtLNL_rP4IDhvGVWJ-Dporp6YI,112
|
|
9
|
+
bool_hybrid_array/int_array/core.py,sha256=DZ6mC-qLQahV25b_1RHGPK959XYtILYP_Pbwwg7nFLA,7936
|
|
10
|
+
bool_hybrid_array-9.11.13.dist-info/licenses/LICENSE,sha256=Sg4rnGXkBDYkwJCWyxdWp5H60rhVAxpNvFh_l3JWZdY,1070
|
|
11
|
+
bool_hybrid_array-9.11.13.dist-info/METADATA,sha256=hYO9uLNP-zI7EIUqLe_5CHcsLDS9DvU4BB-kUG4gKb0,26473
|
|
12
|
+
bool_hybrid_array-9.11.13.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
13
|
+
bool_hybrid_array-9.11.13.dist-info/top_level.txt,sha256=vk-TD77wuVQsN1rJ6uVWZX4sC_wya_WplRDwQKJoBZM,18
|
|
14
|
+
bool_hybrid_array-9.11.13.dist-info/RECORD,,
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
bool_hybrid_array/__init__.py,sha256=r7hGlbJiOFmS9NisOL0YR4oNN09aQ2p-suxxXXxawOY,1086
|
|
2
|
-
bool_hybrid_array/__main__.py,sha256=uFyebfsZl1tW54AVcc6IDhk36BglTGb_Vw3Djx8pq00,8987
|
|
3
|
-
bool_hybrid_array/_cppiostream.py,sha256=1i973ag_8XgivQkeIbqzHivflcQkVFtX77R_UwChSAg,9205
|
|
4
|
-
bool_hybrid_array/compile_core.cp314-win_amd64.pyd,sha256=LbC9PHoXLjtBBCvI_Xipvly8d3ojE32iwfQH6FFbzNU,556544
|
|
5
|
-
bool_hybrid_array/core.c,sha256=om2tuMhsXPLtmFAcJpY-VnZcwVJ2sZrYEPWPsdtEs4M,3230975
|
|
6
|
-
bool_hybrid_array/core.py,sha256=nrmu8djPZS3Y70wRa_QkeM-5v-LGLUkuSZiw__OFU-M,42091
|
|
7
|
-
bool_hybrid_array/秘密.md,sha256=Ii2NvXmv-Ktu04zJsGLcQZvlzT4gOatByE4B2wTK1Ks,48
|
|
8
|
-
bool_hybrid_array/int_array/__init__.py,sha256=CCKDUL5GBAXOprc9FhtLNL_rP4IDhvGVWJ-Dporp6YI,112
|
|
9
|
-
bool_hybrid_array/int_array/core.py,sha256=hnXHSLabtbDCnO3JX0M5tsF0BWlQpjWKu7RplMx7i8A,6236
|
|
10
|
-
bool_hybrid_array-9.11.11.dist-info/licenses/LICENSE,sha256=Sg4rnGXkBDYkwJCWyxdWp5H60rhVAxpNvFh_l3JWZdY,1070
|
|
11
|
-
bool_hybrid_array-9.11.11.dist-info/METADATA,sha256=_Rdoe4mYyGIPdto54vfro-n6vhVnQSMhRqaNyxv-b4c,26342
|
|
12
|
-
bool_hybrid_array-9.11.11.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
13
|
-
bool_hybrid_array-9.11.11.dist-info/top_level.txt,sha256=vk-TD77wuVQsN1rJ6uVWZX4sC_wya_WplRDwQKJoBZM,18
|
|
14
|
-
bool_hybrid_array-9.11.11.dist-info/RECORD,,
|
|
File without changes
|
{bool_hybrid_array-9.11.11.dist-info → bool_hybrid_array-9.11.13.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|