bool-hybrid-array 9.10.11__tar.gz → 9.10.18__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.11 → bool_hybrid_array-9.10.18}/PKG-INFO +24 -4
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/README.md +22 -3
- bool_hybrid_array-9.10.18/bool_hybrid_array/__init__.py +47 -0
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array/__main__.py +15 -3
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array/core.py +13 -1
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array/int_array/__init__.py +43 -1
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array.egg-info/PKG-INFO +24 -4
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/setup.py +2 -1
- bool_hybrid_array-9.10.11/bool_hybrid_array/__init__.py +0 -25
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/LICENSE +0 -0
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array//347/247/230/345/257/206.md" +0 -0
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array.egg-info/SOURCES.txt +0 -0
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array.egg-info/dependency_links.txt +0 -0
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array.egg-info/requires.txt +0 -0
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array.egg-info/top_level.txt +0 -0
- {bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/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.18
|
|
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
|
|
@@ -394,7 +395,21 @@ except:print("请先安装numba库!!!")
|
|
|
394
395
|
|
|
395
396
|
#int_array模块(9.10.10新增):
|
|
396
397
|
|
|
397
|
-
|
|
398
|
+
max_num = (1 << 256) - 1
|
|
399
|
+
min_num = -max_num
|
|
400
|
+
|
|
401
|
+
# 1. IntHybridArray:257位完美存储
|
|
402
|
+
arr_hybrid = int_array.IntHybridArray([max_num, min_num, 123456], bit_length=257)
|
|
403
|
+
print("✅ IntHybridArray存储结果:")
|
|
404
|
+
print(f"最大值:{arr_hybrid[0]}")
|
|
405
|
+
print(f"最小值:{arr_hybrid[1]}")
|
|
406
|
+
|
|
407
|
+
# 2. NumPy:用最大的int64尝试存储(必然失败)
|
|
408
|
+
try:
|
|
409
|
+
arr_np = np.array([max_num, min_num, 123456], dtype=np.int64)
|
|
410
|
+
print("\n❌ NumPy存储结果:", arr_np)
|
|
411
|
+
except OverflowError as e:
|
|
412
|
+
print(f"\n❌ NumPy存储失败:{e}")
|
|
398
413
|
|
|
399
414
|
```
|
|
400
415
|
|
|
@@ -542,8 +557,13 @@ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
|
|
|
542
557
|
* **9.10.9**:修复9.10.8版本中的NameError错误
|
|
543
558
|
* **9.10.10**:新增int_array模块
|
|
544
559
|
* **9.10.11**:修复NameError: name 'int_array' is not defined. Did you mean: 'bytearray'?的错误
|
|
545
|
-
|
|
546
|
-
|
|
560
|
+
* **9.10.12**:把find方法的返回值改为IntHybridArray
|
|
561
|
+
* **9.10.13**:给IntHybridArray新增多种列表操作
|
|
562
|
+
* **9.10.14**:修复IntHybridArray中因单个 0 导致所有数字位长被压缩到 1的问题
|
|
563
|
+
* **9.10.15**:修复IntHybridArray变成布尔数组的错误
|
|
564
|
+
* **9.10.16**:新增Python 3.14时的jit优化加速
|
|
565
|
+
* **9.10.17**:给保护字典添加__import__方法,支持from导入
|
|
566
|
+
* **9.10.18**:新增BoolHybridArray的序列化和反序列化支持
|
|
547
567
|
|
|
548
568
|
|
|
549
569
|
|
|
@@ -355,7 +355,21 @@ except:print("请先安装numba库!!!")
|
|
|
355
355
|
|
|
356
356
|
#int_array模块(9.10.10新增):
|
|
357
357
|
|
|
358
|
-
|
|
358
|
+
max_num = (1 << 256) - 1
|
|
359
|
+
min_num = -max_num
|
|
360
|
+
|
|
361
|
+
# 1. IntHybridArray:257位完美存储
|
|
362
|
+
arr_hybrid = int_array.IntHybridArray([max_num, min_num, 123456], bit_length=257)
|
|
363
|
+
print("✅ IntHybridArray存储结果:")
|
|
364
|
+
print(f"最大值:{arr_hybrid[0]}")
|
|
365
|
+
print(f"最小值:{arr_hybrid[1]}")
|
|
366
|
+
|
|
367
|
+
# 2. NumPy:用最大的int64尝试存储(必然失败)
|
|
368
|
+
try:
|
|
369
|
+
arr_np = np.array([max_num, min_num, 123456], dtype=np.int64)
|
|
370
|
+
print("\n❌ NumPy存储结果:", arr_np)
|
|
371
|
+
except OverflowError as e:
|
|
372
|
+
print(f"\n❌ NumPy存储失败:{e}")
|
|
359
373
|
|
|
360
374
|
```
|
|
361
375
|
|
|
@@ -503,8 +517,13 @@ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
|
|
|
503
517
|
* **9.10.9**:修复9.10.8版本中的NameError错误
|
|
504
518
|
* **9.10.10**:新增int_array模块
|
|
505
519
|
* **9.10.11**:修复NameError: name 'int_array' is not defined. Did you mean: 'bytearray'?的错误
|
|
506
|
-
|
|
507
|
-
|
|
520
|
+
* **9.10.12**:把find方法的返回值改为IntHybridArray
|
|
521
|
+
* **9.10.13**:给IntHybridArray新增多种列表操作
|
|
522
|
+
* **9.10.14**:修复IntHybridArray中因单个 0 导致所有数字位长被压缩到 1的问题
|
|
523
|
+
* **9.10.15**:修复IntHybridArray变成布尔数组的错误
|
|
524
|
+
* **9.10.16**:新增Python 3.14时的jit优化加速
|
|
525
|
+
* **9.10.17**:给保护字典添加__import__方法,支持from导入
|
|
526
|
+
* **9.10.18**:新增BoolHybridArray的序列化和反序列化支持
|
|
508
527
|
|
|
509
528
|
|
|
510
529
|
|
|
@@ -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.18"
|
|
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
|
+
|
|
@@ -266,7 +266,19 @@ except:print("请先安装numba库!!!")
|
|
|
266
266
|
|
|
267
267
|
#int_array模块(9.10.10新增):
|
|
268
268
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
269
|
+
max_num = (1 << 256) - 1
|
|
270
|
+
min_num = -max_num
|
|
271
|
+
|
|
272
|
+
# 1. IntHybridArray:257位完美存储
|
|
273
|
+
arr_hybrid = int_array.IntHybridArray([max_num, min_num, 123456], bit_length=257)
|
|
274
|
+
print("✅ IntHybridArray存储结果:")
|
|
275
|
+
print(f"最大值:{arr_hybrid[0]}")
|
|
276
|
+
print(f"最小值:{arr_hybrid[1]}")
|
|
277
|
+
|
|
278
|
+
# 2. NumPy:用最大的int64尝试存储(必然失败)
|
|
279
|
+
try:
|
|
280
|
+
arr_np = np.array([max_num, min_num, 123456], dtype=np.int64)
|
|
281
|
+
print("\n❌ NumPy存储结果:", arr_np)
|
|
282
|
+
except OverflowError as e:
|
|
283
|
+
print(f"\n❌ NumPy存储失败:{e}")
|
|
272
284
|
|
|
@@ -410,7 +410,8 @@ class BoolHybridArray(MutableSequence,Exception,metaclass=ResurrectMeta):
|
|
|
410
410
|
def __copy__(self) -> BoolHybridArray:
|
|
411
411
|
return self.copy()
|
|
412
412
|
def find(self,value):
|
|
413
|
-
|
|
413
|
+
from .int_array import IntHybridArray
|
|
414
|
+
return IntHybridArray([i for i in range(len(self)) if self[i]==value])
|
|
414
415
|
def extend(self, iterable:Iterable) -> None:
|
|
415
416
|
if isinstance(iterable, (Iterator, Generator, map)):
|
|
416
417
|
iterable,copy = itertools.tee(iterable, 2)
|
|
@@ -500,6 +501,8 @@ class BoolHybridArray(MutableSequence,Exception,metaclass=ResurrectMeta):
|
|
|
500
501
|
arr = TruesArray(0)
|
|
501
502
|
arr.__dict__ = self.__dict__
|
|
502
503
|
return arr
|
|
504
|
+
def __reduce__(self):
|
|
505
|
+
return BoolHybridArr,(map(operator.itemgetter(0), self),self.is_sparse,self.Type,self.hash_,),
|
|
503
506
|
class BoolHybridArr(BoolHybridArray,metaclass=ResurrectMeta):
|
|
504
507
|
__module__ = 'bool_hybrid_array'
|
|
505
508
|
def __new__(cls, lst: Iterable, is_sparse=None, Type = None, hash_ = True) -> BoolHybridArray:
|
|
@@ -755,6 +758,15 @@ class ProtectedBuiltinsDict(dict,metaclass=ResurrectMeta):
|
|
|
755
758
|
raise AttributeError(f'禁止修改内置常量:{self.name}.{name}')
|
|
756
759
|
else:
|
|
757
760
|
super().__setattr__(name,value)
|
|
761
|
+
def __import__(self, name, globals=None, locals=None, fromlist=(), level=0):
|
|
762
|
+
if fromlist:
|
|
763
|
+
result = []
|
|
764
|
+
for key in fromlist:
|
|
765
|
+
if key not in self:
|
|
766
|
+
raise AttributeError(f"'ImportableDict' object has no attribute '{key}'")
|
|
767
|
+
result.append(self[key])
|
|
768
|
+
return result[0] if len(result) == 1 else tuple(result)
|
|
769
|
+
return self
|
|
758
770
|
def Ask_arr(arr):
|
|
759
771
|
if isinstance(arr,BHA_List):
|
|
760
772
|
return '\n'.join(map(Ask_arr,arr))
|
{bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array/int_array/__init__.py
RENAMED
|
@@ -156,6 +156,48 @@ class IntHybridArray(BoolHybridArray):
|
|
|
156
156
|
|
|
157
157
|
def __str__(self):
|
|
158
158
|
return f"IntHybridArray([{', '.join(map(str, self))}])"
|
|
159
|
+
__repr__ = __str__
|
|
159
160
|
|
|
160
161
|
def __len__(self):
|
|
161
|
-
return self.total_bits // self.bit_length
|
|
162
|
+
return self.total_bits // self.bit_length
|
|
163
|
+
def __delitem__(self, index: int = -1):
|
|
164
|
+
index = index if index >= 0 else index + len(self)
|
|
165
|
+
if not (0 <= index < len(self)):
|
|
166
|
+
raise IndexError("删除索引超出范围")
|
|
167
|
+
target_num = self[index]
|
|
168
|
+
pop_bit_start = index * self.bit_length
|
|
169
|
+
pop_bit_end = pop_bit_start + self.bit_length
|
|
170
|
+
for _ in range(self.bit_length):
|
|
171
|
+
super().__delitem__(pop_bit_start)
|
|
172
|
+
self.total_bits -= self.bit_length
|
|
173
|
+
def index(self, value):
|
|
174
|
+
value = int(value)
|
|
175
|
+
x = f"{value} 不在 IntHybridArray 中"
|
|
176
|
+
for idx in range(len(self)+2>>2):
|
|
177
|
+
if self[idx] == value:
|
|
178
|
+
return idx
|
|
179
|
+
elif self[-idx] == value:
|
|
180
|
+
x = len(self)-idx
|
|
181
|
+
if x != f"{value} 不在 IntHybridArray 中":
|
|
182
|
+
return x
|
|
183
|
+
raise ValueError(x)
|
|
184
|
+
def rindex(self, value):
|
|
185
|
+
value = int(value)
|
|
186
|
+
x = f"{value} 不在 IntHybridArray 中"
|
|
187
|
+
for idx in range(len(self)+2>>2):
|
|
188
|
+
if self[-idx] == value:
|
|
189
|
+
return -idx
|
|
190
|
+
elif self[idx] == value:
|
|
191
|
+
x = -(len(self)-idx)
|
|
192
|
+
if x != f"{value} 不在 IntHybridArray 中":
|
|
193
|
+
return x
|
|
194
|
+
raise ValueError(x)
|
|
195
|
+
def extend(self, iterable:Iterable) -> None:
|
|
196
|
+
if isinstance(iterable, (Iterator, Generator, map)):
|
|
197
|
+
iterable,copy = itertools.tee(iterable, 2)
|
|
198
|
+
len_ = sum(1 for _ in copy)
|
|
199
|
+
else:
|
|
200
|
+
len_ = len(iterable)
|
|
201
|
+
self.total_bits += len_*self.bit_length
|
|
202
|
+
for i,j in zip(range(len_),iterable):
|
|
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.18
|
|
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
|
|
@@ -394,7 +395,21 @@ except:print("请先安装numba库!!!")
|
|
|
394
395
|
|
|
395
396
|
#int_array模块(9.10.10新增):
|
|
396
397
|
|
|
397
|
-
|
|
398
|
+
max_num = (1 << 256) - 1
|
|
399
|
+
min_num = -max_num
|
|
400
|
+
|
|
401
|
+
# 1. IntHybridArray:257位完美存储
|
|
402
|
+
arr_hybrid = int_array.IntHybridArray([max_num, min_num, 123456], bit_length=257)
|
|
403
|
+
print("✅ IntHybridArray存储结果:")
|
|
404
|
+
print(f"最大值:{arr_hybrid[0]}")
|
|
405
|
+
print(f"最小值:{arr_hybrid[1]}")
|
|
406
|
+
|
|
407
|
+
# 2. NumPy:用最大的int64尝试存储(必然失败)
|
|
408
|
+
try:
|
|
409
|
+
arr_np = np.array([max_num, min_num, 123456], dtype=np.int64)
|
|
410
|
+
print("\n❌ NumPy存储结果:", arr_np)
|
|
411
|
+
except OverflowError as e:
|
|
412
|
+
print(f"\n❌ NumPy存储失败:{e}")
|
|
398
413
|
|
|
399
414
|
```
|
|
400
415
|
|
|
@@ -542,8 +557,13 @@ arr = int_array.IntHybridArray([100,-27623,18276,-32165])
|
|
|
542
557
|
* **9.10.9**:修复9.10.8版本中的NameError错误
|
|
543
558
|
* **9.10.10**:新增int_array模块
|
|
544
559
|
* **9.10.11**:修复NameError: name 'int_array' is not defined. Did you mean: 'bytearray'?的错误
|
|
545
|
-
|
|
546
|
-
|
|
560
|
+
* **9.10.12**:把find方法的返回值改为IntHybridArray
|
|
561
|
+
* **9.10.13**:给IntHybridArray新增多种列表操作
|
|
562
|
+
* **9.10.14**:修复IntHybridArray中因单个 0 导致所有数字位长被压缩到 1的问题
|
|
563
|
+
* **9.10.15**:修复IntHybridArray变成布尔数组的错误
|
|
564
|
+
* **9.10.16**:新增Python 3.14时的jit优化加速
|
|
565
|
+
* **9.10.17**:给保护字典添加__import__方法,支持from导入
|
|
566
|
+
* **9.10.18**:新增BoolHybridArray的序列化和反序列化支持
|
|
547
567
|
|
|
548
568
|
|
|
549
569
|
|
|
@@ -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.18",
|
|
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,25 +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.11"
|
|
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__] = ProtectedBuiltinsDict(globals().copy())
|
|
21
|
-
sys.modules[__name__].name = 'bool_hybrid_array'
|
|
22
|
-
core.__dict__ = ProtectedBuiltinsDict(core.__dict__)
|
|
23
|
-
except:
|
|
24
|
-
pass
|
|
25
|
-
|
|
File without changes
|
|
File without changes
|
{bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array.egg-info/requires.txt
RENAMED
|
File without changes
|
{bool_hybrid_array-9.10.11 → bool_hybrid_array-9.10.18}/bool_hybrid_array.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|