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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bool-hybrid-array
3
- Version: 9.10.11
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
- arr = int_array.IntHybridArray([100,-27623,18276,-32165])
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
- arr = int_array.IntHybridArray([100,-27623,18276,-32165])
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
- arr = int_array.IntHybridArray([100,-27623,18276,-32165])
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
- return BHA_List([i for i in range(len(self)) if self[i]==value])
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))
@@ -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.11
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
- arr = int_array.IntHybridArray([100,-27623,18276,-32165])
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",
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
-