bool-hybrid-array 9.10.14__tar.gz → 9.10.16__tar.gz
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-9.10.14 → bool_hybrid_array-9.10.16}/PKG-INFO +4 -2
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/README.md +2 -1
- bool_hybrid_array-9.10.16/bool_hybrid_array/__init__.py +47 -0
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array/int_array/__init__.py +25 -64
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array.egg-info/PKG-INFO +4 -2
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/setup.py +2 -1
- bool_hybrid_array-9.10.14/bool_hybrid_array/__init__.py +0 -26
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/LICENSE +0 -0
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array/__main__.py +0 -0
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array/core.py +0 -0
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array//347/247/230/345/257/206.md" +0 -0
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array.egg-info/SOURCES.txt +0 -0
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array.egg-info/dependency_links.txt +0 -0
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array.egg-info/requires.txt +0 -0
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array.egg-info/top_level.txt +0 -0
- {bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bool-hybrid-array
|
|
3
|
-
Version: 9.10.
|
|
3
|
+
Version: 9.10.16
|
|
4
4
|
Summary: 一个高效的布尔数组(密集+稀疏混合存储,节省内存)
|
|
5
5
|
Home-page: https://github.com/BKsell/bool-hybrid-array
|
|
6
6
|
Author: 蔡靖杰
|
|
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
20
|
Classifier: License :: OSI Approved :: MIT License
|
|
20
21
|
Classifier: Operating System :: OS Independent
|
|
21
22
|
Requires-Python: >=3.8
|
|
@@ -559,7 +560,8 @@ except OverflowError as e:
|
|
|
559
560
|
* **9.10.12**:把find方法的返回值改为IntHybridArray
|
|
560
561
|
* **9.10.13**:给IntHybridArray新增多种列表操作
|
|
561
562
|
* **9.10.14**:修复IntHybridArray中因单个 0 导致所有数字位长被压缩到 1的问题
|
|
562
|
-
|
|
563
|
+
* **9.10.15**:修复IntHybridArray变成布尔数组的错误
|
|
564
|
+
* **9.10.16**:新增Python 3.14时的jit优化加速
|
|
563
565
|
|
|
564
566
|
|
|
565
567
|
|
|
@@ -520,7 +520,8 @@ except OverflowError as e:
|
|
|
520
520
|
* **9.10.12**:把find方法的返回值改为IntHybridArray
|
|
521
521
|
* **9.10.13**:给IntHybridArray新增多种列表操作
|
|
522
522
|
* **9.10.14**:修复IntHybridArray中因单个 0 导致所有数字位长被压缩到 1的问题
|
|
523
|
-
|
|
523
|
+
* **9.10.15**:修复IntHybridArray变成布尔数组的错误
|
|
524
|
+
* **9.10.16**:新增Python 3.14时的jit优化加速
|
|
524
525
|
|
|
525
526
|
|
|
526
527
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from types import ModuleType,FunctionType
|
|
3
|
+
from . import core
|
|
4
|
+
from .core import __builtins__,builtins
|
|
5
|
+
from . import int_array
|
|
6
|
+
__version__ = "9.10.16"
|
|
7
|
+
public_objects = []
|
|
8
|
+
def jit_class_methods(cls):
|
|
9
|
+
for attr_name in dir(cls):
|
|
10
|
+
if not attr_name.startswith("_"):
|
|
11
|
+
attr = getattr(cls, attr_name)
|
|
12
|
+
if isinstance(attr, FunctionType):
|
|
13
|
+
try:
|
|
14
|
+
setattr(cls, attr_name, jit(attr))
|
|
15
|
+
except:
|
|
16
|
+
pass
|
|
17
|
+
elif isinstance(attr, classmethod):
|
|
18
|
+
original_func = attr.__func__
|
|
19
|
+
try:
|
|
20
|
+
setattr(cls, attr_name, classmethod(jit(original_func)))
|
|
21
|
+
except:
|
|
22
|
+
pass
|
|
23
|
+
return cls
|
|
24
|
+
for name in dir(core):
|
|
25
|
+
if not name.startswith("_"):
|
|
26
|
+
obj = getattr(core, name)
|
|
27
|
+
if isinstance(obj, (type, ModuleType)) or callable(obj):
|
|
28
|
+
public_objects.append(name)
|
|
29
|
+
if isinstance(obj,FunctionType):
|
|
30
|
+
try:setattr(core,name,jit(obj))
|
|
31
|
+
except:pass
|
|
32
|
+
elif isinstance(obj,type):
|
|
33
|
+
jit_class_methods(obj)
|
|
34
|
+
__all__ = public_objects + ["__version__","__builtins__","core","builtins","__dict__","int_array"]
|
|
35
|
+
globals().update({
|
|
36
|
+
name: getattr(core, name)
|
|
37
|
+
for name in public_objects
|
|
38
|
+
})
|
|
39
|
+
try:
|
|
40
|
+
__dict__ = ProtectedBuiltinsDict(globals())
|
|
41
|
+
sys.modules[__name__+'.int_array'] = ProtectedBuiltinsDict(int_array.__dict__)
|
|
42
|
+
sys.modules[__name__] = ProtectedBuiltinsDict(globals().copy())
|
|
43
|
+
sys.modules[__name__].name = 'bool_hybrid_array'
|
|
44
|
+
core.__dict__ = ProtectedBuiltinsDict(core.__dict__)
|
|
45
|
+
except:
|
|
46
|
+
pass
|
|
47
|
+
|
{bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array/int_array/__init__.py
RENAMED
|
@@ -8,21 +8,20 @@ class IntBitTag(BHA_Bool, metaclass=ResurrectMeta):
|
|
|
8
8
|
__repr__ = __str__
|
|
9
9
|
|
|
10
10
|
class IntHybridArray(BoolHybridArray):
|
|
11
|
-
def __init__(self, int_array: list[int], bit_length: int = 8
|
|
12
|
-
self.Type = Type
|
|
11
|
+
def __init__(self, int_array: list[int], bit_length: int = 8):
|
|
13
12
|
self.bit_length = bit_length
|
|
14
13
|
bool_data = []
|
|
15
14
|
max_required_bits = 1
|
|
16
15
|
for num in int_array:
|
|
17
16
|
if num == 0:
|
|
18
|
-
required_bits =
|
|
17
|
+
required_bits = 1
|
|
19
18
|
else:
|
|
20
19
|
abs_num = abs(num)
|
|
21
20
|
num_bits_needed = abs_num.bit_length()
|
|
22
21
|
required_bits = 1 + num_bits_needed
|
|
23
22
|
if required_bits > max_required_bits:
|
|
24
23
|
max_required_bits = required_bits
|
|
25
|
-
self.bit_length =
|
|
24
|
+
self.bit_length = max_required_bits
|
|
26
25
|
for num in int_array:
|
|
27
26
|
if num >= 0:
|
|
28
27
|
sign_bit = False
|
|
@@ -41,10 +40,15 @@ class IntHybridArray(BoolHybridArray):
|
|
|
41
40
|
self.total_bits = len(bool_data)
|
|
42
41
|
super().__init__(0, self.total_bits, False, IntBitTag, False)
|
|
43
42
|
for idx in range(self.total_bits):
|
|
44
|
-
|
|
43
|
+
if idx < self.size:
|
|
44
|
+
super().__setitem__(idx, bool_data[idx])
|
|
45
|
+
else:
|
|
46
|
+
super().append(bool_data[idx])
|
|
45
47
|
for i in range(0, self.total_bits, self.bit_length):
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
if i < self.size:
|
|
49
|
+
bit_tag = super().__getitem__(i)
|
|
50
|
+
bit_tag.is_sign_bit = True
|
|
51
|
+
|
|
48
52
|
def to_int(self, bit_chunk):
|
|
49
53
|
sign_bit = bit_chunk[0].value
|
|
50
54
|
num_bits = [bit.value for bit in bit_chunk[1:]]
|
|
@@ -66,6 +70,7 @@ class IntHybridArray(BoolHybridArray):
|
|
|
66
70
|
num += (1 << j)
|
|
67
71
|
num = -num
|
|
68
72
|
return num
|
|
73
|
+
|
|
69
74
|
def __getitem__(self, key):
|
|
70
75
|
if isinstance(key, slice):
|
|
71
76
|
start, stop, step = key.indices(len(self))
|
|
@@ -87,7 +92,8 @@ class IntHybridArray(BoolHybridArray):
|
|
|
87
92
|
if block_end > self.size:
|
|
88
93
|
raise IndexError("索引超出范围")
|
|
89
94
|
bit_chunk = [super().__getitem__(j) for j in range(block_start, block_end)]
|
|
90
|
-
return self.
|
|
95
|
+
return self.to_int(bit_chunk)
|
|
96
|
+
|
|
91
97
|
def __setitem__(self, key, value):
|
|
92
98
|
value = int(value)
|
|
93
99
|
if isinstance(key, slice):
|
|
@@ -140,63 +146,20 @@ class IntHybridArray(BoolHybridArray):
|
|
|
140
146
|
bool_data = [sign_bit] + num_bits
|
|
141
147
|
for bit_idx in range(self.bit_length):
|
|
142
148
|
super().__setitem__(block_start + bit_idx, bool_data[bit_idx])
|
|
143
|
-
|
|
144
|
-
value = int(value)
|
|
145
|
-
index = index if index >= 0 else index + len(self)
|
|
146
|
-
if not (0 <= index <= len(self)):
|
|
147
|
-
raise IndexError("插入索引超出范围")
|
|
148
|
-
if value == 0:
|
|
149
|
-
required_bits = 1
|
|
150
|
-
else:
|
|
151
|
-
required_bits = 1 + abs(value).bit_length()
|
|
152
|
-
need_resize = required_bits > self.bit_length
|
|
153
|
-
old_data = list(self) if need_resize else None
|
|
154
|
-
if need_resize:
|
|
155
|
-
self.bit_length = required_bits
|
|
156
|
-
self.total_bits = 0
|
|
157
|
-
super().__init__(0, 0, False, IntBitTag, False)
|
|
158
|
-
for num in old_data[:index]:
|
|
159
|
-
self._add_single_num(num)
|
|
160
|
-
self._add_single_num(value)
|
|
161
|
-
for num in old_data[index:]:
|
|
162
|
-
self._add_single_num(num)
|
|
163
|
-
else:
|
|
164
|
-
insert_bit_start = index * self.bit_length
|
|
165
|
-
if value >= 0:
|
|
166
|
-
sign_bit = False
|
|
167
|
-
num_bits = [bool((num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
168
|
-
else:
|
|
169
|
-
sign_bit = True
|
|
170
|
-
abs_num = abs(value)
|
|
171
|
-
num_bits = [not bool((abs_num >> i) & 1) for i in range(self.bit_length - 1)]
|
|
172
|
-
carry = 1
|
|
173
|
-
for j in range(len(num_bits)):
|
|
174
|
-
if carry:
|
|
175
|
-
num_bits[j] = not num_bits[j]
|
|
176
|
-
carry = 0 if num_bits[j] else 1
|
|
177
|
-
bool_data = [sign_bit] + num_bits
|
|
178
|
-
for i in range(self.bit_length):
|
|
179
|
-
super().insert(insert_bit_start + i, bool_data[i])
|
|
180
|
-
self.total_bits += self.bit_length
|
|
181
|
-
def append(self,v):
|
|
182
|
-
v = int(v)
|
|
183
|
-
req_bits = 1 + abs(v).bit_length() if v != 0 else 1
|
|
184
|
-
if req_bits > self.bit_length:
|
|
185
|
-
old_data = list(self)
|
|
186
|
-
self.bit_length = req_bits
|
|
187
|
-
self.clear()
|
|
188
|
-
self.extend(old_data)
|
|
189
|
-
self.total_bits += self.bit_length
|
|
190
|
-
self[-1] = v
|
|
149
|
+
|
|
191
150
|
def __iter__(self):
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
151
|
+
for i in range(0, self.total_bits, self.bit_length):
|
|
152
|
+
if i + self.bit_length > self.size:
|
|
153
|
+
break
|
|
154
|
+
bit_chunk = [super().__getitem__(j) for j in range(i, i + self.bit_length)]
|
|
155
|
+
yield self.to_int(bit_chunk)
|
|
156
|
+
|
|
197
157
|
def __str__(self):
|
|
198
158
|
return f"IntHybridArray([{', '.join(map(str, self))}])"
|
|
199
159
|
__repr__ = __str__
|
|
160
|
+
|
|
161
|
+
def __len__(self):
|
|
162
|
+
return self.total_bits // self.bit_length
|
|
200
163
|
def __delitem__(self, index: int = -1):
|
|
201
164
|
index = index if index >= 0 else index + len(self)
|
|
202
165
|
if not (0 <= index < len(self)):
|
|
@@ -207,8 +170,6 @@ class IntHybridArray(BoolHybridArray):
|
|
|
207
170
|
for _ in range(self.bit_length):
|
|
208
171
|
super().__delitem__(pop_bit_start)
|
|
209
172
|
self.total_bits -= self.bit_length
|
|
210
|
-
def __len__(self):
|
|
211
|
-
return self.total_bits // self.bit_length
|
|
212
173
|
def index(self, value):
|
|
213
174
|
value = int(value)
|
|
214
175
|
x = f"{value} 不在 IntHybridArray 中"
|
|
@@ -239,4 +200,4 @@ class IntHybridArray(BoolHybridArray):
|
|
|
239
200
|
len_ = len(iterable)
|
|
240
201
|
self.total_bits += len_*self.bit_length
|
|
241
202
|
for i,j in zip(range(len_),iterable):
|
|
242
|
-
self[-i-1] = j
|
|
203
|
+
self[-i-1] = j
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bool-hybrid-array
|
|
3
|
-
Version: 9.10.
|
|
3
|
+
Version: 9.10.16
|
|
4
4
|
Summary: 一个高效的布尔数组(密集+稀疏混合存储,节省内存)
|
|
5
5
|
Home-page: https://github.com/BKsell/bool-hybrid-array
|
|
6
6
|
Author: 蔡靖杰
|
|
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
20
|
Classifier: License :: OSI Approved :: MIT License
|
|
20
21
|
Classifier: Operating System :: OS Independent
|
|
21
22
|
Requires-Python: >=3.8
|
|
@@ -559,7 +560,8 @@ except OverflowError as e:
|
|
|
559
560
|
* **9.10.12**:把find方法的返回值改为IntHybridArray
|
|
560
561
|
* **9.10.13**:给IntHybridArray新增多种列表操作
|
|
561
562
|
* **9.10.14**:修复IntHybridArray中因单个 0 导致所有数字位长被压缩到 1的问题
|
|
562
|
-
|
|
563
|
+
* **9.10.15**:修复IntHybridArray变成布尔数组的错误
|
|
564
|
+
* **9.10.16**:新增Python 3.14时的jit优化加速
|
|
563
565
|
|
|
564
566
|
|
|
565
567
|
|
|
@@ -8,7 +8,7 @@ def get_long_description():
|
|
|
8
8
|
return "一个高效的布尔数组(密集+稀疏混合存储,节省内存)"
|
|
9
9
|
setup(
|
|
10
10
|
name="bool-hybrid-array",
|
|
11
|
-
version="9.10.
|
|
11
|
+
version="9.10.16",
|
|
12
12
|
author="蔡靖杰",
|
|
13
13
|
extras_require={"int_array":[]},
|
|
14
14
|
author_email="1289270215@qq.com",
|
|
@@ -26,6 +26,7 @@ setup(
|
|
|
26
26
|
'Programming Language :: Python :: 3.11',
|
|
27
27
|
'Programming Language :: Python :: 3.12',
|
|
28
28
|
'Programming Language :: Python :: 3.13',
|
|
29
|
+
'Programming Language :: Python :: 3.14',
|
|
29
30
|
"License :: OSI Approved :: MIT License",
|
|
30
31
|
"Operating System :: OS Independent",
|
|
31
32
|
],
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
from types import ModuleType
|
|
3
|
-
from . import core
|
|
4
|
-
from .core import __builtins__,builtins
|
|
5
|
-
from . import int_array
|
|
6
|
-
__version__ = "9.10.14"
|
|
7
|
-
public_objects = []
|
|
8
|
-
for name in dir(core):
|
|
9
|
-
if not name.startswith("_"):
|
|
10
|
-
obj = getattr(core, name)
|
|
11
|
-
if isinstance(obj, (type, ModuleType)) or callable(obj):
|
|
12
|
-
public_objects.append(name)
|
|
13
|
-
__all__ = public_objects + ["__version__","__builtins__","core","builtins","__dict__","int_array"]
|
|
14
|
-
globals().update({
|
|
15
|
-
name: getattr(core, name)
|
|
16
|
-
for name in public_objects
|
|
17
|
-
})
|
|
18
|
-
try:
|
|
19
|
-
__dict__ = ProtectedBuiltinsDict(globals())
|
|
20
|
-
sys.modules[name+".int_array"] = ProtectedBuiltinsDict(int_array.__dict__)
|
|
21
|
-
sys.modules[__name__] = ProtectedBuiltinsDict(globals().copy())
|
|
22
|
-
sys.modules[__name__].name = 'bool_hybrid_array'
|
|
23
|
-
core.__dict__ = ProtectedBuiltinsDict(core.__dict__)
|
|
24
|
-
except:
|
|
25
|
-
pass
|
|
26
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array.egg-info/requires.txt
RENAMED
|
File without changes
|
{bool_hybrid_array-9.10.14 → bool_hybrid_array-9.10.16}/bool_hybrid_array.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|