bool-hybrid-array 9.11.1__tar.gz → 9.11.2__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.11.1
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
 
@@ -541,6 +541,7 @@ except OverflowError as e:
541
541
  * **9.10.22**:进一步优化Ask_BHA的性能
542
542
  * **9.11.0**:新增对7.3.10以上版本的PyPy解释器的支持
543
543
  * **9.11.1**:修复PyPy解释器下的保护机制过度保护bug
544
+ * **9.11.2**:尝试修复IntHybridArray索引修改的错误
544
545
 
545
546
 
546
547
 
@@ -5,7 +5,7 @@ from . import core
5
5
  from .core import __builtins__,builtins
6
6
  try:from . import int_array
7
7
  except:pass
8
- __version__ = "9.11.1"
8
+ __version__ = "9.11.2"
9
9
  public_objects = []
10
10
  for name in dir(core):
11
11
  if not name.startswith("_"):
@@ -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:
@@ -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 '\n'.join(art)
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
- value = int(value)
99
- if isinstance(key, slice):
100
- start, stop, step = key.indices(len(self))
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 append(self,v):
192
- self.self.total_bits += self.bit_length
193
- self[-1] = v
194
- __all__ = list(globals())
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.1
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
 
@@ -12,7 +12,7 @@ if sys.implementation.name == "pypy":
12
12
  sys.exit(f"❌ 错误:bool-hybrid-array 要求 PyPy≥7.3.10,当前版本 {pypy_ver}")
13
13
  setup(
14
14
  name="bool-hybrid-array",
15
- version="9.11.1",
15
+ version="9.11.2",
16
16
  author="蔡靖杰",
17
17
  extras_require={"int_array":[],"numba_opt": ["numba>=0.55.0"],},
18
18
  author_email="1289270215@qq.com",