bool-hybrid-array 9.11.1__py3-none-any.whl → 9.11.2__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/__main__.py +3 -1
- bool_hybrid_array/core.py +11 -4
- bool_hybrid_array/int_array/__init__.py +17 -56
- {bool_hybrid_array-9.11.1.dist-info → bool_hybrid_array-9.11.2.dist-info}/METADATA +2 -1
- bool_hybrid_array-9.11.2.dist-info/RECORD +10 -0
- bool_hybrid_array-9.11.1.dist-info/RECORD +0 -10
- {bool_hybrid_array-9.11.1.dist-info → bool_hybrid_array-9.11.2.dist-info}/WHEEL +0 -0
- {bool_hybrid_array-9.11.1.dist-info → bool_hybrid_array-9.11.2.dist-info}/licenses/LICENSE +0 -0
- {bool_hybrid_array-9.11.1.dist-info → bool_hybrid_array-9.11.2.dist-info}/top_level.txt +0 -0
bool_hybrid_array/__init__.py
CHANGED
bool_hybrid_array/__main__.py
CHANGED
|
@@ -274,10 +274,12 @@ max_num = (1 << 256) - 1
|
|
|
274
274
|
min_num = -max_num
|
|
275
275
|
|
|
276
276
|
# 1. IntHybridArray:257位完美存储
|
|
277
|
-
arr_hybrid = int_array.IntHybridArray([max_num, min_num, 123456], bit_length=257)
|
|
277
|
+
arr_hybrid = int_array.IntHybridArray([max_num, min_num, 123456, 1], bit_length=257)
|
|
278
278
|
print("✅ IntHybridArray存储结果:")
|
|
279
279
|
print(f"最大值:{arr_hybrid[0]}")
|
|
280
280
|
print(f"最小值:{arr_hybrid[1]}")
|
|
281
|
+
print(f"整个数组:{arr_hybrid}")
|
|
282
|
+
|
|
281
283
|
|
|
282
284
|
# 2. NumPy:用最大的int64尝试存储(必然失败)
|
|
283
285
|
try:
|
bool_hybrid_array/core.py
CHANGED
|
@@ -241,7 +241,7 @@ class BoolHybridArray(MutableSequence,Exception,metaclass=ResurrectMeta):
|
|
|
241
241
|
if pos < len(self.large):
|
|
242
242
|
del self.large[pos]
|
|
243
243
|
return None
|
|
244
|
-
def __getitem__(self, key:int|slice) -> BoolHybridArray:
|
|
244
|
+
def __getitem__(self, key:int|slice = -1) -> BoolHybridArray:
|
|
245
245
|
if isinstance(key, slice):
|
|
246
246
|
start, stop, step = key.indices(self.size)
|
|
247
247
|
return BoolHybridArr((self[i] for i in range(start, stop, step)),hash_ = self.hash_)
|
|
@@ -284,7 +284,7 @@ class BoolHybridArray(MutableSequence,Exception,metaclass=ResurrectMeta):
|
|
|
284
284
|
def __repr__(self) -> str:
|
|
285
285
|
return(f"BoolHybridArray(split_index={self.split_index}, size={self.size}, "
|
|
286
286
|
+f"is_sparse={self.is_sparse}, small_len={len(self.small)}, large_len={len(self.large)})")
|
|
287
|
-
def __delitem__(self, key: int) -> None:
|
|
287
|
+
def __delitem__(self, key: int = -1) -> None:
|
|
288
288
|
key = key if key >= 0 else key + self.size
|
|
289
289
|
if not (0 <= key < self.size):
|
|
290
290
|
raise IndexError(f"索引 {key} 超出范围 [0, {self.size})")
|
|
@@ -445,6 +445,12 @@ class BoolHybridArray(MutableSequence,Exception,metaclass=ResurrectMeta):
|
|
|
445
445
|
def append(self,v):
|
|
446
446
|
self.size += 1
|
|
447
447
|
self[-1] = v
|
|
448
|
+
push = append
|
|
449
|
+
peek = __getitem__
|
|
450
|
+
top = property(peek)
|
|
451
|
+
front = property(lambda self:self[0])
|
|
452
|
+
rear = top
|
|
453
|
+
enqueue = push
|
|
448
454
|
def index(self, value) -> int:
|
|
449
455
|
if self.size == 0:
|
|
450
456
|
raise ValueError('无法在空的 BoolHybridArray 中查找元素!')
|
|
@@ -524,6 +530,7 @@ class BoolHybridArray(MutableSequence,Exception,metaclass=ResurrectMeta):
|
|
|
524
530
|
return arr
|
|
525
531
|
def __reduce__(self):
|
|
526
532
|
return BoolHybridArr,(np.asarray(self),self.is_sparse,self.Type,self.hash_,),
|
|
533
|
+
dequeue = lambda self:self.pop(0)
|
|
527
534
|
class BoolHybridArr(BoolHybridArray,metaclass=ResurrectMeta):
|
|
528
535
|
__module__ = 'bool_hybrid_array'
|
|
529
536
|
def __new__(cls, lst: Iterable, is_sparse=None, Type = None, hash_ = True) -> BoolHybridArray:
|
|
@@ -703,8 +710,8 @@ class BHA_List(list,metaclass=ResurrectMeta):
|
|
|
703
710
|
def __iter__(self):
|
|
704
711
|
return BHA_Iterator(super().__iter__())
|
|
705
712
|
def to_ascii_art(self, width=20):
|
|
706
|
-
art = '\n'.join([''.join(['■' if j else ' ' for j in i]) for i in self])
|
|
707
|
-
return
|
|
713
|
+
art = '\n'.join([' '.join(['■' if j else ' ' for j in i]) for i in self])
|
|
714
|
+
return art
|
|
708
715
|
class BHA_Iterator(Iterator,metaclass=ResurrectMeta):
|
|
709
716
|
__module__ = 'bool_hybrid_array'
|
|
710
717
|
def __init__(self,data):
|
|
@@ -95,58 +95,9 @@ class IntHybridArray(BoolHybridArray):
|
|
|
95
95
|
return self.to_int(bit_chunk)
|
|
96
96
|
|
|
97
97
|
def __setitem__(self, key, value):
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
values = list(value) if isinstance(value, (list, tuple, IntHybridArray)) else [value] * ((stop - start + step - 1) // step)
|
|
102
|
-
idx = 0
|
|
103
|
-
for int_idx in range(start, stop, step):
|
|
104
|
-
block_start = int_idx * self.bit_length
|
|
105
|
-
block_end = block_start + self.bit_length
|
|
106
|
-
if block_end > self.size:
|
|
107
|
-
raise IndexError("索引超出范围")
|
|
108
|
-
num = values[idx % len(values)]
|
|
109
|
-
if num >= 0:
|
|
110
|
-
sign_bit = False
|
|
111
|
-
num_bits = [bool((num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
112
|
-
else:
|
|
113
|
-
sign_bit = True
|
|
114
|
-
abs_num = abs(num)
|
|
115
|
-
num_bits = [not bool((abs_num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
116
|
-
carry = 1
|
|
117
|
-
for j in range(len(num_bits)):
|
|
118
|
-
if carry:
|
|
119
|
-
num_bits[j] = not num_bits[j]
|
|
120
|
-
carry = 0 if num_bits[j] else 1
|
|
121
|
-
bool_data = [sign_bit] + num_bits
|
|
122
|
-
for bit_idx in range(self.bit_length):
|
|
123
|
-
super().__setitem__(block_start + bit_idx, bool_data[bit_idx])
|
|
124
|
-
idx += 1
|
|
125
|
-
return
|
|
126
|
-
key = key if key >= 0 else key + len(self)
|
|
127
|
-
if not (0 <= key < len(self)):
|
|
128
|
-
raise IndexError("索引超出范围")
|
|
129
|
-
block_start = key * self.bit_length
|
|
130
|
-
block_end = block_start + self.bit_length
|
|
131
|
-
if block_end > self.size:
|
|
132
|
-
raise IndexError("索引超出范围")
|
|
133
|
-
num = value
|
|
134
|
-
if num >= 0:
|
|
135
|
-
sign_bit = False
|
|
136
|
-
num_bits = [bool((num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
137
|
-
else:
|
|
138
|
-
sign_bit = True
|
|
139
|
-
abs_num = abs(num)
|
|
140
|
-
num_bits = [not bool((abs_num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
141
|
-
carry = 1
|
|
142
|
-
for j in range(len(num_bits)):
|
|
143
|
-
if carry:
|
|
144
|
-
num_bits[j] = not num_bits[j]
|
|
145
|
-
carry = 0 if num_bits[j] else 1
|
|
146
|
-
bool_data = [sign_bit] + num_bits
|
|
147
|
-
for bit_idx in range(self.bit_length):
|
|
148
|
-
super(self.__class__, self).__setitem__(block_start + bit_idx, bool_data[bit_idx])
|
|
149
|
-
|
|
98
|
+
tmp = lst(self)
|
|
99
|
+
tmp[key] = value
|
|
100
|
+
self.__dict__ = IntHybridArray(tmp)
|
|
150
101
|
def __iter__(self):
|
|
151
102
|
return map(self.__getitem__,range(len(self)))
|
|
152
103
|
|
|
@@ -188,7 +139,17 @@ class IntHybridArray(BoolHybridArray):
|
|
|
188
139
|
if x != f"{value} 不在 IntHybridArray 中":
|
|
189
140
|
return x
|
|
190
141
|
raise ValueError(x)
|
|
191
|
-
def
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
142
|
+
def extend(self, iterable:Iterable) -> None:
|
|
143
|
+
if isinstance(iterable, (Iterator, Generator, map)):
|
|
144
|
+
iterable,copy = itertools.tee(iterable, 2)
|
|
145
|
+
len_ = sum(1 for _ in copy)
|
|
146
|
+
else:
|
|
147
|
+
len_ = len(iterable)
|
|
148
|
+
self.total_bits += len_*self.bit_length
|
|
149
|
+
for i,j in zip(range(len_),iterable):
|
|
150
|
+
self[-i-1] = j
|
|
151
|
+
def append(self,value):
|
|
152
|
+
self.total_bits += self.bit_length
|
|
153
|
+
self.size = self.total_bits
|
|
154
|
+
self[-1] = value
|
|
155
|
+
__all__ = tuple(globals())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bool-hybrid-array
|
|
3
|
-
Version: 9.11.
|
|
3
|
+
Version: 9.11.2
|
|
4
4
|
Summary: 一个高效的布尔数组(密集+稀疏混合存储,节省内存)
|
|
5
5
|
Home-page: https://github.com/BKsell/bool-hybrid-array
|
|
6
6
|
Author: 蔡靖杰
|
|
@@ -586,6 +586,7 @@ except OverflowError as e:
|
|
|
586
586
|
* **9.10.22**:进一步优化Ask_BHA的性能
|
|
587
587
|
* **9.11.0**:新增对7.3.10以上版本的PyPy解释器的支持
|
|
588
588
|
* **9.11.1**:修复PyPy解释器下的保护机制过度保护bug
|
|
589
|
+
* **9.11.2**:尝试修复IntHybridArray索引修改的错误
|
|
589
590
|
|
|
590
591
|
|
|
591
592
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
bool_hybrid_array/__init__.py,sha256=e8WknVCXsaVgyryuKtc4uLs4T9A2ofqC-BPUg6sXu9Q,1038
|
|
2
|
+
bool_hybrid_array/__main__.py,sha256=2HbnUEgExGwO6UoM6SIp5DNkx4zH0jWJZBU2eovuAic,8491
|
|
3
|
+
bool_hybrid_array/core.py,sha256=WctTj1uhBxq4mKvUZGtQjECgNzalfMulvNa-uIXc9nc,39530
|
|
4
|
+
bool_hybrid_array/秘密.md,sha256=Ii2NvXmv-Ktu04zJsGLcQZvlzT4gOatByE4B2wTK1Ks,48
|
|
5
|
+
bool_hybrid_array/int_array/__init__.py,sha256=GwRHcOtU6SpVBtLQNrzbhcaZZ2p1PJqb2C0iTEjNBVA,6241
|
|
6
|
+
bool_hybrid_array-9.11.2.dist-info/licenses/LICENSE,sha256=Sg4rnGXkBDYkwJCWyxdWp5H60rhVAxpNvFh_l3JWZdY,1070
|
|
7
|
+
bool_hybrid_array-9.11.2.dist-info/METADATA,sha256=xrJCOoDQLiAisNRukO4QZahBRe5UimLlgo1Tw2EcUuU,24858
|
|
8
|
+
bool_hybrid_array-9.11.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
9
|
+
bool_hybrid_array-9.11.2.dist-info/top_level.txt,sha256=vk-TD77wuVQsN1rJ6uVWZX4sC_wya_WplRDwQKJoBZM,18
|
|
10
|
+
bool_hybrid_array-9.11.2.dist-info/RECORD,,
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
bool_hybrid_array/__init__.py,sha256=MEv3Ygh5XtBGxhu6oQICjkWyWSFUkU3xIyZSn0RKYDY,1038
|
|
2
|
-
bool_hybrid_array/__main__.py,sha256=3bnJ2IQctrXWQ1WyBQvh1w882_k3b84LGLL8yUNkXws,8447
|
|
3
|
-
bool_hybrid_array/core.py,sha256=nZbzHWLQhQpsQ1YVgqyvcw3znKlEZZA4QrSiSraOJN8,39343
|
|
4
|
-
bool_hybrid_array/秘密.md,sha256=Ii2NvXmv-Ktu04zJsGLcQZvlzT4gOatByE4B2wTK1Ks,48
|
|
5
|
-
bool_hybrid_array/int_array/__init__.py,sha256=KejzB6xqUjLkoDhihrtyoBXL_Rqom1XBIDtXpQeIQEg,8192
|
|
6
|
-
bool_hybrid_array-9.11.1.dist-info/licenses/LICENSE,sha256=Sg4rnGXkBDYkwJCWyxdWp5H60rhVAxpNvFh_l3JWZdY,1070
|
|
7
|
-
bool_hybrid_array-9.11.1.dist-info/METADATA,sha256=42nd7b4N11jcmkzdp0Y0o0jx5FMGpkJnJmnbSOiU49Y,24794
|
|
8
|
-
bool_hybrid_array-9.11.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
9
|
-
bool_hybrid_array-9.11.1.dist-info/top_level.txt,sha256=vk-TD77wuVQsN1rJ6uVWZX4sC_wya_WplRDwQKJoBZM,18
|
|
10
|
-
bool_hybrid_array-9.11.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|